From: Kevin O'Connor Date: Sun, 18 Dec 2011 15:51:19 +0000 (-0500) Subject: Don't use -fomit-frame-pointer when building VGA bios. X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=seabios.git;a=commitdiff_plain;h=9887ecb7dd95d9cea6986dbfdf9177694b92aa79 Don't use -fomit-frame-pointer when building VGA bios. The real-mode emulator that Windows 7 uses to execute the vga bios rom becomes very confused when the code tries to dereference the stack pointer instead of using the frame pointer, leading to corruption of parameters passed on the stack from one function to another. Signed-off-by: Julian Pidancet Signed-off-by: Kevin O'Connor --- diff --git a/Makefile b/Makefile index e3cf384..4f0e6ab 100644 --- a/Makefile +++ b/Makefile @@ -32,21 +32,20 @@ COMMONCFLAGS = -I$(OUT) -Os -MD \ $(call cc-option,$(CC),-Wtype-limits,) \ -m32 -march=i386 -mregparm=3 -mpreferred-stack-boundary=2 \ -mrtd -minline-all-stringops \ - -freg-struct-return -ffreestanding -fomit-frame-pointer \ - -fno-delete-null-pointer-checks \ + -freg-struct-return -ffreestanding -fno-delete-null-pointer-checks \ -ffunction-sections -fdata-sections -fno-common COMMONCFLAGS += $(call cc-option,$(CC),-nopie,) COMMONCFLAGS += $(call cc-option,$(CC),-fno-stack-protector,) COMMONCFLAGS += $(call cc-option,$(CC),-fno-stack-protector-all,) -CFLAGS32FLAT = $(COMMONCFLAGS) -g -DMODE16=0 -DMODESEGMENT=0 +CFLAGS32FLAT = $(COMMONCFLAGS) -DMODE16=0 -DMODESEGMENT=0 -g -fomit-frame-pointer CFLAGSSEG = $(COMMONCFLAGS) -DMODESEGMENT=1 -fno-defer-pop \ $(call cc-option,$(CC),-fno-jump-tables,-DMANUAL_NO_JUMP_TABLE) \ $(call cc-option,$(CC),-fno-tree-switch-conversion,) -CFLAGS32SEG = $(CFLAGSSEG) -DMODE16=0 -g +CFLAGS32SEG = $(CFLAGSSEG) -DMODE16=0 -g -fomit-frame-pointer CFLAGS16INC = $(CFLAGSSEG) -DMODE16=1 \ $(call cc-option,$(CC),--param large-stack-frame=4,-fno-inline) -CFLAGS16 = $(CFLAGS16INC) -g +CFLAGS16 = $(CFLAGS16INC) -g -fomit-frame-pointer all: $(OUT) $(OUT)bios.bin @@ -173,7 +172,9 @@ $(OUT)bios.bin.elf $(OUT)bios.bin: $(OUT)rom.o tools/checkrom.py SRCVGA=src/output.c src/util.c vgasrc/vga.c vgasrc/vgafb.c vgasrc/vgaio.c \ vgasrc/vgatables.c vgasrc/vgafonts.c vgasrc/clext.c -$(OUT)vgaccode.16.s: $(OUT)autoconf.h ; $(call whole-compile, $(CFLAGS16) -S -Isrc, $(SRCVGA),$@) +CFLAGS16VGA = $(CFLAGS16INC) -g -Isrc + +$(OUT)vgaccode.16.s: $(OUT)autoconf.h ; $(call whole-compile, $(CFLAGS16VGA) -S, $(SRCVGA),$@) $(OUT)vgalayout16.o: vgaentry.S $(OUT)vgaccode.16.s $(OUT)asm-offsets.h @echo " Compiling (16bit) $@"