marco 22 年之前
父节点
当前提交
50101600d3
共有 1 个文件被更改,包括 158 次插入0 次删除
  1. 158 0
      rtl/freebsd/i386/gprt0.as

+ 158 - 0
rtl/freebsd/i386/gprt0.as

@@ -0,0 +1,158 @@
+#
+#   $Id$
+#   This file is part of the Free Pascal run time library.
+#   Copyright (c) 1999-2000 by Marco van de Voort, 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.
+#
+#**********************************************************************}
+#
+# FreeBSD ELF startup code for Free Pascal for dynamical linking to libc
+# with profiling support.
+#
+
+	.file	"gpcrt1.c"
+	.version	"01.01"
+gcc2_compiled.:
+.section	.note.ABI-tag,"a",@progbits
+	.p2align 2
+	.type	 abitag,@object
+	.size	 abitag,24
+abitag:
+	.long 8
+	.long 4
+	.long 1
+	.byte	 0x46,0x72,0x65,0x65,0x42,0x53,0x44,0x0
+	.long 470000
+.globl __progname
+	.section	.rodata
+.LC0:
+	.byte	 0x0
+.data
+	.p2align 2
+	.type	 __progname,@object
+	.size	 __progname,4
+__progname:
+	.long .LC0
+
+        .align  4
+___fpucw:
+        .long   0x1332
+
+        .globl  ___fpc_brk_addr         /* heap management */
+        .type   ___fpc_brk_addr,@object
+        .size   ___fpc_brk_addr,4
+___fpc_brk_addr:
+        .long   0
+
+.text
+	.p2align 2,0x90
+.globl _start
+		.type		 _start,@function
+_start:
+#APP
+	movl %edx,%edx
+#NO_APP
+	pushl %ebp
+	movl %esp,%ebp
+	subl $12,%esp
+	pushl %edi
+	pushl %esi
+	pushl %ebx
+	movl 4(%ebp),%ebx
+	movl %ebx,U_SYSTEM_ARGC
+	leal 12(%ebp,%ebx,4),%esi
+	leal 8(%ebp),%eax
+	movl %eax,U_SYSTEM_ARGV
+	movl %eax,-4(%ebp)
+	movl %esi,U_SYSTEM_ENVP		
+	movl %esi,environ
+	movl $_DYNAMIC,%ecx
+	testl %ebx,%ebx
+	jle .L3
+	movl 8(%ebp),%eax
+	testl %eax,%eax
+	je .L3
+	movl %eax,__progname
+	cmpb $0,(%eax)
+	je .L3
+	.p2align 2,0x90
+.L7:
+	cmpb $47,(%eax)
+	jne .L6
+	leal 1(%eax),%edi
+	movl %edi,__progname
+.L6:
+	incl %eax
+	cmpb $0,(%eax)
+	jne .L7
+.L3:
+	testl %ecx,%ecx
+	je .L10
+	addl $-12,%esp
+	pushl %edx
+	call atexit
+	addl $16,%esp
+.L10:
+	addl $-12,%esp
+	pushl $_mcleanup
+	call atexit
+	addl $-12,%esp
+	pushl $_fini
+	call atexit
+	addl $32,%esp
+	addl $-8,%esp
+	pushl $etext
+	pushl $eprol
+	call monstartup
+	call _init
+
+        finit                           /* initialize fpu */
+        fwait
+        fldcw   ___fpucw
+        xorl    %ebp,%ebp
+	call  main
+	pushl %eax
+	jmp  _haltproc
+
+.globl _haltproc
+.type _haltproc,@function
+_haltproc:
+           movzwl U_SYSTEM_EXITCODE,%ebx
+           pushl %ebx
+	   call  exit
+           mov $1,%eax  
+           movzwl U_SYSTEM_EXITCODE,%ebx
+	   pushl %ebx
+           call .Lactualsyscall
+           addl  $4,%esp
+           jmp   _haltproc
+
+.Lactualsyscall:
+         int $0x80
+         jb .LErrorcode
+         xor %ebx,%ebx
+         ret
+.LErrorcode:
+         mov %eax,%ebx
+         mov $-1,%eax
+         ret
+        .p2align 2,0x90
+.Lfe1:
+		.size		 _start,.Lfe1-_start
+#APP
+	.text
+	eprol:
+	.previous
+#NO_APP
+	.comm	environ,4,4
+	.globl	_DYNAMIC
+	.weak	_DYNAMIC
+	.ident	"GCC: (GNU) c 2.95.4 20020320 [FreeBSD]"