summaryrefslogtreecommitdiff
path: root/sysdeps/alpha/dl-trampoline.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/alpha/dl-trampoline.S')
-rw-r--r--sysdeps/alpha/dl-trampoline.S541
1 files changed, 0 insertions, 541 deletions
diff --git a/sysdeps/alpha/dl-trampoline.S b/sysdeps/alpha/dl-trampoline.S
deleted file mode 100644
index c52efbb3bc..0000000000
--- a/sysdeps/alpha/dl-trampoline.S
+++ /dev/null
@@ -1,541 +0,0 @@
-/* PLT trampolines. Alpha 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>
-
- .set noat
-
-.macro savei regno, offset
- stq $\regno, \offset($30)
- cfi_rel_offset(\regno, \offset)
-.endm
-
-.macro savef regno, offset
- stt $f\regno, \offset($30)
- cfi_rel_offset(\regno+32, \offset)
-.endm
-
- .align 4
- .globl _dl_runtime_resolve_new
- .ent _dl_runtime_resolve_new
-
-#undef FRAMESIZE
-#define FRAMESIZE 14*8
-
-_dl_runtime_resolve_new:
- .frame $30, FRAMESIZE, $26, 0
- .mask 0x4000000, 0
-
- ldah $29, 0($27) !gpdisp!1
- lda $30, -FRAMESIZE($30)
- stq $26, 0*8($30)
- stq $16, 2*8($30)
-
- stq $17, 3*8($30)
- lda $29, 0($29) !gpdisp!1
- stq $18, 4*8($30)
- mov $28, $16 /* link_map from .got.plt */
-
- stq $19, 5*8($30)
- mov $25, $17 /* offset of reloc entry */
- stq $20, 6*8($30)
- mov $26, $18 /* return address */
-
- stq $21, 7*8($30)
- stt $f16, 8*8($30)
- stt $f17, 9*8($30)
- stt $f18, 10*8($30)
-
- stt $f19, 11*8($30)
- stt $f20, 12*8($30)
- stt $f21, 13*8($30)
- .prologue 2
-
- bsr $26, _dl_fixup !samegp
- mov $0, $27
-
- ldq $26, 0*8($30)
- ldq $16, 2*8($30)
- ldq $17, 3*8($30)
- ldq $18, 4*8($30)
- ldq $19, 5*8($30)
- ldq $20, 6*8($30)
- ldq $21, 7*8($30)
- ldt $f16, 8*8($30)
- ldt $f17, 9*8($30)
- ldt $f18, 10*8($30)
- ldt $f19, 11*8($30)
- ldt $f20, 12*8($30)
- ldt $f21, 13*8($30)
- lda $30, FRAMESIZE($30)
- jmp $31, ($27), 0
- .end _dl_runtime_resolve_new
-
- .globl _dl_runtime_profile_new
- .type _dl_runtime_profile_new, @function
-
-#undef FRAMESIZE
-#define FRAMESIZE 20*8
-
- /* We save the registers in a different order than desired by
- .mask/.fmask, so we have to use explicit cfi directives. */
- cfi_startproc
-
-_dl_runtime_profile_new:
- ldah $29, 0($27) !gpdisp!2
- lda $30, -FRAMESIZE($30)
- savei 26, 0*8
- stq $16, 2*8($30)
-
- stq $17, 3*8($30)
- lda $29, 0($29) !gpdisp!2
- stq $18, 4*8($30)
- lda $1, FRAMESIZE($30) /* incoming sp value */
-
- stq $1, 1*8($30)
- stq $19, 5*8($30)
- stq $20, 6*8($30)
- mov $28, $16 /* link_map from .got.plt */
-
- stq $21, 7*8($30)
- mov $25, $17 /* offset of reloc entry */
- stt $f16, 8*8($30)
- mov $26, $18 /* return address */
-
- stt $f17, 9*8($30)
- mov $30, $19 /* La_alpha_regs address */
- stt $f18, 10*8($30)
- lda $20, 14*8($30) /* framesize address */
-
- stt $f19, 11*8($30)
- stt $f20, 12*8($30)
- stt $f21, 13*8($30)
- stq $28, 16*8($30)
- stq $25, 17*8($30)
-
- bsr $26, _dl_profile_fixup !samegp
- mov $0, $27
-
- /* Discover if we're wrapping this call. */
- ldq $18, 14*8($30)
- bge $18, 1f
-
- ldq $26, 0*8($30)
- ldq $16, 2*8($30)
- ldq $17, 3*8($30)
- ldq $18, 4*8($30)
- ldq $19, 5*8($30)
- ldq $20, 6*8($30)
- ldq $21, 7*8($30)
- ldt $f16, 8*8($30)
- ldt $f17, 9*8($30)
- ldt $f18, 10*8($30)
- ldt $f19, 11*8($30)
- ldt $f20, 12*8($30)
- ldt $f21, 13*8($30)
- lda $30, FRAMESIZE($30)
- jmp $31, ($27), 0
-
-1:
- /* Create a frame pointer and allocate a new argument frame. */
- savei 15, 15*8
- mov $30, $15
- cfi_def_cfa_register (15)
- addq $18, 15, $18
- bic $18, 15, $18
- subq $30, $18, $30
-
- /* Save the call destination around memcpy. */
- stq $0, 14*8($30)
-
- /* Copy the stack arguments into place. */
- lda $16, 0($30)
- lda $17, FRAMESIZE($15)
- jsr $26, memcpy
- ldgp $29, 0($26)
-
- /* Reload the argument registers. */
- ldq $27, 14*8($30)
- ldq $16, 2*8($15)
- ldq $17, 3*8($15)
- ldq $18, 4*8($15)
- ldq $19, 5*8($15)
- ldq $20, 6*8($15)
- ldq $21, 7*8($15)
- ldt $f16, 8*8($15)
- ldt $f17, 9*8($15)
- ldt $f18, 10*8($15)
- ldt $f19, 11*8($15)
- ldt $f20, 12*8($15)
- ldt $f21, 13*8($15)
-
- jsr $26, ($27), 0
- ldgp $29, 0($26)
-
- /* Set up for call to _dl_call_pltexit. */
- ldq $16, 16*8($15)
- ldq $17, 17*8($15)
- stq $0, 16*8($15)
- lda $18, 0($15)
- stq $1, 17*8($15)
- lda $19, 16*8($15)
- stt $f0, 18*8($15)
- stt $f1, 19*8($15)
- bsr $26, _dl_call_pltexit !samegp
-
- mov $15, $30
- cfi_def_cfa_register (30)
- ldq $26, 0($30)
- ldq $15, 15*8($30)
- lda $30, FRAMESIZE($30)
- ret
-
- cfi_endproc
- .size _dl_runtime_profile_new, .-_dl_runtime_profile_new
-
- .align 4
- .globl _dl_runtime_resolve_old
- .ent _dl_runtime_resolve_old
-
-#undef FRAMESIZE
-#define FRAMESIZE 44*8
-
-_dl_runtime_resolve_old:
- lda $30, -FRAMESIZE($30)
- .frame $30, FRAMESIZE, $26
- /* Preserve all registers that C normally doesn't. */
- stq $26, 0*8($30)
- stq $0, 1*8($30)
- stq $1, 2*8($30)
- stq $2, 3*8($30)
- stq $3, 4*8($30)
- stq $4, 5*8($30)
- stq $5, 6*8($30)
- stq $6, 7*8($30)
- stq $7, 8*8($30)
- stq $8, 9*8($30)
- stq $16, 10*8($30)
- stq $17, 11*8($30)
- stq $18, 12*8($30)
- stq $19, 13*8($30)
- stq $20, 14*8($30)
- stq $21, 15*8($30)
- stq $22, 16*8($30)
- stq $23, 17*8($30)
- stq $24, 18*8($30)
- stq $25, 19*8($30)
- stq $29, 20*8($30)
- stt $f0, 21*8($30)
- stt $f1, 22*8($30)
- stt $f10, 23*8($30)
- stt $f11, 24*8($30)
- stt $f12, 25*8($30)
- stt $f13, 26*8($30)
- stt $f14, 27*8($30)
- stt $f15, 28*8($30)
- stt $f16, 29*8($30)
- stt $f17, 30*8($30)
- stt $f18, 31*8($30)
- stt $f19, 32*8($30)
- stt $f20, 33*8($30)
- stt $f21, 34*8($30)
- stt $f22, 35*8($30)
- stt $f23, 36*8($30)
- stt $f24, 37*8($30)
- stt $f25, 38*8($30)
- stt $f26, 39*8($30)
- stt $f27, 40*8($30)
- stt $f28, 41*8($30)
- stt $f29, 42*8($30)
- stt $f30, 43*8($30)
- .mask 0x27ff01ff, -FRAMESIZE
- .fmask 0xfffffc03, -FRAMESIZE+21*8
- /* Set up our GP. */
- br $29, .+4
- ldgp $29, 0($29)
- .prologue 0
- /* Set up the arguments for _dl_fixup:
- $16 = link_map out of plt0
- $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24
- $18 = return address
- */
- subq $28, $27, $17
- ldq $16, 8($27)
- subq $17, 20, $17
- mov $26, $18
- addq $17, $17, $17
- bsr $26, _dl_fixup !samegp
-
- /* Move the destination address into position. */
- mov $0, $27
- /* Restore program registers. */
- ldq $26, 0*8($30)
- ldq $0, 1*8($30)
- ldq $1, 2*8($30)
- ldq $2, 3*8($30)
- ldq $3, 4*8($30)
- ldq $4, 5*8($30)
- ldq $5, 6*8($30)
- ldq $6, 7*8($30)
- ldq $7, 8*8($30)
- ldq $8, 9*8($30)
- ldq $16, 10*8($30)
- ldq $17, 11*8($30)
- ldq $18, 12*8($30)
- ldq $19, 13*8($30)
- ldq $20, 14*8($30)
- ldq $21, 15*8($30)
- ldq $22, 16*8($30)
- ldq $23, 17*8($30)
- ldq $24, 18*8($30)
- ldq $25, 19*8($30)
- ldq $29, 20*8($30)
- ldt $f0, 21*8($30)
- ldt $f1, 22*8($30)
- ldt $f10, 23*8($30)
- ldt $f11, 24*8($30)
- ldt $f12, 25*8($30)
- ldt $f13, 26*8($30)
- ldt $f14, 27*8($30)
- ldt $f15, 28*8($30)
- ldt $f16, 29*8($30)
- ldt $f17, 30*8($30)
- ldt $f18, 31*8($30)
- ldt $f19, 32*8($30)
- ldt $f20, 33*8($30)
- ldt $f21, 34*8($30)
- ldt $f22, 35*8($30)
- ldt $f23, 36*8($30)
- ldt $f24, 37*8($30)
- ldt $f25, 38*8($30)
- ldt $f26, 39*8($30)
- ldt $f27, 40*8($30)
- ldt $f28, 41*8($30)
- ldt $f29, 42*8($30)
- ldt $f30, 43*8($30)
- /* Flush the Icache after having modified the .plt code. */
- imb
- /* Clean up and turn control to the destination */
- lda $30, FRAMESIZE($30)
- jmp $31, ($27)
-
- .end _dl_runtime_resolve_old
-
- .globl _dl_runtime_profile_old
- .usepv _dl_runtime_profile_old, no
- .type _dl_runtime_profile_old, @function
-
- /* We save the registers in a different order than desired by
- .mask/.fmask, so we have to use explicit cfi directives. */
- cfi_startproc
-
-#undef FRAMESIZE
-#define FRAMESIZE 50*8
-
- .align 4
-_dl_runtime_profile_old:
- lda $30, -FRAMESIZE($30)
- cfi_adjust_cfa_offset (FRAMESIZE)
-
- /* Preserve all argument registers. This also constructs the
- La_alpha_regs structure. */
- savei 26, 0*8
- savei 16, 2*8
- savei 17, 3*8
- savei 18, 4*8
- savei 19, 5*8
- savei 20, 6*8
- savei 21, 7*8
- lda $16, FRAMESIZE($30)
- savef 16, 8*8
- savef 17, 9*8
- savef 18, 10*8
- savef 19, 11*8
- savef 20, 12*8
- savef 21, 13*8
- stq $16, 1*8($30)
-
- /* Preserve all registers that C normally doesn't. */
- savei 0, 14*8
- savei 1, 15*8
- savei 2, 16*8
- savei 3, 17*8
- savei 4, 18*8
- savei 5, 19*8
- savei 6, 20*8
- savei 7, 21*8
- savei 8, 22*8
- savei 22, 23*8
- savei 23, 24*8
- savei 24, 25*8
- savei 25, 26*8
- savei 29, 27*8
- savef 0, 28*8
- savef 1, 29*8
- savef 10, 30*8
- savef 11, 31*8
- savef 12, 32*8
- savef 13, 33*8
- savef 14, 34*8
- savef 15, 35*8
- savef 22, 36*8
- savef 23, 37*8
- savef 24, 38*8
- savef 25, 39*8
- savef 26, 40*8
- savef 27, 41*8
- savef 28, 42*8
- savef 29, 43*8
- savef 30, 44*8
-
- /* Set up our GP. */
- br $29, .+4
- ldgp $29, 0($29)
-
- /* Set up the arguments for _dl_profile_fixup:
- $16 = link_map out of plt0
- $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24
- $18 = return address
- $19 = La_alpha_regs address
- $20 = framesize address
- */
- subq $28, $27, $17
- ldq $16, 8($27)
- subq $17, 20, $17
- mov $26, $18
- addq $17, $17, $17
- lda $19, 0($30)
- lda $20, 45*8($30)
- stq $16, 48*8($30)
- stq $17, 49*8($30)
-
- bsr $26, _dl_profile_fixup !samegp
-
- /* Discover if we're wrapping this call. */
- ldq $18, 45*8($30)
- bge $18, 1f
-
- /* Move the destination address into position. */
- mov $0, $27
- /* Restore program registers. */
- ldq $26, 0*8($30)
- ldq $16, 2*8($30)
- ldq $17, 3*8($30)
- ldq $18, 4*8($30)
- ldq $19, 5*8($30)
- ldq $20, 6*8($30)
- ldq $21, 7*8($30)
- ldt $f16, 8*8($30)
- ldt $f17, 9*8($30)
- ldt $f18, 10*8($30)
- ldt $f19, 11*8($30)
- ldt $f20, 12*8($30)
- ldt $f21, 13*8($30)
- ldq $0, 14*8($30)
- ldq $1, 15*8($30)
- ldq $2, 16*8($30)
- ldq $3, 17*8($30)
- ldq $4, 18*8($30)
- ldq $5, 19*8($30)
- ldq $6, 20*8($30)
- ldq $7, 21*8($30)
- ldq $8, 22*8($30)
- ldq $22, 23*8($30)
- ldq $23, 24*8($30)
- ldq $24, 25*8($30)
- ldq $25, 26*8($30)
- ldq $29, 27*8($30)
- ldt $f0, 28*8($30)
- ldt $f1, 29*8($30)
- ldt $f10, 30*8($30)
- ldt $f11, 31*8($30)
- ldt $f12, 32*8($30)
- ldt $f13, 33*8($30)
- ldt $f14, 34*8($30)
- ldt $f15, 35*8($30)
- ldt $f22, 36*8($30)
- ldt $f23, 37*8($30)
- ldt $f24, 38*8($30)
- ldt $f25, 39*8($30)
- ldt $f26, 40*8($30)
- ldt $f27, 41*8($30)
- ldt $f28, 42*8($30)
- ldt $f29, 43*8($30)
- ldt $f30, 44*8($30)
-
- /* Clean up and turn control to the destination. */
- lda $30, FRAMESIZE($30)
- jmp $31, ($27)
-
-1:
- /* Create a frame pointer and allocate a new argument frame. */
- savei 15, 45*8
- mov $30, $15
- cfi_def_cfa_register (15)
- addq $18, 15, $18
- bic $18, 15, $18
- subq $30, $18, $30
-
- /* Save the call destination around memcpy. */
- stq $0, 46*8($30)
-
- /* Copy the stack arguments into place. */
- lda $16, 0($30)
- lda $17, FRAMESIZE($15)
- jsr $26, memcpy
- ldgp $29, 0($26)
-
- /* Reload the argument registers. */
- ldq $27, 46*8($30)
- ldq $16, 2*8($15)
- ldq $17, 3*8($15)
- ldq $18, 4*8($15)
- ldq $19, 5*8($15)
- ldq $20, 6*8($15)
- ldq $21, 7*8($15)
- ldt $f16, 8*8($15)
- ldt $f17, 9*8($15)
- ldt $f18, 10*8($15)
- ldt $f19, 11*8($15)
- ldt $f20, 12*8($15)
- ldt $f21, 13*8($15)
-
- jsr $26, ($27), 0
- ldgp $29, 0($26)
-
- /* Set up for call to _dl_call_pltexit. */
- ldq $16, 48*8($15)
- ldq $17, 49*8($15)
- stq $0, 46*8($15)
- lda $18, 0($15)
- stq $1, 47*8($15)
- lda $19, 46*8($15)
- stt $f0, 48*8($15)
- stt $f1, 49*8($15)
- bsr $26, _dl_call_pltexit !samegp
-
- mov $15, $30
- cfi_def_cfa_register (30)
- ldq $26, 0($30)
- ldq $15, 45*8($30)
- lda $30, FRAMESIZE($30)
- ret
-
- cfi_endproc
- .size _dl_runtime_profile_old, .-_dl_runtime_profile_old