summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/pc386/start/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/i386/pc386/start/start.S')
-rw-r--r--c/src/lib/libbsp/i386/pc386/start/start.S25
1 files changed, 25 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/i386/pc386/start/start.S b/c/src/lib/libbsp/i386/pc386/start/start.S
index c09903e807..361f973c2e 100644
--- a/c/src/lib/libbsp/i386/pc386/start/start.S
+++ b/c/src/lib/libbsp/i386/pc386/start/start.S
@@ -87,6 +87,22 @@ speakl: jmp speakl # and SPIN!!!
nop
cli # DISABLE INTERRUPTS!!!
cld
+
+ /* Save multiboot info */
+ cmp $0x2badb002,eax
+ jne 1f
+ /* We have multiboot info; let's hope DS and ES are OK... */
+ movl ebx, SYM(_boot_multiboot_info_p)
+ /* Check for memory size info and save */
+ movl ebx, esi
+ movl $SYM(_boot_multiboot_info), edi
+ movsd
+ /* only save flag 1 since that's the only data we save */
+ and $1,-4(edi)
+ je 1f
+ movl $2,ecx
+ rep movsd
+1:
#ifdef DEBUG_EARLY_START
/*
* Must get video attribute to have a working printk.
@@ -178,6 +194,15 @@ SYM (zero_bss):
END_CODE
BEGIN_DATA
+ PUBLIC(_boot_multiboot_info_p)
+SYM(_boot_multiboot_info_p):
+ .long 0
+
+ PUBLIC(_boot_multiboot_info)
+SYM(_boot_multiboot_info):
+ .long 0 /* flags */
+ .long 0 /* mem_lower */
+ .long 0 /* mem_upper */
PUBLIC(_stack_size)
SYM(_stack_size):