OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-newlib/] [newlib-1.17.0/] [newlib/] [libc/] [sys/] [arc/] [crt0.S] - Rev 9

Compare with Previous | Blame | View Log

; ARC start up file
; In the absence of a custom linker script, go with something simple.
; We do not support passing arguments to "main", but this is an embedded
; system anyway.
;
; We call init/fini here without cpu prefixes because there is always
; only one .init/.fini section per image.

        .section .text
        .align 4

        .global start
start:

        mov     sp,end          ; Round "sp" up to page after "end".
        add     sp,sp,4095
        and     sp,sp,-4096

        ld      r8,[stack_size] ; Add stack size to "sp".
        add     sp,sp,r8

        st      sp,[sbrk_start] ; Initialize malloc heap.
        st      sp,[sbrk_loc]

        sub     sp,sp,16        ; callee expects 16 bytes already "pushed".
        mov     fp,0            ; Top of stack frame indicator.

        mov     r0,edata        ; Zero bss.
        mov     r2,end
        sub     r2,r2,r0
        mov     r1,0

#ifdef __base__
        bl.nd   _memset
        bl.nd   init            ; .init section entry point.
        mov     r0,%st(fini)    ; .fini section entry point.
        bl.nd   _atexit
        mov     r0,0            ; argc
        mov     r1,0            ; argv
        bl.nd   _main
        bl.nd   _exit
#endif

#ifdef __host__
        bl.nd   _host_memset
        bl.nd   init            ; .init section entry point.
        mov     r0,%st(fini)    ; .fini section entry point.
        bl.nd   _host_atexit
        mov     r0,0            ; argc
        mov     r1,0            ; argv
        bl.nd   _host_main
        bl.nd   _host_exit
#endif

#ifdef __graphics__
        bl.nd   _graphics_memset
        bl.nd   init            ; .init section entry point.
        mov     r0,%st(fini)    ; .fini section entry point.
        bl.nd   _graphics_atexit
        mov     r0,0            ; argc
        mov     r1,0            ; argv
        bl.nd   _graphics_main
        bl.nd   _graphics_exit
#endif

#ifdef __audio__
        bl.nd   _audio_memset
        bl.nd   init            ; .init section entry point.
        mov     r0,%st(fini)    ; .fini section entry point.
        bl.nd   _audio_atexit
        mov     r0,0            ; argc
        mov     r1,0            ; argv
        bl.nd   _audio_main
        bl.nd   _audio_exit
#endif

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.