mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 13:31:20 +02:00
170 lines
3.1 KiB
ActionScript
170 lines
3.1 KiB
ActionScript
/*
|
|
Start-up code for Free Pascal Compiler when linking with C library.
|
|
|
|
*/
|
|
|
|
.text
|
|
.align 2
|
|
#APP
|
|
.ident "FreePascal 2.6.x/2.7.x series dynlinked to libc"
|
|
#NO_APP
|
|
.section .note.tag,"a",%note
|
|
.p2align 2
|
|
.type abitag, @object
|
|
.size abitag, 24
|
|
abitag:
|
|
.4byte 8
|
|
.4byte 4
|
|
.4byte 1 /* NT_FREEBSD_ABI_TAG */
|
|
.string "FreeBSD"
|
|
.p2align 2
|
|
.4byte 1302001
|
|
|
|
.section .note.tag,"a",%note
|
|
.p2align 2
|
|
.4byte .L_2-.L_1
|
|
.4byte .L_4-.L_3
|
|
.4byte 4 /* NT_FREEBSD_FEATURE_CTL */
|
|
.L_1: .asciz "FreeBSD" /* NOTE_FREEBSD_VENDOR */
|
|
.L_2: .p2align 2
|
|
.L_3: .4byte 0
|
|
.L_4:
|
|
|
|
.globl __progname
|
|
.section .rodata
|
|
|
|
.LC0:
|
|
.string ""
|
|
.data
|
|
.p2align 3
|
|
.type __progname, @object
|
|
.size __progname, 8
|
|
__progname:
|
|
.quad .LC0
|
|
.text
|
|
.p2align 4,,15
|
|
|
|
.globl _start
|
|
.type _start,#function
|
|
_start:
|
|
/* Initialise FP to zero */
|
|
mov x29,#0
|
|
|
|
/* Get argc, argv, envp */
|
|
ldr x1,[x0]
|
|
add x2,x0,#8
|
|
add x3,x1,#1
|
|
add x3,x2,x3,lsl #3
|
|
|
|
/* Save argc, argv, envp, environ, __progname and initial stack pointer */
|
|
adrp x10,:got:operatingsystem_parameter_argc
|
|
ldr x10,[x10,#:got_lo12:operatingsystem_parameter_argc]
|
|
str x1,[x10]
|
|
adrp x10,:got:operatingsystem_parameter_argv
|
|
ldr x10,[x10,#:got_lo12:operatingsystem_parameter_argv]
|
|
str x2,[x10]
|
|
adrp x10,:got:operatingsystem_parameter_envp
|
|
ldr x10,[x10,#:got_lo12:operatingsystem_parameter_envp]
|
|
str x3,[x10]
|
|
|
|
/* save environ */
|
|
adrp x10,environ
|
|
ldr x10,[x10,:lo12:environ]
|
|
cbnz x10,.LBB0_2
|
|
ldr x10,=environ
|
|
str x3,[x10]
|
|
.LBB0_2:
|
|
/* save __progname */
|
|
ldr w8,=operatingsystem_parameter_argc
|
|
cmp w8,#0
|
|
cset w8,le
|
|
tbnz w8,#0,.LBB0_9
|
|
// %bb.1:
|
|
adrp x8,operatingsystem_parameter_argv
|
|
ldr x8,[x8,:lo12:operatingsystem_parameter_argv]
|
|
cbz x8,.LBB0_9
|
|
// %bb.2:
|
|
ldr x2,[x2]
|
|
adrp x9,__progname
|
|
adrp x10,__progname
|
|
add x10,x10,:lo12:__progname
|
|
str x2,[x10]
|
|
ldr x8,[x9,:lo12:__progname]
|
|
adrp x9,s
|
|
add x9,x9,:lo12:s
|
|
str x8,[x9]
|
|
.LBB0_3:
|
|
adrp x8,s
|
|
ldr x8,[x8,:lo12:s]
|
|
ldrb w9,[x8]
|
|
cbz w9,.LBB0_8
|
|
// %bb.4:
|
|
adrp x8,s
|
|
ldr x8,[x8, :lo12:s]
|
|
ldrb w9,[x8]
|
|
cmp w9,#47
|
|
b.ne .LBB0_6
|
|
// %bb.5:
|
|
adrp x8,s
|
|
ldr x8,[x8,:lo12:s]
|
|
add x8,x8,#1
|
|
adrp x9,__progname
|
|
add x9,x9,:lo12:__progname
|
|
str x8,[x9]
|
|
.LBB0_6:
|
|
// %bb.7:
|
|
adrp x8,s
|
|
adrp x9,s
|
|
add x9,x9,:lo12:s
|
|
ldr x8,[x8,:lo12:s]
|
|
add x8,x8,#1
|
|
str x8,[x9]
|
|
b .LBB0_3
|
|
.LBB0_8:
|
|
.LBB0_9:
|
|
/* save stack pointer */
|
|
adrp x10,:got:__stkptr
|
|
ldr x10,[x10,#:got_lo12:__stkptr]
|
|
mov x6,sp
|
|
str x6,[x10]
|
|
|
|
bl PASCALMAIN
|
|
|
|
/* This should never happen */
|
|
b abort
|
|
|
|
.globl _haltproc
|
|
.type _haltproc,#function
|
|
_haltproc:
|
|
adrp x0,:got:operatingsystem_result
|
|
ldr x0,[x0,#:got_lo12:operatingsystem_result]
|
|
ldr w0,[x0]
|
|
mov w8,#1 // SYS_exit
|
|
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 __stkptr,8
|
|
|
|
.comm operatingsystem_parameter_envp,8
|
|
.comm operatingsystem_parameter_argc,8
|
|
.comm operatingsystem_parameter_argv,8
|
|
.comm environ,8,8
|
|
|
|
s:
|
|
.xword 0
|
|
.size s, 8
|
|
|
|
.section .note.GNU-stack,"",%progbits
|