tlsbinpic_64.s 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. .section ".tdata", "awT", @progbits
  2. .balign 32
  3. .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
  4. .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
  5. .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
  6. .hidden sh1, sh2
  7. sg1: .long 17
  8. sg2: .long 18
  9. sg3: .long 19
  10. sg4: .long 20
  11. sg5: .long 21
  12. sg6: .long 22
  13. sg7: .long 23
  14. sg8: .long 24
  15. sl1: .long 65
  16. sl2: .long 66
  17. sl3: .long 67
  18. sl4: .long 68
  19. sl5: .long 69
  20. sl6: .long 70
  21. sl7: .long 71
  22. sl8: .long 72
  23. sh1: .long 257
  24. sh2: .long 258
  25. sh3: .long 259
  26. sh4: .long 260
  27. sh5: .long 261
  28. sh6: .long 262
  29. sh7: .long 263
  30. sh8: .long 264
  31. .text
  32. .globl fn2
  33. .type fn2,@function
  34. .balign 64
  35. fn2:
  36. /* Function prolog */
  37. stmg %r6,%r14,48(%r15)
  38. bras %r13,.LTN1
  39. /* Literal pool */
  40. .LT1:
  41. .LC2:
  42. .quad sG1@tlsgd
  43. .LC3:
  44. .quad sG2@tlsgd
  45. .LC4:
  46. .quad sg1@tlsgd
  47. .LC5:
  48. .quad sl1@tlsgd
  49. .LC6:
  50. .quad sh1@tlsgd
  51. .LC7:
  52. .quad sl1@tlsldm
  53. .LC8:
  54. .quad sl1@dtpoff
  55. .LC9:
  56. .quad sl2@dtpoff
  57. .LC10:
  58. .quad sh1@tlsldm
  59. .LC11:
  60. .quad sh1@dtpoff
  61. .LC12:
  62. .quad sh2@dtpoff
  63. .LC13:
  64. .quad sG2@gotntpoff
  65. .LC14:
  66. .quad sg1@gotntpoff
  67. .LC15:
  68. .quad sl1@gotntpoff
  69. .LC16:
  70. .quad sh1@gotntpoff
  71. .LTN1:
  72. /* Function prolog */
  73. lgr %r14,%r15
  74. aghi %r15,-160
  75. larl %r12,_GLOBAL_OFFSET_TABLE_
  76. stg %r14,0(%r14)
  77. /* Extract TCB */
  78. ear %r9,%a0
  79. sllg %r9,%r4,32
  80. ear %r9,%a1
  81. /* GD -> IE because variable is not defined in executable */
  82. lg %r12,.LC2-.LT1(%r13)
  83. brasl %r14,__tls_get_offset@plt:tls_gdcall:sG1
  84. la %r2,0(%r2,%r9)
  85. /* GD -> IE because variable is not defined in executable where
  86. the variable is referenced through IE too */
  87. lg %r2,.LC3-.LT1(%r13)
  88. brasl %r14,__tls_get_offset@plt:tls_gdcall:sG2
  89. la %r2,0(%r2,%r9)
  90. /* GD -> LE with global variable defined in executable */
  91. lg %r2,.LC4-.LT1(%r13)
  92. brasl %r14,__tls_get_offset@plt:tls_gdcall:sg1
  93. la %r2,0(%r2,%r9)
  94. /* GD -> LE with local variable defined in executable */
  95. lg %r2,.LC5-.LT1(%r13)
  96. brasl %r14,__tls_get_offset@plt:tls_gdcall:sl1
  97. la %r2,0(%r2,%r9)
  98. /* GD -> LE with hidden variable defined in executable */
  99. lg %r2,.LC6-.LT1(%r13)
  100. brasl %r14,__tls_get_offset@plt:tls_gdcall:sh1
  101. la %r2,0(%r2,%r9)
  102. /* LD -> LE */
  103. lg %r2,.LC7-.LT1(%r13)
  104. brasl %r14,__tls_get_offset@plt:tls_ldcall:sl1
  105. la %r3,0(%r2,%r9)
  106. lg %r4,.LC8-.LT1(%r13)
  107. la %r5,0(%r4,%r3)
  108. lg %r4,.LC9-.LT1(%r13)
  109. la %r5,0(%r4,%r3)
  110. /* LD -> LE against hidden variables */
  111. lg %r2,.LC10-.LT1(%r13)
  112. brasl %r14,__tls_get_offset@plt:tls_ldcall:sh1
  113. la %r3,0(%r2,%r9)
  114. lg %r4,.LC11-.LT1(%r13)
  115. la %r5,0(%r4,%r3)
  116. lg %r4,.LC12-.LT1(%r13)
  117. la %r5,0(%r4,%r3)
  118. /* IE against global var */
  119. lg %r3,.LC13-.LT1(%r13)
  120. lg %r3,0(%r3,%r12):tls_load:sG2
  121. la %r3,0(%r3,%r9)
  122. /* IE -> LE against global var defined in exec */
  123. lg %r3,.LC14-.LT1(%r13)
  124. lg %r4,0(%r3,%r12):tls_load:sg1
  125. la %r5,0(%r4,%r9)
  126. /* IE -> LE against local var */
  127. lg %r3,.LC15-.LT1(%r13)
  128. lg %r4,0(%r3,%r12):tls_load:sl2
  129. la %r5,0(%r4,%r9)
  130. /* IE -> LE against hidden var */
  131. lg %r3,.LC16-.LT1(%r13)
  132. lg %r4,0(%r3,%r12):tls_load:sh1
  133. la %r5,0(%r4,%r9)
  134. /* IE against global var with larl got access */
  135. larl %r3,sG3@indntpoff
  136. lg %r3,0(%r3,%r12):tls_load:sG3
  137. la %r3,0(%r3,%r9)
  138. /* IE against global var defined in exec with larl got access */
  139. larl %r3,sg3@indntpoff
  140. lg %r4,0(%r3,%r12):tls_load:sg3
  141. la %r5,0(%r4,%r9)
  142. /* IE against local var with larl got access */
  143. larl %r3,sl3@indntpoff
  144. lg %r4,0(%r3,%r12):tls_load:sl3
  145. la %r5,0(%r4,%r9)
  146. /* IE against hidden var with larl got access */
  147. larl %r3,sh3@indntpoff
  148. lg %r4,0(%r3,%r12):tls_load:sh3
  149. la %r5,0(%r4,%r9)
  150. /* IE against global var with small got access (no optimization) */
  151. lg %r3,sG3@gotntpoff(%r12)
  152. la %r3,0(%r3,%r9)
  153. /* IE against global var defined in exec with small got access
  154. (no optimization) */
  155. lg %r3,sg3@gotntpoff(%r12)
  156. la %r3,0(%r3,%r9)
  157. /* IE against local var with small got access (no optimization) */
  158. lg %r3,sl3@gotntpoff(%r12)
  159. la %r3,0(%r3,%r9)
  160. /* IE against hidden var with small got access (no optimization) */
  161. lg %r3,sh3@gotntpoff(%r12)
  162. la %r3,0(%r3,%r9)
  163. /* Function epilog */
  164. lmg %r6,%r14,208(%r15)
  165. br %r14