]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - string/Makefile
Pass -nostdlib -nostartfiles together with -r [BZ #31753]
[thirdparty/glibc.git] / string / Makefile
index e8eb514155432edb877170f8e35a035a2a45c521..8f31fa49e621c0351a2ce26ca2f8ca9c0eb53f3f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2002, 2005-2008, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 1991-2024 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
 # Lesser General Public License for more details.
 
 # You should have received a copy of the GNU Lesser General Public
-# License along with the GNU C Library; if not, write to the Free
-# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-# 02111-1307 USA.
+# License along with the GNU C Library; if not, see
+# <https://www.gnu.org/licenses/>.
 
 #
 #      Sub-makefile for string portion of library.
 #
 subdir := string
 
-headers        := string.h strings.h memory.h endian.h bits/endian.h \
-          argz.h envz.h byteswap.h bits/byteswap.h bits/string.h \
-          bits/string2.h bits/string3.h
-
-routines       := strcat strchr strcmp strcoll strcpy strcspn          \
-                  strverscmp strdup strndup                            \
-                  strerror _strerror strlen strnlen                    \
-                  strncat strncmp strncpy                              \
-                  strrchr strpbrk strsignal strspn strstr strtok       \
-                  strtok_r strxfrm memchr memcmp memmove memset        \
-                  mempcpy bcopy bzero ffs ffsll stpcpy stpncpy         \
-                  strcasecmp strncase strcasecmp_l strncase_l          \
-                  memccpy memcpy wordcopy strsep strcasestr            \
-                  swab strfry memfrob memmem rawmemchr strchrnul       \
-                  $(addprefix argz-,append count create ctsep next     \
-                                    delete extract insert stringify    \
-                                    addsep replace)                    \
-                  envz basename                                        \
-                  strcoll_l strxfrm_l string-inlines memrchr           \
-                  xpg-strerror strerror_l
-
-# Gcc internally generates calls to unbounded memcpy and memset
-# for -fbounded-pointer compiles.  Glibc uses memchr for explicit checks.
-o-objects.ob   := memcpy.o memset.o memchr.o
-
-strop-tests    := memchr memcmp memcpy memmove mempcpy memset memccpy  \
-                  stpcpy stpncpy strcat strchr strcmp strcpy strcspn   \
-                  strlen strncmp strncpy strpbrk strrchr strspn memmem \
-                  strstr strcasestr strnlen
-tests          := tester inl-tester noinl-tester testcopy test-ffs     \
-                  tst-strlen stratcliff tst-svc tst-inlcall            \
-                  bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap      \
-                  tst-strtok tst-strxfrm bug-strcoll1 tst-strfry       \
-                  bug-strtok1 $(addprefix test-,$(strop-tests))        \
-                  bug-envz1 tst-strxfrm2 tst-endian tst-svc2
-distribute     := memcopy.h pagecopy.h tst-svc.expect test-string.h    \
-                  str-two-way.h
+include ../Makeconfig
 
+headers := \
+  argz.h \
+  bits/byteswap.h \
+  bits/endian.h \
+  bits/endianness.h \
+  bits/string_fortified.h \
+  bits/strings_fortified.h \
+  bits/uintn-identity.h \
+  byteswap.h \
+  endian.h \
+  envz.h \
+  memory.h \
+  string.h \
+  strings.h \
+# headers
+
+routines := \
+  _strerror \
+  argz-addsep \
+  argz-append \
+  argz-count \
+  argz-create \
+  argz-ctsep \
+  argz-delete \
+  argz-extract \
+  argz-insert \
+  argz-next \
+  argz-replace \
+  argz-stringify \
+  basename \
+  bcopy \
+  bzero \
+  envz \
+  explicit_bzero \
+  ffs \
+  ffsll \
+  memccpy \
+  memchr \
+  memcmp \
+  memcmpeq \
+  memcpy \
+  memfrob \
+  memmem \
+  memmove \
+  mempcpy \
+  memrchr \
+  memset \
+  rawmemchr \
+  sigabbrev_np \
+  sigdescr_np \
+  stpcpy \
+  stpncpy \
+  strcasecmp \
+  strcasecmp_l \
+  strcasestr \
+  strcat \
+  strchr \
+  strchrnul \
+  strcmp \
+  strcoll \
+  strcoll_l \
+  strcpy \
+  strcspn \
+  strdup \
+  strerror \
+  strerror_l \
+  strerrordesc_np \
+  strerrorname_np \
+  strfry \
+  string-inlines \
+  strlcat \
+  strlcpy \
+  strlen \
+  strncase \
+  strncase_l \
+  strncat \
+  strncmp \
+  strncpy \
+  strndup \
+  strnlen \
+  strpbrk \
+  strrchr \
+  strsep \
+  strsignal \
+  strspn \
+  strstr \
+  strtok \
+  strtok_r \
+  strverscmp \
+  strxfrm \
+  strxfrm_l \
+  swab \
+  wordcopy \
+  xpg-strerror \
+# routines
+
+# Exclude fortified routines from being built with _FORTIFY_SOURCE
+routines_no_fortify += \
+  explicit_bzero \
+  memcpy \
+  memmove \
+  mempcpy \
+  memset \
+  stpcpy \
+  stpncpy \
+  strcat \
+  strcpy \
+  strlcat \
+  strlcpy \
+  strncat \
+  strncpy \
+  # routines_no_fortify
+
+tests := \
+  bug-envz1 \
+  bug-strcoll1 \
+  bug-strcoll2 \
+  bug-strncat1 \
+  bug-strpbrk1 \
+  bug-strspn1 \
+  bug-strtok1 \
+  inl-tester \
+  noinl-tester \
+  stratcliff \
+  test-bcopy \
+  test-bzero \
+  test-endian-file-scope \
+  test-endian-sign-conversion \
+  test-endian-types \
+  test-explicit_bzero \
+  test-ffs \
+  test-memccpy \
+  test-memchr \
+  test-memcmp \
+  test-memcmpeq \
+  test-memcpy \
+  test-memcpy-large \
+  test-memmem \
+  test-memmove \
+  test-mempcpy \
+  test-memrchr \
+  test-memset \
+  test-rawmemchr \
+  test-sig_np \
+  test-stpcpy \
+  test-stpncpy \
+  test-strcasecmp \
+  test-strcasestr \
+  test-strcat \
+  test-strchr \
+  test-strchrnul \
+  test-strcmp \
+  test-strcpy \
+  test-strcspn \
+  test-strdup \
+  test-strlen \
+  test-strncasecmp \
+  test-strncat \
+  test-strncmp \
+  test-strncpy \
+  test-strndup \
+  test-strnlen \
+  test-strpbrk \
+  test-strrchr \
+  test-strspn \
+  test-strstr \
+  testcopy \
+  tester \
+  tst-bswap \
+  tst-cmp \
+  tst-endian \
+  tst-inlcall \
+  tst-memmove-overflow \
+  tst-strerror-fail \
+  tst-strfry \
+  tst-strlcat \
+  tst-strlcat2 \
+  tst-strlcpy \
+  tst-strlcpy2 \
+  tst-strlen \
+  tst-strtok \
+  tst-strtok_r \
+  tst-strxfrm \
+  tst-strxfrm2 \
+  tst-svc \
+  tst-svc2 \
+  tst-xbzero-opt \
+# tests
+
+tests-static-internal := \
+  test-memswap \
+# tests-static-internal
+
+tests-internal := \
+  $(tests-static-internal) \
+  # tests-internal
+
+tests-static := \
+  $(tests-static-internal) \
+  # tests-static
+
+# Both tests require the .mo translation files generated by msgfmt.
+tests-translation := \
+  tst-strerror \
+  tst-strsignal \
+# tests-translation
+
+tests-container   += $(tests-translation)
+ifeq ($(MSGFMT),:)
+tests-unsupported += $(tests-translation)
+endif
+
+# This test allocates a lot of memory and can run for a long time.
+xtests = tst-strcoll-overflow
+
+# This test needs libdl.
+ifeq (yes,$(build-shared))
+tests += test-strerror-errno
+endif
+
+ifeq ($(run-built-tests),yes)
+tests-special += $(objpfx)tst-svc-cmp.out
+endif
 
 include ../Rules
 
-tester-ENV = LANGUAGE=C
-inl-tester-ENV = LANGUAGE=C
-noinl-tester-ENV = LANGUAGE=C
-tst-strxfrm-ENV = LOCPATH=$(common-objpfx)localedata
-tst-strxfrm2-ENV = LOCPATH=$(common-objpfx)localedata
-bug-strcoll1-ENV = LOCPATH=$(common-objpfx)localedata
-CFLAGS-inl-tester.c = -fno-builtin
-CFLAGS-noinl-tester.c = -fno-builtin
-CFLAGS-tst-strlen.c = -fno-builtin
-CFLAGS-stratcliff.c = -fno-builtin
-CFLAGS-test-ffs.c = -fno-builtin
-CFLAGS-tst-inlcall.c = -fno-builtin
-
-ifeq ($(cross-compiling),no)
-tests: $(objpfx)tst-svc.out
-$(objpfx)tst-svc.out: tst-svc.input $(objpfx)tst-svc
-       GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
-         $(built-program-cmd) < $(word 1,$^) > $@
-       @cmp tst-svc.expect $(objpfx)tst-svc.out
+CFLAGS-inl-tester.c += -fno-builtin
+CFLAGS-noinl-tester.c += -fno-builtin
+CFLAGS-tst-strlen.c += -fno-builtin
+CFLAGS-stratcliff.c += -fno-builtin
+CFLAGS-test-ffs.c += -fno-builtin
+CFLAGS-tst-inlcall.c += -fno-builtin
+CFLAGS-tst-xbzero-opt.c += -O3
+CFLAGS-test-endian-sign-conversion.c += -Werror -Wsign-conversion
+# BZ 21006: Resolve all functions but at least explicit_bzero at startup.
+# Otherwise the test fails on s390x as the memcpy in prepare_test_buffer is
+# done by loading r4 / r5 with the test_pattern and using store multiple
+# instruction to store r4 / r5 to buf.  If explicit_bzero would be resolved in
+# setup_explicit_clear, r4 / r5 would be stored to stack by _dl_runtime_resolve
+# and the call to memmem in count_test_patterns will find a hit of the
+# test_pattern on the stack.
+LDFLAGS-tst-xbzero-opt = -z now
+
+# Called during TLS initialization.
+CFLAGS-memcpy.c += $(no-stack-protector)
+CFLAGS-wordcopy.c += $(no-stack-protector)
+# Called during static initialization
+CFLAGS-strncmp.c += $(no-stack-protector)
+CFLAGS-memset.c += $(no-stack-protector)
+
+CFLAGS-argz-next.c += $(config-cflags-wno-ignored-attributes)
+CFLAGS-basename.c += $(config-cflags-wno-ignored-attributes)
+CFLAGS-ffs.c += $(config-cflags-wno-ignored-attributes)
+CFLAGS-memmem.c += $(config-cflags-wno-ignored-attributes)
+CFLAGS-memchr.c += $(config-cflags-wno-ignored-attributes)
+CFLAGS-mempcpy.c += $(config-cflags-wno-ignored-attributes)
+CFLAGS-stpcpy.c += $(config-cflags-wno-ignored-attributes)
+CFLAGS-strnlen.c += $(config-cflags-wno-ignored-attributes)
+
+ifeq ($(run-built-tests),yes)
+$(objpfx)tst-svc-cmp.out: tst-svc.expect $(objpfx)tst-svc.out
+       cmp $^ > $@; \
+       $(evaluate-test)
+
+LOCALES := de_DE.UTF-8 en_US.ISO-8859-1 en_US.UTF-8 \
+           tr_TR.ISO-8859-9 tr_TR.UTF-8 cs_CZ.UTF-8 \
+          da_DK.ISO-8859-1 en_GB.UTF-8 pt_BR.UTF-8
+include ../gen-locales.mk
+
+$(objpfx)test-strcasecmp.out: $(gen-locales)
+$(objpfx)test-strncasecmp.out: $(gen-locales)
+$(objpfx)tst-strxfrm.out: $(gen-locales)
+$(objpfx)tst-strxfrm2.out: $(gen-locales)
+# bug-strcoll2 needs cs_CZ.UTF-8 and da_DK.ISO-8859-1.
+$(objpfx)bug-strcoll2.out: $(gen-locales)
+$(objpfx)tst-strcoll-overflow.out: $(gen-locales)
+$(objpfx)tst-strsignal.out: $(gen-locales)
+$(objpfx)tst-strerror.out: $(gen-locales)
+
 endif