Convert to using -mregparm=3; makes the code slightly smaller AND
authorhpa <hpa>
Thu, 16 Dec 2004 21:53:20 +0000 (21:53 +0000)
committerhpa <hpa>
Thu, 16 Dec 2004 21:53:20 +0000 (21:53 +0000)
avoids some stupid problems with .code16 on some binutils versions.

dos/Makefile
dos/crt0.S

index b54098a..b2b6983 100644 (file)
@@ -1,4 +1,4 @@
-CC      = gcc -m32
+CC      = gcc -m32 -mregparm=3
 LD       = ld -m elf_i386
 OBJCOPY  = objcopy
 OPTFLAGS = -g -Os -march=i386 -falign-functions=0 -falign-jumps=0 -falign-loops=0 -fomit-frame-pointer
index 530059c..38f6725 100644 (file)
@@ -4,6 +4,9 @@
        .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
@@ -51,20 +54,22 @@ _start:
        calll __init_memory_arena
 
        # Now call main...
-       pushl $argv             # Push argv
-       pushl %eax              # Dummy argc (we dont look at it)
+       movl $argv,%edx         # argv
+       xorl %eax,%eax          # dummy argc (we dont use it)
        calll main
-       pushl %eax
-       calll exit
-       hlt
+
+       # Here %eax is the exit code, fall through into exit
+       
        .size _start,.-_start
 
        .globl exit
        .type exit,@function
 exit:
-       movb 4(%esp),%al
+       # Exit code already in %eax
        movb $0x4c,%ah          # Terminate program
        int $0x21
+1:     hlt
+       jmp 1b
        .size exit,.-exit
        
        .section ".bss","aw"