diff options
author | Alexander Graf <agraf@suse.de> | 2009-11-17 17:49:16 +0100 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-12-03 15:25:58 -0600 |
commit | dc61b0dc5a24c7dac5e54a2baf9be235038aae64 (patch) | |
tree | 0a590f857d525be56fa073d0a9209c2608953190 /pc-bios | |
parent | 0745eb1e4336bf665a911754d18ddd63794b352d (diff) |
Make -kernel for linux work with bochsbios
While trying to run -kernel with -bios pc-bios/pcbios.bin, I realized
that I was actually writing data to %es, but only set up %ds to a 32-bit
segment we want to write to.
So at the end of the day the data hasn't actually been copied. Oops.
So here's a fix to set ES instead of DS, which makes -kernel work with
BOCHS bios again (and actually makes the code do the correct thing)!
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'pc-bios')
-rw-r--r-- | pc-bios/optionrom/linuxboot.S | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/pc-bios/optionrom/linuxboot.S b/pc-bios/optionrom/linuxboot.S index b3c90e33ce..7f3b1b2694 100644 --- a/pc-bios/optionrom/linuxboot.S +++ b/pc-bios/optionrom/linuxboot.S @@ -102,11 +102,11 @@ copy_kernel: mov $1, %eax mov %eax, %cr0 - /* So we can set DS to a 32-bit segment */ + /* So we can set ES to a 32-bit segment */ mov $0x10, %eax - mov %eax, %ds + mov %eax, %es - /* We're now running in 16-bit CS, but 32-bit DS! */ + /* We're now running in 16-bit CS, but 32-bit ES! */ /* Load kernel and initrd */ read_fw_blob(FW_CFG_KERNEL) @@ -118,9 +118,9 @@ copy_kernel: mov $0, %eax mov %eax, %cr0 - /* DS = CS */ + /* ES = CS */ mov %cs, %ax - mov %ax, %ds + mov %ax, %es jmp boot_kernel |