+++ /dev/null
- .code16
-
-#ifndef REGPARM
-# error "This file assumes -mregparm=3 -DREGPARM=3"
-#endif
-
- .section ".init","ax"
- .globl _start
- .type _start,@function
-_start:
- # Align the stack and make sure the high half is zero
- andl $0xfff8,%esp
-
- # Clear the .bss
- cld
- xorl %eax,%eax
- movw $__bss_start,%di
- movw $_end+3,%cx
- subw %di,%cx
- shrw $2,%cx
- rep ; stosl
-
- # Compute argc and argv (assumes REGPARM)
- xorl %edx,%edx
- movzbw 0x80,%bx
- movb %dl,0x81(%bx) # Zero-terminate string
- movb $0x81,%dl
- pushl %eax # Make space for argv
- movl %esp,%eax
- calll __parse_argv
- pushl %eax # argc
-
- # Initialize malloc
- calll __init_memory_arena
-
- # Now call main... (NOTE: gcc forces main to be regparm 0)
- popl %eax # argc
- popl %edx # argv
- calll main
-
- # Here %eax is the exit code, fall through into exit
-
- .size _start,.-_start
-
- .globl exit
- .type exit,@function
-exit:
- # Exit code already in %eax
- movb $0x4c,%ah # Terminate program
- int $0x21
-1: hlt
- jmp 1b
- .size exit,.-exit