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