Make the ELF entry point a physical address
This way, the bootloader doesn't have to translate the entry point. This also makes xv6 multiboot-compliant and follows the convention used by Linux.
This commit is contained in:
parent
68b5872716
commit
2fc6c35b2f
2 changed files with 8 additions and 7 deletions
|
@ -43,7 +43,7 @@ bootmain(void)
|
||||||
|
|
||||||
// Call the entry point from the ELF header.
|
// Call the entry point from the ELF header.
|
||||||
// Does not return!
|
// Does not return!
|
||||||
entry = (void(*)(void))(elf->entry - KERNBASE);
|
entry = (void(*)(void))(elf->entry);
|
||||||
entry();
|
entry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
entry.S
13
entry.S
|
@ -25,15 +25,16 @@
|
||||||
.globl multiboot_header
|
.globl multiboot_header
|
||||||
multiboot_header:
|
multiboot_header:
|
||||||
#define magic 0x1badb002
|
#define magic 0x1badb002
|
||||||
#define flags (1<<16 | 1<<0)
|
#define flags 0
|
||||||
.long magic
|
.long magic
|
||||||
.long flags
|
.long flags
|
||||||
.long (-magic-flags)
|
.long (-magic-flags)
|
||||||
.long multiboot_header # beginning of image
|
|
||||||
.long multiboot_header
|
# By convention, the _start symbol specifies the ELF entry point.
|
||||||
.long edata
|
# Since we haven't set up virtual memory yet, our entry point is
|
||||||
.long end
|
# the physical address of 'entry'.
|
||||||
.long entry
|
.globl _start
|
||||||
|
_start = V2P_WO(entry)
|
||||||
|
|
||||||
# Entering xv6 on boot processor. Machine is mostly set up.
|
# Entering xv6 on boot processor. Machine is mostly set up.
|
||||||
.globl entry
|
.globl entry
|
||||||
|
|
Loading…
Reference in a new issue