yann@1
|
1 |
From http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/alpha/dl-machine.h.diff?r1=1.56&r2=1.57&cvsroot=glibc
|
yann@1
|
2 |
(minus first hunk)
|
yann@1
|
3 |
Lets glibc-2.2.5 compile with gcc-3.3
|
yann@1
|
4 |
|
yann@1
|
5 |
===================================================================
|
yann@1
|
6 |
RCS file: /cvs/glibc/libc/sysdeps/alpha/dl-machine.h,v
|
yann@1
|
7 |
retrieving revision 1.56
|
yann@1
|
8 |
retrieving revision 1.57
|
yann@1
|
9 |
diff -u -r1.56 -r1.57
|
yann@1
|
10 |
--- libc/sysdeps/alpha/dl-machine.h 2001/12/12 00:10:27 1.56
|
yann@1
|
11 |
+++ libc/sysdeps/alpha/dl-machine.h 2001/12/31 17:33:59 1.57
|
yann@1
|
12 |
@@ -156,125 +157,126 @@
|
yann@1
|
13 |
#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name, IMB) \
|
yann@1
|
14 |
extern void tramp_name (void); \
|
yann@1
|
15 |
asm ( "\
|
yann@1
|
16 |
- .globl " #tramp_name "
|
yann@1
|
17 |
- .ent " #tramp_name "
|
yann@1
|
18 |
-" #tramp_name ":
|
yann@1
|
19 |
- lda $sp, -44*8($sp)
|
yann@1
|
20 |
- .frame $sp, 44*8, $26
|
yann@1
|
21 |
- /* Preserve all integer registers that C normally doesn't. */
|
yann@1
|
22 |
- stq $26, 0*8($sp)
|
yann@1
|
23 |
- stq $0, 1*8($sp)
|
yann@1
|
24 |
- stq $1, 2*8($sp)
|
yann@1
|
25 |
- stq $2, 3*8($sp)
|
yann@1
|
26 |
- stq $3, 4*8($sp)
|
yann@1
|
27 |
- stq $4, 5*8($sp)
|
yann@1
|
28 |
- stq $5, 6*8($sp)
|
yann@1
|
29 |
- stq $6, 7*8($sp)
|
yann@1
|
30 |
- stq $7, 8*8($sp)
|
yann@1
|
31 |
- stq $8, 9*8($sp)
|
yann@1
|
32 |
- stq $16, 10*8($sp)
|
yann@1
|
33 |
- stq $17, 11*8($sp)
|
yann@1
|
34 |
- stq $18, 12*8($sp)
|
yann@1
|
35 |
- stq $19, 13*8($sp)
|
yann@1
|
36 |
- stq $20, 14*8($sp)
|
yann@1
|
37 |
- stq $21, 15*8($sp)
|
yann@1
|
38 |
- stq $22, 16*8($sp)
|
yann@1
|
39 |
- stq $23, 17*8($sp)
|
yann@1
|
40 |
- stq $24, 18*8($sp)
|
yann@1
|
41 |
- stq $25, 19*8($sp)
|
yann@1
|
42 |
- stq $29, 20*8($sp)
|
yann@1
|
43 |
- stt $f0, 21*8($sp)
|
yann@1
|
44 |
- stt $f1, 22*8($sp)
|
yann@1
|
45 |
- stt $f10, 23*8($sp)
|
yann@1
|
46 |
- stt $f11, 24*8($sp)
|
yann@1
|
47 |
- stt $f12, 25*8($sp)
|
yann@1
|
48 |
- stt $f13, 26*8($sp)
|
yann@1
|
49 |
- stt $f14, 27*8($sp)
|
yann@1
|
50 |
- stt $f15, 28*8($sp)
|
yann@1
|
51 |
- stt $f16, 29*8($sp)
|
yann@1
|
52 |
- stt $f17, 30*8($sp)
|
yann@1
|
53 |
- stt $f18, 31*8($sp)
|
yann@1
|
54 |
- stt $f19, 32*8($sp)
|
yann@1
|
55 |
- stt $f20, 33*8($sp)
|
yann@1
|
56 |
- stt $f21, 34*8($sp)
|
yann@1
|
57 |
- stt $f22, 35*8($sp)
|
yann@1
|
58 |
- stt $f23, 36*8($sp)
|
yann@1
|
59 |
- stt $f24, 37*8($sp)
|
yann@1
|
60 |
- stt $f25, 38*8($sp)
|
yann@1
|
61 |
- stt $f26, 39*8($sp)
|
yann@1
|
62 |
- stt $f27, 40*8($sp)
|
yann@1
|
63 |
- stt $f28, 41*8($sp)
|
yann@1
|
64 |
- stt $f29, 42*8($sp)
|
yann@1
|
65 |
- stt $f30, 43*8($sp)
|
yann@1
|
66 |
- .mask 0x27ff01ff, -44*8
|
yann@1
|
67 |
- .fmask 0xfffffc03, -(44-21)*8
|
yann@1
|
68 |
- /* Set up our $gp */
|
yann@1
|
69 |
- br $gp, .+4
|
yann@1
|
70 |
- ldgp $gp, 0($gp)
|
yann@1
|
71 |
- .prologue 0
|
yann@1
|
72 |
- /* Set up the arguments for fixup: */
|
yann@1
|
73 |
- /* $16 = link_map out of plt0 */
|
yann@1
|
74 |
- /* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */
|
yann@1
|
75 |
- /* $18 = return address */
|
yann@1
|
76 |
- subq $28, $27, $17
|
yann@1
|
77 |
- ldq $16, 8($27)
|
yann@1
|
78 |
- subq $17, 20, $17
|
yann@1
|
79 |
- mov $26, $18
|
yann@1
|
80 |
- addq $17, $17, $17
|
yann@1
|
81 |
- /* Do the fixup */
|
yann@1
|
82 |
- bsr $26, " ASM_ALPHA_NG_SYMBOL_PREFIX #fixup_name "..ng
|
yann@1
|
83 |
- /* Move the destination address into position. */
|
yann@1
|
84 |
- mov $0, $27
|
yann@1
|
85 |
- /* Restore program registers. */
|
yann@1
|
86 |
- ldq $26, 0*8($sp)
|
yann@1
|
87 |
- ldq $0, 1*8($sp)
|
yann@1
|
88 |
- ldq $1, 2*8($sp)
|
yann@1
|
89 |
- ldq $2, 3*8($sp)
|
yann@1
|
90 |
- ldq $3, 4*8($sp)
|
yann@1
|
91 |
- ldq $4, 5*8($sp)
|
yann@1
|
92 |
- ldq $5, 6*8($sp)
|
yann@1
|
93 |
- ldq $6, 7*8($sp)
|
yann@1
|
94 |
- ldq $7, 8*8($sp)
|
yann@1
|
95 |
- ldq $8, 9*8($sp)
|
yann@1
|
96 |
- ldq $16, 10*8($sp)
|
yann@1
|
97 |
- ldq $17, 11*8($sp)
|
yann@1
|
98 |
- ldq $18, 12*8($sp)
|
yann@1
|
99 |
- ldq $19, 13*8($sp)
|
yann@1
|
100 |
- ldq $20, 14*8($sp)
|
yann@1
|
101 |
- ldq $21, 15*8($sp)
|
yann@1
|
102 |
- ldq $22, 16*8($sp)
|
yann@1
|
103 |
- ldq $23, 17*8($sp)
|
yann@1
|
104 |
- ldq $24, 18*8($sp)
|
yann@1
|
105 |
- ldq $25, 19*8($sp)
|
yann@1
|
106 |
- ldq $29, 20*8($sp)
|
yann@1
|
107 |
- ldt $f0, 21*8($sp)
|
yann@1
|
108 |
- ldt $f1, 22*8($sp)
|
yann@1
|
109 |
- ldt $f10, 23*8($sp)
|
yann@1
|
110 |
- ldt $f11, 24*8($sp)
|
yann@1
|
111 |
- ldt $f12, 25*8($sp)
|
yann@1
|
112 |
- ldt $f13, 26*8($sp)
|
yann@1
|
113 |
- ldt $f14, 27*8($sp)
|
yann@1
|
114 |
- ldt $f15, 28*8($sp)
|
yann@1
|
115 |
- ldt $f16, 29*8($sp)
|
yann@1
|
116 |
- ldt $f17, 30*8($sp)
|
yann@1
|
117 |
- ldt $f18, 31*8($sp)
|
yann@1
|
118 |
- ldt $f19, 32*8($sp)
|
yann@1
|
119 |
- ldt $f20, 33*8($sp)
|
yann@1
|
120 |
- ldt $f21, 34*8($sp)
|
yann@1
|
121 |
- ldt $f22, 35*8($sp)
|
yann@1
|
122 |
- ldt $f23, 36*8($sp)
|
yann@1
|
123 |
- ldt $f24, 37*8($sp)
|
yann@1
|
124 |
- ldt $f25, 38*8($sp)
|
yann@1
|
125 |
- ldt $f26, 39*8($sp)
|
yann@1
|
126 |
- ldt $f27, 40*8($sp)
|
yann@1
|
127 |
- ldt $f28, 41*8($sp)
|
yann@1
|
128 |
- ldt $f29, 42*8($sp)
|
yann@1
|
129 |
- ldt $f30, 43*8($sp)
|
yann@1
|
130 |
- /* Flush the Icache after having modified the .plt code. */
|
yann@1
|
131 |
- " #IMB "
|
yann@1
|
132 |
- /* Clean up and turn control to the destination */
|
yann@1
|
133 |
- lda $sp, 44*8($sp)
|
yann@1
|
134 |
- jmp $31, ($27)
|
yann@1
|
135 |
+ .globl " #tramp_name " \n\
|
yann@1
|
136 |
+ .ent " #tramp_name " \n\
|
yann@1
|
137 |
+" #tramp_name ": \n\
|
yann@1
|
138 |
+ lda $sp, -44*8($sp) \n\
|
yann@1
|
139 |
+ .frame $sp, 44*8, $26 \n\
|
yann@1
|
140 |
+ /* Preserve all integer registers that C normally \n\
|
yann@1
|
141 |
+ doesn't. */ \n\
|
yann@1
|
142 |
+ stq $26, 0*8($sp) \n\
|
yann@1
|
143 |
+ stq $0, 1*8($sp) \n\
|
yann@1
|
144 |
+ stq $1, 2*8($sp) \n\
|
yann@1
|
145 |
+ stq $2, 3*8($sp) \n\
|
yann@1
|
146 |
+ stq $3, 4*8($sp) \n\
|
yann@1
|
147 |
+ stq $4, 5*8($sp) \n\
|
yann@1
|
148 |
+ stq $5, 6*8($sp) \n\
|
yann@1
|
149 |
+ stq $6, 7*8($sp) \n\
|
yann@1
|
150 |
+ stq $7, 8*8($sp) \n\
|
yann@1
|
151 |
+ stq $8, 9*8($sp) \n\
|
yann@1
|
152 |
+ stq $16, 10*8($sp) \n\
|
yann@1
|
153 |
+ stq $17, 11*8($sp) \n\
|
yann@1
|
154 |
+ stq $18, 12*8($sp) \n\
|
yann@1
|
155 |
+ stq $19, 13*8($sp) \n\
|
yann@1
|
156 |
+ stq $20, 14*8($sp) \n\
|
yann@1
|
157 |
+ stq $21, 15*8($sp) \n\
|
yann@1
|
158 |
+ stq $22, 16*8($sp) \n\
|
yann@1
|
159 |
+ stq $23, 17*8($sp) \n\
|
yann@1
|
160 |
+ stq $24, 18*8($sp) \n\
|
yann@1
|
161 |
+ stq $25, 19*8($sp) \n\
|
yann@1
|
162 |
+ stq $29, 20*8($sp) \n\
|
yann@1
|
163 |
+ stt $f0, 21*8($sp) \n\
|
yann@1
|
164 |
+ stt $f1, 22*8($sp) \n\
|
yann@1
|
165 |
+ stt $f10, 23*8($sp) \n\
|
yann@1
|
166 |
+ stt $f11, 24*8($sp) \n\
|
yann@1
|
167 |
+ stt $f12, 25*8($sp) \n\
|
yann@1
|
168 |
+ stt $f13, 26*8($sp) \n\
|
yann@1
|
169 |
+ stt $f14, 27*8($sp) \n\
|
yann@1
|
170 |
+ stt $f15, 28*8($sp) \n\
|
yann@1
|
171 |
+ stt $f16, 29*8($sp) \n\
|
yann@1
|
172 |
+ stt $f17, 30*8($sp) \n\
|
yann@1
|
173 |
+ stt $f18, 31*8($sp) \n\
|
yann@1
|
174 |
+ stt $f19, 32*8($sp) \n\
|
yann@1
|
175 |
+ stt $f20, 33*8($sp) \n\
|
yann@1
|
176 |
+ stt $f21, 34*8($sp) \n\
|
yann@1
|
177 |
+ stt $f22, 35*8($sp) \n\
|
yann@1
|
178 |
+ stt $f23, 36*8($sp) \n\
|
yann@1
|
179 |
+ stt $f24, 37*8($sp) \n\
|
yann@1
|
180 |
+ stt $f25, 38*8($sp) \n\
|
yann@1
|
181 |
+ stt $f26, 39*8($sp) \n\
|
yann@1
|
182 |
+ stt $f27, 40*8($sp) \n\
|
yann@1
|
183 |
+ stt $f28, 41*8($sp) \n\
|
yann@1
|
184 |
+ stt $f29, 42*8($sp) \n\
|
yann@1
|
185 |
+ stt $f30, 43*8($sp) \n\
|
yann@1
|
186 |
+ .mask 0x27ff01ff, -44*8 \n\
|
yann@1
|
187 |
+ .fmask 0xfffffc03, -(44-21)*8 \n\
|
yann@1
|
188 |
+ /* Set up our $gp */ \n\
|
yann@1
|
189 |
+ br $gp, .+4 \n\
|
yann@1
|
190 |
+ ldgp $gp, 0($gp) \n\
|
yann@1
|
191 |
+ .prologue 0 \n\
|
yann@1
|
192 |
+ /* Set up the arguments for fixup: */ \n\
|
yann@1
|
193 |
+ /* $16 = link_map out of plt0 */ \n\
|
yann@1
|
194 |
+ /* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */\n\
|
yann@1
|
195 |
+ /* $18 = return address */ \n\
|
yann@1
|
196 |
+ subq $28, $27, $17 \n\
|
yann@1
|
197 |
+ ldq $16, 8($27) \n\
|
yann@1
|
198 |
+ subq $17, 20, $17 \n\
|
yann@1
|
199 |
+ mov $26, $18 \n\
|
yann@1
|
200 |
+ addq $17, $17, $17 \n\
|
yann@1
|
201 |
+ /* Do the fixup */ \n\
|
yann@1
|
202 |
+ bsr $26, " ASM_ALPHA_NG_SYMBOL_PREFIX #fixup_name "..ng\n\
|
yann@1
|
203 |
+ /* Move the destination address into position. */ \n\
|
yann@1
|
204 |
+ mov $0, $27 \n\
|
yann@1
|
205 |
+ /* Restore program registers. */ \n\
|
yann@1
|
206 |
+ ldq $26, 0*8($sp) \n\
|
yann@1
|
207 |
+ ldq $0, 1*8($sp) \n\
|
yann@1
|
208 |
+ ldq $1, 2*8($sp) \n\
|
yann@1
|
209 |
+ ldq $2, 3*8($sp) \n\
|
yann@1
|
210 |
+ ldq $3, 4*8($sp) \n\
|
yann@1
|
211 |
+ ldq $4, 5*8($sp) \n\
|
yann@1
|
212 |
+ ldq $5, 6*8($sp) \n\
|
yann@1
|
213 |
+ ldq $6, 7*8($sp) \n\
|
yann@1
|
214 |
+ ldq $7, 8*8($sp) \n\
|
yann@1
|
215 |
+ ldq $8, 9*8($sp) \n\
|
yann@1
|
216 |
+ ldq $16, 10*8($sp) \n\
|
yann@1
|
217 |
+ ldq $17, 11*8($sp) \n\
|
yann@1
|
218 |
+ ldq $18, 12*8($sp) \n\
|
yann@1
|
219 |
+ ldq $19, 13*8($sp) \n\
|
yann@1
|
220 |
+ ldq $20, 14*8($sp) \n\
|
yann@1
|
221 |
+ ldq $21, 15*8($sp) \n\
|
yann@1
|
222 |
+ ldq $22, 16*8($sp) \n\
|
yann@1
|
223 |
+ ldq $23, 17*8($sp) \n\
|
yann@1
|
224 |
+ ldq $24, 18*8($sp) \n\
|
yann@1
|
225 |
+ ldq $25, 19*8($sp) \n\
|
yann@1
|
226 |
+ ldq $29, 20*8($sp) \n\
|
yann@1
|
227 |
+ ldt $f0, 21*8($sp) \n\
|
yann@1
|
228 |
+ ldt $f1, 22*8($sp) \n\
|
yann@1
|
229 |
+ ldt $f10, 23*8($sp) \n\
|
yann@1
|
230 |
+ ldt $f11, 24*8($sp) \n\
|
yann@1
|
231 |
+ ldt $f12, 25*8($sp) \n\
|
yann@1
|
232 |
+ ldt $f13, 26*8($sp) \n\
|
yann@1
|
233 |
+ ldt $f14, 27*8($sp) \n\
|
yann@1
|
234 |
+ ldt $f15, 28*8($sp) \n\
|
yann@1
|
235 |
+ ldt $f16, 29*8($sp) \n\
|
yann@1
|
236 |
+ ldt $f17, 30*8($sp) \n\
|
yann@1
|
237 |
+ ldt $f18, 31*8($sp) \n\
|
yann@1
|
238 |
+ ldt $f19, 32*8($sp) \n\
|
yann@1
|
239 |
+ ldt $f20, 33*8($sp) \n\
|
yann@1
|
240 |
+ ldt $f21, 34*8($sp) \n\
|
yann@1
|
241 |
+ ldt $f22, 35*8($sp) \n\
|
yann@1
|
242 |
+ ldt $f23, 36*8($sp) \n\
|
yann@1
|
243 |
+ ldt $f24, 37*8($sp) \n\
|
yann@1
|
244 |
+ ldt $f25, 38*8($sp) \n\
|
yann@1
|
245 |
+ ldt $f26, 39*8($sp) \n\
|
yann@1
|
246 |
+ ldt $f27, 40*8($sp) \n\
|
yann@1
|
247 |
+ ldt $f28, 41*8($sp) \n\
|
yann@1
|
248 |
+ ldt $f29, 42*8($sp) \n\
|
yann@1
|
249 |
+ ldt $f30, 43*8($sp) \n\
|
yann@1
|
250 |
+ /* Flush the Icache after having modified the .plt code. */\n\
|
yann@1
|
251 |
+ " #IMB " \n\
|
yann@1
|
252 |
+ /* Clean up and turn control to the destination */ \n\
|
yann@1
|
253 |
+ lda $sp, 44*8($sp) \n\
|
yann@1
|
254 |
+ jmp $31, ($27) \n\
|
yann@1
|
255 |
.end " #tramp_name)
|
yann@1
|
256 |
|
yann@1
|
257 |
#ifndef PROF
|
yann@1
|
258 |
@@ -292,85 +294,87 @@
|
yann@1
|
259 |
its return value is the user program's entry point. */
|
yann@1
|
260 |
|
yann@1
|
261 |
#define RTLD_START asm ("\
|
yann@1
|
262 |
-.text
|
yann@1
|
263 |
- .set at
|
yann@1
|
264 |
- .globl _start
|
yann@1
|
265 |
- .ent _start
|
yann@1
|
266 |
-_start:
|
yann@1
|
267 |
- br $gp, 0f
|
yann@1
|
268 |
-0: ldgp $gp, 0($gp)
|
yann@1
|
269 |
- .prologue 0
|
yann@1
|
270 |
- /* Pass pointer to argument block to _dl_start. */
|
yann@1
|
271 |
- mov $sp, $16
|
yann@1
|
272 |
- bsr $26, "ASM_ALPHA_NG_SYMBOL_PREFIX"_dl_start..ng
|
yann@1
|
273 |
- .end _start
|
yann@1
|
274 |
- /* FALLTHRU */
|
yann@1
|
275 |
- .globl _dl_start_user
|
yann@1
|
276 |
- .ent _dl_start_user
|
yann@1
|
277 |
-_dl_start_user:
|
yann@1
|
278 |
- .frame $30,0,$31,0
|
yann@1
|
279 |
- .prologue 0
|
yann@1
|
280 |
- /* Save the user entry point address in s0. */
|
yann@1
|
281 |
- mov $0, $9
|
yann@1
|
282 |
- /* Store the highest stack address. */
|
yann@1
|
283 |
- stq $30, __libc_stack_end
|
yann@1
|
284 |
- /* See if we were run as a command with the executable file
|
yann@1
|
285 |
- name as an extra leading argument. */
|
yann@1
|
286 |
- ldl $1, _dl_skip_args
|
yann@1
|
287 |
- bne $1, $fixup_stack
|
yann@1
|
288 |
-$fixup_stack_ret:
|
yann@1
|
289 |
- /* The special initializer gets called with the stack just
|
yann@1
|
290 |
- as the application's entry point will see it; it can
|
yann@1
|
291 |
- switch stacks if it moves these contents over. */
|
yann@1
|
292 |
-" RTLD_START_SPECIAL_INIT "
|
yann@1
|
293 |
- /* Call _dl_init(_dl_loaded, argc, argv, envp) to run initializers. */
|
yann@1
|
294 |
- ldq $16, _dl_loaded
|
yann@1
|
295 |
- ldq $17, 0($sp)
|
yann@1
|
296 |
- lda $18, 8($sp)
|
yann@1
|
297 |
- s8addq $17, 8, $19
|
yann@1
|
298 |
- addq $19, $18, $19
|
yann@1
|
299 |
- jsr $26, _dl_init
|
yann@1
|
300 |
- /* Pass our finalizer function to the user in $0. */
|
yann@1
|
301 |
- lda $0, _dl_fini
|
yann@1
|
302 |
- /* Jump to the user's entry point. */
|
yann@1
|
303 |
- mov $9, $27
|
yann@1
|
304 |
- jmp ($9)
|
yann@1
|
305 |
-$fixup_stack:
|
yann@1
|
306 |
- /* Adjust the stack pointer to skip _dl_skip_args words. This
|
yann@1
|
307 |
- involves copying everything down, since the stack pointer must
|
yann@1
|
308 |
- always be 16-byte aligned. */
|
yann@1
|
309 |
- ldq $2, 0($sp)
|
yann@1
|
310 |
- ldq $5, _dl_argv
|
yann@1
|
311 |
- subq $31, $1, $6
|
yann@1
|
312 |
- subq $2, $1, $2
|
yann@1
|
313 |
- s8addq $6, $5, $5
|
yann@1
|
314 |
- mov $sp, $4
|
yann@1
|
315 |
- s8addq $1, $sp, $3
|
yann@1
|
316 |
- stq $2, 0($sp)
|
yann@1
|
317 |
- stq $5, _dl_argv
|
yann@1
|
318 |
- /* Copy down argv. */
|
yann@1
|
319 |
-0: ldq $5, 8($3)
|
yann@1
|
320 |
- addq $4, 8, $4
|
yann@1
|
321 |
- addq $3, 8, $3
|
yann@1
|
322 |
- stq $5, 0($4)
|
yann@1
|
323 |
- bne $5, 0b
|
yann@1
|
324 |
- /* Copy down envp. */
|
yann@1
|
325 |
-1: ldq $5, 8($3)
|
yann@1
|
326 |
- addq $4, 8, $4
|
yann@1
|
327 |
- addq $3, 8, $3
|
yann@1
|
328 |
- stq $5, 0($4)
|
yann@1
|
329 |
- bne $5, 1b
|
yann@1
|
330 |
- /* Copy down auxiliary table. */
|
yann@1
|
331 |
-2: ldq $5, 8($3)
|
yann@1
|
332 |
- ldq $6, 16($3)
|
yann@1
|
333 |
- addq $4, 16, $4
|
yann@1
|
334 |
- addq $3, 16, $3
|
yann@1
|
335 |
- stq $5, -8($4)
|
yann@1
|
336 |
- stq $6, 0($4)
|
yann@1
|
337 |
- bne $5, 2b
|
yann@1
|
338 |
- br $fixup_stack_ret
|
yann@1
|
339 |
- .end _dl_start_user
|
yann@1
|
340 |
- .set noat
|
yann@1
|
341 |
+.text \n\
|
yann@1
|
342 |
+ .set at \n\
|
yann@1
|
343 |
+ .globl _start \n\
|
yann@1
|
344 |
+ .ent _start \n\
|
yann@1
|
345 |
+_start: \n\
|
yann@1
|
346 |
+ br $gp, 0f \n\
|
yann@1
|
347 |
+0: ldgp $gp, 0($gp) \n\
|
yann@1
|
348 |
+ .prologue 0 \n\
|
yann@1
|
349 |
+ /* Pass pointer to argument block to _dl_start. */ \n\
|
yann@1
|
350 |
+ mov $sp, $16 \n\
|
yann@1
|
351 |
+ bsr $26, "ASM_ALPHA_NG_SYMBOL_PREFIX"_dl_start..ng \n\
|
yann@1
|
352 |
+ .end _start \n\
|
yann@1
|
353 |
+ /* FALLTHRU */ \n\
|
yann@1
|
354 |
+ .globl _dl_start_user \n\
|
yann@1
|
355 |
+ .ent _dl_start_user \n\
|
yann@1
|
356 |
+_dl_start_user: \n\
|
yann@1
|
357 |
+ .frame $30,0,$31,0 \n\
|
yann@1
|
358 |
+ .prologue 0 \n\
|
yann@1
|
359 |
+ /* Save the user entry point address in s0. */ \n\
|
yann@1
|
360 |
+ mov $0, $9 \n\
|
yann@1
|
361 |
+ /* Store the highest stack address. */ \n\
|
yann@1
|
362 |
+ stq $30, __libc_stack_end \n\
|
yann@1
|
363 |
+ /* See if we were run as a command with the executable \n\
|
yann@1
|
364 |
+ file name as an extra leading argument. */ \n\
|
yann@1
|
365 |
+ ldl $1, _dl_skip_args \n\
|
yann@1
|
366 |
+ bne $1, $fixup_stack \n\
|
yann@1
|
367 |
+$fixup_stack_ret: \n\
|
yann@1
|
368 |
+ /* The special initializer gets called with the stack \n\
|
yann@1
|
369 |
+ just as the application's entry point will see it; \n\
|
yann@1
|
370 |
+ it can switch stacks if it moves these contents \n\
|
yann@1
|
371 |
+ over. */ \n\
|
yann@1
|
372 |
+" RTLD_START_SPECIAL_INIT " \n\
|
yann@1
|
373 |
+ /* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\
|
yann@1
|
374 |
+ initializers. */ \n\
|
yann@1
|
375 |
+ ldq $16, _dl_loaded \n\
|
yann@1
|
376 |
+ ldq $17, 0($sp) \n\
|
yann@1
|
377 |
+ lda $18, 8($sp) \n\
|
yann@1
|
378 |
+ s8addq $17, 8, $19 \n\
|
yann@1
|
379 |
+ addq $19, $18, $19 \n\
|
yann@1
|
380 |
+ jsr $26, _dl_init \n\
|
yann@1
|
381 |
+ /* Pass our finalizer function to the user in $0. */ \n\
|
yann@1
|
382 |
+ lda $0, _dl_fini \n\
|
yann@1
|
383 |
+ /* Jump to the user's entry point. */ \n\
|
yann@1
|
384 |
+ mov $9, $27 \n\
|
yann@1
|
385 |
+ jmp ($9) \n\
|
yann@1
|
386 |
+$fixup_stack: \n\
|
yann@1
|
387 |
+ /* Adjust the stack pointer to skip _dl_skip_args words.\n\
|
yann@1
|
388 |
+ This involves copying everything down, since the \n\
|
yann@1
|
389 |
+ stack pointer must always be 16-byte aligned. */ \n\
|
yann@1
|
390 |
+ ldq $2, 0($sp) \n\
|
yann@1
|
391 |
+ ldq $5, _dl_argv \n\
|
yann@1
|
392 |
+ subq $31, $1, $6 \n\
|
yann@1
|
393 |
+ subq $2, $1, $2 \n\
|
yann@1
|
394 |
+ s8addq $6, $5, $5 \n\
|
yann@1
|
395 |
+ mov $sp, $4 \n\
|
yann@1
|
396 |
+ s8addq $1, $sp, $3 \n\
|
yann@1
|
397 |
+ stq $2, 0($sp) \n\
|
yann@1
|
398 |
+ stq $5, _dl_argv \n\
|
yann@1
|
399 |
+ /* Copy down argv. */ \n\
|
yann@1
|
400 |
+0: ldq $5, 8($3) \n\
|
yann@1
|
401 |
+ addq $4, 8, $4 \n\
|
yann@1
|
402 |
+ addq $3, 8, $3 \n\
|
yann@1
|
403 |
+ stq $5, 0($4) \n\
|
yann@1
|
404 |
+ bne $5, 0b \n\
|
yann@1
|
405 |
+ /* Copy down envp. */ \n\
|
yann@1
|
406 |
+1: ldq $5, 8($3) \n\
|
yann@1
|
407 |
+ addq $4, 8, $4 \n\
|
yann@1
|
408 |
+ addq $3, 8, $3 \n\
|
yann@1
|
409 |
+ stq $5, 0($4) \n\
|
yann@1
|
410 |
+ bne $5, 1b \n\
|
yann@1
|
411 |
+ /* Copy down auxiliary table. */ \n\
|
yann@1
|
412 |
+2: ldq $5, 8($3) \n\
|
yann@1
|
413 |
+ ldq $6, 16($3) \n\
|
yann@1
|
414 |
+ addq $4, 16, $4 \n\
|
yann@1
|
415 |
+ addq $3, 16, $3 \n\
|
yann@1
|
416 |
+ stq $5, -8($4) \n\
|
yann@1
|
417 |
+ stq $6, 0($4) \n\
|
yann@1
|
418 |
+ bne $5, 2b \n\
|
yann@1
|
419 |
+ br $fixup_stack_ret \n\
|
yann@1
|
420 |
+ .end _dl_start_user \n\
|
yann@1
|
421 |
+ .set noat \n\
|
yann@1
|
422 |
.previous");
|
yann@1
|
423 |
|
yann@1
|
424 |
#ifndef RTLD_START_SPECIAL_INIT
|