This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [Patch, MIPS] Modify dl-machine.h for mips32r6/mips64r6


On Fri, 2014-12-19 at 13:54 -0800, Matthew Fortune wrote:

> I never got to reviewing this internally.  We should switch this to using
> ADDIUPC.
> 
> The goal of this code I believe is to determine the relative offset from the
> static and dynamic locations of ld.so.
> 
> 	" STRINGXP (PTR_LA) " %0, 0f\n"
> 0: addiupc <reg>, 0
> " STRINGXP (PTR_SUBU) " %0, <reg>, %0\n"
> 
> We should also do something similar with the other case.
> 
> Thanks,
> Matthew

How does this look Matthew?  There were no regressions in testing.  I
have also fixed the preprocessor indentation issues that Joseph pointed
out and I added an include of <sysdep.h> so that __mips_isa_rev is
always defined.

Steve Ellcey
sellcey@imgtec.com



2014-12-23  Steve Ellcey  <sellcey@imgtec.com>

	* sysdeps/mips/dl-machine.h (elf_machine_load_address): Replace
	bltzal with addiupc.
	(RTLD_START): Ditto.


diff --git a/sysdeps/mips/dl-machine.h b/sysdeps/mips/dl-machine.h
index 5000d2a..c69fdd8 100644
--- a/sysdeps/mips/dl-machine.h
+++ b/sysdeps/mips/dl-machine.h
@@ -30,6 +30,7 @@
 #endif
 
 #include <sgidefs.h>
+#include <sysdep.h>
 #include <sys/asm.h>
 #include <dl-tls.h>
 
@@ -138,9 +139,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 */
@@ -241,6 +247,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) "\
@@ -255,9 +268,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\



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]