From patchwork Wed Dec 16 08:45:47 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Re: [PATCH] Fix TEXTREL in user targets when compiled with --enable-user-pie Date: Tue, 15 Dec 2009 22:45:47 -0000 From: "Kirill A. Shutemov" X-Patchwork-Id: 41243 Message-Id: To: Juan Quintela Cc: Blue Swirl , qemu-devel@nongnu.org On Tue, Dec 15, 2009 at 10:55 PM, Juan Quintela wrote: > "Kirill A. Shutemov" wrote: >> Please, apply it. >> >> On Tue, Dec 15, 2009 at 3:10 AM, Kirill A. Shutemov >> wrote: >>> We really need compile _all_ sources for user target with -fpie when >>> use --enable-user-pie. >>> >>> It's regression introduced by commit add16157d72454. >>> Please, do not break it any more. > > Wishful thinking :p > I bet that: > a- Blue Swirl didn't do it on purpose > b- our build system is very fragile, it will happens again. > > Learn to live with it. :( >>> Signed-off-by: Kirill A. Shutemov >>> Cc: Blue Swirl >>> --- >>>  Makefile.user |    4 ++-- >>>  configure     |    1 + >>>  2 files changed, 3 insertions(+), 2 deletions(-) >>> >>> diff --git a/Makefile.user b/Makefile.user >>> index 907e74b..0be73df 100644 >>> --- a/Makefile.user >>> +++ b/Makefile.user >>> @@ -5,9 +5,9 @@ include $(SRC_PATH)/rules.mak >>> >>>  .PHONY: all >>> >>> -VPATH=$(SRC_PATH) >>> +vpath %.c $(SRC_PATH) > > This change is needed? Yes. We dont want to take %.o from $(SRC_PATH) since they built without -fpie. >>> >>> -QEMU_CFLAGS+=-I.. >>> +QEMU_CFLAGS+=-I$(SRC_PATH)/ $(CFLAGS_PIE) > > Why do you change it? > > QEMU_CFLAGS has this value in configure > QEMU_CFLAGS="-I. -I\$(SRC_PATH) $QEMU_CFLAGS" Ok >>> >>>  obj-y = >>>  obj-y += envlist.o path.o >>> diff --git a/configure b/configure >>> index 273b6b7..6200391 100755 >>> --- a/configure >>> +++ b/configure >>> @@ -2555,6 +2555,7 @@ if test "$target_user_only" = "yes" -a "$static" = "no" -a \ >>>        "$user_pie" = "yes" ; then >>>   cflags="-fpie $cflags" >>>   ldflags="-pie $ldflags" >>> +  echo "CFLAGS_PIE=-fpie" >> $config_host_mak >>>  fi >>> >>>  if test "$target_softmmu" = "yes" -a \( \ >>> -- >>> 1.6.5.6 >>> >>> > > Can you test this other patch: It doesn't work. It uses %.o from $(SRC_DIR). Updated version, based on your patch: >From 5389617c7fa585126aab62c7a36e98116fa1f1aa Mon Sep 17 00:00:00 2001 From: Kirill A. Shutemov Date: Wed, 16 Dec 2009 10:43:02 +0200 Subject: [PATCH] user_only: compile everything with -fpie We really need compile _all_ sources for user target with -fpie when use --enable-user-pie. It's regression introduced by commit add16157d72454. Signed-off-by: Kirill A. Shutemov Cc: Blue Swirl --- Makefile.user | 7 ++++++- configure | 3 +++ 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/Makefile.user b/Makefile.user index 907e74b..75c92d4 100644 --- a/Makefile.user +++ b/Makefile.user @@ -2,10 +2,15 @@ include ../config-host.mak include $(SRC_PATH)/rules.mak +include config.mak .PHONY: all -VPATH=$(SRC_PATH) +# Do not take %.o from $(SRC_PATH), only %.c +# All %.o for user targets should be built with -fpie, when +# configured with --enable-user-pie, so we don't want to +# take %.o from $(SRC_PATH), since they built without -fpie +vpath %.c $(SRC_PATH) QEMU_CFLAGS+=-I.. diff --git a/configure b/configure index 273b6b7..5f463b0 100755 --- a/configure +++ b/configure @@ -2652,3 +2652,6 @@ d=libuser mkdir -p $d rm -f $d/Makefile ln -s $source_path/Makefile.user $d/Makefile +if test "$static" = "no" -a "$user_pie" = "yes" ; then + echo "QEMU_CFLAGS+=-fpie" > $d/config.mak +fi