tlsbinpic.s 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. ! Force .got aligned to 4K, so it very likely gets at 0x413000
  2. .data
  3. .balign 4096
  4. .section ".tdata", "awT", @progbits
  5. .globl sg1, sg2
  6. .globl sh1, sh2
  7. .hidden sh1, sh2
  8. sg1: .long 17
  9. sg2: .long 18
  10. sl1: .long 65
  11. sl2: .long 66
  12. sh1: .long 257
  13. sh2: .long 258
  14. ! Force .text aligned to 4K, so it very likely gets at 0x401000.
  15. .text
  16. .balign 4096
  17. .globl fn2
  18. .type fn2,@function
  19. fn2:
  20. mov.l r12,@-r15
  21. mov.l r14,@-r15
  22. sts.l pr,@-r15
  23. mova .L3,r0
  24. mov.l .L3,r12
  25. add r0,r12
  26. mov r15,r14
  27. nop;nop;nop;nop
  28. ! GD -> IE because variable is not defined in executable
  29. mov.l 1f,r4
  30. mova 2f,r0
  31. mov.l 2f,r1
  32. add r0,r1
  33. jsr @r1
  34. add r12,r4
  35. bra 3f
  36. nop
  37. .align 2
  38. 1: .long sG1@TLSGD
  39. 2: .long __tls_get_addr@PLT
  40. 3:
  41. nop;nop;nop;nop
  42. ! GD -> IE because variable is not defined in executable where
  43. ! the variable is referenced through @gottpoff too
  44. mov.l 1f,r4
  45. mova 2f,r0
  46. mov.l 2f,r1
  47. add r0,r1
  48. jsr @r1
  49. add r12,r4
  50. bra 3f
  51. nop
  52. .align 2
  53. 1: .long sG2@TLSGD
  54. 2: .long __tls_get_addr@PLT
  55. 3:
  56. nop;nop;nop;nop
  57. ! GD -> LE with global variable defined in executable
  58. mov.l 1f,r4
  59. mova 2f,r0
  60. mov.l 2f,r1
  61. add r0,r1
  62. jsr @r1
  63. add r12,r4
  64. bra 3f
  65. nop
  66. .align 2
  67. 1: .long sg1@TLSGD
  68. 2: .long __tls_get_addr@PLT
  69. 3:
  70. nop;nop;nop;nop
  71. ! GD -> LE with local variable defined in executable
  72. mov.l 1f,r4
  73. mova 2f,r0
  74. mov.l 2f,r1
  75. add r0,r1
  76. jsr @r1
  77. add r12,r4
  78. bra 3f
  79. nop
  80. .align 2
  81. 1: .long sl1@TLSGD
  82. 2: .long __tls_get_addr@PLT
  83. 3:
  84. nop;nop;nop;nop
  85. ! GD -> LE with hidden variable defined in executable
  86. mov.l 1f,r4
  87. mova 2f,r0
  88. mov.l 2f,r1
  89. add r0,r1
  90. jsr @r1
  91. add r12,r4
  92. bra 3f
  93. nop
  94. .align 2
  95. 1: .long sh1@TLSGD
  96. 2: .long __tls_get_addr@PLT
  97. 3:
  98. nop;nop;nop;nop
  99. ! LD -> LE with local variable defined in executable
  100. mov.l 1f,r4
  101. mova 2f,r0
  102. mov.l 2f,r1
  103. add r0,r1
  104. jsr @r1
  105. add r12,r4
  106. bra 3f
  107. nop
  108. .align 2
  109. 1: .long sl1@TLSLDM
  110. 2: .long __tls_get_addr@PLT
  111. 3:
  112. nop;nop
  113. mov.l .L4,r1
  114. add r0,r1
  115. nop;nop
  116. mov.l .L5,r2
  117. add r0,r2
  118. nop;nop;nop;nop
  119. ! LD -> LE against hidden variables
  120. mov.l 1f,r4
  121. mova 2f,r0
  122. mov.l 2f,r1
  123. add r0,r1
  124. jsr @r1
  125. add r12,r4
  126. bra 3f
  127. nop
  128. .align 2
  129. 1: .long sh1@TLSLDM
  130. 2: .long __tls_get_addr@PLT
  131. 3:
  132. nop;nop
  133. mov.l .L6,r1
  134. add r0,r1
  135. nop;nop
  136. mov.l .L7,r2
  137. add r0,r2
  138. nop;nop;nop;nop
  139. ! @GOTTPOFF IE against global var
  140. mov.l 1f,r0
  141. stc gbr,r1
  142. mov.l @(r0,r12),r0
  143. bra 2f
  144. add r0,r1
  145. .align 2
  146. 1: .long sG2@GOTTPOFF
  147. 2:
  148. nop;nop;nop;nop
  149. ! @GOTTPOFF IE against global var
  150. mov.l 1f,r0
  151. stc gbr,r1
  152. mov.l @(r0,r12),r0
  153. bra 2f
  154. add r1,r0
  155. .align 2
  156. 1: .long sG4@GOTTPOFF
  157. 2:
  158. nop;nop;nop;nop
  159. ! @GOTTPOFF IE -> LE against global var defined in exec
  160. mov.l 1f,r0
  161. stc gbr,r1
  162. mov.l @(r0,r12),r0
  163. bra 2f
  164. add r0,r1
  165. .align 2
  166. 1: .long sg1@GOTTPOFF
  167. 2:
  168. nop;nop;nop;nop
  169. ! @GOTTPOFF IE -> LE against hidden var
  170. mov.l 1f,r0
  171. stc gbr,r1
  172. mov.l @(r0,r12),r0
  173. bra 2f
  174. add r0,r1
  175. .align 2
  176. 1: .long sh1@GOTTPOFF
  177. 2:
  178. nop;nop;nop;nop
  179. mov r14,r15
  180. lds.l @r15+,pr
  181. mov.l @r15+,r14
  182. rts
  183. mov.l @r15+,r12
  184. .align 2
  185. .L3: .long _GLOBAL_OFFSET_TABLE_
  186. .L4: .long sl1@DTPOFF
  187. .L5: .long sl2@DTPOFF
  188. .L6: .long sh1@DTPOFF
  189. .L7: .long sh2@DTPOFF
  190. ! Fill page with 0.
  191. .space .L8-.
  192. .balign 4096
  193. .L8: