47 lines
692 B
ArmAsm
47 lines
692 B
ArmAsm
# FR30 startup code
|
|
|
|
.section .text
|
|
.global _start
|
|
_start:
|
|
|
|
;; Initialise the stack pointer
|
|
ldi:32 __stack, r0
|
|
mov r0, sp
|
|
mov r0, fp
|
|
|
|
;; Zero the data space
|
|
ldi:32 #_edata, r0
|
|
ldi:32 #_end, r1
|
|
ldi:8 #0, r2
|
|
.L0:
|
|
st r2, @r0
|
|
add #4, r0
|
|
cmp r1, r0
|
|
blt .L0
|
|
|
|
;; Call global and static constructors
|
|
ldi:32 _init, r0
|
|
call @r0
|
|
|
|
;; Setup destrcutors to be called from exit.
|
|
;; (Just in case main never returns....)
|
|
ldi:32 atexit, r0
|
|
ldi:32 _fini, r4
|
|
call @r0
|
|
|
|
;; Initialise argc, argv and envp to empty
|
|
ldi:8 #0, r4
|
|
ldi:8 #0, r5
|
|
ldi:8 #0, r6
|
|
|
|
;; Call main
|
|
ldi:32 main, r0
|
|
call @r0
|
|
|
|
;; Jump to exit
|
|
ldi:32 exit, r0
|
|
call @r0
|
|
|
|
;; Should never reach here
|
|
int #9
|