diff mbox series

[2/2] i686: Fix build with --disable-multiarch

Message ID 20230808122755.66307-3-adhemerval.zanella@linaro.org
State New
Headers show
Series More x86 build fixes | expand

Commit Message

Adhemerval Zanella Netto Aug. 8, 2023, 12:27 p.m. UTC
Since i686 provides the fortified wrappers for memcpy, mempcpy,
memmove, and memset on the same string implementation, the static
build tries to optimized it by not tying the fortified wrappers
to string routine (to avoid pulling the fortify function if
they are not required).

Checked on i686-linux-gnu building with different option:
default and --disable-multi-arch plus default, --disable-default-pie,
--enable-fortify-source={2,3}, and --enable-fortify-source={2,3}
with --disable-default-pie.
---
 sysdeps/i386/i686/memcpy.S                | 2 +-
 sysdeps/i386/i686/mempcpy.S               | 2 +-
 sysdeps/i386/i686/multiarch/memcpy_chk.c  | 2 ++
 sysdeps/i386/i686/multiarch/memmove_chk.c | 2 ++
 sysdeps/i386/i686/multiarch/mempcpy_chk.c | 2 ++
 sysdeps/i386/i686/multiarch/memset_chk.c  | 2 ++
 6 files changed, 10 insertions(+), 2 deletions(-)

Comments

Siddhesh Poyarekar Aug. 8, 2023, 9:59 p.m. UTC | #1
On 2023-08-08 08:27, Adhemerval Zanella via Libc-alpha wrote:
> Since i686 provides the fortified wrappers for memcpy, mempcpy,
> memmove, and memset on the same string implementation, the static
> build tries to optimized it by not tying the fortified wrappers
> to string routine (to avoid pulling the fortify function if
> they are not required).
> 
> Checked on i686-linux-gnu building with different option:
> default and --disable-multi-arch plus default, --disable-default-pie,
> --enable-fortify-source={2,3}, and --enable-fortify-source={2,3}
> with --disable-default-pie.
> ---

LGTM, also tested with:

../configure CC="gcc -m32" CXX="g++ -m32" --build=i686-pc-linux-gnu 
--host=i686-pc-linux-gnu --prefix=/usr --enable-fortify-source 
--disable-default-pie

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

>   sysdeps/i386/i686/memcpy.S                | 2 +-
>   sysdeps/i386/i686/mempcpy.S               | 2 +-
>   sysdeps/i386/i686/multiarch/memcpy_chk.c  | 2 ++
>   sysdeps/i386/i686/multiarch/memmove_chk.c | 2 ++
>   sysdeps/i386/i686/multiarch/mempcpy_chk.c | 2 ++
>   sysdeps/i386/i686/multiarch/memset_chk.c  | 2 ++
>   6 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/sysdeps/i386/i686/memcpy.S b/sysdeps/i386/i686/memcpy.S
> index 9b48ec0ea1..b86af4aac9 100644
> --- a/sysdeps/i386/i686/memcpy.S
> +++ b/sysdeps/i386/i686/memcpy.S
> @@ -27,7 +27,7 @@
>   #define LEN	SRC+4
>   
>   	.text
> -#if defined PIC && IS_IN (libc)
> +#if defined SHARED && IS_IN (libc)
>   ENTRY_CHK (__memcpy_chk)
>   	movl	12(%esp), %eax
>   	cmpl	%eax, 16(%esp)
> diff --git a/sysdeps/i386/i686/mempcpy.S b/sysdeps/i386/i686/mempcpy.S
> index 26f8501e7d..14d9dd681a 100644
> --- a/sysdeps/i386/i686/mempcpy.S
> +++ b/sysdeps/i386/i686/mempcpy.S
> @@ -27,7 +27,7 @@
>   #define LEN	SRC+4
>   
>   	.text
> -#if defined PIC && IS_IN (libc)
> +#if defined SHARED && IS_IN (libc)
>   ENTRY_CHK (__mempcpy_chk)
>   	movl	12(%esp), %eax
>   	cmpl	%eax, 16(%esp)
> diff --git a/sysdeps/i386/i686/multiarch/memcpy_chk.c b/sysdeps/i386/i686/multiarch/memcpy_chk.c
> index ec945dc91f..c3a8aeaf18 100644
> --- a/sysdeps/i386/i686/multiarch/memcpy_chk.c
> +++ b/sysdeps/i386/i686/multiarch/memcpy_chk.c
> @@ -32,4 +32,6 @@ libc_ifunc_redirected (__redirect_memcpy_chk, __memcpy_chk,
>   __hidden_ver1 (__memcpy_chk, __GI___memcpy_chk, __redirect_memcpy_chk)
>     __attribute__ ((visibility ("hidden"))) __attribute_copy__ (__memcpy_chk);
>   # endif
> +#else
> +# include <debug/memcpy_chk.c>
>   #endif
> diff --git a/sysdeps/i386/i686/multiarch/memmove_chk.c b/sysdeps/i386/i686/multiarch/memmove_chk.c
> index 55c7601d5d..070dde083a 100644
> --- a/sysdeps/i386/i686/multiarch/memmove_chk.c
> +++ b/sysdeps/i386/i686/multiarch/memmove_chk.c
> @@ -32,4 +32,6 @@ libc_ifunc_redirected (__redirect_memmove_chk, __memmove_chk,
>   __hidden_ver1 (__memmove_chk, __GI___memmove_chk, __redirect_memmove_chk)
>     __attribute__ ((visibility ("hidden"))) __attribute_copy__ (__memmove_chk);
>   # endif
> +#else
> +# include <debug/memmove_chk.c>
>   #endif
> diff --git a/sysdeps/i386/i686/multiarch/mempcpy_chk.c b/sysdeps/i386/i686/multiarch/mempcpy_chk.c
> index 83569cf9d9..14360f1828 100644
> --- a/sysdeps/i386/i686/multiarch/mempcpy_chk.c
> +++ b/sysdeps/i386/i686/multiarch/mempcpy_chk.c
> @@ -32,4 +32,6 @@ libc_ifunc_redirected (__redirect_mempcpy_chk, __mempcpy_chk,
>   __hidden_ver1 (__mempcpy_chk, __GI___mempcpy_chk, __redirect_mempcpy_chk)
>     __attribute__ ((visibility ("hidden"))) __attribute_copy__ (__mempcpy_chk);
>   # endif
> +#else
> +# include <debug/mempcpy_chk.c>
>   #endif
> diff --git a/sysdeps/i386/i686/multiarch/memset_chk.c b/sysdeps/i386/i686/multiarch/memset_chk.c
> index 1a7503858d..8179ef7c0b 100644
> --- a/sysdeps/i386/i686/multiarch/memset_chk.c
> +++ b/sysdeps/i386/i686/multiarch/memset_chk.c
> @@ -32,4 +32,6 @@ libc_ifunc_redirected (__redirect_memset_chk, __memset_chk,
>   __hidden_ver1 (__memset_chk, __GI___memset_chk, __redirect_memset_chk)
>     __attribute__ ((visibility ("hidden"))) __attribute_copy__ (__memset_chk);
>   # endif
> +#else
> +# include <debug/memset_chk.c>
>   #endif
diff mbox series

Patch

diff --git a/sysdeps/i386/i686/memcpy.S b/sysdeps/i386/i686/memcpy.S
index 9b48ec0ea1..b86af4aac9 100644
--- a/sysdeps/i386/i686/memcpy.S
+++ b/sysdeps/i386/i686/memcpy.S
@@ -27,7 +27,7 @@ 
 #define LEN	SRC+4
 
 	.text
-#if defined PIC && IS_IN (libc)
+#if defined SHARED && IS_IN (libc)
 ENTRY_CHK (__memcpy_chk)
 	movl	12(%esp), %eax
 	cmpl	%eax, 16(%esp)
diff --git a/sysdeps/i386/i686/mempcpy.S b/sysdeps/i386/i686/mempcpy.S
index 26f8501e7d..14d9dd681a 100644
--- a/sysdeps/i386/i686/mempcpy.S
+++ b/sysdeps/i386/i686/mempcpy.S
@@ -27,7 +27,7 @@ 
 #define LEN	SRC+4
 
 	.text
-#if defined PIC && IS_IN (libc)
+#if defined SHARED && IS_IN (libc)
 ENTRY_CHK (__mempcpy_chk)
 	movl	12(%esp), %eax
 	cmpl	%eax, 16(%esp)
diff --git a/sysdeps/i386/i686/multiarch/memcpy_chk.c b/sysdeps/i386/i686/multiarch/memcpy_chk.c
index ec945dc91f..c3a8aeaf18 100644
--- a/sysdeps/i386/i686/multiarch/memcpy_chk.c
+++ b/sysdeps/i386/i686/multiarch/memcpy_chk.c
@@ -32,4 +32,6 @@  libc_ifunc_redirected (__redirect_memcpy_chk, __memcpy_chk,
 __hidden_ver1 (__memcpy_chk, __GI___memcpy_chk, __redirect_memcpy_chk)
   __attribute__ ((visibility ("hidden"))) __attribute_copy__ (__memcpy_chk);
 # endif
+#else
+# include <debug/memcpy_chk.c>
 #endif
diff --git a/sysdeps/i386/i686/multiarch/memmove_chk.c b/sysdeps/i386/i686/multiarch/memmove_chk.c
index 55c7601d5d..070dde083a 100644
--- a/sysdeps/i386/i686/multiarch/memmove_chk.c
+++ b/sysdeps/i386/i686/multiarch/memmove_chk.c
@@ -32,4 +32,6 @@  libc_ifunc_redirected (__redirect_memmove_chk, __memmove_chk,
 __hidden_ver1 (__memmove_chk, __GI___memmove_chk, __redirect_memmove_chk)
   __attribute__ ((visibility ("hidden"))) __attribute_copy__ (__memmove_chk);
 # endif
+#else
+# include <debug/memmove_chk.c>
 #endif
diff --git a/sysdeps/i386/i686/multiarch/mempcpy_chk.c b/sysdeps/i386/i686/multiarch/mempcpy_chk.c
index 83569cf9d9..14360f1828 100644
--- a/sysdeps/i386/i686/multiarch/mempcpy_chk.c
+++ b/sysdeps/i386/i686/multiarch/mempcpy_chk.c
@@ -32,4 +32,6 @@  libc_ifunc_redirected (__redirect_mempcpy_chk, __mempcpy_chk,
 __hidden_ver1 (__mempcpy_chk, __GI___mempcpy_chk, __redirect_mempcpy_chk)
   __attribute__ ((visibility ("hidden"))) __attribute_copy__ (__mempcpy_chk);
 # endif
+#else
+# include <debug/mempcpy_chk.c>
 #endif
diff --git a/sysdeps/i386/i686/multiarch/memset_chk.c b/sysdeps/i386/i686/multiarch/memset_chk.c
index 1a7503858d..8179ef7c0b 100644
--- a/sysdeps/i386/i686/multiarch/memset_chk.c
+++ b/sysdeps/i386/i686/multiarch/memset_chk.c
@@ -32,4 +32,6 @@  libc_ifunc_redirected (__redirect_memset_chk, __memset_chk,
 __hidden_ver1 (__memset_chk, __GI___memset_chk, __redirect_memset_chk)
   __attribute__ ((visibility ("hidden"))) __attribute_copy__ (__memset_chk);
 # endif
+#else
+# include <debug/memset_chk.c>
 #endif