tlssunbin32.s 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. .section ".tbss"
  2. .align 4
  3. .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
  4. bg1: .word 0
  5. bg2: .word 0
  6. bg3: .word 0
  7. bg4: .word 0
  8. bg5: .word 0
  9. bg6: .word 0
  10. bg7: .word 0
  11. bg8: .word 0
  12. bl1: .word 0
  13. bl2: .word 0
  14. bl3: .word 0
  15. bl4: .word 0
  16. bl5: .word 0
  17. bl6: .word 0
  18. bl7: .word 0
  19. bl8: .word 0
  20. .text
  21. .globl _start
  22. .type _start,#function
  23. .proc 04
  24. _start:
  25. save %sp, -104, %sp
  26. .hidden _GLOBAL_OFFSET_TABLE_
  27. sethi %hi(_GLOBAL_OFFSET_TABLE_), %l4
  28. or %l4, %lo(_GLOBAL_OFFSET_TABLE_), %l4
  29. nop;nop;nop;nop
  30. /* IE against global var */
  31. sethi %tie_hi22(sG6), %o3
  32. add %o3, %tie_lo10(sG6), %o3
  33. ld [%l4 + %o3], %o2, %tie_ld(sG6)
  34. add %g7, %o2, %o4, %tie_add(sG6)
  35. nop;nop;nop;nop
  36. /* IE -> LE against global var defined in exec */
  37. sethi %tie_hi22(bg6), %o3
  38. add %o3, %tie_lo10(bg6), %o5
  39. ld [%l4 + %o5], %o2, %tie_ld(bg6)
  40. add %g7, %o2, %o4, %tie_add(bg6)
  41. nop;nop;nop;nop
  42. /* IE -> LE against local var */
  43. sethi %tie_hi22(bl6), %o3
  44. add %o3, %tie_lo10(bl6), %o5
  45. ld [%l4 + %o5], %l2, %tie_ld(bl6)
  46. add %g7, %l2, %l2, %tie_add(bl6)
  47. nop;nop;nop;nop
  48. /* direct %g7 access IE -> LE against local var */
  49. sethi %tie_hi22(bl8), %o3
  50. add %o3, %tie_lo10(bl8), %o5
  51. ld [%l4 + %o5], %l2, %tie_ld(bl8)
  52. ld [%g7 + %l2], %l2, %tie_add(bl8)
  53. nop;nop;nop;nop
  54. /* IE -> LE against hidden but not local var */
  55. sethi %tie_hi22(sh6), %o3
  56. add %o3, %tie_lo10(sh6), %o5
  57. ld [%l4 + %o5], %l2, %tie_ld(sh6)
  58. add %g7, %l2, %l2, %tie_add(sh6)
  59. nop;nop;nop;nop
  60. /* direct %g7 access IE -> LE against hidden but not local var */
  61. sethi %tie_hi22(bl8), %o3
  62. add %o3, %tie_lo10(bl8), %o5
  63. ld [%l4 + %o5], %l2, %tie_ld(bl8)
  64. stb %l1, [%g7 + %l2], %tie_add(bl8)
  65. nop;nop;nop;nop
  66. /* LE, global var defined in exec */
  67. sethi %tle_hix22(sg2), %l1
  68. nop
  69. xor %l1, %tle_lox10(sg2), %l2
  70. nop
  71. add %g7, %l2, %l3
  72. nop;nop;nop;nop
  73. /* LE, local var */
  74. sethi %tle_hix22(bl2+2), %o0
  75. xor %o0, %tle_lox10(bl2+2), %o0
  76. add %g7, %o0, %o0
  77. nop;nop;nop;nop
  78. /* LE, hidden var defined in exec */
  79. sethi %tle_hix22(sh2+1), %l1
  80. xor %l1, %tle_lox10(sh2+1), %o5
  81. add %g7, %o5, %o1
  82. nop;nop;nop;nop
  83. /* Direct %g7 access */
  84. /* LE, global var defined in exec */
  85. sethi %tle_hix22(sg3), %l1
  86. xor %l1, %tle_lox10(sg3), %o5
  87. ld [%g7 + %o5], %o1
  88. nop;nop;nop;nop
  89. /* LE, local var */
  90. sethi %tle_hix22(bl3 + 3), %o0
  91. xor %o0, %tle_lox10(bl3 + 3), %o0
  92. stb %o1, [%g7 + %o0]
  93. nop;nop;nop;nop
  94. /* LE, hidden var defined in exec */
  95. sethi %tle_hix22(sh3 + 3), %o2
  96. xor %o2, %tle_lox10(sh3 + 3), %o4
  97. ldstub [%g7 + %o4], %o5
  98. nop;nop;nop;nop
  99. ret
  100. restore