mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-10 10:46:08 +02:00
145 lines
4.0 KiB
ActionScript
145 lines
4.0 KiB
ActionScript
|
|
|
| $Id: cprt21.as,v 1.1.2.5 2002/02/28 22:44:44 pierre Exp $
|
|
| This file is part of the Free Pascal run time library.
|
|
| Copyright (c) 1999-2000 by Michael Van Canneyt and Peter Vreman
|
|
| members of the Free Pascal development team.
|
|
|
|
|
| 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.
|
|
|
|
|
|**********************************************************************}
|
|
|
|
|
| Linux ELF startup code for Free Pascal
|
|
|
|
|
|
|
.file "prt1.as"
|
|
.text
|
|
.globl _start
|
|
.type _start,@function
|
|
_start:
|
|
/* First locate the start of the environment variables */
|
|
move.l (%sp)+,%d3
|
|
move.l %d0,%d4
|
|
|
|
move.l %sp,%d1 /* Points to the arguments */
|
|
move.l %d3,%d0
|
|
addq.l #1,%d0
|
|
lsl.l #2,%d0
|
|
add.l %sp,%d0
|
|
|
|
move.l %sp,%d7
|
|
and.l #0xfffffff8,%d7 /* Align stack */
|
|
move.l %d7,%sp
|
|
|
|
move.l %d0,U_SYSLINUX_ENVP /* Move the environment pointer */
|
|
move.l %d3,U_SYSLINUX_ARGC /* Move the argument counter */
|
|
move.l %d1,U_SYSLINUX_ARGV /* Move the argument pointer */
|
|
|
|
move.l #0,%fp /* Zero frame pointer to end call stack */
|
|
|
|
|
|
|
| Start of args for __libc_start_main
|
|
|
|
|
|
|
|
move.l %d4,-(%sp)
|
|
move.l %sp,-(%sp)
|
|
move.l %a1,-(%sp)
|
|
pea.l _fini_dummy
|
|
pea.l _init_dummy
|
|
move.l %d1,-(%sp)
|
|
move.l %d3,-(%sp)
|
|
pea.l main
|
|
jsr __libc_start_main
|
|
trap #0
|
|
|
|
/* fake main routine which will be run from libc */
|
|
main:
|
|
/* save return address */
|
|
move.l (%sp)+,%d0
|
|
move.l %d0,___fpc_ret
|
|
move.l %d1,___fpc_ret_d1
|
|
move.l %fp,___fpc_ret_fp
|
|
move.l %d0,-(%sp)
|
|
|
|
/* start the program */
|
|
move.l #0,%fp
|
|
jsr PASCALMAIN
|
|
|
|
.globl _haltproc
|
|
.type _haltproc,@function
|
|
_haltproc:
|
|
eor.l %d0,%d0 /* load and save exitcode */
|
|
move.w U_SYSLINUX_EXITCODE,%d0
|
|
|
|
move.l ___fpc_ret,%d3 /* return to libc */
|
|
move.l ___fpc_ret_fp,%fp
|
|
move.l ___fpc_ret_d1,%d1
|
|
move.l %d3,-(%sp)
|
|
_init_dummy:
|
|
_fini_dummy:
|
|
rts
|
|
|
|
.data
|
|
.align 4
|
|
|
|
.globl ___fpc_brk_addr /* heap management */
|
|
.type ___fpc_brk_addr,@object
|
|
.size ___fpc_brk_addr,4
|
|
___fpc_brk_addr:
|
|
.long 0
|
|
|
|
___fpc_ret: /* return address to libc */
|
|
.long 0
|
|
___fpc_ret_d1:
|
|
.long 0
|
|
___fpc_ret_fp:
|
|
.long 0
|
|
|
|
|
|
|
|
|
| $Log: cprt21.as,v $
|
|
| Revision 1.1.2.5 2002/02/28 22:44:44 pierre
|
|
| + add some comments
|
|
|
|
|
| Revision 1.1.2.4 2001/08/02 21:23:59 pierre
|
|
| * fix the args to __libc_start_main
|
|
|
|
|
| Revision 1.1.2.3 2001/07/30 20:05:07 pierre
|
|
| * fix a assembler syntax eror in last commit
|
|
|
|
|
| Revision 1.1.2.2 2001/07/30 16:18:53 pierre
|
|
| * converted from i386 code
|
|
|
|
|
| Revision 1.1.2.2 2001/06/04 18:04:32 peter
|
|
| * use own dummies for _init and _fini
|
|
|
|
|
| Revision 1.1.2.1 2001/02/14 22:18:45 pierre
|
|
| * fix Sebastian's problem with HeapTrace
|
|
|
|
|
| Revision 1.1 2000/07/13 06:30:55 michael
|
|
| + Initial import
|
|
|
|
|
| Revision 1.3 2000/01/07 16:41:42 daniel
|
|
| * copyright 2000
|
|
|
|
|
| Revision 1.2 2000/01/07 16:32:28 daniel
|
|
| * copyright 2000 added
|
|
|
|
|
| Revision 1.1 1999/05/03 21:29:36 peter
|
|
| + glibc 2.1 support
|
|
|
|
|
| Revision 1.3 1998/11/04 10:16:25 peter
|
|
| + xorl fp,fp to indicate end of backtrace
|
|
|
|
|
| Revision 1.2 1998/10/14 21:28:46 peter
|
|
| * initialize fpu so sigfpe is finally generated for fpu errors
|
|
|
|
|
| Revision 1.1 1998/08/12 19:16:09 peter
|
|
| + loader including libc init and exit
|
|
|
|
|
|
|