mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 02:39:40 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			ActionScript
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			ActionScript
		
	
	
	
	
	
/*
 | 
						|
                At this entry point, most registers' values are unspecified, except:
 | 
						|
 | 
						|
   a1		Contains a function pointer to be registered with `atexit'.
 | 
						|
		This is how the dynamic linker arranges to have DT_FINI
 | 
						|
		functions called for shared libraries that have been loaded
 | 
						|
		before this code runs.
 | 
						|
 | 
						|
   sp		The stack contains the arguments and environment:
 | 
						|
		0(sp)			argc
 | 
						|
		4(sp)			argv[0]
 | 
						|
		...
 | 
						|
		(4*argc)(sp)		NULL
 | 
						|
		(4*(argc+1))(sp)	envp[0]
 | 
						|
		...
 | 
						|
					NULL
 | 
						|
*/
 | 
						|
 | 
						|
	.text
 | 
						|
	.globl _start
 | 
						|
	.type _start,#function
 | 
						|
_start:
 | 
						|
	/* Clear the frame pointer since this is the outermost frame.  */
 | 
						|
	mov fp, #0
 | 
						|
	ldmia   sp!, {a2}
 | 
						|
 | 
						|
	/* Pop argc off the stack and save a pointer to argv */
 | 
						|
	ldr ip,=operatingsystem_parameter_argc
 | 
						|
	ldr a3,=operatingsystem_parameter_argv
 | 
						|
	str a2,[ip]
 | 
						|
 | 
						|
	/* calc envp */
 | 
						|
	add a2,a2,#1
 | 
						|
	add a2,sp,a2,LSL #2
 | 
						|
	ldr ip,=operatingsystem_parameter_envp
 | 
						|
 | 
						|
	str sp,[a3]
 | 
						|
   	str a2,[ip]
 | 
						|
 | 
						|
        ldr     r1,=_etext                 /* Initialize gmon */
 | 
						|
        ldr     r0,=_start
 | 
						|
        bl      monstartup
 | 
						|
        ldr     r0,=_mcleanup
 | 
						|
        bl      atexit
 | 
						|
 | 
						|
        /* Save initial stackpointer */
 | 
						|
	ldr ip,=__stkptr
 | 
						|
	str sp,[ip]
 | 
						|
	/* align sp again to 8 byte boundary, needed by eabi */
 | 
						|
        sub sp,sp,#4
 | 
						|
 | 
						|
	/* Let the libc call main and exit with its return code.  */
 | 
						|
	bl PASCALMAIN
 | 
						|
 | 
						|
	.globl  _haltproc
 | 
						|
        .type   _haltproc,#function
 | 
						|
_haltproc:
 | 
						|
        /* r0 contains exitcode */
 | 
						|
	swi 0x900001
 | 
						|
	b _haltproc
 | 
						|
 | 
						|
	.globl  _haltproc_eabi
 | 
						|
        .type   _haltproc_eabi,#function
 | 
						|
_haltproc_eabi:
 | 
						|
        /* r0 contains exitcode */
 | 
						|
        mov r7,#248
 | 
						|
	swi 0x0
 | 
						|
	b _haltproc_eabi
 | 
						|
 | 
						|
        /* Define a symbol for the first piece of initialized data.  */
 | 
						|
	.data
 | 
						|
	.globl __data_start
 | 
						|
__data_start:
 | 
						|
	.long 0
 | 
						|
	.weak data_start
 | 
						|
	data_start = __data_start
 | 
						|
 | 
						|
.bss
 | 
						|
        .comm __stkptr,4
 | 
						|
 | 
						|
        .comm operatingsystem_parameter_envp,4
 | 
						|
        .comm operatingsystem_parameter_argc,4
 | 
						|
        .comm operatingsystem_parameter_argv,4
 | 
						|
 | 
						|
	.section ".comment"
 | 
						|
	.byte 0
 | 
						|
	.ascii "generated by FPC http://www.freepascal.org\0"
 | 
						|
 | 
						|
/* We need this stuff to make gdb behave itself, otherwise
 | 
						|
   gdb will chokes with SIGILL when trying to debug apps.
 | 
						|
*/
 | 
						|
        .section ".note.ABI-tag", "a"
 | 
						|
        .align 4
 | 
						|
        .long 1f - 0f
 | 
						|
        .long 3f - 2f
 | 
						|
        .long  1
 | 
						|
0:      .asciz "GNU"
 | 
						|
1:      .align 4
 | 
						|
2:      .long 0
 | 
						|
        .long 2,0,0
 | 
						|
3:      .align 4
 | 
						|
 | 
						|
.section .note.GNU-stack,"",%progbits
 |