2015-01-05 Steve Ellcey <sellcey@imgtec.com>
authorSteve Ellcey <sellcey@mips.com>
Mon, 5 Jan 2015 17:39:33 +0000 (09:39 -0800)
committerSteve Ellcey <sellcey@mips.com>
Mon, 5 Jan 2015 17:39:33 +0000 (09:39 -0800)
* sysdeps/mips/dl-machine.h (elf_machine_load_address): Replace
bltzal with addiupc.
(RTLD_START): Ditto.

ChangeLog
sysdeps/mips/dl-machine.h

index 8482b88..4aa2e4b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-05  Steve Ellcey  <sellcey@imgtec.com>
+
+       * sysdeps/mips/dl-machine.h (elf_machine_load_address): Replace
+       bltzal with addiupc.
+       (RTLD_START): Ditto.
+
 2015-01-05  Chris Metcalf  <cmetcalf@ezchip.com>
 
         * sysdeps/unix/sysv/linux/tile/bits/libc-vdso.h: Fix return type
index a8df58e..d63238a 100644 (file)
@@ -30,6 +30,7 @@
 #endif
 
 #include <sgidefs.h>
+#include <sysdep.h>
 #include <sys/asm.h>
 #include <dl-tls.h>
 
@@ -143,9 +144,14 @@ elf_machine_load_address (void)
 #ifndef __mips16
   asm ("       .set noreorder\n"
        "       " STRINGXP (PTR_LA) " %0, 0f\n"
+# if __mips_isa_rev < 6
        "       bltzal $0, 0f\n"
        "       nop\n"
        "0:     " STRINGXP (PTR_SUBU) " %0, $31, %0\n"
+# else
+       "0:     addiupc $31, 0\n"
+       "       " STRINGXP (PTR_SUBU) " %0, $31, %0\n"
+# endif
        "       .set reorder\n"
        :       "=r" (addr)
        :       /* No inputs */
@@ -246,6 +252,13 @@ do {                                                                       \
       and not just plain _start.  */
 
 #ifndef __mips16
+# if __mips_isa_rev < 6
+#  define LCOFF STRINGXP(.Lcof2)
+#  define LOAD_31 STRINGXP(bltzal $8) "," STRINGXP(.Lcof2)
+# else
+#  define LCOFF STRINGXP(.Lcof1)
+#  define LOAD_31 "addiupc $31, 0"
+# endif
 # define RTLD_START asm (\
        ".text\n\
        " _RTLD_PROLOGUE(ENTRY_POINT) "\
@@ -260,9 +273,9 @@ do {                                                                        \
        move $4, $29\n\
        " STRINGXP(PTR_SUBIU) " $29, 16\n\
        \n\
-       " STRINGXP(PTR_LA) " $8, .Lcoff\n\
-       bltzal $8, .Lcoff\n\
-.Lcoff:        " STRINGXP(PTR_SUBU) " $8, $31, $8\n\
+       " STRINGXP(PTR_LA) " $8, " LCOFF "\n\
+.Lcof1:        " LOAD_31 "\n\
+.Lcof2:        " STRINGXP(PTR_SUBU) " $8, $31, $8\n\
        \n\
        " STRINGXP(PTR_LA) " $25, _dl_start\n\
        " STRINGXP(PTR_ADDU) " $25, $8\n\