diff options
Diffstat (limited to 'sysdeps/sh/dl-trampoline.S')
-rw-r--r-- | sysdeps/sh/dl-trampoline.S | 431 |
1 files changed, 0 insertions, 431 deletions
diff --git a/sysdeps/sh/dl-trampoline.S b/sysdeps/sh/dl-trampoline.S deleted file mode 100644 index 79493d50b9..0000000000 --- a/sysdeps/sh/dl-trampoline.S +++ /dev/null @@ -1,431 +0,0 @@ -/* PLT trampolines. SH version. - Copyright (C) 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <sysdep.h> - - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function - cfi_startproc - .align 5 -_dl_runtime_resolve: - mov.l r2,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r3,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r4,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r5,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r6,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r7,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r12,@-r15 - cfi_adjust_cfa_offset (4) - sts.l macl,@-r15 - cfi_adjust_cfa_offset (4) - sts.l mach,@-r15 - cfi_adjust_cfa_offset (4) - movt r3 ! Save T flag. - mov.l r3,@-r15 - cfi_adjust_cfa_offset (4) -#ifdef HAVE_FPU - sts.l fpscr,@-r15 - cfi_adjust_cfa_offset (4) - mov #8,r3 - swap.w r3,r3 - lds r3,fpscr - fmov.s fr11,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr10,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr9,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr8,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr7,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr6,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr5,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr4,@-r15 - cfi_adjust_cfa_offset (4) -#endif - sts.l pr,@-r15 - cfi_adjust_cfa_offset (4) - tst r0,r0 - bt 1f - mov r0,r2 -1: - mov r0,r4 ! PLT type - mov r2,r5 ! link map address -#ifdef SHARED - mov.l 2f,r2 - mova 2f,r0 - add r0,r2 ! Get GOT address in r2 - mov.l 3f,r0 - add r2,r0 -#else - mov.l 3f,r0 -#endif - jsr @r0 ! Call resolver. - mov r1,r6 ! reloc offset - lds.l @r15+,pr ! Get register content back. - cfi_adjust_cfa_offset (-4) -#ifdef HAVE_FPU - fmov.s @r15+,fr4 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr5 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr6 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr7 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr8 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr9 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr10 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr11 - cfi_adjust_cfa_offset (-4) - lds.l @r15+,fpscr - cfi_adjust_cfa_offset (-4) -#endif - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - shal r3 ! Lode T flag. - lds.l @r15+,mach - cfi_adjust_cfa_offset (-4) - lds.l @r15+,macl - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r12 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r7 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r6 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r5 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r4 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - jmp @r0 ! Jump to function address. - mov.l @r15+,r2 - cfi_adjust_cfa_offset (-4) - .align 2 -#ifdef SHARED -2: .long _GLOBAL_OFFSET_TABLE_ -3: .long _dl_fixup@GOTOFF -#else -3: .long _dl_fixup -#endif - cfi_endproc - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - - .globl _dl_runtime_profile - .type _dl_runtime_profile,@function - cfi_startproc - .align 5 -_dl_runtime_profile: - mov.l r12,@-r15 - cfi_adjust_cfa_offset (4) -#ifdef HAVE_FPU - sts.l fpscr,@-r15 - cfi_adjust_cfa_offset (4) - mov #8,r12 - swap.w r12,r12 - lds r12,fpscr - fmov.s fr11,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr10,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr9,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr8,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr7,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr6,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr5,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr4,@-r15 - cfi_adjust_cfa_offset (4) -#else - add #-36,r15 - cfi_adjust_cfa_offset (36) -#endif - mov.l r7,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r6,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r5,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r4,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r3,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r2,@-r15 - cfi_adjust_cfa_offset (4) - sts.l macl,@-r15 - cfi_adjust_cfa_offset (4) - sts.l mach,@-r15 - cfi_adjust_cfa_offset (4) - movt r3 ! Save T flag. - mov.l r3,@-r15 - cfi_adjust_cfa_offset (4) - sts.l pr,@-r15 - cfi_adjust_cfa_offset (4) - tst r0,r0 - bt 1f - mov r0,r2 -1: - mov r0,r4 ! PLT type - mov r2,r5 ! link map address - sts pr,r7 ! return address - add #-24,r15 - cfi_adjust_cfa_offset (24) - mov #40,r0 - add r15,r0 - mov.l r0,@r15 ! Address of the register structure - mov #-1,r0 - mov.l r0,@(8,r15) - mov #8,r0 - add r15,r0 - mov.l r0,@(4,r15) - mov.l r5,@(12,r15) - mov.l r1,@(16,r15) -#ifdef SHARED - mov.l 2f,r12 - mova 2f,r0 - add r0,r12 ! Get GOT address in r12 - mov.l 3f,r0 - add r12,r0 -#else - mov.l 3f,r0 -#endif - jsr @r0 ! Call resolver. - mov r1,r6 ! reloc offset - mov.l @(8,r15),r1 - cmp/pz r1 - bt 4f - add #24,r15 - cfi_adjust_cfa_offset (-24) - lds.l @r15+,pr ! Get register content back. - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - shal r3 ! Lode T flag. - lds.l @r15+,mach - cfi_adjust_cfa_offset (-4) - lds.l @r15+,macl - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r2 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r4 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r5 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r6 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r7 - cfi_adjust_cfa_offset (-4) -#ifdef HAVE_FPU - fmov.s @r15+,fr4 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr5 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr6 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr7 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr8 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr9 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr10 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr11 - cfi_adjust_cfa_offset (-4) - lds.l @r15+,fpscr - cfi_adjust_cfa_offset (-4) -#else - add #36,r15 - cfi_adjust_cfa_offset (-36) -#endif - jmp @r0 ! Jump to function address. - mov.l @r15+,r12 - cfi_adjust_cfa_offset (-4) - .align 2 -#ifdef SHARED -2: .long _GLOBAL_OFFSET_TABLE_ -3: .long _dl_profile_fixup@GOTOFF -#else -3: .long _dl_profile_fixup -#endif - - cfi_adjust_cfa_offset (104) -4: - mov #104,r3 - add r15,r3 ! Original stack - mov.l r8,@(20,r15) - cfi_rel_offset (r8, 20) - mov r15,r8 - sub r1,r15 - shlr2 r15 - shll2 r15 - mov r15,r4 - shlr2 r1 - tst r1,r1 -5: - bt/s 6f - dt r1 - mov.l @r3+,r2 - mov.l r2,@r4 - bra 5b - add #4,r4 -6: - mov.l @r8,r12 - mov.l @r12+,r2 - mov.l @r12+,r3 - mov.l @r12+,r4 - mov.l @r12+,r5 - mov.l @r12+,r6 - mov.l @r12+,r7 -#ifdef HAVE_FPU - fmov.s @r12+,fr4 - fmov.s @r12+,fr5 - fmov.s @r12+,fr6 - fmov.s @r12+,fr7 - fmov.s @r12+,fr8 - fmov.s @r12+,fr9 - fmov.s @r12+,fr10 - fmov.s @r12+,fr11 - lds.l @r12+,fpscr -#else - add #36,r2 -#endif - jsr @r0 ! Call function. - nop - mov r8,r15 - mov.l @(12,r15),r4 ! link map address - mov.l @(16,r15),r5 ! reloc offset - mov.l @r15,r6 ! input registers -#ifdef HAVE_FPU - mov #16,r8 - add r15,r8 - fmov.s fr1,@-r8 - fmov.s fr0,@-r8 -#else - mov #8,r8 - add r15,r8 -#endif - mov.l r1,@-r8 - mov.l r0,@-r8 - mov.l @(20,r15),r8 - cfi_restore (r8) -#ifdef SHARED - mov.l 7f,r12 - mova 7f,r0 - add r0,r12 ! Get GOT address in r12 - mov.l 8f,r0 - add r12,r0 -#else - mov.l 8f,r0 -#endif - jsr @r0 - mov r15,r7 ! output registers - mov.l @r15+,r0 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r1 - cfi_adjust_cfa_offset (-4) -#ifdef HAVE_FPU - fmov.s @r15+,fr0 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr1 - cfi_adjust_cfa_offset (-4) - add #8,r15 - cfi_adjust_cfa_offset (-8) -#else - add #16,r15 - cfi_adjust_cfa_offset (-16) -#endif - lds.l @r15+,pr ! Get register content back. - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - shal r3 ! Lode T flag. - lds.l @r15+,mach - cfi_adjust_cfa_offset (-4) - lds.l @r15+,macl - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r2 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r4 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r5 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r6 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r7 - cfi_adjust_cfa_offset (-4) -#ifdef HAVE_FPU - fmov.s @r15+,fr4 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr5 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr6 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr7 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr8 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr9 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr10 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr11 - cfi_adjust_cfa_offset (-4) - lds.l @r15+,fpscr - cfi_adjust_cfa_offset (-4) -#else - add #36,r15 - cfi_adjust_cfa_offset (-36) -#endif - rts ! Jump to function address. - mov.l @r15+,r12 - cfi_adjust_cfa_offset (-4) - cfi_endproc - .align 2 -#ifdef SHARED -7: .long _GLOBAL_OFFSET_TABLE_ -8: .long _dl_call_pltexit@GOTOFF -#else -8: .long _dl_call_pltexit -#endif - .size _dl_runtime_profile, .-_dl_runtime_profile |