From 1efe56fdb0b5f849211b70c86f329438fcdb1df9 Mon Sep 17 00:00:00 2001 From: Juergen Lock Date: Tue, 13 Oct 2009 23:29:12 +0200 Subject: [PATCH] multiboot.S patch for old as(1) (was: Re: [Qemu-devel] Some OpenBSD/amd64 build fixes) On Wed, Sep 23, 2009 at 10:55:02PM +0200, Juergen Lock wrote: > On Wed, Sep 23, 2009 at 09:31:16PM +0100, Laurence Tratt wrote: >[...] > > then the above error doesn't occur, but > > pc-bios/optionrom/multiboot.S dies as follows: > > > > $ > > AS optionrom/multiboot.o > > multiboot.S: Assembler messages: > > multiboot.S:116: Error: `%es:-4(%edi)' is not a valid 16 bit base/index > > expression > > $ > > > > What little Intel assembler I ever knew has long since departed from my > > brain, so I don't know why that error occurs, nor what a fix might be. > > > It occurs because of too old binutils (as(1) in this case), on FreeBSD > we now have a port for newer ones, > http://www.freshports.org/devel/binutils > so I depend on that and have the optionrom Makefile use the new as > like this: (the first change wrt CFLAGS is unrelated and has probably > been fixed in the meantime; it caused gmake to complain about > recursive use of CFLAGS.) > > Index: qemu/pc-bios/optionrom/Makefile > @@ -9,10 +9,13 @@ > > CFLAGS = -Wall -Wstrict-prototypes -Werror -fomit-frame-pointer -fno-builtin > CFLAGS += -I$(SRC_PATH) > -CFLAGS += $(call cc-option, $(CFLAGS), -fno-stack-protector,"") > +CFLAGS := $(CFLAGS) $(call cc-option, $(CFLAGS), -fno-stack-protector,"") > > build-all: multiboot.bin > > +%.o: %.S > + $(CC) -E $(CFLAGS) -o - -c $< |${LOCALBASE}/bin/as -V -Qy -o $@ > + > %.img: %.o > $(call quiet-command,$(LD) -Ttext 0 -e _start -s -o $@ $<," Building $(TARGET_DIR)$@") > That patch didn't seem to help on OpenBSD so I now finally got around making another one that just emits the bytes of the offending insn instead so people can keep using old assemblers: Signed-off-by: Anthony Liguori --- pc-bios/optionrom/multiboot.S | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pc-bios/optionrom/multiboot.S b/pc-bios/optionrom/multiboot.S index 93beb51..e6cbefd 100644 --- a/pc-bios/optionrom/multiboot.S +++ b/pc-bios/optionrom/multiboot.S @@ -113,7 +113,10 @@ mmap_loop: /* entry size (mmap struct) & max buffer size (int15) */ movl $20, %ecx /* store entry size */ + /* old as(1) doesn't like this insn so emit the bytes instead: movl %ecx, %es:-4(%edi) + */ + .dc.b 0x26,0x67,0x66,0x89,0x4f,0xfc /* e820 */ movl $0x0000e820, %eax /* 'SMAP' magic */ -- 2.7.4