diff options
Diffstat (limited to 'newlib/libc/sys/sh/crt0.S')
-rw-r--r-- | newlib/libc/sys/sh/crt0.S | 83 |
1 files changed, 9 insertions, 74 deletions
diff --git a/newlib/libc/sys/sh/crt0.S b/newlib/libc/sys/sh/crt0.S index f9473ae44..88c9fac0d 100644 --- a/newlib/libc/sys/sh/crt0.S +++ b/newlib/libc/sys/sh/crt0.S @@ -1,69 +1,3 @@ - -#ifdef __SH5__ - .section .data,"aw" - .global ___data -___data: - - .section .rodata,"a" - .global ___rodata -___rodata: - -#if __SH5__ == 64 - .section .text,"ax" -#define LOAD_ADDR(sym, reg) \ - movi (sym >> 48) & 65535, reg; \ - shori (sym >> 32) & 65535, reg; \ - shori (sym >> 16) & 65535, reg; \ - shori sym & 65535, reg -#else - .mode SHmedia - .section .text..SHmedia32,"ax" -#define LOAD_ADDR(sym, reg) \ - movi (sym >> 16) & 65535, reg; \ - shori sym & 65535, reg -#endif - .global start -start: - LOAD_ADDR (_stack, r15) - - pt/l zero_bss_loop, tr0 - pt/l _atexit, tr1 - pt/l _init, tr5 - pt/l _main, tr6 - pt/l _exit, tr7 - - ! zero out bss - LOAD_ADDR (_edata, r0) - LOAD_ADDR (_end, r1) -zero_bss_loop: - stx.q r0, r63, r63 - addi r0, 8, r0 - bgt/l r1, r0, tr0 - - LOAD_ADDR (___data, r26) - LOAD_ADDR (___rodata, r27) - -#if ! __SH4_NOFPU__ - getcon cr0, r0 - movi 1, r1 - shlli r1, 15, r1 - or r1, r0, r0 - putcon r0, cr0 -#endif - - ! arrange for exit to call fini - LOAD_ADDR (_fini, r2) - blink tr1, r18 - - ! call init - blink tr5, r18 - - ! call the mainline - blink tr6, r18 - - ! call exit - blink tr7, r18 -#else .section .text .global start start: @@ -79,14 +13,12 @@ start_l: cmp/ge r0,r1 bt start_l -#ifndef __SH2A_NOFPU__ -#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY) || defined(__SH2A__) +#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY) mov.l set_fpscr_k, r1 jsr @r1 mov #0,r4 lds r3,fpscr -#endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A__) */ -#endif /* !__SH2A_NOFPU__ */ +#endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) */ ! call the mainline mov.l main_k,r0 @@ -100,12 +32,10 @@ start_l: or r0,r0 .align 2 -#ifndef __SH2A_NOFPU__ -#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A__) +#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) set_fpscr_k: .long ___set_fpscr -#endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(SH4_SINGLE_ONLY) || defined(__SH2A__) */ -#endif /* !__SH2A_NOFPU__ */ +#endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(SH4_SINGLE_ONLY) */ stack_k: .long _stack edata_k: @@ -116,4 +46,9 @@ main_k: .long _main exit_k: .long _exit + +#ifdef __ELF__ + .section .stack,"aw" +#else + .section .stack #endif |