| # 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 |