tls.s 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. .section ".tbss","awT",@nobits
  2. .global _start,gd0,ld0,ld1,ld2,ie0,le0,le1
  3. .align 3
  4. gd0: .space 8
  5. ld0: .space 8
  6. ld1: .space 8
  7. ld2: .space 8
  8. ie0: .space 8
  9. le0: .space 8
  10. le1: .space 8
  11. .section ".tdata","awT",@progbits
  12. .align 3
  13. gd4: .quad 0x123456789abcdef0
  14. ld4: .quad 0x23456789abcdef01
  15. ld5: .quad 0x3456789abcdef012
  16. ld6: .quad 0x456789abcdef0123
  17. ie4: .quad 0x56789abcdef01234
  18. le4: .quad 0x6789abcdef012345
  19. le5: .quad 0x789abcdef0123456
  20. .section ".opd","aw",@progbits
  21. .p2align 3
  22. _start:
  23. .quad .L_start,.TOC.@tocbase,0
  24. .text
  25. .L_start:
  26. #extern syms
  27. #GD
  28. addi 3,2,gd@got@tlsgd #R_PPC64_GOT_TLSGD16 gd
  29. .ifdef TLSMARK
  30. bl __tls_get_addr(gd@tlsgd) #R_PPC64_TLSGD gd
  31. #R_PPC64_REL24 __tls_get_addr
  32. .else
  33. bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
  34. .endif
  35. nop
  36. #LD
  37. addi 3,2,ld@got@tlsld #R_PPC64_GOT_TLSLD16 ld
  38. .ifdef TLSMARK
  39. bl __tls_get_addr(ld@tlsld) #R_PPC64_TLSLD ld
  40. #R_PPC64_REL24 __tls_get_addr
  41. .else
  42. bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
  43. .endif
  44. nop
  45. #global syms
  46. #GD
  47. addi 3,2,gd0@got@tlsgd #R_PPC64_GOT_TLSGD16 gd0
  48. .ifdef TLSMARK
  49. bl __tls_get_addr(gd0@tlsgd) #R_PPC64_TLSGD gd0
  50. #R_PPC64_REL24 __tls_get_addr
  51. .else
  52. bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
  53. .endif
  54. nop
  55. #LD
  56. addi 3,2,ld0@got@tlsld #R_PPC64_GOT_TLSLD16 ld0
  57. .ifdef TLSMARK
  58. bl __tls_get_addr(ld0@tlsld) #R_PPC64_TLSLD ld0
  59. #R_PPC64_REL24 __tls_get_addr
  60. .else
  61. bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
  62. .endif
  63. nop
  64. addi 9,3,ld0@dtprel #R_PPC64_DTPREL16 ld0
  65. addis 9,3,ld1@dtprel@ha #R_PPC64_DTPREL16_HA ld1
  66. lwz 10,ld1@dtprel@l(9) #R_PPC64_DTPREL16_LO ld1
  67. ld 9,ld2@got@dtprel(2) #R_PPC64_GOT_DTPREL16_DS ld2
  68. ldx 10,9,3
  69. #IE
  70. ld 9,ie0@got@tprel(2) #R_PPC64_GOT_TPREL16_DS ie0
  71. lhzx 10,9,ie0@tls #R_PPC64_TLS ie0
  72. #LE
  73. lbz 10,le0@tprel(13) #R_PPC64_TPREL16 le0
  74. addis 9,13,le1@tprel@ha #R_PPC64_TPREL16_HA le1
  75. stb 10,le1@tprel@l(9) #R_PPC64_TPREL16_LO le1
  76. #local syms
  77. #GD
  78. addi 3,2,gd4@got@tlsgd #R_PPC64_GOT_TLSGD16 gd4
  79. .ifdef TLSMARK
  80. bl __tls_get_addr(gd4@tlsgd) #R_PPC64_TLSGD gd4
  81. #R_PPC64_REL24 __tls_get_addr
  82. .else
  83. bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
  84. .endif
  85. nop
  86. #LD
  87. addi 3,2,ld4@got@tlsld #R_PPC64_GOT_TLSLD16 ld4
  88. .ifdef TLSMARK
  89. bl __tls_get_addr(ld4@tlsld) #R_PPC64_TLSLD ld4
  90. #R_PPC64_REL24 __tls_get_addr
  91. .else
  92. bl .__tls_get_addr #R_PPC64_REL24 .__tls_get_addr
  93. .endif
  94. nop
  95. std 10,ld4@dtprel(3) #R_PPC64_DTPREL16_DS ld4
  96. addis 9,3,ld5@dtprel@ha #R_PPC64_DTPREL16_HA ld5
  97. stw 10,ld5@dtprel@l(9) #R_PPC64_DTPREL16_LO ld5
  98. ld 9,ld6@got@dtprel(2) #R_PPC64_GOT_DTPREL16_DS ld6
  99. stdx 10,9,3
  100. #IE
  101. ld 9,ie0@got@tprel(2) #R_PPC64_GOT_TPREL16_DS ie4
  102. sthx 10,9,ie0@tls #R_PPC64_TLS ie4
  103. #LE
  104. lwa 10,le4@tprel(13) #R_PPC64_TPREL16 le4
  105. addis 9,13,le5@tprel@ha #R_PPC64_TPREL16_HA le5
  106. lha 10,le5@tprel@l(9) #R_PPC64_TPREL16_LO le5