Add a minimal _start required to run main.

Signed-off-by: Piotr Jaroszyński <p.jaroszyn...@gmail.com>
---
 src/arch/i386/prefix/linuxprefix.S   |   25 +++++++++++++++++++++++++
 src/arch/x86_64/prefix/linuxprefix.S |   22 ++++++++++++++++++++++
 2 files changed, 47 insertions(+), 0 deletions(-)
 create mode 100644 src/arch/i386/prefix/linuxprefix.S
 create mode 100644 src/arch/x86_64/prefix/linuxprefix.S

diff --git a/src/arch/i386/prefix/linuxprefix.S 
b/src/arch/i386/prefix/linuxprefix.S
new file mode 100644
index 0000000..881c61d
--- /dev/null
+++ b/src/arch/i386/prefix/linuxprefix.S
@@ -0,0 +1,25 @@
+#include <linux/unistd.h>
+
+       .section ".text"
+       .code32
+       .globl _start
+       .type _start, @function
+
+_start:
+       xorl    %ebp, %ebp
+
+       popl    %esi       // save argc
+       movl    %esp, %edi // save argv
+
+       andl    $~15, %esp // 16-byte align the stack
+
+       pushl   %edi // argv -> C arg2
+       pushl   %esi // argc -> C arg1
+
+       call    main
+
+       movl    %eax, %ebx // rc -> syscall arg1
+       movl    $__NR_exit, %eax
+       int     $0x80
+
+       .size _start, . - _start
diff --git a/src/arch/x86_64/prefix/linuxprefix.S 
b/src/arch/x86_64/prefix/linuxprefix.S
new file mode 100644
index 0000000..20163b8
--- /dev/null
+++ b/src/arch/x86_64/prefix/linuxprefix.S
@@ -0,0 +1,22 @@
+#include <linux/unistd.h>
+
+       .section ".text"
+       .code64
+       .globl _start
+       .type _start, @function
+
+_start:
+       xorq    %rbp, %rbp
+
+       popq    %rdi       // argc -> C arg1
+       movq    %rsp, %rsi // argv -> C arg2
+
+       andq    $~15, %rsp // 16-byte align the stack
+
+       call    main
+
+       movq    %rax, %rdi // rc -> syscall arg1
+       movq    $__NR_exit, %rax
+       syscall
+
+       .size _start, . - _start
-- 
1.7.1

_______________________________________________
gPXE-devel mailing list
gPXE-devel@etherboot.org
http://etherboot.org/mailman/listinfo/gpxe-devel

Reply via email to