libmemcached: don't use -fPIE and -pie with FLAT binaries
PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries
FLAT binaries cannot use -fPIE and -pie code, so let's teach libmemcached to not use such flags when BR2_BINFMT_FLAT=y.
Fixes:
http://autobuild.buildroot.org/results/8cb/8cbf57f9136cb42be31c88e0f1f32d3d2353e5ff/
and many previous similar build failures
--- package/libmemcached/libmemcached.mk | 11 +++++++++++ 1 file changed, 11 insertions(+)
package/libmemcached/libmemcached.mk +11 -0
@@ -18,4 +18,15 @@ LIBMEMCACHED_AUTORECONF = YES LIBMEMCACHED_LICENSE = BSD-3c LIBMEMCACHED_LICENSE_FILES = COPYING +# Help libmemcached to understand that -fPIE and -pie should not be +# used when FLAT binaries are used (shared libraries are not +# supported). +ifeq ($(BR2_BINFMT_FLAT),y) +LIBMEMCACHED_CONF_ENV += \ + ax_cv_check_cflags__Werror__fPIE=no \ + ax_cv_check_cflags__Werror__pie=no \ + ax_cv_check_cxxflags__Werror__fPIE=no \ + ax_cv_check_cxxflags__Werror__pie=no +endif + $(eval $(autotools-package))
Signature · 1 line
2.1.0
PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries
Hi Thomas,
Le 11/05/2015 22:55, Thomas Petazzoni a ?crit :
Quoted 9 lines
FLAT binaries cannot use -fPIE and -pie code, so let's teach libmemcached to not use such flags when BR2_BINFMT_FLAT=y.
Fixes:
http://autobuild.buildroot.org/results/8cb/8cbf57f9136cb42be31c88e0f1f32d3d2353e5ff/
and many previous similar build failuresSigned-off-by Thomas Petazzoni <[email protected]>
I "build" tested your patch an get another error during the man build. See http://patchwork.ozlabs.org/patch/471050/
With that fixed, libmemcached build fine on bfin.
Best regards,
Romain
Quoted 25 lines
--- package/libmemcached/libmemcached.mk | 11 +++++++++++ 1 file changed, 11 insertions(+)package/libmemcached/libmemcached.mk +11
-0@@ -18,4 +18,15 @@ LIBMEMCACHED_AUTORECONF = YES LIBMEMCACHED_LICENSE = BSD-3c LIBMEMCACHED_LICENSE_FILES = COPYING +# Help libmemcached to understand that -fPIE and -pie should not be +# used when FLAT binaries are used (shared libraries are not +# supported). +ifeq ($(BR2_BINFMT_FLAT),y) +LIBMEMCACHED_CONF_ENV += \ + ax_cv_check_cflags__Werror__fPIE=no \ + ax_cv_check_cflags__Werror__pie=no \ + ax_cv_check_cxxflags__Werror__fPIE=no \ + ax_cv_check_cxxflags__Werror__pie=no +endif + $(eval $(autotools-package))
PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries
In reply to Thomas PetazzoniQuoted 12 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas Petazzoni <[email protected]> writes:
FLAT binaries cannot use -fPIE and -pie code, so let's teach libmemcached to not use such flags when BR2_BINFMT_FLAT=y.
Fixes:
http://autobuild.buildroot.org/results/8cb/8cbf57f9136cb42be31c88e0f1f32d3d2353e5ff/
and many previous similar build failuresSigned-off-by Thomas Petazzoni <[email protected]>
package/libmemcached/libmemcached.mk LIBMEMCACHED_AUTORECONF = YES · line 30
Quoted 10 lines
package/libmemcached/libmemcached.mk +10
-0+# Help libmemcached to understand that -fPIE and -pie should not be +# used when FLAT binaries are used (shared libraries are not +# supported). +ifeq ($(BR2_BINFMT_FLAT),y) +LIBMEMCACHED_CONF_ENV += \ + ax_cv_check_cflags__Werror__fPIE=no \ + ax_cv_check_cflags__Werror__pie=no \ + ax_cv_check_cxxflags__Werror__fPIE=no \ + ax_cv_check_cxxflags__Werror__pie=no +endif
BINFMT_FLAT implies BR2_STATIC_LIBS and (elf) static libraries should also not be built with -fPIE / -pie, right?
Is there any specific reason to only do this workaround for BINFMT_FLAT?
Signature · 1 line
Bye, Peter Korsgaard
PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries
Dear Peter Korsgaard,
Quoted 4 lines · Peter Korsgaard
BINFMT_FLATimpliesBR2_STATIC_LIBSand (elf) static libraries should also not be built with -fPIE / -pie, right?Is there any specific reason to only do this workaround for
BINFMT_FLAT?
Actually, I'm a bit confused. Shouldn't FLAT binaries be PIE ? Since there's no MMU, each binary will be loaded at a different address, so binaries should be PIE, no?
But the original reason why I removed -pie is because of:
https://www.mail-archive.com/toolchain-devel at blackfin.uclinux.org/msg02113.html
For the exact same error, Mike Frysinger says to remove the -pie flag.
Hum, http://www.kdvelectronics.eu/uClinux-cisco2500/exotica.html seems to indicate that PIE is not required in all cases for FLAT binaries.
I would tend to trust Mike Frysinger on this, though :)
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries
Quoted 16 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas Petazzoni <[email protected]> writes:
Dear Peter Korsgaard,
Quoted 4 lines · Peter Korsgaard
BINFMT_FLATimpliesBR2_STATIC_LIBSand (elf) static libraries should also not be built with -fPIE / -pie, right?Is there any specific reason to only do this workaround for
BINFMT_FLAT?Actually, I'm a bit confused. Shouldn't FLAT binaries be PIE ? Since there's no MMU, each binary will be loaded at a different address, so binaries should be PIE, no?
But the original reason why I removed -pie is because of:
Quoted 8 lines
https://www.mail-archive.com/toolchain-devel at blackfin.uclinux.org/msg02113.html
For the exact same error, Mike Frysinger says to remove the -pie flag.
Hum, http://www.kdvelectronics.eu/uClinux-cisco2500/exotica.html seems to indicate that PIE is not required in all cases for FLAT binaries.
I would tend to trust Mike Frysinger on this, though :)
That's also the understanding I get from reading:
http://retired.beyondlogic.org/uClinux/bflt.htm
The flat format has its own relocation table that gets applied when loading.
I'm not quite sure how this would work with XIP though. The bottom of that page mentions that the binary then has to be built in PIC mode.
But my question was actually why we shouldn't disable PIE/PIC for static builds in general, and not just for flat mode?
Signature · 1 line
Peter Korsgaard
PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries
Dear Peter Korsgaard,
Quoted 6 lines · Peter Korsgaard
That's also the understanding I get from reading:
http://retired.beyondlogic.org/uClinux/bflt.htm
The flat format has its own relocation table that gets applied when loading.
Ok.
Quoted 5 lines
I'm not quite sure how this would work with XIP though. The bottom of that page mentions that the binary then has to be built in PIC mode.
But my question was actually why we shouldn't disable PIE/PIC for static builds in general, and not just for flat mode?
Yes, -fPIC is not needed for static, but it works (it generates slightly less efficient code though). But I'm fine with turning this BR2_BINFMT_FLAT condition to a BR2_STATIC_LIBS condition.
But in practice, they are lots of packages that build code only once to generate both a shared library and a static library, and they use -fPIC for both. Guaranteeing that all static libraries have non-PIC code would be a major effort.
Should I resend an updated patch, or will you commit after doing the change?
Thanks,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas Petazzoni <[email protected]> writes:
Hi,
Quoted 7 lines
Quoted 2 lines
But my question was actually why we shouldn't disable PIE/PIC for static builds in general, and not just for flat mode?
Yes, -fPIC is not needed for static, but it works (it generates slightly less efficient code though). But I'm fine with turning this
BR2_BINFMT_FLATcondition to aBR2_STATIC_LIBScondition.
Quoted 7 lines
But in practice, they are lots of packages that build code only once to generate both a shared library and a static library, and they use -fPIC for both. Guaranteeing that all static libraries have non-PIC code would be a major effort.
Should I resend an updated patch, or will you commit after doing the change?
I'll just fix it up when applying, thanks.
Signature · 2 lines
Venlig hilsen, Peter Korsgaard
PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries
In reply to Thomas PetazzoniQuoted 11 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas Petazzoni <[email protected]> writes:
FLAT binaries cannot use -fPIE and -pie code, so let's teach libmemcached to not use such flags when BR2_BINFMT_FLAT=y.
Fixes:
http://autobuild.buildroot.org/results/8cb/8cbf57f9136cb42be31c88e0f1f32d3d2353e5ff/
and many previous similar build failuresSigned-off-by Thomas Petazzoni <[email protected]>
Committed after reworking (and rewording) to trigger based on BR2_STATIC_LIBS instead, thanks.
Signature · 1 line
Bye, Peter Korsgaard