Commit | Line | Data |
---|---|---|
37e55690 JJ |
1 | .section ".tbss", "awT", @nobits |
2 | .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8 | |
3 | bg1: .space 4 | |
4 | bg2: .space 4 | |
5 | bg3: .space 4 | |
6 | bg4: .space 4 | |
7 | bg5: .space 4 | |
8 | bg6: .space 4 | |
9 | bg7: .space 4 | |
10 | bg8: .space 4 | |
11 | bl1: .space 4 | |
12 | bl2: .space 4 | |
13 | bl3: .space 4 | |
14 | bl4: .space 4 | |
15 | bl5: .space 4 | |
16 | bl6: .space 4 | |
17 | bl7: .space 4 | |
18 | bl8: .space 4 | |
19 | .text | |
20 | .globl _start | |
21 | .type _start,@function | |
22 | _start: | |
23 | pushl %ebp | |
24 | movl %esp, %ebp | |
25 | /* Set up .GOT pointer for non-pic @gottpoff sequences */ | |
26 | call 1f | |
27 | 1: popl %ecx | |
28 | addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx | |
29 | nop;nop;nop;nop | |
30 | ||
31 | /* @gottpoff IE against global var */ | |
32 | movl %gs:0, %edx | |
33 | nop;nop | |
34 | subl sG6@gottpoff(%ecx), %edx | |
35 | nop;nop;nop;nop | |
36 | ||
37 | /* @indntpoff IE against global var */ | |
38 | movl %gs:0, %eax | |
39 | nop;nop | |
40 | addl sG7@indntpoff, %eax | |
41 | nop;nop;nop;nop | |
42 | ||
43 | /* @indntpoff direct %gs access IE against global var */ | |
44 | movl sG8@indntpoff, %edx | |
45 | nop;nop | |
46 | movl %gs:(%edx), %eax | |
47 | nop;nop;nop;nop | |
48 | ||
49 | /* @gottpoff IE -> LE against global var defined in exec */ | |
50 | movl %gs:0, %edx | |
51 | nop;nop | |
52 | subl bg6@gottpoff(%ecx), %edx | |
53 | nop;nop;nop;nop | |
54 | ||
55 | /* @indntpoff IE -> LE against global var defined in exec */ | |
56 | movl %gs:0, %eax | |
57 | nop;nop | |
58 | addl bg7@indntpoff, %eax | |
59 | nop;nop;nop;nop | |
60 | ||
61 | /* @indntpoff direct %gs access IE -> LE against global var defined | |
62 | in exec */ | |
63 | movl bg8@indntpoff, %edx | |
64 | nop;nop | |
65 | movl %gs:(%edx), %eax | |
66 | nop;nop;nop;nop | |
67 | ||
68 | /* @gottpoff IE -> LE against local var */ | |
69 | movl %gs:0, %edx | |
70 | nop;nop | |
71 | subl bl6@gottpoff(%ecx), %edx | |
72 | nop;nop;nop;nop | |
73 | ||
74 | /* @indntpoff IE -> LE against local var */ | |
75 | movl %gs:0, %eax | |
76 | nop;nop | |
77 | addl bl7@indntpoff, %eax | |
78 | nop;nop;nop;nop | |
79 | ||
80 | /* @indntpoff direct %gs access IE -> LE against local var */ | |
81 | movl bl8@indntpoff, %edx | |
82 | nop;nop | |
83 | movl %gs:(%edx), %eax | |
84 | nop;nop;nop;nop | |
85 | ||
86 | /* @gottpoff IE -> LE against hidden but not local var */ | |
87 | movl %gs:0, %edx | |
88 | nop;nop | |
89 | subl sh6@gottpoff(%ecx), %edx | |
90 | nop;nop;nop;nop | |
91 | ||
92 | /* @indntpoff IE -> LE against hidden but not local var */ | |
93 | movl %gs:0, %eax | |
94 | nop;nop | |
95 | addl sh7@indntpoff, %eax | |
96 | nop;nop;nop;nop | |
97 | ||
98 | /* @indntpoff direct %gs access IE -> LE against hidden but not | |
99 | local var */ | |
100 | movl sh8@indntpoff, %edx | |
101 | nop;nop | |
102 | movl %gs:(%edx), %eax | |
103 | nop;nop;nop;nop | |
104 | ||
105 | /* LE @tpoff, global var defined in exec */ | |
106 | movl $sg1@tpoff, %edx | |
107 | nop;nop | |
108 | movl %gs:0, %eax | |
109 | nop;nop | |
110 | subl %edx, %eax | |
111 | nop;nop;nop;nop | |
112 | ||
113 | /* LE @tpoff, local var */ | |
114 | movl $-1+bl1@tpoff, %eax | |
115 | nop;nop | |
116 | movl %gs:0, %edx | |
117 | nop;nop | |
118 | subl %eax, %edx | |
119 | nop;nop;nop;nop | |
120 | ||
121 | /* LE @tpoff, hidden var defined in exec */ | |
122 | movl $sh1@tpoff-3, %eax | |
123 | nop;nop | |
124 | movl %gs:0, %edx | |
125 | nop;nop | |
126 | subl %eax, %edx | |
127 | nop;nop;nop;nop | |
128 | ||
129 | /* LE @ntpoff, global var defined in exec */ | |
130 | movl %gs:0, %eax | |
131 | nop;nop | |
132 | leal sg2@ntpoff(%eax), %edx | |
133 | nop;nop;nop;nop | |
134 | ||
135 | /* LE @ntpoff, local var, non-canonical sequence */ | |
136 | movl $2+bl2@ntpoff, %eax | |
137 | nop;nop | |
138 | movl %gs:0, %edx | |
139 | nop;nop | |
140 | addl %eax, %edx | |
141 | nop;nop;nop;nop | |
142 | ||
143 | /* LE @ntpoff, hidden var defined in exec, non-canonical sequence */ | |
144 | movl %gs:0, %edx | |
145 | nop;nop | |
146 | addl $sh2@ntpoff+1, %edx | |
147 | nop;nop;nop;nop | |
148 | ||
149 | /* Direct %gs access */ | |
150 | ||
151 | /* LE @ntpoff, global var defined in exec */ | |
152 | movl %gs:sg3@ntpoff, %eax | |
153 | nop;nop;nop;nop | |
154 | ||
155 | /* LE @ntpoff, local var */ | |
156 | movl %gs:bl3@ntpoff+3, %edx | |
157 | nop;nop;nop;nop | |
158 | ||
159 | /* LE @ntpoff, hidden var defined in exec */ | |
160 | movl %gs:1+sh3@ntpoff, %edx | |
161 | nop;nop;nop;nop | |
162 | ||
163 | movl -4(%ebp), %ebx | |
164 | leave | |
165 | ret |