]> sourceware.org Git - glibc.git/blame - sysdeps/sh/dl-trampoline.S
Revert unwanted patch. Again.
[glibc.git] / sysdeps / sh / dl-trampoline.S
CommitLineData
537e7234
UD
1/* PLT trampolines. SH version.
2 Copyright (C) 2005 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, write to the Free
17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18 02111-1307 USA. */
19
20#include <sysdep.h>
21
22 .text
23 .globl _dl_runtime_resolve
24 .type _dl_runtime_resolve, @function
25 cfi_startproc
26 .align 5
27_dl_runtime_resolve:
28 mov.l r2,@-r15
29 cfi_adjust_cfa_offset (4)
30 mov.l r3,@-r15
31 cfi_adjust_cfa_offset (4)
32 mov.l r4,@-r15
33 cfi_adjust_cfa_offset (4)
34 mov.l r5,@-r15
35 cfi_adjust_cfa_offset (4)
36 mov.l r6,@-r15
37 cfi_adjust_cfa_offset (4)
38 mov.l r7,@-r15
39 cfi_adjust_cfa_offset (4)
40 mov.l r12,@-r15
41 cfi_adjust_cfa_offset (4)
42 sts.l macl,@-r15
43 cfi_adjust_cfa_offset (4)
44 sts.l mach,@-r15
45 cfi_adjust_cfa_offset (4)
46 movt r3 ! Save T flag.
47 mov.l r3,@-r15
48 cfi_adjust_cfa_offset (4)
49#ifdef HAVE_FPU
50 sts.l fpscr,@-r15
51 cfi_adjust_cfa_offset (4)
52 mov #8,r3
53 swap.w r3,r3
54 lds r3,fpscr
55 fmov.s fr11,@-r15
56 cfi_adjust_cfa_offset (4)
57 fmov.s fr10,@-r15
58 cfi_adjust_cfa_offset (4)
59 fmov.s fr9,@-r15
60 cfi_adjust_cfa_offset (4)
61 fmov.s fr8,@-r15
62 cfi_adjust_cfa_offset (4)
63 fmov.s fr7,@-r15
64 cfi_adjust_cfa_offset (4)
65 fmov.s fr6,@-r15
66 cfi_adjust_cfa_offset (4)
67 fmov.s fr5,@-r15
68 cfi_adjust_cfa_offset (4)
69 fmov.s fr4,@-r15
70 cfi_adjust_cfa_offset (4)
71#endif
72 sts.l pr,@-r15
73 cfi_adjust_cfa_offset (4)
74 tst r0,r0
75 bt 1f
76 mov r0,r2
771:
78 mov r0,r4 ! PLT type
79 mov r2,r5 ! link map address
80#ifdef SHARED
81 mov.l 2f,r2
82 mova 2f,r0
83 add r0,r2 ! Get GOT address in r2
84 mov.l 3f,r0
85 add r2,r0
86#else
87 mov.l 3f,r0
88#endif
89 jsr @r0 ! Call resolver.
90 mov r1,r6 ! reloc offset
91 lds.l @r15+,pr ! Get register content back.
92 cfi_adjust_cfa_offset (-4)
93#ifdef HAVE_FPU
94 fmov.s @r15+,fr4
95 cfi_adjust_cfa_offset (-4)
96 fmov.s @r15+,fr5
97 cfi_adjust_cfa_offset (-4)
98 fmov.s @r15+,fr6
99 cfi_adjust_cfa_offset (-4)
100 fmov.s @r15+,fr7
101 cfi_adjust_cfa_offset (-4)
102 fmov.s @r15+,fr8
103 cfi_adjust_cfa_offset (-4)
104 fmov.s @r15+,fr9
105 cfi_adjust_cfa_offset (-4)
106 fmov.s @r15+,fr10
107 cfi_adjust_cfa_offset (-4)
108 fmov.s @r15+,fr11
109 cfi_adjust_cfa_offset (-4)
110 lds.l @r15+,fpscr
111 cfi_adjust_cfa_offset (-4)
112#endif
113 mov.l @r15+,r3
114 cfi_adjust_cfa_offset (-4)
115 shal r3 ! Lode T flag.
116 lds.l @r15+,mach
117 cfi_adjust_cfa_offset (-4)
118 lds.l @r15+,macl
119 cfi_adjust_cfa_offset (-4)
120 mov.l @r15+,r12
121 cfi_adjust_cfa_offset (-4)
122 mov.l @r15+,r7
123 cfi_adjust_cfa_offset (-4)
124 mov.l @r15+,r6
125 cfi_adjust_cfa_offset (-4)
126 mov.l @r15+,r5
127 cfi_adjust_cfa_offset (-4)
128 mov.l @r15+,r4
129 cfi_adjust_cfa_offset (-4)
130 mov.l @r15+,r3
131 cfi_adjust_cfa_offset (-4)
132 jmp @r0 ! Jump to function address.
133 mov.l @r15+,r2
134 cfi_adjust_cfa_offset (-4)
135 .align 2
136#ifdef SHARED
1372: .long _GLOBAL_OFFSET_TABLE_
1383: .long _dl_fixup@GOTOFF
139#else
1403: .long _dl_fixup
141#endif
142 cfi_endproc
143 .size _dl_runtime_resolve, .-_dl_runtime_resolve
144
145
146 .globl _dl_runtime_profile
147 .type _dl_runtime_profile,@function
148 cfi_startproc
149 .align 5
150_dl_runtime_profile:
151 mov.l r12,@-r15
152 cfi_adjust_cfa_offset (4)
153#ifdef HAVE_FPU
154 sts.l fpscr,@-r15
155 cfi_adjust_cfa_offset (4)
156 mov #8,r12
157 swap.w r12,r12
158 lds r12,fpscr
159 fmov.s fr11,@-r15
160 cfi_adjust_cfa_offset (4)
161 fmov.s fr10,@-r15
162 cfi_adjust_cfa_offset (4)
163 fmov.s fr9,@-r15
164 cfi_adjust_cfa_offset (4)
165 fmov.s fr8,@-r15
166 cfi_adjust_cfa_offset (4)
167 fmov.s fr7,@-r15
168 cfi_adjust_cfa_offset (4)
169 fmov.s fr6,@-r15
170 cfi_adjust_cfa_offset (4)
171 fmov.s fr5,@-r15
172 cfi_adjust_cfa_offset (4)
173 fmov.s fr4,@-r15
174 cfi_adjust_cfa_offset (4)
175#else
176 add #-36,r15
177 cfi_adjust_cfa_offset (36)
178#endif
179 mov.l r7,@-r15
180 cfi_adjust_cfa_offset (4)
181 mov.l r6,@-r15
182 cfi_adjust_cfa_offset (4)
183 mov.l r5,@-r15
184 cfi_adjust_cfa_offset (4)
185 mov.l r4,@-r15
186 cfi_adjust_cfa_offset (4)
187 mov.l r3,@-r15
188 cfi_adjust_cfa_offset (4)
189 mov.l r2,@-r15
190 cfi_adjust_cfa_offset (4)
191 sts.l macl,@-r15
192 cfi_adjust_cfa_offset (4)
193 sts.l mach,@-r15
194 cfi_adjust_cfa_offset (4)
195 movt r3 ! Save T flag.
196 mov.l r3,@-r15
197 cfi_adjust_cfa_offset (4)
198 sts.l pr,@-r15
199 cfi_adjust_cfa_offset (4)
200 tst r0,r0
201 bt 1f
202 mov r0,r2
2031:
204 mov r0,r4 ! PLT type
205 mov r2,r5 ! link map address
206 sts pr,r7 ! return address
207 add #-24,r15
208 cfi_adjust_cfa_offset (24)
209 mov #40,r0
210 add r15,r0
211 mov.l r0,@r15 ! Address of the register structure
212 mov #-1,r0
213 mov.l r0,@(8,r15)
214 mov #8,r0
215 add r15,r0
216 mov.l r0,@(4,r15)
217 mov.l r5,@(12,r15)
218 mov.l r1,@(16,r15)
219#ifdef SHARED
220 mov.l 2f,r12
221 mova 2f,r0
222 add r0,r12 ! Get GOT address in r12
223 mov.l 3f,r0
224 add r12,r0
225#else
226 mov.l 3f,r0
227#endif
228 jsr @r0 ! Call resolver.
229 mov r1,r6 ! reloc offset
230 mov.l @(8,r15),r1
231 cmp/pz r1
232 bt 4f
233 add #24,r15
234 cfi_adjust_cfa_offset (-24)
235 lds.l @r15+,pr ! Get register content back.
236 cfi_adjust_cfa_offset (-4)
237 mov.l @r15+,r3
238 cfi_adjust_cfa_offset (-4)
239 shal r3 ! Lode T flag.
240 lds.l @r15+,mach
241 cfi_adjust_cfa_offset (-4)
242 lds.l @r15+,macl
243 cfi_adjust_cfa_offset (-4)
244 mov.l @r15+,r2
245 cfi_adjust_cfa_offset (-4)
246 mov.l @r15+,r3
247 cfi_adjust_cfa_offset (-4)
248 mov.l @r15+,r4
249 cfi_adjust_cfa_offset (-4)
250 mov.l @r15+,r5
251 cfi_adjust_cfa_offset (-4)
252 mov.l @r15+,r6
253 cfi_adjust_cfa_offset (-4)
254 mov.l @r15+,r7
255 cfi_adjust_cfa_offset (-4)
256#ifdef HAVE_FPU
257 fmov.s @r15+,fr4
258 cfi_adjust_cfa_offset (-4)
259 fmov.s @r15+,fr5
260 cfi_adjust_cfa_offset (-4)
261 fmov.s @r15+,fr6
262 cfi_adjust_cfa_offset (-4)
263 fmov.s @r15+,fr7
264 cfi_adjust_cfa_offset (-4)
265 fmov.s @r15+,fr8
266 cfi_adjust_cfa_offset (-4)
267 fmov.s @r15+,fr9
268 cfi_adjust_cfa_offset (-4)
269 fmov.s @r15+,fr10
270 cfi_adjust_cfa_offset (-4)
271 fmov.s @r15+,fr11
272 cfi_adjust_cfa_offset (-4)
273 lds.l @r15+,fpscr
274 cfi_adjust_cfa_offset (-4)
275#else
276 add #36,r15
277 cfi_adjust_cfa_offset (-36)
278#endif
279 jmp @r0 ! Jump to function address.
280 mov.l @r15+,r12
281 cfi_adjust_cfa_offset (-4)
282 .align 2
283#ifdef SHARED
2842: .long _GLOBAL_OFFSET_TABLE_
2853: .long _dl_profile_fixup@GOTOFF
286#else
2873: .long _dl_profile_fixup
288#endif
289
290 cfi_adjust_cfa_offset (104)
2914:
292 mov #104,r3
293 add r15,r3 ! Original stack
294 mov.l r8,@(20,r15)
295 cfi_rel_offset (r8, 20)
296 mov r15,r8
297 sub r1,r15
298 shlr2 r15
299 shll2 r15
300 mov r15,r4
301 shlr2 r1
302 tst r1,r1
3035:
304 bt/s 6f
305 dt r1
306 mov.l @r3+,r2
307 mov.l r2,@r4
308 bra 5b
309 add #4,r4
3106:
311 mov.l @r8,r12
312 mov.l @r12+,r2
313 mov.l @r12+,r3
314 mov.l @r12+,r4
315 mov.l @r12+,r5
316 mov.l @r12+,r6
317 mov.l @r12+,r7
318#ifdef HAVE_FPU
319 fmov.s @r12+,fr4
320 fmov.s @r12+,fr5
321 fmov.s @r12+,fr6
322 fmov.s @r12+,fr7
323 fmov.s @r12+,fr8
324 fmov.s @r12+,fr9
325 fmov.s @r12+,fr10
326 fmov.s @r12+,fr11
327 lds.l @r12+,fpscr
328#else
329 add #36,r2
330#endif
331 jsr @r0 ! Call function.
332 nop
333 mov r8,r15
334 mov.l @(12,r15),r4 ! link map address
335 mov.l @(16,r15),r5 ! reloc offset
336 mov.l @r15,r6 ! input registers
337#ifdef HAVE_FPU
338 mov #16,r8
339 add r15,r8
340 fmov.s fr1,@-r8
341 fmov.s fr0,@-r8
342#else
343 mov #8,r8
344 add r15,r8
345#endif
346 mov.l r1,@-r8
347 mov.l r0,@-r8
348 mov.l @(20,r15),r8
349 cfi_restore (r8)
350#ifdef SHARED
351 mov.l 7f,r12
352 mova 7f,r0
353 add r0,r12 ! Get GOT address in r12
354 mov.l 8f,r0
355 add r12,r0
356#else
357 mov.l 8f,r0
358#endif
359 jsr @r0
360 mov r15,r7 ! output registers
361 mov.l @r15+,r0
362 cfi_adjust_cfa_offset (-4)
363 mov.l @r15+,r1
364 cfi_adjust_cfa_offset (-4)
365#ifdef HAVE_FPU
366 fmov.s @r15+,fr0
367 cfi_adjust_cfa_offset (-4)
368 fmov.s @r15+,fr1
369 cfi_adjust_cfa_offset (-4)
370 add #8,r15
371 cfi_adjust_cfa_offset (-8)
372#else
373 add #16,r15
374 cfi_adjust_cfa_offset (-16)
375#endif
376 lds.l @r15+,pr ! Get register content back.
377 cfi_adjust_cfa_offset (-4)
378 mov.l @r15+,r3
379 cfi_adjust_cfa_offset (-4)
380 shal r3 ! Lode T flag.
381 lds.l @r15+,mach
382 cfi_adjust_cfa_offset (-4)
383 lds.l @r15+,macl
384 cfi_adjust_cfa_offset (-4)
385 mov.l @r15+,r2
386 cfi_adjust_cfa_offset (-4)
387 mov.l @r15+,r3
388 cfi_adjust_cfa_offset (-4)
389 mov.l @r15+,r4
390 cfi_adjust_cfa_offset (-4)
391 mov.l @r15+,r5
392 cfi_adjust_cfa_offset (-4)
393 mov.l @r15+,r6
394 cfi_adjust_cfa_offset (-4)
395 mov.l @r15+,r7
396 cfi_adjust_cfa_offset (-4)
397#ifdef HAVE_FPU
398 fmov.s @r15+,fr4
399 cfi_adjust_cfa_offset (-4)
400 fmov.s @r15+,fr5
401 cfi_adjust_cfa_offset (-4)
402 fmov.s @r15+,fr6
403 cfi_adjust_cfa_offset (-4)
404 fmov.s @r15+,fr7
405 cfi_adjust_cfa_offset (-4)
406 fmov.s @r15+,fr8
407 cfi_adjust_cfa_offset (-4)
408 fmov.s @r15+,fr9
409 cfi_adjust_cfa_offset (-4)
410 fmov.s @r15+,fr10
411 cfi_adjust_cfa_offset (-4)
412 fmov.s @r15+,fr11
413 cfi_adjust_cfa_offset (-4)
414 lds.l @r15+,fpscr
415 cfi_adjust_cfa_offset (-4)
416#else
417 add #36,r15
418 cfi_adjust_cfa_offset (-36)
419#endif
420 rts ! Jump to function address.
421 mov.l @r15+,r12
422 cfi_adjust_cfa_offset (-4)
423 cfi_endproc
424 .align 2
425#ifdef SHARED
4267: .long _GLOBAL_OFFSET_TABLE_
4278: .long _dl_call_pltexit@GOTOFF
428#else
4298: .long _dl_call_pltexit
430#endif
431 .size _dl_runtime_profile, .-_dl_runtime_profile
This page took 0.161627 seconds and 5 git commands to generate.