Remove -fPIC on x86_64
PATCH v2 1/1 Remove -fPIC on x86_64
The -fPIC breaks the purgatory of kexec (= the code that passes command-line arguments to the kernel): kexec doesn't know how to handle the GOT and PLT relocation entries.
There is also no reason at all to pass -fPIC. Shared libraries that require it will add it to their local Makefiles, and normal executables have no business with -fPIC (plus it adds overhead...).
The -fPIC was added by Bernhard Reutner-Fischer <[email protected]> in commit 8027784c. That commit adds sysroot parameters to CFLAGS. There is no explanation why -fPIC is also added for x86_64.
The removal of -fPIC exposes a problem in the configuration of some packages when ccache is enabled, because the compilation of conftest.c is reused. To circumvent this problem, disable ccache in the configure step.
---
Build-tested with Sourcery toolchain and full-featured internal toolchain on a x86_64 host with allyesconfig (but without the packages that fail to build in the first place).
v2:
- Add CCACHE_DISABLE to TARGET_CONFIGURE_ARGS
- Test with allyesconfig
package/Makefile.in | 9 ++------- package/libgcrypt/libgcrypt.mk | 9 --------- 2 files changed, 2 insertions(+), 16 deletions(-)
package/Makefile.in +2 -7
@@ -87,12 +87,6 @@ endif TARGET_CFLAGS=$(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) -ifneq ($(BR2_PREFER_STATIC_LIB),y) -ifeq ($(BR2_x86_64),y) -TARGET_CFLAGS+=-fPIC -DPIC -endif # PIC for dynamic objects on x86_64 -endif - ifeq ($(findstring yy,$(BR2_mips)$(BR2_MIPS_ABI64)),yy) TARGET_CFLAGS+=-fno-pic -mno-abicalls endif
@@ -269,7 +263,8 @@ TARGET_CONFIGURE_ARGS= \ ac_cv_func_calloc_0_nonnull=yes \ ac_cv_func_realloc_0_nonnull=yes \ lt_cv_sys_lib_search_path_spec="" \ - $(BR2_AC_CV_C_BIGENDIAN) + $(BR2_AC_CV_C_BIGENDIAN) \ + CCACHE_DISABLE=1 #######################################################################
package/libgcrypt/libgcrypt.mk +0 -9
@@ -17,13 +17,4 @@ LIBGCRYPT_CONF_OPT = \ LIBGCRYPT_DEPENDENCIES = libgpg-error -# libgcrypt doesn't use pkg-config but instead has its own -# libgcrypt-config. Install this in the host directory so -# packages depending on libgcrypt can find it. -define LIBGCRYPT_HOST_INSTALL_LIBGCRYPT_CONFIG - $(INSTALL) -D -m 0755 $(STAGING_DIR)/usr/bin/libgcrypt-config $(HOST_DIR)/usr/bin/libgcrypt-config -endef - -LIBGCRYPT_POST_INSTALL_STAGING_HOOKS += LIBGCRYPT_HOST_INSTALL_LIBGCRYPT_CONFIG - $(eval $(call AUTOTARGETS))
Signature · 1 line
tg: (f61dcea..) t/pic (depends on: t/force-cross)
PATCH v2 1/1 Remove -fPIC on x86_64
Quoted 1 line · Arnout Vandecappelle (Essensium/Mind)
package/libgcrypt/libgcrypt.mk | 9 ---------
Oops, that one shouldn't have slipped in...
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286540 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
PATCH v2 1/1 Remove -fPIC on x86_64
Le Wed, 11 Jul 2012 13:51:21 +0200,
Arnout Vandecappelle <[email protected]> a ?crit :
Quoted 4 lines · Arnout Vandecappelle (Essensium/Mind)
Quoted 1 line
package/libgcrypt/libgcrypt.mk | 9 ---------Oops, that one shouldn't have slipped in...
And also the CCACHE_DISABLE bit I guess?
Thomas
Signature · 4 lines
Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com