[v5,1/2] debug: Autogenerate _FORTIFY_SOURCE tests

Message ID 20220112055129.3773186-2-siddhesh@sourceware.org
State Committed
Commit db27f1251b008280a29d540b4f8ab2a38a0d80af
Headers
Series _FORTIFY_SOURCE fixes [BZ #28746] |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Siddhesh Poyarekar Jan. 12, 2022, 5:51 a.m. UTC
  Rename debug/tst-chk1.c to debug/tst-fortify.c and add make hackery to
autogenerate tests with different macros enabled to build and run the
same test with different configurations as well as different
fortification levels.

The change also ends up expanding the -lfs tests to include
_FORTIFY_SOURCE=3.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
---
 Makerules                           |   6 ++
 debug/Makefile                      | 109 +++++++++++++++++-----------
 debug/tst-chk2.c                    |   2 -
 debug/tst-chk3.c                    |   2 -
 debug/tst-chk4.cc                   |   1 -
 debug/tst-chk5.cc                   |   2 -
 debug/tst-chk6.cc                   |   2 -
 debug/tst-chk7.c                    |   2 -
 debug/tst-chk8.cc                   |   2 -
 debug/{tst-chk1.c => tst-fortify.c} |   0
 debug/tst-lfschk1.c                 |   2 -
 debug/tst-lfschk2.c                 |   2 -
 debug/tst-lfschk3.c                 |   2 -
 debug/tst-lfschk4.cc                |   2 -
 debug/tst-lfschk5.cc                |   2 -
 debug/tst-lfschk6.cc                |   2 -
 16 files changed, 73 insertions(+), 67 deletions(-)
 delete mode 100644 debug/tst-chk2.c
 delete mode 100644 debug/tst-chk3.c
 delete mode 100644 debug/tst-chk4.cc
 delete mode 100644 debug/tst-chk5.cc
 delete mode 100644 debug/tst-chk6.cc
 delete mode 100644 debug/tst-chk7.c
 delete mode 100644 debug/tst-chk8.cc
 rename debug/{tst-chk1.c => tst-fortify.c} (100%)
 delete mode 100644 debug/tst-lfschk1.c
 delete mode 100644 debug/tst-lfschk2.c
 delete mode 100644 debug/tst-lfschk3.c
 delete mode 100644 debug/tst-lfschk4.cc
 delete mode 100644 debug/tst-lfschk5.cc
 delete mode 100644 debug/tst-lfschk6.cc
  

Comments

Adhemerval Zanella Netto Jan. 12, 2022, 1:27 p.m. UTC | #1
On 12/01/2022 02:51, Siddhesh Poyarekar wrote:
> Rename debug/tst-chk1.c to debug/tst-fortify.c and add make hackery to
> autogenerate tests with different macros enabled to build and run the
> same test with different configurations as well as different
> fortification levels.
> 
> The change also ends up expanding the -lfs tests to include
> _FORTIFY_SOURCE=3.
> 
> Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  Makerules                           |   6 ++
>  debug/Makefile                      | 109 +++++++++++++++++-----------
>  debug/tst-chk2.c                    |   2 -
>  debug/tst-chk3.c                    |   2 -
>  debug/tst-chk4.cc                   |   1 -
>  debug/tst-chk5.cc                   |   2 -
>  debug/tst-chk6.cc                   |   2 -
>  debug/tst-chk7.c                    |   2 -
>  debug/tst-chk8.cc                   |   2 -
>  debug/{tst-chk1.c => tst-fortify.c} |   0
>  debug/tst-lfschk1.c                 |   2 -
>  debug/tst-lfschk2.c                 |   2 -
>  debug/tst-lfschk3.c                 |   2 -
>  debug/tst-lfschk4.cc                |   2 -
>  debug/tst-lfschk5.cc                |   2 -
>  debug/tst-lfschk6.cc                |   2 -
>  16 files changed, 73 insertions(+), 67 deletions(-)
>  delete mode 100644 debug/tst-chk2.c
>  delete mode 100644 debug/tst-chk3.c
>  delete mode 100644 debug/tst-chk4.cc
>  delete mode 100644 debug/tst-chk5.cc
>  delete mode 100644 debug/tst-chk6.cc
>  delete mode 100644 debug/tst-chk7.c
>  delete mode 100644 debug/tst-chk8.cc
>  rename debug/{tst-chk1.c => tst-fortify.c} (100%)
>  delete mode 100644 debug/tst-lfschk1.c
>  delete mode 100644 debug/tst-lfschk2.c
>  delete mode 100644 debug/tst-lfschk3.c
>  delete mode 100644 debug/tst-lfschk4.cc
>  delete mode 100644 debug/tst-lfschk5.cc
>  delete mode 100644 debug/tst-lfschk6.cc
> 
> diff --git a/Makerules b/Makerules
> index 9a56cbdead..81307b670e 100644
> --- a/Makerules
> +++ b/Makerules
> @@ -424,6 +424,12 @@ $(objpfx)%$o: $(objpfx)%.c $(before-compile); $$(compile-command.c)
>  endef
>  object-suffixes-left := $(all-object-suffixes)
>  include $(o-iterator)
> +
> +define o-iterator-doit
> +$(objpfx)%$o: $(objpfx)%.cc $(before-compile); $$(compile-command.cc)
> +endef
> +object-suffixes-left := $(all-object-suffixes)
> +include $(o-iterator)
>  endif
>  
>  # Generate .dT files as we compile.
> diff --git a/debug/Makefile b/debug/Makefile
> index 5818d751c9..880477632e 100644
> --- a/debug/Makefile
> +++ b/debug/Makefile
> @@ -1,4 +1,5 @@
>  # Copyright (C) 1998-2022 Free Software Foundation, Inc.
> +# Copyright The GNU Toolchain Authors.
>  # This file is part of the GNU C Library.
>  
>  # The GNU C Library is free software; you can redistribute it and/or
> @@ -110,32 +111,60 @@ CFLAGS-tst-longjmp_chk3.c += -fexceptions -fasynchronous-unwind-tables
>  CPPFLAGS-tst-longjmp_chk3.c += -D_FORTIFY_SOURCE=1
>  CPPFLAGS-tst-realpath-chk.c += -D_FORTIFY_SOURCE=2
>  
> +# _FORTIFY_SOURCE tests.
> +# Auto-generate tests for _FORTIFY_SOURCE for different levels, compilers and
> +# preprocessor conditions based on tst-fortify.c.
> +#
> +# To add a new test condition, define a cflags-$(cond) make variable to set
> +# CFLAGS for the file.
> +
> +tests-all-chk = tst-fortify
> +tests-c-chk =
> +tests-cc-chk =
> +
> +CFLAGS-tst-fortify.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> +
> +# No additional flags for the default tests.
> +define cflags-default
> +endef
> +
> +define cflags-lfs
> +CFLAGS-tst-fortify-$(1)-lfs-$(2).$(1) += -D_FILE_OFFSET_BITS=64
> +endef
> +
>  # We know these tests have problems with format strings, this is what
>  # we are testing.  Disable that warning.  They are also testing
>  # deprecated functions (notably gets) so disable that warning as well.
>  # And they also generate warnings from warning attributes, which
>  # cannot be disabled via pragmas, so require -Wno-error to be used.
> -CFLAGS-tst-chk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-chk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-chk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-chk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-chk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-chk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-chk7.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-chk8.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-lfschk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-lfschk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-lfschk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-lfschk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-lfschk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
> -CFLAGS-tst-lfschk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
> -LDLIBS-tst-chk4 = -lstdc++
> -LDLIBS-tst-chk5 = -lstdc++
> -LDLIBS-tst-chk6 = -lstdc++
> -LDLIBS-tst-chk8 = -lstdc++
> -LDLIBS-tst-lfschk4 = -lstdc++
> -LDLIBS-tst-lfschk5 = -lstdc++
> -LDLIBS-tst-lfschk6 = -lstdc++
> +define gen-chk-test
> +tests-$(1)-chk += tst-fortify-$(1)-$(2)-$(3)
> +CFLAGS-tst-fortify-$(1)-$(2)-$(3).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \
> +					  -Wno-deprecated-declarations \
> +					  -Wno-error
> +$(eval $(call cflags-$(2),$(1),$(3)))
> +$(objpfx)tst-fortify-$(1)-$(2)-$(3).$(1): tst-fortify.c Makefile
> +	( echo "/* Autogenerated from Makefile.  */"; \
> +	  echo ""; \
> +	  echo "#include \"tst-fortify.c\"" ) > $$@.tmp
> +	mv $$@.tmp $$@
> +endef
> +
> +chk-extensions = c cc
> +chk-types = default lfs
> +chk-levels = 1 2 3
> +
> +$(foreach e,$(chk-extensions), \
> +  $(foreach t,$(chk-types), \
> +    $(foreach l,$(chk-levels), \
> +      $(eval $(call gen-chk-test,$(e),$(t),$(l))))))
> +
> +tests-all-chk += $(tests-c-chk) $(tests-cc-chk)
> +
> +define link-cc
> +LDLIBS-$(1) = -lstdc++
> +endef
> +$(foreach t,$(tests-cc-chk), $(eval $(call link-cc,$(t))))
>  
>  # backtrace_symbols only works if we link with -rdynamic.  backtrace
>  # requires unwind tables on most architectures.
> @@ -152,19 +181,25 @@ LDFLAGS-tst-backtrace6 = -rdynamic
>  
>  CFLAGS-tst-ssp-1.c += -fstack-protector-all
>  
> -tests = backtrace-tst tst-longjmp_chk tst-chk1 tst-chk2 tst-chk3 \
> -	tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk \
> -	tst-chk4 tst-chk5 tst-chk6 tst-chk7 tst-chk8 tst-lfschk4 tst-lfschk5 \
> -	tst-lfschk6 tst-longjmp_chk2 tst-backtrace2 tst-backtrace3 \
> -	tst-backtrace4 tst-backtrace5 tst-backtrace6 tst-realpath-chk
> +tests = backtrace-tst \
> +	tst-longjmp_chk \
> +	test-strcpy_chk \
> +	test-stpcpy_chk \
> +	tst-longjmp_chk2 \
> +	tst-backtrace2 \
> +	tst-backtrace3 \
> +	tst-backtrace4 \
> +	tst-backtrace5 \
> +	tst-backtrace6 \
> +	tst-realpath-chk \
> +	$(tests-all-chk)
>  
>  ifeq ($(have-ssp),yes)
>  tests += tst-ssp-1
>  endif
>  
>  ifeq (,$(CXX))
> -tests-unsupported = tst-chk4 tst-chk5 tst-chk6 tst-chk8 \
> -		    tst-lfschk4 tst-lfschk5 tst-lfschk6
> +tests-unsupported = $(tests-cc-chk)
>  endif
>  
>  extra-libs = libpcprofile
> @@ -185,20 +220,10 @@ ifeq ($(run-built-tests),yes)
>  LOCALES := de_DE.UTF-8
>  include ../gen-locales.mk
>  
> -$(objpfx)tst-chk1.out: $(gen-locales)
> -$(objpfx)tst-chk2.out: $(gen-locales)
> -$(objpfx)tst-chk3.out: $(gen-locales)
> -$(objpfx)tst-chk4.out: $(gen-locales)
> -$(objpfx)tst-chk5.out: $(gen-locales)
> -$(objpfx)tst-chk6.out: $(gen-locales)
> -$(objpfx)tst-chk7.out: $(gen-locales)
> -$(objpfx)tst-chk8.out: $(gen-locales)
> -$(objpfx)tst-lfschk1.out: $(gen-locales)
> -$(objpfx)tst-lfschk2.out: $(gen-locales)
> -$(objpfx)tst-lfschk3.out: $(gen-locales)
> -$(objpfx)tst-lfschk4.out: $(gen-locales)
> -$(objpfx)tst-lfschk5.out: $(gen-locales)
> -$(objpfx)tst-lfschk6.out: $(gen-locales)
> +define chk-gen-locales
> +$(objpfx)$(1).out: $(gen-locales)
> +endef
> +$(foreach t, $(tests-all-chk), $(eval $(call chk-gen-locales,$(t))))
>  endif
>  
>  sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
> diff --git a/debug/tst-chk2.c b/debug/tst-chk2.c
> deleted file mode 100644
> index be37ce2d22..0000000000
> --- a/debug/tst-chk2.c
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FORTIFY_SOURCE 1
> -#include "tst-chk1.c"
> diff --git a/debug/tst-chk3.c b/debug/tst-chk3.c
> deleted file mode 100644
> index 38b8e4fb36..0000000000
> --- a/debug/tst-chk3.c
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FORTIFY_SOURCE 2
> -#include "tst-chk1.c"
> diff --git a/debug/tst-chk4.cc b/debug/tst-chk4.cc
> deleted file mode 100644
> index c82e6aac86..0000000000
> --- a/debug/tst-chk4.cc
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include "tst-chk1.c"
> diff --git a/debug/tst-chk5.cc b/debug/tst-chk5.cc
> deleted file mode 100644
> index be37ce2d22..0000000000
> --- a/debug/tst-chk5.cc
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FORTIFY_SOURCE 1
> -#include "tst-chk1.c"
> diff --git a/debug/tst-chk6.cc b/debug/tst-chk6.cc
> deleted file mode 100644
> index 38b8e4fb36..0000000000
> --- a/debug/tst-chk6.cc
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FORTIFY_SOURCE 2
> -#include "tst-chk1.c"
> diff --git a/debug/tst-chk7.c b/debug/tst-chk7.c
> deleted file mode 100644
> index 2a7b323812..0000000000
> --- a/debug/tst-chk7.c
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FORTIFY_SOURCE 3
> -#include "tst-chk1.c"
> diff --git a/debug/tst-chk8.cc b/debug/tst-chk8.cc
> deleted file mode 100644
> index 2a7b323812..0000000000
> --- a/debug/tst-chk8.cc
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FORTIFY_SOURCE 3
> -#include "tst-chk1.c"
> diff --git a/debug/tst-chk1.c b/debug/tst-fortify.c
> similarity index 100%
> rename from debug/tst-chk1.c
> rename to debug/tst-fortify.c
> diff --git a/debug/tst-lfschk1.c b/debug/tst-lfschk1.c
> deleted file mode 100644
> index f3e6d47d5e..0000000000
> --- a/debug/tst-lfschk1.c
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FILE_OFFSET_BITS 64
> -#include "tst-chk1.c"
> diff --git a/debug/tst-lfschk2.c b/debug/tst-lfschk2.c
> deleted file mode 100644
> index 95d4db1d32..0000000000
> --- a/debug/tst-lfschk2.c
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FILE_OFFSET_BITS 64
> -#include "tst-chk2.c"
> diff --git a/debug/tst-lfschk3.c b/debug/tst-lfschk3.c
> deleted file mode 100644
> index 50a1ae1258..0000000000
> --- a/debug/tst-lfschk3.c
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FILE_OFFSET_BITS 64
> -#include "tst-chk3.c"
> diff --git a/debug/tst-lfschk4.cc b/debug/tst-lfschk4.cc
> deleted file mode 100644
> index f3e6d47d5e..0000000000
> --- a/debug/tst-lfschk4.cc
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FILE_OFFSET_BITS 64
> -#include "tst-chk1.c"
> diff --git a/debug/tst-lfschk5.cc b/debug/tst-lfschk5.cc
> deleted file mode 100644
> index 95d4db1d32..0000000000
> --- a/debug/tst-lfschk5.cc
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FILE_OFFSET_BITS 64
> -#include "tst-chk2.c"
> diff --git a/debug/tst-lfschk6.cc b/debug/tst-lfschk6.cc
> deleted file mode 100644
> index 50a1ae1258..0000000000
> --- a/debug/tst-lfschk6.cc
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -#define _FILE_OFFSET_BITS 64
> -#include "tst-chk3.c"
  

Patch

diff --git a/Makerules b/Makerules
index 9a56cbdead..81307b670e 100644
--- a/Makerules
+++ b/Makerules
@@ -424,6 +424,12 @@  $(objpfx)%$o: $(objpfx)%.c $(before-compile); $$(compile-command.c)
 endef
 object-suffixes-left := $(all-object-suffixes)
 include $(o-iterator)
+
+define o-iterator-doit
+$(objpfx)%$o: $(objpfx)%.cc $(before-compile); $$(compile-command.cc)
+endef
+object-suffixes-left := $(all-object-suffixes)
+include $(o-iterator)
 endif
 
 # Generate .dT files as we compile.
diff --git a/debug/Makefile b/debug/Makefile
index 5818d751c9..880477632e 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -1,4 +1,5 @@ 
 # Copyright (C) 1998-2022 Free Software Foundation, Inc.
+# Copyright The GNU Toolchain Authors.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -110,32 +111,60 @@  CFLAGS-tst-longjmp_chk3.c += -fexceptions -fasynchronous-unwind-tables
 CPPFLAGS-tst-longjmp_chk3.c += -D_FORTIFY_SOURCE=1
 CPPFLAGS-tst-realpath-chk.c += -D_FORTIFY_SOURCE=2
 
+# _FORTIFY_SOURCE tests.
+# Auto-generate tests for _FORTIFY_SOURCE for different levels, compilers and
+# preprocessor conditions based on tst-fortify.c.
+#
+# To add a new test condition, define a cflags-$(cond) make variable to set
+# CFLAGS for the file.
+
+tests-all-chk = tst-fortify
+tests-c-chk =
+tests-cc-chk =
+
+CFLAGS-tst-fortify.c += -Wno-format -Wno-deprecated-declarations -Wno-error
+
+# No additional flags for the default tests.
+define cflags-default
+endef
+
+define cflags-lfs
+CFLAGS-tst-fortify-$(1)-lfs-$(2).$(1) += -D_FILE_OFFSET_BITS=64
+endef
+
 # We know these tests have problems with format strings, this is what
 # we are testing.  Disable that warning.  They are also testing
 # deprecated functions (notably gets) so disable that warning as well.
 # And they also generate warnings from warning attributes, which
 # cannot be disabled via pragmas, so require -Wno-error to be used.
-CFLAGS-tst-chk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-chk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-chk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-chk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-chk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-chk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-chk7.c += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-chk8.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-lfschk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-lfschk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-lfschk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-lfschk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-lfschk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
-CFLAGS-tst-lfschk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
-LDLIBS-tst-chk4 = -lstdc++
-LDLIBS-tst-chk5 = -lstdc++
-LDLIBS-tst-chk6 = -lstdc++
-LDLIBS-tst-chk8 = -lstdc++
-LDLIBS-tst-lfschk4 = -lstdc++
-LDLIBS-tst-lfschk5 = -lstdc++
-LDLIBS-tst-lfschk6 = -lstdc++
+define gen-chk-test
+tests-$(1)-chk += tst-fortify-$(1)-$(2)-$(3)
+CFLAGS-tst-fortify-$(1)-$(2)-$(3).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \
+					  -Wno-deprecated-declarations \
+					  -Wno-error
+$(eval $(call cflags-$(2),$(1),$(3)))
+$(objpfx)tst-fortify-$(1)-$(2)-$(3).$(1): tst-fortify.c Makefile
+	( echo "/* Autogenerated from Makefile.  */"; \
+	  echo ""; \
+	  echo "#include \"tst-fortify.c\"" ) > $$@.tmp
+	mv $$@.tmp $$@
+endef
+
+chk-extensions = c cc
+chk-types = default lfs
+chk-levels = 1 2 3
+
+$(foreach e,$(chk-extensions), \
+  $(foreach t,$(chk-types), \
+    $(foreach l,$(chk-levels), \
+      $(eval $(call gen-chk-test,$(e),$(t),$(l))))))
+
+tests-all-chk += $(tests-c-chk) $(tests-cc-chk)
+
+define link-cc
+LDLIBS-$(1) = -lstdc++
+endef
+$(foreach t,$(tests-cc-chk), $(eval $(call link-cc,$(t))))
 
 # backtrace_symbols only works if we link with -rdynamic.  backtrace
 # requires unwind tables on most architectures.
@@ -152,19 +181,25 @@  LDFLAGS-tst-backtrace6 = -rdynamic
 
 CFLAGS-tst-ssp-1.c += -fstack-protector-all
 
-tests = backtrace-tst tst-longjmp_chk tst-chk1 tst-chk2 tst-chk3 \
-	tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk \
-	tst-chk4 tst-chk5 tst-chk6 tst-chk7 tst-chk8 tst-lfschk4 tst-lfschk5 \
-	tst-lfschk6 tst-longjmp_chk2 tst-backtrace2 tst-backtrace3 \
-	tst-backtrace4 tst-backtrace5 tst-backtrace6 tst-realpath-chk
+tests = backtrace-tst \
+	tst-longjmp_chk \
+	test-strcpy_chk \
+	test-stpcpy_chk \
+	tst-longjmp_chk2 \
+	tst-backtrace2 \
+	tst-backtrace3 \
+	tst-backtrace4 \
+	tst-backtrace5 \
+	tst-backtrace6 \
+	tst-realpath-chk \
+	$(tests-all-chk)
 
 ifeq ($(have-ssp),yes)
 tests += tst-ssp-1
 endif
 
 ifeq (,$(CXX))
-tests-unsupported = tst-chk4 tst-chk5 tst-chk6 tst-chk8 \
-		    tst-lfschk4 tst-lfschk5 tst-lfschk6
+tests-unsupported = $(tests-cc-chk)
 endif
 
 extra-libs = libpcprofile
@@ -185,20 +220,10 @@  ifeq ($(run-built-tests),yes)
 LOCALES := de_DE.UTF-8
 include ../gen-locales.mk
 
-$(objpfx)tst-chk1.out: $(gen-locales)
-$(objpfx)tst-chk2.out: $(gen-locales)
-$(objpfx)tst-chk3.out: $(gen-locales)
-$(objpfx)tst-chk4.out: $(gen-locales)
-$(objpfx)tst-chk5.out: $(gen-locales)
-$(objpfx)tst-chk6.out: $(gen-locales)
-$(objpfx)tst-chk7.out: $(gen-locales)
-$(objpfx)tst-chk8.out: $(gen-locales)
-$(objpfx)tst-lfschk1.out: $(gen-locales)
-$(objpfx)tst-lfschk2.out: $(gen-locales)
-$(objpfx)tst-lfschk3.out: $(gen-locales)
-$(objpfx)tst-lfschk4.out: $(gen-locales)
-$(objpfx)tst-lfschk5.out: $(gen-locales)
-$(objpfx)tst-lfschk6.out: $(gen-locales)
+define chk-gen-locales
+$(objpfx)$(1).out: $(gen-locales)
+endef
+$(foreach t, $(tests-all-chk), $(eval $(call chk-gen-locales,$(t))))
 endif
 
 sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
diff --git a/debug/tst-chk2.c b/debug/tst-chk2.c
deleted file mode 100644
index be37ce2d22..0000000000
--- a/debug/tst-chk2.c
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FORTIFY_SOURCE 1
-#include "tst-chk1.c"
diff --git a/debug/tst-chk3.c b/debug/tst-chk3.c
deleted file mode 100644
index 38b8e4fb36..0000000000
--- a/debug/tst-chk3.c
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FORTIFY_SOURCE 2
-#include "tst-chk1.c"
diff --git a/debug/tst-chk4.cc b/debug/tst-chk4.cc
deleted file mode 100644
index c82e6aac86..0000000000
--- a/debug/tst-chk4.cc
+++ /dev/null
@@ -1 +0,0 @@ 
-#include "tst-chk1.c"
diff --git a/debug/tst-chk5.cc b/debug/tst-chk5.cc
deleted file mode 100644
index be37ce2d22..0000000000
--- a/debug/tst-chk5.cc
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FORTIFY_SOURCE 1
-#include "tst-chk1.c"
diff --git a/debug/tst-chk6.cc b/debug/tst-chk6.cc
deleted file mode 100644
index 38b8e4fb36..0000000000
--- a/debug/tst-chk6.cc
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FORTIFY_SOURCE 2
-#include "tst-chk1.c"
diff --git a/debug/tst-chk7.c b/debug/tst-chk7.c
deleted file mode 100644
index 2a7b323812..0000000000
--- a/debug/tst-chk7.c
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FORTIFY_SOURCE 3
-#include "tst-chk1.c"
diff --git a/debug/tst-chk8.cc b/debug/tst-chk8.cc
deleted file mode 100644
index 2a7b323812..0000000000
--- a/debug/tst-chk8.cc
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FORTIFY_SOURCE 3
-#include "tst-chk1.c"
diff --git a/debug/tst-chk1.c b/debug/tst-fortify.c
similarity index 100%
rename from debug/tst-chk1.c
rename to debug/tst-fortify.c
diff --git a/debug/tst-lfschk1.c b/debug/tst-lfschk1.c
deleted file mode 100644
index f3e6d47d5e..0000000000
--- a/debug/tst-lfschk1.c
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FILE_OFFSET_BITS 64
-#include "tst-chk1.c"
diff --git a/debug/tst-lfschk2.c b/debug/tst-lfschk2.c
deleted file mode 100644
index 95d4db1d32..0000000000
--- a/debug/tst-lfschk2.c
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FILE_OFFSET_BITS 64
-#include "tst-chk2.c"
diff --git a/debug/tst-lfschk3.c b/debug/tst-lfschk3.c
deleted file mode 100644
index 50a1ae1258..0000000000
--- a/debug/tst-lfschk3.c
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FILE_OFFSET_BITS 64
-#include "tst-chk3.c"
diff --git a/debug/tst-lfschk4.cc b/debug/tst-lfschk4.cc
deleted file mode 100644
index f3e6d47d5e..0000000000
--- a/debug/tst-lfschk4.cc
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FILE_OFFSET_BITS 64
-#include "tst-chk1.c"
diff --git a/debug/tst-lfschk5.cc b/debug/tst-lfschk5.cc
deleted file mode 100644
index 95d4db1d32..0000000000
--- a/debug/tst-lfschk5.cc
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FILE_OFFSET_BITS 64
-#include "tst-chk2.c"
diff --git a/debug/tst-lfschk6.cc b/debug/tst-lfschk6.cc
deleted file mode 100644
index 50a1ae1258..0000000000
--- a/debug/tst-lfschk6.cc
+++ /dev/null
@@ -1,2 +0,0 @@ 
-#define _FILE_OFFSET_BITS 64
-#include "tst-chk3.c"