123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /*
- * This file is part of the Free Pascal run time library.
- * Copyright (c) 2011 by Thomas Schatzl,
- * member of the Free Pascal development team.
- *
- * Startup code for normal programs, PowerPC version.
- *
- * See the file COPYING.FPC, included in this distribution,
- * for details about the copyright.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
- /*
- * Main program entry point for dynamic executables.
- */
- .section ".text"
- .globl _dynamic_start
- _dynamic_start:
- lis 11,__dl_fini@ha
- stw 7,__dl_fini@l(11)
- b _start
- /*
- * Main program entry point for static executables.
- */
- .section ".text"
- .globl _start
- _start:
- mr 26,1
- /* Set up an initial stack frame, and clear the LR. */
- clrrwi 1,1,4
- li 0,0
- stwu 1,-16(1)
- mtlr 0
- stw 0,0(1)
- lwz 3,0(26) /* get argc */
- lis 11,operatingsystem_parameter_argc@ha
- stw 3,operatingsystem_parameter_argc@l(11);
- addi 4,26,4 /* get argv */
- lis 11,operatingsystem_parameter_argv@ha
- stw 4,operatingsystem_parameter_argv@l(11);
- addi 27,3,1 /* calculate argc + 1 into r27 */
- slwi 27,27,2 /* calculate (argc + 1) * sizeof(char *) into r27 */
- add 5,4,27 /* get address of env[0] */
- lis 11,operatingsystem_parameter_envp@ha
- stw 5,operatingsystem_parameter_envp@l(11);
- lis 11,__stkptr@ha
- stw 1,__stkptr@l(11);
- bl PASCALMAIN
- /* we should not reach here. Crash horribly */
- trap
- .globl _haltproc
- .type _haltproc,@function
- _haltproc:
- lis 11,__dl_fini@ha
- lwz 11,__dl_fini@l(11)
- cmpwi 11, 0
- beq .LNoDlFiniCall
- mtctr 11
- bctrl
- .LNoDlFiniCall:
- lis 11,operatingsystem_result@ha
- lwz 3,operatingsystem_result@l(11)
- li 0,234 /* exit group call */
- sc
- lis 11,operatingsystem_result@ha
- lwz 3,operatingsystem_result@l(11)
- li 0,1 /* exit call */
- sc
- /* we should not reach here. Crash horribly */
- trap
- /* Define a symbol for the first piece of initialized data. */
- .section ".data"
- .globl __data_start
- __data_start:
- data_start:
- .section ".bss"
- .type __dl_fini, @object
- .size __dl_fini, 4
- .global __dl_fini
- __dl_fini:
- .skip 4
- .type __stkptr, @object
- .size __stkptr, 4
- .global __stkptr
- __stkptr:
- .skip 4
- .type operatingsystem_parameters, @object
- .size operatingsystem_parameters, 12
- operatingsystem_parameters:
- .skip 3 * 4
- .global operatingsystem_parameter_argc
- .global operatingsystem_parameter_argv
- .global operatingsystem_parameter_envp
- .set operatingsystem_parameter_argc, operatingsystem_parameters+0
- .set operatingsystem_parameter_argv, operatingsystem_parameters+4
- .set operatingsystem_parameter_envp, operatingsystem_parameters+8
- .section .note.GNU-stack,"",%progbits
|