[Buildroot] [PATCH v2] toolchain: add hidden symbol for PIE support

Romain Naour romain.naour at gmail.com
Sun Jul 24 15:06:17 UTC 2016


Hi Waldemar,

Le 11/07/2016 à 16:35, Waldemar Brodkorb a écrit :
> uClibc-ng does not support PIE for some architectures as
> arc and m68k. It isn't implemented in the static linking case, too.
> With musl toolchains you might have static PIE support with little
> patching of gcc. Static linking for GNU libc isn't enabled in
> buildroot. Fixup any package using special treatment of PIE.
> (grep -ir pie package/*/*.mk)
> 
> Signed-off-by: Waldemar Brodkorb <wbx at openadk.org>
> ---
> v1 -> v2:
>   - depends on not required, suggested by Thomas Petazzoni
> ---
>  package/bluez_utils/bluez_utils.mk   | 3 +--
>  package/cifs-utils/cifs-utils.mk     | 2 +-
>  package/libmemcached/libmemcached.mk | 4 +---
>  package/libsodium/libsodium.mk       | 2 +-
>  package/lvm2/lvm2.mk                 | 2 +-
>  package/openssh/openssh.mk           | 7 +------
>  package/openswan/openswan.mk         | 4 ++--
>  package/pure-ftpd/pure-ftpd.mk       | 2 +-
>  package/quagga/quagga.mk             | 2 +-
>  package/tinc/tinc.mk                 | 2 +-
>  package/trousers/trousers.mk         | 3 +--
>  toolchain/Config.in                  | 3 +++
>  toolchain/toolchain-common.in        | 3 +++
>  13 files changed, 18 insertions(+), 21 deletions(-)
> 
> diff --git a/package/bluez_utils/bluez_utils.mk b/package/bluez_utils/bluez_utils.mk
> index 91c2905..5885f18 100644
> --- a/package/bluez_utils/bluez_utils.mk
> +++ b/package/bluez_utils/bluez_utils.mk
> @@ -54,8 +54,7 @@ BLUEZ_UTILS_CONF_OPTS +=	\
>  	--disable-usb
>  endif
>  
> -# PIE is broken for m68k
> -ifeq ($(BR2_m68k),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  BLUEZ_UTILS_CONF_OPTS += --disable-pie
>  endif
>  
> diff --git a/package/cifs-utils/cifs-utils.mk b/package/cifs-utils/cifs-utils.mk
> index c90a504..6ab408a 100644
> --- a/package/cifs-utils/cifs-utils.mk
> +++ b/package/cifs-utils/cifs-utils.mk
> @@ -10,7 +10,7 @@ CIFS_UTILS_SITE = http://ftp.samba.org/pub/linux-cifs/cifs-utils
>  CIFS_UTILS_LICENSE = GPLv3+
>  CIFS_UTILS_LICENSE_FILES = COPYING
>  
> -ifneq ($(BR2_STATIC_LIBS)$(BR2_m68k),)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  CIFS_UTILS_CONF_OPTS += --disable-pie
>  endif
>  
> diff --git a/package/libmemcached/libmemcached.mk b/package/libmemcached/libmemcached.mk
> index a5ea4f5..1606fdf 100644
> --- a/package/libmemcached/libmemcached.mk
> +++ b/package/libmemcached/libmemcached.mk
> @@ -18,9 +18,7 @@ LIBMEMCACHED_AUTORECONF = YES
>  LIBMEMCACHED_LICENSE = BSD-3c
>  LIBMEMCACHED_LICENSE_FILES = COPYING
>  
> -# Help libmemcached to understand that -fPIE and -pie should not be
> -# used when linking statically.
> -ifeq ($(BR2_STATIC_LIBS),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  LIBMEMCACHED_CONF_ENV += \
>  	ax_cv_check_cflags__Werror__fPIE=no \
>  	ax_cv_check_cflags__Werror__pie=no \
> diff --git a/package/libsodium/libsodium.mk b/package/libsodium/libsodium.mk
> index 13dba8d..2ce8f81 100644
> --- a/package/libsodium/libsodium.mk
> +++ b/package/libsodium/libsodium.mk
> @@ -10,7 +10,7 @@ LIBSODIUM_LICENSE = ISC
>  LIBSODIUM_LICENSE_FILES = LICENSE
>  LIBSODIUM_INSTALL_STAGING = YES
>  
> -ifeq ($(BR2_arc),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  LIBSODIUM_CONF_OPTS += --disable-pie
>  endif
>  
> diff --git a/package/lvm2/lvm2.mk b/package/lvm2/lvm2.mk
> index 64eb926..9a45b53 100644
> --- a/package/lvm2/lvm2.mk
> +++ b/package/lvm2/lvm2.mk
> @@ -43,7 +43,7 @@ else
>  LVM2_CONF_OPTS += --disable-applib
>  endif
>  
> -ifeq ($(BR2_arc)$(BR2_m68k),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  LVM2_CONF_ENV += ac_cv_flag_HAVE_PIE=no
>  endif
>  
> diff --git a/package/openssh/openssh.mk b/package/openssh/openssh.mk
> index 856646c..32d2929 100644
> --- a/package/openssh/openssh.mk
> +++ b/package/openssh/openssh.mk
> @@ -22,12 +22,7 @@ define OPENSSH_USERS
>  	sshd -1 sshd -1 * - - - SSH drop priv user
>  endef
>  
> -# uClibc toolchain for ARC doesn't support PIE at the moment
> -ifeq ($(BR2_arc),y)
> -OPENSSH_CONF_OPTS += --without-pie
> -endif
> -# PIE and static does not work on Linux
> -ifeq ($(BR2_STATIC_LIBS),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  OPENSSH_CONF_OPTS += --without-pie
>  endif
>  
> diff --git a/package/openswan/openswan.mk b/package/openswan/openswan.mk
> index 54bd4b3..5bf9bb6 100644
> --- a/package/openswan/openswan.mk
> +++ b/package/openswan/openswan.mk
> @@ -11,8 +11,8 @@ OPENSWAN_LICENSE_FILES = COPYING LICENSE
>  
>  OPENSWAN_DEPENDENCIES = host-bison host-flex gmp iproute2
>  OPENSWAN_MAKE_OPTS = ARCH=$(BR2_ARCH) CC="$(TARGET_CC)" \
> -	USERCOMPILE="$(TARGET_CFLAGS) $(if $(BR2_STATIC_LIBS),,-fPIE)" \
> -	USERLINK="$(TARGET_LDFLAGS) $(if $(BR2_STATIC_LIBS),,-fPIE)" \
> +	USERCOMPILE="$(TARGET_CFLAGS) $(if $(BR2_TOOLCHAIN_SUPPORTS_PIE),-fPIE,)" \
> +	USERLINK="$(TARGET_LDFLAGS) $(if $(BR2_TOOLCHAIN_SUPPORTS_PIE),-fPIE,)" \
>  	INC_USRLOCAL=/usr USE_KLIPS=false USE_MAST=false USE_NM=false
>  
>  ifeq ($(BR2_PACKAGE_LIBCURL),y)
> diff --git a/package/pure-ftpd/pure-ftpd.mk b/package/pure-ftpd/pure-ftpd.mk
> index e1040fa..db1d82f 100644
> --- a/package/pure-ftpd/pure-ftpd.mk
> +++ b/package/pure-ftpd/pure-ftpd.mk
> @@ -41,7 +41,7 @@ else
>  PURE_FTPD_CONF_OPTS += --without-tls
>  endif
>  
> -ifeq ($(BR2_arc),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  PURE_FTPD_CONF_ENV += ax_cv_check_cflags___fPIE=no ax_cv_check_ldflags___fPIE=no
>  endif
>  
> diff --git a/package/quagga/quagga.mk b/package/quagga/quagga.mk
> index 1bbc72d..3954509 100644
> --- a/package/quagga/quagga.mk
> +++ b/package/quagga/quagga.mk
> @@ -68,7 +68,7 @@ else
>  QUAGGA_CONF_OPTS += --disable-vtysh
>  endif
>  
> -ifeq ($(BR2_arc),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  QUAGGA_CONF_OPTS += --disable-pie
>  endif
>  
> diff --git a/package/tinc/tinc.mk b/package/tinc/tinc.mk
> index cb0785b..1cc4cbd 100644
> --- a/package/tinc/tinc.mk
> +++ b/package/tinc/tinc.mk
> @@ -11,7 +11,7 @@ TINC_LICENSE = GPLv2+ with OpenSSL exception
>  TINC_LICENSE_FILES = COPYING COPYING.README
>  TINC_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -std=c99"
>  
> -ifeq ($(BR2_arc),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  TINC_CONF_ENV += \
>  	ax_cv_check_cflags___fPIE=no \
>  	ax_cv_check_ldflags___pie=no
> diff --git a/package/trousers/trousers.mk b/package/trousers/trousers.mk
> index 70daa88..f0932e7 100644
> --- a/package/trousers/trousers.mk
> +++ b/package/trousers/trousers.mk
> @@ -23,8 +23,7 @@ endif
>  # workaround.
>  TROUSERS_CONF_OPTS += --disable-usercheck
>  
> -# uClibc toolchain for ARC doesn't support PIE at the moment
> -ifeq ($(BR2_arc),y)
> +ifneq ($(BR2_TOOLCHAIN_SUPPORTS_PIE),y)
>  TROUSERS_CONF_ENV += \
>  	ax_cv_check_cflags___fPIE__DPIE=no \
>  	ax_cv_check_ldflags___pie=no
> diff --git a/toolchain/Config.in b/toolchain/Config.in
> index b49588f..35db809 100644
> --- a/toolchain/Config.in
> +++ b/toolchain/Config.in
> @@ -15,9 +15,11 @@ config BR2_TOOLCHAIN_USES_GLIBC
>  	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
>  	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
>  	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
> +	select BR2_TOOLCHAIN_SUPPORTS_PIE
>  
>  config BR2_TOOLCHAIN_USES_UCLIBC
>  	bool
> +	select BR2_TOOLCHAIN_SUPPORTS_PIE if !BR2_arc && !BR2_m68k && !BR2_STATIC_LIBS

It seems that we also need to black list ARM + uClibc + static linking config [1]

Also, what about a test in the toolchain helper to check PIE support is really
available ?

In order to ease the review, I would be great if you can split these changes in
two patches ?
- add BR2_TOOLCHAIN_SUPPORTS_PIE in the toolchain infra
- use BR2_TOOLCHAIN_SUPPORTS_PIE in packages

[1] http://lists.busybox.net/pipermail/buildroot/2016-July/168309.html

Best regards,
Romain

>  
>  config BR2_TOOLCHAIN_USES_MUSL
>  	bool
> @@ -26,6 +28,7 @@ config BR2_TOOLCHAIN_USES_MUSL
>  	select BR2_TOOLCHAIN_HAS_THREADS
>  	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
>  	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
> +	select BR2_TOOLCHAIN_SUPPORTS_PIE
>  
>  choice
>  	prompt "Toolchain type"
> diff --git a/toolchain/toolchain-common.in b/toolchain/toolchain-common.in
> index 65df31b..d69acf2 100644
> --- a/toolchain/toolchain-common.in
> +++ b/toolchain/toolchain-common.in
> @@ -39,6 +39,9 @@ config BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
>  config BR2_TOOLCHAIN_HAS_SSP
>  	bool
>  
> +config BR2_TOOLCHAIN_SUPPORTS_PIE
> +	bool
> +
>  config BR2_ENABLE_LOCALE_PURGE
>  	bool "Purge unwanted locales"
>  	help
> 




More information about the buildroot mailing list