>> The gdt address calculation in linuxboot.bin is broken in two ways: first >> it loads %cs into %eax, but that instruction leaves the high bits of %eax >> undefined and we did not clear them. Secondly, we completely ignore the >> incorrect %eax, and use the undefined %ebx instead. >> >> With these issues fixed, linuxboot works again. > > Wow, I wonder how it worked for me...
Got it. The option roms are built in pc-bios/optionrom, but QEMU loads the ones in pc-bios. So actually I was always testing Alexander's code even though I had done a "make -B" to feel safer. :-( Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> --- pc-bios/optionrom/Makefile | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile index 54db882..bf5a2f3 100644 --- a/pc-bios/optionrom/Makefile +++ b/pc-bios/optionrom/Makefile @@ -13,7 +13,7 @@ CFLAGS += -I$(SRC_PATH) CFLAGS += $(call cc-option, $(CFLAGS), -fno-stack-protector) QEMU_CFLAGS = $(CFLAGS) -build-all: multiboot.bin linuxboot.bin +build-all: ../multiboot.bin ../linuxboot.bin %.img: %.o $(call quiet-command,$(LD) -Ttext 0 -e _start -s -o $@ $<," Building $(TARGET_DIR)$@") @@ -21,7 +21,7 @@ build-all: multiboot.bin linuxboot.bin %.raw: %.img $(call quiet-command,$(OBJCOPY) -O binary -j .text $< $@," Building $(TARGET_DIR)$@") -%.bin: %.raw +../%.bin: %.raw $(call quiet-command,$(SHELL) $(SRC_PATH)/pc-bios/optionrom/signrom.sh $< $@," Signing $(TARGET_DIR)$@") clean: -- 1.6.5.2