diff options
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/crt_arch.h | 28 | ||||
-rw-r--r-- | arch/sh/reloc.h | 36 | ||||
-rw-r--r-- | arch/sh/src/__fpscr_values.c | 2 |
3 files changed, 32 insertions, 34 deletions
diff --git a/arch/sh/crt_arch.h b/arch/sh/crt_arch.h index 5fd39fc6..a873ffdb 100644 --- a/arch/sh/crt_arch.h +++ b/arch/sh/crt_arch.h @@ -1,12 +1,22 @@ -__asm__("\ -.global _start \n\ -_start: \n\ - mov r15, r4 \n\ - mov #-16, r0 \n\ - and r0, r15 \n\ - bsr __cstart \n\ - nop \n\ -"); +__asm__( +".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" +" and r0, r15 \n" +" bsr " START "_c \n" +" nop \n" +".align 2 \n" +".weak _DYNAMIC \n" +".hidden _DYNAMIC \n" +"1: .long _DYNAMIC-. \n" +); /* 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 }; diff --git a/arch/sh/reloc.h b/arch/sh/reloc.h index aeb02d05..e7e4b38f 100644 --- a/arch/sh/reloc.h +++ b/arch/sh/reloc.h @@ -8,27 +8,15 @@ #define TPOFF_K 8 -static int remap_rel(int type) -{ - switch(type) { - case R_SH_DIR32: - return REL_SYMBOLIC; - case R_SH_REL32: - return REL_OFFSET; - case R_SH_GLOB_DAT: - return REL_GOT; - case R_SH_JMP_SLOT: - return REL_PLT; - case R_SH_RELATIVE: - return REL_RELATIVE; - case R_SH_COPY: - return REL_COPY; - case R_SH_TLS_DTPMOD32: - return REL_DTPMOD; - case R_SH_TLS_DTPOFF32: - return REL_DTPOFF; - case R_SH_TLS_TPOFF32: - return REL_TPOFF; - } - return 0; -} +#define REL_SYMBOLIC R_SH_DIR32 +#define REL_OFFSET R_SH_REL32 +#define REL_GOT R_SH_GLOB_DAT +#define REL_PLT R_SH_JMP_SLOT +#define REL_RELATIVE R_SH_RELATIVE +#define REL_COPY R_SH_COPY +#define REL_DTPMOD R_SH_TLS_DTPMOD32 +#define REL_DTPOFF R_SH_TLS_DTPOFF32 +#define REL_TPOFF R_SH_TLS_TPOFF32 + +#define CRTJMP(pc,sp) __asm__ __volatile__( \ + "jmp @%0 ; mov %1,r15" : : "r"(pc), "r"(sp) : "memory" ) diff --git a/arch/sh/src/__fpscr_values.c b/arch/sh/src/__fpscr_values.c index 64b458f9..374df30e 100644 --- a/arch/sh/src/__fpscr_values.c +++ b/arch/sh/src/__fpscr_values.c @@ -1,5 +1,5 @@ #include "libc.h" /* used by gcc for switching the FPU between single and double precision */ -const unsigned long __fpscr_values[2] ATTR_LIBC_VISIBILITY = { 0, 0x80000 }; +//const unsigned long __fpscr_values[2] ATTR_LIBC_VISIBILITY = { 0, 0x80000 }; |