i386: Fix build with --enable-fortify=3
commitf8f9a272573a4074c5b13ec69522945695d5d3f2
authorAdhemerval Zanella Netto <adhemerval.zanella@linaro.org>
Tue, 25 Jul 2023 15:16:38 +0000 (25 12:16 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 26 Jul 2023 12:45:55 +0000 (26 09:45 -0300)
treeed1af7b705c9bd42267078d364fffcabb531b230
parentdf43ea489ce492ccf9c787054ca2bb11ddf31b27
i386: Fix build with --enable-fortify=3

The i386 string routines provide multiple internal definitions
for memcpy, memmove, and mempcpy chk routines:

  $ objdump -t libc.a | grep __memcpy_chk
  00000000 g     F .text  0000000e __memcpy_chk
  00000000 g     F .text  00000013 __memcpy_chk
  $ objdump -t libc.a | grep __mempcpy_chk
  00000000 g     F .text  0000000e __mempcpy_chk
  00000000 g     F .text  00000013 __mempcpy_chk
  $ objdump -t libc.a | grep __memmove_chk
  00000000 g     F .text  0000000e __memmove_chk
  00000000 g     F .text  00000013 __memmove_chk

Although is not an issue for normal static builds, with fortify=3
glibc itself might use the fortify chk functions and thus static
build might fail with multiple definitions.  For instance:

x86_64-glibc-linux-gnu-gcc -m32 -march=i686 -o [...]math/test-signgam-uchar-static -nostdlib -nostartfiles -static -static-pie [...]
x86_64-glibc-linux-gnu/bin/ld: [...]/libc.a(mempcpy-ia32.o):
in function `__mempcpy_chk': [...]/glibc-git/string/../sysdeps/i386/i686/mempcpy.S:32: multiple definition of `__mempcpy_chk';
[...]/libc.a(mempcpy_chk-nonshared.o):[...]/debug/../sysdeps/i386/mempcpy_chk.S:28: first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [../Rules:298:

There is no need for mem*-nonshared.S, the __mem*_chk routines
are already provided by the assembly routines.

Checked on i686-linux-gnu with gcc 13 built with fortify=1,2,3 and
without fortify.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
sysdeps/i386/i686/multiarch/Makefile
sysdeps/i386/i686/multiarch/memcpy_chk-nonshared.S [deleted file]
sysdeps/i386/i686/multiarch/memmove_chk-nonshared.S [deleted file]
sysdeps/i386/i686/multiarch/mempcpy_chk-nonshared.S [deleted file]