1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- Start-up code for Free Pascal Compiler, not in a shared library,
- not linking with C library.
- Written by Edmund Grimley Evans in 2015 and released into the public domain.
- */
- .text
- .align 2
- .globl _dynamic_start
- .type _dynamic_start,#function
- _dynamic_start:
- ldr x10,=__dl_fini
- str x0,[x10]
- b _start
- .globl _start
- .type _start,#function
- _start:
- /* Initialise FP to zero */
- mov x29,#0
- /* Get argc, argv, envp */
- ldr x1,[sp]
- add x2,sp,#8
- add x11,x1,#1
- add x11,x2,x11,lsl #3
- /* Save argc, argv, envp, and initial stack pointer */
- ldr x10,=operatingsystem_parameter_argc
- str x1,[x10]
- ldr x10,=operatingsystem_parameter_argv
- str x2,[x10]
- ldr x10,=operatingsystem_parameter_envp
- str x11,[x10]
- ldr x10,=__stkptr
- mov x6,sp
- str x6,[x10]
- /* Call main */
- bl PASCALMAIN
- .globl _haltproc
- .type _haltproc,#function
- _haltproc:
- ldr x10,=__dl_fini
- ldr x0,[x10]
- cbz x0,.Lexit
- blr x0
- .Lexit:
- ldr x10,=operatingsystem_result
- ldr w0,[x10]
- mov w8,#94 // syscall_nr_exit_group
- svc #0
- b _haltproc
- /* Define a symbol for the first piece of initialized data. */
- .data
- .align 3
- .globl __data_start
- __data_start:
- .long 0
- .weak data_start
- data_start = __data_start
- .bss
- .align 3
- .comm __dl_fini,8
- .comm __stkptr,8
- .comm operatingsystem_parameter_envp,8
- .comm operatingsystem_parameter_argc,8
- .comm operatingsystem_parameter_argv,8
- .section .note.GNU-stack,"",%progbits
|