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