]> granicus.if.org Git - musl/commitdiff
add sh fdpic subarch variants
authorRich Felker <dalias@aerifal.cx>
Sat, 12 Sep 2015 03:22:19 +0000 (03:22 +0000)
committerRich Felker <dalias@aerifal.cx>
Sat, 12 Sep 2015 03:23:49 +0000 (03:23 +0000)
with this commit it should be possible to produce a working
static-linked fdpic libc and application binaries for sh.

the changes in reloc.h are largely unused at this point since dynamic
linking is not supported, but the CRTJMP macro is used one place
outside of dynamic linking, in __unmapself.

arch/sh/reloc.h
configure

index 77da65080ed78f5dcfd74e5379805db96ce673c4..73bacebbc056406f59d77bd0b01be00713c16597 100644 (file)
 #define FP_SUFFIX "-nofpu"
 #endif
 
-#define LDSO_ARCH "sh" ENDIAN_SUFFIX FP_SUFFIX
+#if __SH_FDPIC__
+#define ABI_SUFFIX "-fdpic"
+#else
+#define ABI_SUFFIX ""
+#endif
+
+#define LDSO_ARCH "sh" ENDIAN_SUFFIX FP_SUFFIX ABI_SUFFIX
 
 #define TPOFF_K 8
 
 #define REL_DTPOFF      R_SH_TLS_DTPOFF32
 #define REL_TPOFF       R_SH_TLS_TPOFF32
 
+#if __SH_FDPIC__
+#define REL_FUNCDESC    R_SH_FUNCDESC
+#define REL_FUNCDESC_VAL R_SH_FUNCDESC_VALUE
+#undef  REL_RELATIVE
+#define CRTJMP(pc,sp) __asm__ __volatile__( \
+       "mov.l @%0+,r0 ; mov.l @%0,r12 ; jmp @r0 ; mov %1,r15" \
+       : : "r"(pc), "r"(sp) : "r0", "memory" )
+#else
 #define CRTJMP(pc,sp) __asm__ __volatile__( \
        "jmp @%0 ; mov %1,r15" : : "r"(pc), "r"(sp) : "memory" )
+#endif
index 70b77fb8bcd7d463dda8f2a0f0fa3ed240e63f3c..c277764a05e2655760f7c51ce26faff0e9bc634a 100755 (executable)
--- a/configure
+++ b/configure
@@ -558,6 +558,10 @@ fi
 else
 SUBARCH=${SUBARCH}-nofpu
 fi
+if trycppif __SH_FDPIC__ "$t" ; then
+SUBARCH=${SUBARCH}-fdpic
+shared=no
+fi
 fi
 
 test "$SUBARCH" \