Skip to contentSkip to conversation

libmemcached: don't use -fPIE and -pie with FLAT binaries

PATCH New Thomas Petazzoni 3 participants 8 messages May 11, 2015 – May 12, 2015

lore
Share & tools
lore
#0 lore raw

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
index d442b3c..f32963d 100644
@@ -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
#1 lore raw

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 failures

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
index d442b3c..f32963d 100644
@@ -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))
#2 lore raw

PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries

In reply to Thomas Petazzoni
Quoted 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 failures

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
#3 lore raw

PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries

Dear Peter Korsgaard,

Quoted 4 lines · Peter Korsgaard

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?

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
#4 lore raw

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_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?

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 
#5 lore raw

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
#6 lore raw

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_FLAT condition to a BR2_STATIC_LIBS condition.

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 
#7 lore raw

PATCH 1/1 libmemcached: don't use -fPIE and -pie with FLAT binaries

In reply to Thomas Petazzoni
Quoted 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 failures

Committed after reworking (and rewording) to trigger based on BR2_STATIC_LIBS instead, thanks.

Signature · 1 line
Bye, Peter Korsgaard