add sh fdpic subarch variants
[musl] / arch / sh / reloc.h
index 77da650..73baceb 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