Trivial update of Config-lab.lb so that it works again.
[coreboot.git] / payloads / libpayload / i386 / head.S
index 8dc31aa54dc9df3dacda49339b9c86108c2e0e8e..db18a5195fc1be97aecf135a5196a672dda99837 100644 (file)
@@ -27,6 +27,7 @@
  * SUCH DAMAGE.
  */
 
+       .code32
        .global _entry, _leave
        .text
        .align 4
@@ -42,6 +43,21 @@ _entry:
        /* We're back - go back to the bootloader. */
        ret
 
+       .align 4
+
+#define MB_MAGIC 0x1BADB002
+#define MB_FLAGS 0x00010003
+
+mb_header:
+       .long MB_MAGIC
+       .long MB_FLAGS
+       .long -(MB_MAGIC + MB_FLAGS)
+       .long mb_header
+       .long _start
+       .long _edata
+       .long _end
+       .long _init
+
 /*
  * This function saves off the previous stack and switches us to our
  * own execution environment.
@@ -53,6 +69,11 @@ _init:
        /* Store current stack pointer. */
        movl %esp, %esi
 
+       /* Store EAX and EBX */
+
+       movl %eax,loader_eax
+       movl %ebx,loader_ebx
+
        /* Setup new stack. */
        movl $_stack, %ebx
 
@@ -63,13 +84,14 @@ _init:
 
        /* Let's rock. */
        call start_main
-       
+
+       /* %eax has the return value - pass it on unmolested */
 _leave:
        /* Get old stack pointer. */
        popl %ebx
 
        /* Restore old stack. */
-       movl %esp, %ebx
+       movl %ebx, %esp
 
        /* Return to the original context. */
-       lret
+       ret