Index: fusl/arch/sh/crt_arch.h |
diff --git a/fusl/arch/sh/crt_arch.h b/fusl/arch/sh/crt_arch.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f341c8fbc096819d69333590bad906653df32ff2 |
--- /dev/null |
+++ b/fusl/arch/sh/crt_arch.h |
@@ -0,0 +1,78 @@ |
+#ifdef __SH_FDPIC__ |
+ |
+__asm__( |
+".text \n" |
+".global " START " \n" |
+START ": \n" |
+" tst r8, r8 \n" |
+" bf 1f \n" |
+" mov #68, r3 \n" |
+" add r3, r3 \n" |
+" mov #8, r4 \n" |
+" swap.w r4, r4 \n" |
+" trapa #31 \n" |
+" nop \n" |
+" nop \n" |
+" nop \n" |
+" nop \n" |
+"1: nop \n" |
+#ifndef SHARED |
+" mov r8, r4 \n" |
+" mova 1f, r0 \n" |
+" mov.l 1f, r5 \n" |
+" mov.l 1f+4, r6 \n" |
+" add r0, r5 \n" |
+" mov.l 4f, r1 \n" |
+"5: bsrf r1 \n" |
+" add r0, r6 \n" |
+" mov r0, r12 \n" |
+#endif |
+" mov r10, r5 \n" |
+" mov r15, r4 \n" |
+" mov.l r9, @-r15 \n" |
+" mov.l r8, @-r15 \n" |
+" mov #-16, r0 \n" |
+" mov.l 2f, r1 \n" |
+"3: bsrf r1 \n" |
+" and r0, r15 \n" |
+".align 2 \n" |
+"1: .long __ROFIXUP_LIST__@PCREL \n" |
+" .long __ROFIXUP_END__@PCREL + 4 \n" |
+"2: .long " START "_c@PCREL - (3b+4-.) \n" |
+#ifndef SHARED |
+"4: .long __fdpic_fixup@PCREL - (5b+4-.) \n" |
+#endif |
+); |
+ |
+#ifndef SHARED |
+#include "fdpic_crt.h" |
+#endif |
+ |
+#else |
+ |
+__asm__( |
+".text \n" |
+".global " START " \n" |
+START ": \n" |
+" mova 1f, r0 \n" |
+" mov.l 1f, r5 \n" |
+" add r0, r5 \n" |
+" mov r15, r4 \n" |
+" mov #-16, r0 \n" |
+" mov.l 2f, r1 \n" |
+"3: bsrf r1 \n" |
+" and r0, r15 \n" |
+".align 2 \n" |
+".weak _DYNAMIC \n" |
+".hidden _DYNAMIC \n" |
+"1: .long _DYNAMIC-. \n" |
+"2: .long " START "_c@PCREL - (3b+4-.) \n" |
+); |
+ |
+#endif |
+ |
+/* used by gcc for switching the FPU between single and double precision */ |
+#ifdef SHARED |
+__attribute__((__visibility__("hidden"))) |
+#endif |
+const unsigned long __fpscr_values[2] = { 0, 0x80000 }; |