diff --git a/bootmain.c b/bootmain.c index 72f3927..d24bf66 100644 --- a/bootmain.c +++ b/bootmain.c @@ -43,7 +43,7 @@ bootmain(void) // Call the entry point from the ELF header. // Does not return! - entry = (void(*)(void))(elf->entry - KERNBASE); + entry = (void(*)(void))(elf->entry); entry(); } diff --git a/entry.S b/entry.S index 3fe4eb5..18947b0 100644 --- a/entry.S +++ b/entry.S @@ -25,15 +25,16 @@ .globl multiboot_header multiboot_header: #define magic 0x1badb002 - #define flags (1<<16 | 1<<0) + #define flags 0 .long magic .long flags .long (-magic-flags) - .long multiboot_header # beginning of image - .long multiboot_header - .long edata - .long end - .long entry + +# By convention, the _start symbol specifies the ELF entry point. +# Since we haven't set up virtual memory yet, our entry point is +# the physical address of 'entry'. +.globl _start +_start = V2P_WO(entry) # Entering xv6 on boot processor. Machine is mostly set up. .globl entry