fixed bash/dash/sh issue (Ubuntu)
[zpugcc/jano.git] / toolchain / binutils / ld / testsuite / ld-i386 / tlsbinpic.s
blobc6b6efa1d9affcc7d71dde445bdf0ba4f59ec4a3
1 /* Force .got aligned to 4K, so it very likely gets at 0x804a100
2 (0x60 bytes .tdata and 0xa0 bytes .dynamic) */
3 .data
4 .balign 4096
5 .section ".tdata", "awT", @progbits
6 .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
7 .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
8 .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
9 sg1: .long 17
10 sg2: .long 18
11 sg3: .long 19
12 sg4: .long 20
13 sg5: .long 21
14 sg6: .long 22
15 sg7: .long 23
16 sg8: .long 24
17 sl1: .long 65
18 sl2: .long 66
19 sl3: .long 67
20 sl4: .long 68
21 sl5: .long 69
22 sl6: .long 70
23 sl7: .long 71
24 sl8: .long 72
25 sh1: .long 257
26 sh2: .long 258
27 sh3: .long 259
28 sh4: .long 260
29 sh5: .long 261
30 sh6: .long 262
31 sh7: .long 263
32 sh8: .long 264
33 /* Force .text aligned to 4K, so it very likely gets at 0x8049000. */
34 .text
35 .balign 4096
36 .globl fn2
37 .type fn2,@function
38 fn2:
39 pushl %ebp
40 movl %esp, %ebp
41 pushl %ebx
42 pushl %eax
43 call 1f
44 1: popl %ebx
45 addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
46 nop;nop;nop;nop
48 /* GD -> IE because variable is not defined in executable */
49 leal sG1@tlsgd(,%ebx,1), %eax
50 call ___tls_get_addr@plt
51 nop;nop;nop;nop
53 /* GD -> IE because variable is not defined in executable where
54 the variable is referenced through @gottpoff too */
55 leal sG2@tlsgd(,%ebx,1), %eax
56 call ___tls_get_addr@plt
57 nop;nop;nop;nop
59 /* GD -> IE because variable is not defined in executable where
60 the variable is referenced through @gotntpoff too */
61 leal sG3@tlsgd(,%ebx,1), %eax
62 call ___tls_get_addr@plt
63 nop;nop;nop;nop
65 /* GD -> IE because variable is not defined in executable where
66 the variable is referenced through @gottpoff and @gotntpoff too */
67 leal sG4@tlsgd(,%ebx,1), %eax
68 call ___tls_get_addr@plt
69 nop;nop;nop;nop
71 /* GD -> LE with global variable defined in executable */
72 leal sg1@tlsgd(,%ebx,1), %eax
73 call ___tls_get_addr@plt
74 nop;nop;nop;nop
76 /* GD -> LE with local variable defined in executable */
77 leal sl1@tlsgd(,%ebx,1), %eax
78 call ___tls_get_addr@plt
79 nop;nop;nop;nop
81 /* GD -> LE with hidden variable defined in executable */
82 leal sh1@tlsgd(,%ebx,1), %eax
83 call ___tls_get_addr@plt
84 nop;nop;nop;nop
86 /* LD -> LE */
87 leal sl1@tlsldm(%ebx), %eax
88 call ___tls_get_addr@PLT
89 nop;nop
90 leal sl1@dtpoff(%eax), %edx
91 nop;nop
92 leal sl2@dtpoff(%eax), %ecx
93 nop;nop;nop;nop
95 /* LD -> LE against hidden variables */
96 leal sh1@tlsldm(%ebx), %eax
97 call ___tls_get_addr@PLT
98 nop;nop
99 leal sh1@dtpoff(%eax), %edx
100 nop;nop
101 leal sh2@dtpoff(%eax), %ecx
102 nop;nop;nop;nop
104 /* @gottpoff IE against global var */
105 movl %gs:0, %ecx
106 nop;nop
107 subl sG2@gottpoff(%ebx), %ecx
108 nop;nop;nop;nop
110 /* @gottpoff IE against global var */
111 movl %gs:0, %eax
112 nop;nop
113 subl sG4@gottpoff(%ebx), %eax
114 nop;nop;nop;nop
116 /* @gotntpoff IE against global var */
117 movl %gs:0, %ecx
118 nop;nop
119 addl sG3@gotntpoff(%ebx), %ecx
120 nop;nop;nop;nop
122 /* @gotntpoff IE against global var */
123 movl %gs:0, %eax
124 nop;nop
125 addl sG4@gotntpoff(%ebx), %eax
126 nop;nop;nop;nop
128 /* @gottpoff IE -> LE against global var defined in exec */
129 movl %gs:0, %ecx
130 nop;nop
131 subl sg1@gottpoff(%ebx), %ecx
132 nop;nop;nop;nop
134 /* @gotntpoff IE -> LE against local var */
135 movl %gs:0, %ecx
136 nop;nop
137 addl sl1@gotntpoff(%ebx), %eax
138 nop;nop;nop;nop
140 /* @gottpoff IE -> LE against hidden var */
141 movl %gs:0, %ecx
142 nop;nop
143 subl sh1@gottpoff(%ebx), %ecx
144 nop;nop;nop;nop
146 /* Direct access through %gs */
148 /* @gotntpoff IE against global var */
149 movl sG5@gotntpoff(%ebx), %ecx
150 nop;nop
151 movl %gs:(%ecx), %edx
152 nop;nop;nop;nop
154 /* @gotntpoff IE->LE against local var */
155 movl sl5@gotntpoff(%ebx), %eax
156 nop;nop
157 movl %gs:(%eax), %edx
158 nop;nop;nop;nop
160 /* @gotntpoff IE->LE against hidden var */
161 movl sh5@gotntpoff(%ebx), %edx
162 nop;nop
163 movl %gs:(%edx), %edx
164 nop;nop;nop;nop
166 movl -4(%ebp), %ebx
167 leave