Browse Source

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>
Steve Ellcey 8 years ago
parent
commit
cc82a850a0
2 changed files with 10 additions and 0 deletions
  1. 5 0
      ldso/ldso/mips/dl-startup.h
  2. 5 0
      ldso/ldso/mips/dl-sysdep.h

+ 5 - 0
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"

+ 5 - 0
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 */