Browse Source

* initial version

marco 21 years ago
parent
commit
2e57a62846
1 changed files with 171 additions and 0 deletions
  1. 171 0
      rtl/openbsd/i386/prt0.as

+ 171 - 0
rtl/openbsd/i386/prt0.as

@@ -0,0 +1,171 @@
+	.file	"crt0.c"
+gcc2_compiled.:
+.data
+	.align 32
+	.type	 rcsid , @object
+	.size	rcsid , 58
+rcsid:
+	.string	"$OpenBSD: crt0.c,v 1.11 2003/06/27 22:30:38 deraadt Exp $"
+.globl __progname
+.section	.rodata
+.LC0:
+	.string	""
+.data
+	.align 4
+	.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
+
+#APP
+	
+	.text
+	.align  4
+	.globl  __start
+	.globl  _start
+_start:
+__start:
+	pushl	%ebx			#ps_strings
+	pushl   %ecx                    # obj
+	pushl   %edx                    # cleanup
+	movl    12(%esp),%eax
+	leal    20(%esp,%eax,4),%ecx
+	leal    16(%esp),%edx
+	pushl   %ecx
+	pushl   %edx
+	pushl   %eax
+	call    ___start
+
+#NO_APP
+.text
+	.align 4
+.globl ___start
+	.type	___start , @function
+___start:
+	pushl %ebp
+	movl %esp,%ebp
+	subl $16,%esp
+	pushl %esi
+	pushl %ebx
+	movl 12(%ebp),%esi
+	movl 16(%ebp),%eax
+	movl %eax,environ
+	movl %eax,U_SYSTEM_ENVP
+	movl (%esi),%ebx
+	testl %ebx,%ebx
+	je .L3
+	addl $-8,%esp
+	pushl $47
+	pushl %ebx
+	call _strrchr
+	movl %eax,__progname
+	addl $16,%esp
+	testl %eax,%eax
+	jne .L4
+	movl %ebx,__progname
+	jmp .L5
+	.p2align 4,,7
+.L4:
+	incl %eax
+	movl %eax,__progname
+.L5:
+	movl $__progname_storage,%edx
+	jmp .L12
+	.p2align 4,,7
+.L9:
+	movb (%eax),%al
+	movb %al,(%edx)
+	incl __progname
+	incl %edx
+.L12:
+	movl __progname,%eax
+	cmpb $0,(%eax)
+	je .L7
+	cmpl $__progname_storage+255,%edx
+	jb .L9
+.L7:
+	movb $0,(%edx)
+	movl $__progname_storage,__progname
+.L3:
+#	call __init
+	subl $16,%esp
+	pushl %eax
+	movl 8(%ebp),%eax
+	movl %eax,U_SYSTEM_ARGC
+	movl %esi,U_SYSTEM_ARGV
+	popl %eax
+#	pushl environ
+#	pushl %esi
+#	pushl 8(%ebp)
+	finit
+	fwait
+	fldcw __fpucw
+	xorl  %ebp,%ebp
+	call main
+#	pushl %eax
+#	call exit
+	jmp _haltproc
+        .p2align 2,0x90
+
+.globl _haltproc
+.type _haltproc,@function
+
+_haltproc:
+           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 , . - ___start
+	.align 4
+	.type	_strrchr , @function
+_strrchr:
+	pushl %ebp
+	movl %esp,%ebp
+	pushl %ebx
+	movl 8(%ebp),%eax
+	movb 12(%ebp),%bl
+	xorl %ecx,%ecx
+	.p2align 4,,7
+.L14:
+	movb (%eax),%dl
+	cmpb %bl,%dl
+	jne .L17
+	movl %eax,%ecx
+.L17:
+	testb %dl,%dl
+	je .L16
+	incl %eax
+	jmp .L14
+	.p2align 4,,7
+.L16:
+	movl %ecx,%eax
+	popl %ebx
+	leave
+	ret
+	.size	_strrchr , . - _strrchr
+	.comm	environ,4,4
+	.comm	__progname_storage,256,32