diff --git a/ChangeLog.mips b/ChangeLog.mips index 5795926d35..6d47986f68 100644 --- a/ChangeLog.mips +++ b/ChangeLog.mips @@ -1,3 +1,9 @@ +2010-01-28 Joseph Myers + + * sysdeps/mips/dl-trampoline.c (_dl_runtime_resolve, + _dl_runtime_pltresolve): Calculate offset from start of function + to .cpload instead of hardcoding instruction size. + 2010-01-11 Joseph Myers * sysdeps/unix/sysv/linux/mips/bits/stat.h: Fix double-inclusion diff --git a/sysdeps/mips/dl-trampoline.c b/sysdeps/mips/dl-trampoline.c index ff58b0d5e2..2c9414035c 100644 --- a/sysdeps/mips/dl-trampoline.c +++ b/sysdeps/mips/dl-trampoline.c @@ -278,13 +278,13 @@ _dl_runtime_resolve:\n\ .frame $29, " STRINGXP(ELF_DL_FRAME_SIZE) ", $31\n\ .set noreorder\n\ # Save GP.\n\ - move $3, $28\n\ +1: move $3, $28\n\ # Save arguments and sp value in stack.\n\ " STRINGXP(PTR_SUBIU) " $29, " STRINGXP(ELF_DL_FRAME_SIZE) "\n\ # Modify t9 ($25) so as to point .cpload instruction.\n\ - " IFABIO32(STRINGXP(PTR_ADDIU) " $25, 12\n") "\ + " IFABIO32(STRINGXP(PTR_ADDIU) " $25, (2f-1b)\n") "\ # Compute GP.\n\ - " STRINGXP(SETUP_GP) "\n\ +2: " STRINGXP(SETUP_GP) "\n\ " STRINGXV(SETUP_GP64 (0, _dl_runtime_resolve)) "\n\ .set reorder\n\ # Save slot call pc.\n\ @@ -334,13 +334,13 @@ _dl_runtime_pltresolve:\n\ .frame $29, " STRINGXP(ELF_DL_PLT_FRAME_SIZE) ", $31\n\ .set noreorder\n\ # Save arguments and sp value in stack.\n\ - " STRINGXP(PTR_SUBIU) " $29, " STRINGXP(ELF_DL_PLT_FRAME_SIZE) "\n\ +1: " STRINGXP(PTR_SUBIU) " $29, " STRINGXP(ELF_DL_PLT_FRAME_SIZE) "\n\ " IFABIO32(STRINGXP(PTR_L) " $13, " STRINGXP(PTRSIZE) "($28)") "\n\ " IFNEWABI(STRINGXP(PTR_L) " $13, " STRINGXP(PTRSIZE) "($14)") "\n\ # Modify t9 ($25) so as to point .cpload instruction.\n\ - " IFABIO32(STRINGXP(PTR_ADDIU) " $25, 12\n") "\ + " IFABIO32(STRINGXP(PTR_ADDIU) " $25, (2f-1b)\n") "\ # Compute GP.\n\ - " STRINGXP(SETUP_GP) "\n\ +2: " STRINGXP(SETUP_GP) "\n\ " STRINGXV(SETUP_GP64 (0, _dl_runtime_pltresolve)) "\n\ .set reorder\n\ " IFABIO32(STRINGXP(CPRESTORE(32))) "\n\