diff options
author | Steve Ellcey <sellcey@imgtec.com> | 2015-12-23 08:38:41 -0800 |
---|---|---|
committer | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2015-12-23 21:03:00 +0100 |
commit | cc82a850a0ebfbacb7fb62ea2c5b7dd6aebb005d (patch) | |
tree | 9a5f0309c1f20a4c7ba85e9dc57f7b9d7e6c2e2f /ldso | |
parent | 2636b17616a19d628c3dbc373ebae67ef6e2b1f6 (diff) |
Replace bltzal with lapc for MIPS R6 builds.
The R6 version of MIPS does not support the bltzal instruction. This
patch changes dl-startup.h and dl-sysdep.h to use lapc on R6 instead.
lapc is a new R6 insruction so older systems need to continue to use
bltzal in order to load register $31.
Signed-off-by: Steve Ellcey <sellcey@imgtec.com>
Diffstat (limited to 'ldso')
-rw-r--r-- | ldso/ldso/mips/dl-startup.h | 5 | ||||
-rw-r--r-- | ldso/ldso/mips/dl-sysdep.h | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/ldso/ldso/mips/dl-startup.h b/ldso/ldso/mips/dl-startup.h index 4d9918dc4..0cab7be32 100644 --- a/ldso/ldso/mips/dl-startup.h +++ b/ldso/ldso/mips/dl-startup.h @@ -37,6 +37,7 @@ __asm__("" #if _MIPS_SIM == _MIPS_SIM_ABI32 " subu $29, 16\n" #endif +# if !defined __mips_isa_rev || __mips_isa_rev < 6 #if _MIPS_SIM == _MIPS_SIM_ABI64 " dla $8, .coff\n" #else /* O32 || N32 */ @@ -44,6 +45,10 @@ __asm__("" #endif /* O32 || N32 */ " bltzal $8, .coff\n" ".coff:\n" +# else + ".coff:\n" + " lapc $31, .coff\n" +# endif #if _MIPS_SIM == _MIPS_SIM_ABI64 " dsubu $8, $31, $8\n" " dla $25, _dl_start\n" diff --git a/ldso/ldso/mips/dl-sysdep.h b/ldso/ldso/mips/dl-sysdep.h index 6041245d0..b2caa7fa0 100644 --- a/ldso/ldso/mips/dl-sysdep.h +++ b/ldso/ldso/mips/dl-sysdep.h @@ -225,10 +225,15 @@ elf_machine_load_address (void) { ElfW(Addr) addr; __asm__ (" .set noreorder\n" +# if !defined __mips_isa_rev || __mips_isa_rev < 6 " " STRINGXP (PTR_LA) " %0, 0f\n" " bltzal $0, 0f\n" " nop\n" "0: " STRINGXP (PTR_SUBU) " %0, $31, %0\n" +#else + "0: lapc $31, 0\n" + " " STRINGXP (PTR_SUBU) " %0, $31, %0\n" +#endif " .set reorder\n" : "=r" (addr) : /* No inputs */ |