33 lines
816 B
ArmAsm
33 lines
816 B
ArmAsm
|
|
.file "premain.s"
|
|
|
|
; Define weak linkage for _premain, so that it can be overridden
|
|
.section ".text","ax"
|
|
.weak _premain
|
|
_premain:
|
|
; clear BSS data, then call main.
|
|
|
|
im __bss_start__ ; bssptr
|
|
.clearloop:
|
|
loadsp 0 ; bssptr bssptr
|
|
im __bss_end__ ; __bss_end__ bssptr bssptr
|
|
ulessthanorequal ; (bssptr<=__bss_end__?) bssptr
|
|
impcrel .done ; &.done (bssptr<=__bss_end__?) bssptr
|
|
neqbranch ; bssptr
|
|
im 0 ; 0 bssptr
|
|
loadsp 4 ; bssptr 0 bssptr
|
|
loadsp 0 ; bssptr bssptr 0 bssptr
|
|
im 4 ; 4 bssptr bssptr 0 bssptr
|
|
add ; bssptr+4 bssptr 0 bssptr
|
|
storesp 12 ; bssptr 0 bssptr+4
|
|
store ; (write 0->bssptr) bssptr+4
|
|
im .clearloop ; &.clearloop bssptr+4
|
|
poppc ; bssptr+4
|
|
.done:
|
|
im _break ; &_break bssptr+4
|
|
storesp 4 ; &_break
|
|
im main ; &main &break
|
|
poppc ; &break
|
|
|
|
|