mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-21 04:31:04 +08:00
(TRAMPOLINE_TEMPLATE): Save and restore all call-clobbered fp regs.
This commit is contained in:
parent
2bad373511
commit
4fb65d7fc7
@ -134,31 +134,55 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||
.globl " #tramp_name "
|
||||
.ent " #tramp_name "
|
||||
" #tramp_name ":
|
||||
lda $sp, -168($sp)
|
||||
.frame $sp, 168, $26
|
||||
lda $sp, -44*8($sp)
|
||||
.frame $sp, 44*8, $26
|
||||
/* Preserve all integer registers that C normally doesn't. */
|
||||
stq $26, 0($sp)
|
||||
stq $0, 8($sp)
|
||||
stq $1, 16($sp)
|
||||
stq $2, 24($sp)
|
||||
stq $3, 32($sp)
|
||||
stq $4, 40($sp)
|
||||
stq $5, 48($sp)
|
||||
stq $6, 56($sp)
|
||||
stq $7, 64($sp)
|
||||
stq $8, 72($sp)
|
||||
stq $16, 80($sp)
|
||||
stq $17, 88($sp)
|
||||
stq $18, 96($sp)
|
||||
stq $19, 104($sp)
|
||||
stq $20, 112($sp)
|
||||
stq $21, 120($sp)
|
||||
stq $22, 128($sp)
|
||||
stq $23, 136($sp)
|
||||
stq $24, 144($sp)
|
||||
stq $25, 152($sp)
|
||||
stq $29, 160($sp)
|
||||
.mask 0x27ff01ff, -168
|
||||
stq $26, 0*8($sp)
|
||||
stq $0, 1*8($sp)
|
||||
stq $1, 2*8($sp)
|
||||
stq $2, 3*8($sp)
|
||||
stq $3, 4*8($sp)
|
||||
stq $4, 5*8($sp)
|
||||
stq $5, 6*8($sp)
|
||||
stq $6, 7*8($sp)
|
||||
stq $7, 8*8($sp)
|
||||
stq $8, 9*8($sp)
|
||||
stq $16, 10*8($sp)
|
||||
stq $17, 11*8($sp)
|
||||
stq $18, 12*8($sp)
|
||||
stq $19, 13*8($sp)
|
||||
stq $20, 14*8($sp)
|
||||
stq $21, 15*8($sp)
|
||||
stq $22, 16*8($sp)
|
||||
stq $23, 17*8($sp)
|
||||
stq $24, 18*8($sp)
|
||||
stq $25, 19*8($sp)
|
||||
stq $29, 20*8($sp)
|
||||
stt $f0, 21*8($sp)
|
||||
stt $f1, 22*8($sp)
|
||||
stt $f10, 23*8($sp)
|
||||
stt $f11, 24*8($sp)
|
||||
stt $f12, 25*8($sp)
|
||||
stt $f13, 26*8($sp)
|
||||
stt $f14, 27*8($sp)
|
||||
stt $f15, 28*8($sp)
|
||||
stt $f16, 29*8($sp)
|
||||
stt $f17, 30*8($sp)
|
||||
stt $f18, 31*8($sp)
|
||||
stt $f19, 32*8($sp)
|
||||
stt $f20, 33*8($sp)
|
||||
stt $f21, 34*8($sp)
|
||||
stt $f22, 35*8($sp)
|
||||
stt $f23, 36*8($sp)
|
||||
stt $f24, 37*8($sp)
|
||||
stt $f25, 38*8($sp)
|
||||
stt $f26, 39*8($sp)
|
||||
stt $f27, 40*8($sp)
|
||||
stt $f28, 41*8($sp)
|
||||
stt $f29, 42*8($sp)
|
||||
stt $f30, 43*8($sp)
|
||||
.mask 0x27ff01ff, -44*8
|
||||
.fmask 0xfffffc03, -(44-21)*8
|
||||
/* Set up our $gp */
|
||||
br $gp, .+4
|
||||
ldgp $gp, 0($gp)
|
||||
@ -177,31 +201,54 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||
/* Move the destination address into position. */
|
||||
mov $0, $27
|
||||
/* Restore program registers. */
|
||||
ldq $26, 0($sp)
|
||||
ldq $0, 8($sp)
|
||||
ldq $1, 16($sp)
|
||||
ldq $2, 24($sp)
|
||||
ldq $3, 32($sp)
|
||||
ldq $4, 40($sp)
|
||||
ldq $5, 48($sp)
|
||||
ldq $6, 56($sp)
|
||||
ldq $7, 64($sp)
|
||||
ldq $8, 72($sp)
|
||||
ldq $16, 80($sp)
|
||||
ldq $17, 88($sp)
|
||||
ldq $18, 96($sp)
|
||||
ldq $19, 104($sp)
|
||||
ldq $20, 112($sp)
|
||||
ldq $21, 120($sp)
|
||||
ldq $22, 128($sp)
|
||||
ldq $23, 136($sp)
|
||||
ldq $24, 144($sp)
|
||||
ldq $25, 152($sp)
|
||||
ldq $29, 160($sp)
|
||||
ldq $26, 0*8($sp)
|
||||
ldq $0, 1*8($sp)
|
||||
ldq $1, 2*8($sp)
|
||||
ldq $2, 3*8($sp)
|
||||
ldq $3, 4*8($sp)
|
||||
ldq $4, 5*8($sp)
|
||||
ldq $5, 6*8($sp)
|
||||
ldq $6, 7*8($sp)
|
||||
ldq $7, 8*8($sp)
|
||||
ldq $8, 9*8($sp)
|
||||
ldq $16, 10*8($sp)
|
||||
ldq $17, 11*8($sp)
|
||||
ldq $18, 12*8($sp)
|
||||
ldq $19, 13*8($sp)
|
||||
ldq $20, 14*8($sp)
|
||||
ldq $21, 15*8($sp)
|
||||
ldq $22, 16*8($sp)
|
||||
ldq $23, 17*8($sp)
|
||||
ldq $24, 18*8($sp)
|
||||
ldq $25, 19*8($sp)
|
||||
ldq $29, 20*8($sp)
|
||||
ldt $f0, 21*8($sp)
|
||||
ldt $f1, 22*8($sp)
|
||||
ldt $f10, 23*8($sp)
|
||||
ldt $f11, 24*8($sp)
|
||||
ldt $f12, 25*8($sp)
|
||||
ldt $f13, 26*8($sp)
|
||||
ldt $f14, 27*8($sp)
|
||||
ldt $f15, 28*8($sp)
|
||||
ldt $f16, 29*8($sp)
|
||||
ldt $f17, 30*8($sp)
|
||||
ldt $f18, 31*8($sp)
|
||||
ldt $f19, 32*8($sp)
|
||||
ldt $f20, 33*8($sp)
|
||||
ldt $f21, 34*8($sp)
|
||||
ldt $f22, 35*8($sp)
|
||||
ldt $f23, 36*8($sp)
|
||||
ldt $f24, 37*8($sp)
|
||||
ldt $f25, 38*8($sp)
|
||||
ldt $f26, 39*8($sp)
|
||||
ldt $f27, 40*8($sp)
|
||||
ldt $f28, 41*8($sp)
|
||||
ldt $f29, 42*8($sp)
|
||||
ldt $f30, 43*8($sp)
|
||||
/* Flush the Icache after having modified the .plt code. */
|
||||
" #IMB "
|
||||
/* Clean up and turn control to the destination */
|
||||
lda $sp, 168($sp)
|
||||
lda $sp, 44*8($sp)
|
||||
jmp $31, ($27)
|
||||
.end " #tramp_name)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user