tlspic1.s 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. .section ".tdata", "awT", @progbits
  2. .globl sg1, sg2
  3. .globl sh1, sh2
  4. .hidden sh1, sh2
  5. sg1: .long 17
  6. sg2: .long 18
  7. sl1: .long 65
  8. sl2: .long 66
  9. sh1: .long 257
  10. sh2: .long 258
  11. .text
  12. .align 1
  13. .globl fn1
  14. .type fn1,@function
  15. fn1:
  16. mov.l r12,@-r15
  17. mov.l r14,@-r15
  18. sts.l pr,@-r15
  19. mova .L3,r0
  20. mov.l .L3,r12
  21. add r0,r12
  22. mov r15,r14
  23. nop;nop;nop;nop
  24. ! GD
  25. mov.l 1f,r4
  26. mova 2f,r0
  27. mov.l 2f,r1
  28. add r0,r1
  29. jsr @r1
  30. add r12,r4
  31. bra 3f
  32. nop
  33. .align 2
  34. 1: .long sg1@TLSGD
  35. 2: .long __tls_get_addr@PLT
  36. 3:
  37. nop;nop;nop;nop
  38. ! GD -> IE because variable is referenced through @GOTTPOFF too
  39. mov.l 1f,r4
  40. mova 2f,r0
  41. mov.l 2f,r1
  42. add r0,r1
  43. jsr @r1
  44. add r12,r4
  45. bra 3f
  46. nop
  47. .align 2
  48. 1: .long sg2@TLSGD
  49. 2: .long __tls_get_addr@PLT
  50. 3:
  51. nop;nop;nop;nop
  52. ! GD against local variable
  53. mov.l 1f,r4
  54. mova 2f,r0
  55. mov.l 2f,r1
  56. add r0,r1
  57. jsr @r1
  58. add r12,r4
  59. bra 3f
  60. nop
  61. .align 2
  62. 1: .long sl1@TLSGD
  63. 2: .long __tls_get_addr@PLT
  64. 3:
  65. nop;nop;nop;nop
  66. ! GD -> IE against local variable referenced through @GOTTPOFF too
  67. mov.l 1f,r4
  68. mova 2f,r0
  69. mov.l 2f,r1
  70. add r0,r1
  71. jsr @r1
  72. add r12,r4
  73. bra 3f
  74. nop
  75. .align 2
  76. 1: .long sl2@TLSGD
  77. 2: .long __tls_get_addr@PLT
  78. 3:
  79. nop;nop;nop;nop
  80. ! GD against hidden and local variable
  81. mov.l 1f,r4
  82. mova 2f,r0
  83. mov.l 2f,r1
  84. add r0,r1
  85. jsr @r1
  86. add r12,r4
  87. bra 3f
  88. nop
  89. .align 2
  90. 1: .long sh1@TLSGD
  91. 2: .long __tls_get_addr@PLT
  92. 3:
  93. nop;nop;nop;nop
  94. ! GD -> IE against hidden and local variable referenced through
  95. ! @GOTTPOFF too
  96. mov.l 1f,r4
  97. mova 2f,r0
  98. mov.l 2f,r1
  99. add r0,r1
  100. jsr @r1
  101. add r12,r4
  102. bra 3f
  103. nop
  104. .align 2
  105. 1: .long sh2@TLSGD
  106. 2: .long __tls_get_addr@PLT
  107. 3:
  108. nop;nop;nop;nop
  109. ! GD against hidden but not local variable
  110. mov.l 1f,r4
  111. mova 2f,r0
  112. mov.l 2f,r1
  113. add r0,r1
  114. jsr @r1
  115. add r12,r4
  116. bra 3f
  117. nop
  118. .align 2
  119. 1: .long sH1@TLSGD
  120. 2: .long __tls_get_addr@PLT
  121. 3:
  122. nop;nop;nop;nop
  123. ! GD -> IE against hidden but not local variable referenced through
  124. ! @GOTTPOFF too
  125. mov.l 1f,r4
  126. mova 2f,r0
  127. mov.l 2f,r1
  128. add r0,r1
  129. jsr @r1
  130. add r12,r4
  131. bra 3f
  132. nop
  133. .align 2
  134. 1: .long sH2@TLSGD
  135. 2: .long __tls_get_addr@PLT
  136. 3:
  137. nop;nop;nop;nop
  138. ! LD
  139. mov.l 1f,r4
  140. mova 2f,r0
  141. mov.l 2f,r1
  142. add r0,r1
  143. jsr @r1
  144. add r12,r4
  145. bra 3f
  146. nop
  147. .align 2
  148. 1: .long sl1@TLSLDM
  149. 2: .long __tls_get_addr@PLT
  150. 3:
  151. nop;nop
  152. mov.l .L4,r1
  153. add r0,r1
  154. nop;nop
  155. mov.l .L5,r2
  156. add r0,r2
  157. nop;nop;nop;nop
  158. ! LD against hidden and local variables
  159. mov.l 1f,r4
  160. mova 2f,r0
  161. mov.l 2f,r1
  162. add r0,r1
  163. jsr @r1
  164. add r12,r4
  165. bra 3f
  166. nop
  167. .align 2
  168. 1: .long sl1@TLSLDM
  169. 2: .long __tls_get_addr@PLT
  170. 3:
  171. nop;nop
  172. mov.l .L6,r1
  173. add r0,r1
  174. nop;nop
  175. mov.l .L7,r2
  176. add r0,r2
  177. nop;nop;nop;nop
  178. ! LD against hidden but not local variables
  179. mov.l 1f,r4
  180. mova 2f,r0
  181. mov.l 2f,r1
  182. add r0,r1
  183. jsr @r1
  184. add r12,r4
  185. bra 3f
  186. nop
  187. .align 2
  188. 1: .long sH1@TLSLDM
  189. 2: .long __tls_get_addr@PLT
  190. 3:
  191. nop;nop
  192. mov.l .L8,r1
  193. add r0,r1
  194. nop;nop
  195. mov.l .L9,r2
  196. add r0,r2
  197. nop;nop;nop;nop
  198. ! @GOTTPOFF IE against global var
  199. mov.l 1f,r0
  200. stc gbr,r1
  201. mov.l @(r0,r12),r0
  202. bra 2f
  203. add r0,r1
  204. .align 2
  205. 1: .long sg2@GOTTPOFF
  206. 2:
  207. nop;nop;nop;nop
  208. ! @GOTTPOFF IE against local var
  209. mov.l 1f,r0
  210. stc gbr,r1
  211. mov.l @(r0,r12),r0
  212. bra 2f
  213. add r0,r1
  214. .align 2
  215. 1: .long sl2@GOTTPOFF
  216. 2:
  217. nop;nop;nop;nop
  218. ! @GOTTPOFF IE against hidden and local var
  219. mov.l 1f,r0
  220. stc gbr,r1
  221. mov.l @(r0,r12),r0
  222. bra 2f
  223. add r0,r1
  224. .align 2
  225. 1: .long sh2@GOTTPOFF
  226. 2:
  227. nop;nop;nop;nop
  228. ! @GOTTPOFF IE against hidden but not local var
  229. mov.l 1f,r0
  230. stc gbr,r1
  231. mov.l @(r0,r12),r0
  232. bra 2f
  233. add r0,r1
  234. .align 2
  235. 1: .long sH2@GOTTPOFF
  236. 2:
  237. nop;nop;nop;nop
  238. mov r14,r15
  239. lds.l @r15+,pr
  240. mov.l @r15+,r14
  241. rts
  242. mov.l @r15+,r12
  243. .align 2
  244. .L3: .long _GLOBAL_OFFSET_TABLE_
  245. .L4: .long sl1@DTPOFF
  246. .L5: .long sl1@DTPOFF + 4
  247. .L6: .long sh1@DTPOFF
  248. .L7: .long sh2@DTPOFF
  249. .L8: .long sH1@DTPOFF
  250. .L9: .long sH2@DTPOFF