... now with qemu-stable addressed - I had pressed "send" to early.
Stefan Am 10.12.2013 19:42, schrieb Stefan Weil: > Am 10.12.2013 08:48, schrieb Brad Smith: >> On 10/12/13 2:07 AM, Stefan Weil wrote: >>> Am 10.12.2013 02:26, schrieb Brad Smith: >>>> This resolves the build issue with building the ROMs on OpenBSD on >>>> x86 archs. >>>> As of OpenBSD 5.3 the compiler builds PIE binaries by default and >>>> thus the >>>> whole OS/packages and so forth. The ROMs need to have PIE disabled. >>>> This >>>> is my initial attempt at trying to get somehting upstream so that QEMU >>>> both builds out of the box and to resolve the build issue with the >>>> buildbots that has been around for awhile. We have a patch in our ports >>>> tree but it is just the flags hardcoded into the Makefile which >>>> obviously >>>> is not appropriate for upstream. >>>> >>>> From the OpenBSD buildbots.. >>>> Building optionrom/multiboot.img >>>> ld: multiboot.o: relocation R_X86_64_16 can not be used when making >>>> a shared object; recompile with -fPIC >>>> >>>> >>>> Signed-off by: Brad Smith <b...@comstyle.com> >>>> --- >>>> >>>> Changes in v2: >>>> * Fix '==' is not portable syntax. >>>> >>>> >>>> diff --git a/configure b/configure >>>> index 508f6a5..6d84885 100755 >>>> --- a/configure >>>> +++ b/configure >>>> @@ -1342,6 +1342,10 @@ EOF >>>> if compile_prog "-fPIE -DPIE" "-pie"; then >>>> QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" >>>> LDFLAGS="-pie $LDFLAGS" >>>> + if test "$targetos" = OpenBSD; then >>>> + CC_NOPIE="-fno-pie" >>>> + LD_NOPIE="-nopie" >>>> + fi >>>> pie="yes" >>>> if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then >>>> LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS" >>>> @@ -4307,6 +4311,8 @@ if test "$gcov" = "yes" ; then >>>> echo "CONFIG_GCOV=y" >> $config_host_mak >>>> echo "GCOV=$gcov_tool" >> $config_host_mak >>>> fi >>>> +echo "CC_NOPIE=$CC_NOPIE" >> $config_host_mak >>>> +echo "LD_NOPIE=$LD_NOPIE" >> $config_host_mak >>>> >>>> # use included Linux headers >>>> if test "$linux" = "yes" ; then >>>> diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile >>>> index 57d8bd0..0b35000 100644 >>>> --- a/pc-bios/optionrom/Makefile >>>> +++ b/pc-bios/optionrom/Makefile >>>> @@ -12,6 +12,7 @@ $(call set-vpath, $(SRC_PATH)/pc-bios/optionrom) >>>> CFLAGS := -Wall -Wstrict-prototypes -Werror -fomit-frame-pointer >>>> -fno-builtin >>>> CFLAGS += -I$(SRC_PATH) >>>> CFLAGS += $(call cc-option, $(CFLAGS), -fno-stack-protector) >>>> +CFLAGS += $(CC_NOPIE) >>> Would it be possible to add -fno-pie unconditionally here ... >>> >>> >>>> QEMU_CFLAGS = $(CFLAGS) >>>> >>>> build-all: multiboot.bin linuxboot.bin kvmvapic.bin >>>> @@ -20,7 +21,7 @@ build-all: multiboot.bin linuxboot.bin kvmvapic.bin >>>> .SECONDARY: >>>> >>>> %.img: %.o >>>> - $(call quiet-command,$(LD) -Ttext 0 -e _start -s -o $@ $<," >>>> Building $(TARGET_DIR)$@") >>>> + $(call quiet-command,$(LD) $(LD_NOPIE) -Ttext 0 -e _start -s -o >>>> $@ $<," Building $(TARGET_DIR)$@") >>>> >>> >>> ... and use -nopie here? I tried it in my Linux build environment, and >>> it seems to work. >>> >>> Then no changes to file configure are needed. >> The linker flag definitely does not exist everywhere so that would >> break the build on other OS/toolchain combinations; for example stock >> binutils does not have this flag. I would not have bothered going this >> route if I didn't see having the flags hard coded as causing a problem. >> > > Thank you for your explanation. I cc your patch to qemu-stable because > fixing QEMU 1.7 for OpenBSD might be a good idea, too. > > Reviewed-by: Stefan Weil <s...@weilnetz.de> > > > If other hosts beside OpenBSD will need thismodification in the future, > I suggest modified code like this: > > if compile_prog "-fPIE -DPIE" "-pie"; then > QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" > LDFLAGS="-pie $LDFLAGS" > # [...] > fi > > if compile_prog "-fno-pie" "-nopie"; then > CFLAGS_NOPIE="-fno-pie" > LDFLAGS_NOPIE="-nopie" > fi > > (separate if blocks in configure and use CFLAGS_NOPIE, LDFLAGS_NOPIE > instead of CC_NOPIE, LD_NOPIE, this also needs a modified Makefile). > > Regards, > Stefan >