# 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 # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # 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, see # . # # Sub-makefile for string portion of library. # subdir := string 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 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