[v2,1/2] debug: Refactor and expand _FORTIFY_SOURCE tests

Message ID 20220105044516.905688-2-siddhesh@sourceware.org
State Superseded
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. 5, 2022, 4:45 a.m. UTC
  Rename all debug/tst-chk* tests to reflect the fortification level
they're testing and any additional macros so that rules for them can be
autogenerated.  tst-chk0* are without fortification, tst-chk1 for
_FORTIFY_SOURCE=1 and so on.  This allows easier replication of the
tests to check additional macros.

The change also expands the -lfs to include _FORTIFY_SOURCE=3.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
---
 debug/Makefile                               | 75 +++++++++-----------
 debug/{tst-lfschk1.c => tst-chk-0-cc-lfs.cc} |  2 +-
 debug/tst-chk-0-cc.cc                        |  1 +
 debug/{tst-lfschk2.c => tst-chk-0-lfs.c}     |  2 +-
 debug/{tst-chk1.c => tst-chk-0.c}            |  0
 debug/{tst-lfschk3.c => tst-chk-1-cc-lfs.cc} |  2 +-
 debug/{tst-chk2.c => tst-chk-1-cc.cc}        |  2 +-
 debug/{tst-lfschk4.cc => tst-chk-1-lfs.c}    |  2 +-
 debug/{tst-chk5.cc => tst-chk-1.c}           |  2 +-
 debug/tst-chk-2-cc-lfs.cc                    |  2 +
 debug/{tst-chk6.cc => tst-chk-2-cc.cc}       |  2 +-
 debug/tst-chk-2-lfs.c                        |  2 +
 debug/{tst-chk3.c => tst-chk-2.c}            |  2 +-
 debug/tst-chk-3-cc-lfs.cc                    |  2 +
 debug/{tst-chk7.c => tst-chk-3-cc.cc}        |  2 +-
 debug/tst-chk-3-lfs.c                        |  2 +
 debug/{tst-chk8.cc => tst-chk-3.c}           |  2 +-
 debug/tst-chk4.cc                            |  1 -
 debug/tst-lfschk5.cc                         |  2 -
 debug/tst-lfschk6.cc                         |  2 -
 20 files changed, 52 insertions(+), 57 deletions(-)
 rename debug/{tst-lfschk1.c => tst-chk-0-cc-lfs.cc} (55%)
 create mode 100644 debug/tst-chk-0-cc.cc
 rename debug/{tst-lfschk2.c => tst-chk-0-lfs.c} (55%)
 rename debug/{tst-chk1.c => tst-chk-0.c} (100%)
 rename debug/{tst-lfschk3.c => tst-chk-1-cc-lfs.cc} (55%)
 rename debug/{tst-chk2.c => tst-chk-1-cc.cc} (53%)
 rename debug/{tst-lfschk4.cc => tst-chk-1-lfs.c} (55%)
 rename debug/{tst-chk5.cc => tst-chk-1.c} (53%)
 create mode 100644 debug/tst-chk-2-cc-lfs.cc
 rename debug/{tst-chk6.cc => tst-chk-2-cc.cc} (53%)
 create mode 100644 debug/tst-chk-2-lfs.c
 rename debug/{tst-chk3.c => tst-chk-2.c} (53%)
 create mode 100644 debug/tst-chk-3-cc-lfs.cc
 rename debug/{tst-chk7.c => tst-chk-3-cc.cc} (53%)
 create mode 100644 debug/tst-chk-3-lfs.c
 rename debug/{tst-chk8.cc => tst-chk-3.c} (53%)
 delete mode 100644 debug/tst-chk4.cc
 delete mode 100644 debug/tst-lfschk5.cc
 delete mode 100644 debug/tst-lfschk6.cc
  

Comments

Adhemerval Zanella Jan. 6, 2022, 8:51 p.m. UTC | #1
On 05/01/2022 01:45, Siddhesh Poyarekar via Libc-alpha wrote:
> Rename all debug/tst-chk* tests to reflect the fortification level
> they're testing and any additional macros so that rules for them can be
> autogenerated.  tst-chk0* are without fortification, tst-chk1 for
> _FORTIFY_SOURCE=1 and so on.  This allows easier replication of the
> tests to check additional macros.
> 
> The change also expands the -lfs to include _FORTIFY_SOURCE=3.
> 
> Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

Looks good in general, some comments below.

> ---
>  debug/Makefile                               | 75 +++++++++-----------
>  debug/{tst-lfschk1.c => tst-chk-0-cc-lfs.cc} |  2 +-
>  debug/tst-chk-0-cc.cc                        |  1 +
>  debug/{tst-lfschk2.c => tst-chk-0-lfs.c}     |  2 +-
>  debug/{tst-chk1.c => tst-chk-0.c}            |  0
>  debug/{tst-lfschk3.c => tst-chk-1-cc-lfs.cc} |  2 +-
>  debug/{tst-chk2.c => tst-chk-1-cc.cc}        |  2 +-
>  debug/{tst-lfschk4.cc => tst-chk-1-lfs.c}    |  2 +-
>  debug/{tst-chk5.cc => tst-chk-1.c}           |  2 +-
>  debug/tst-chk-2-cc-lfs.cc                    |  2 +
>  debug/{tst-chk6.cc => tst-chk-2-cc.cc}       |  2 +-
>  debug/tst-chk-2-lfs.c                        |  2 +
>  debug/{tst-chk3.c => tst-chk-2.c}            |  2 +-
>  debug/tst-chk-3-cc-lfs.cc                    |  2 +
>  debug/{tst-chk7.c => tst-chk-3-cc.cc}        |  2 +-
>  debug/tst-chk-3-lfs.c                        |  2 +
>  debug/{tst-chk8.cc => tst-chk-3.c}           |  2 +-
>  debug/tst-chk4.cc                            |  1 -
>  debug/tst-lfschk5.cc                         |  2 -
>  debug/tst-lfschk6.cc                         |  2 -
>  20 files changed, 52 insertions(+), 57 deletions(-)
>  rename debug/{tst-lfschk1.c => tst-chk-0-cc-lfs.cc} (55%)
>  create mode 100644 debug/tst-chk-0-cc.cc
>  rename debug/{tst-lfschk2.c => tst-chk-0-lfs.c} (55%)
>  rename debug/{tst-chk1.c => tst-chk-0.c} (100%)
>  rename debug/{tst-lfschk3.c => tst-chk-1-cc-lfs.cc} (55%)
>  rename debug/{tst-chk2.c => tst-chk-1-cc.cc} (53%)
>  rename debug/{tst-lfschk4.cc => tst-chk-1-lfs.c} (55%)
>  rename debug/{tst-chk5.cc => tst-chk-1.c} (53%)
>  create mode 100644 debug/tst-chk-2-cc-lfs.cc
>  rename debug/{tst-chk6.cc => tst-chk-2-cc.cc} (53%)
>  create mode 100644 debug/tst-chk-2-lfs.c
>  rename debug/{tst-chk3.c => tst-chk-2.c} (53%)
>  create mode 100644 debug/tst-chk-3-cc-lfs.cc
>  rename debug/{tst-chk7.c => tst-chk-3-cc.cc} (53%)
>  create mode 100644 debug/tst-chk-3-lfs.c
>  rename debug/{tst-chk8.cc => tst-chk-3.c} (53%)
>  delete mode 100644 debug/tst-chk4.cc
>  delete mode 100644 debug/tst-lfschk5.cc
>  delete mode 100644 debug/tst-lfschk6.cc
> 
> diff --git a/debug/Makefile b/debug/Makefile
> index 9c2ce61a86..9aa27eb00c 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,31 @@ 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.
> +tests-chk = $(addprefix tst-chk-, 0 1 2 3)
> +tests-chk-cc = $(addsuffix -cc, $(tests-chk))
> +tests-chk-lfs = $(addsuffix -lfs, $(tests-chk))
> +tests-chk-cc-lfs = $(addsuffix -lfs, $(tests-chk-cc))
> +
>  # 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 disable-warnings
> +CFLAGS-$(1).$(2) += -Wno-format -Wno-deprecated-declarations -Wno-error
> +endef
> +
> +$(foreach t,$(tests-chk) $(tests-chk-lfs), \
> +	  $(eval $(call disable-warnings,$(t),c)))
> +
> +$(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs), \
> +	  $(eval $(call disable-warnings,$(t),cc)))
> +
> +define link-cc
> +LDLIBS-$(1) = -lstdc++
> +endef
> +$(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs), $(eval $(call link-cc,$(t))))
>  
>  # backtrace_symbols only works if we link with -rdynamic.  backtrace
>  # requires unwind tables on most architectures.
> @@ -152,19 +152,18 @@ LDFLAGS-tst-backtrace6 = -rdynamic
>  
>  CFLAGS-tst-ssp-1.c += -fstack-protector-all
>  

Nice, it does simplify the required rules.  Maybe you could also extend it to
LFS as well:

diff --git a/debug/Makefile b/debug/Makefile
index dc73600213..019046391b 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -127,6 +127,9 @@ tests-chk-cc-nongnu = $(addsuffix -nongnu, $(tests-chk-cc))
 define disable-warnings
 CFLAGS-$(1).$(2) += -Wno-format -Wno-deprecated-declarations -Wno-error
 endef
+define enable-lfs
+CFLAGS-$(1).$(2) += -D_FILE_OFFSET_BITS=64
+endef
 
 $(foreach t,$(tests-chk) $(tests-chk-lfs) $(tests-chk-nongnu), \
 	  $(eval $(call disable-warnings,$(t),c)))
@@ -134,6 +137,9 @@ $(foreach t,$(tests-chk) $(tests-chk-lfs) $(tests-chk-nongnu), \
 $(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs) $(tests-chk-cc-nongnu), \
 	  $(eval $(call disable-warnings,$(t),cc)))
 
+$(foreach t,$(tests-chk-lfs), $(eval $(call enable-lfs,$(t),c)))
+$(foreach t,$(tests-chk-cc-lfs), $(eval $(call enable-lfs,$(t),cc)))
+
 define link-cc
 LDLIBS-$(1) = -lstdc++
 endef

And then remove the '#define _FILE_OFFSET_BITS 64' so the rule is applied
regardless whether the file defines or not.

> -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-chk) $(tests-chk-cc) $(tests-chk-lfs) $(tests-chk-cc-lfs)

Since you are touching, put one file per line.

>  
>  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-chk-cc) $(tests-chk-cc-lfs)

Same.

>  endif
>  
>  extra-libs = libSegFault libpcprofile
> @@ -191,20 +190,12 @@ 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-chk) $(tests-chk-cc) $(tests-chk-lfs) $(tests-chk-cc-lfs), \
> +	  $(eval $(call link-cc,$(t))))
>  endif
>  
>  sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')

Same.

> diff --git a/debug/tst-lfschk1.c b/debug/tst-chk-0-cc-lfs.cc
> similarity index 55%
> rename from debug/tst-lfschk1.c
> rename to debug/tst-chk-0-cc-lfs.cc
> index f3e6d47d5e..db699b2391 100644
> --- a/debug/tst-lfschk1.c
> +++ b/debug/tst-chk-0-cc-lfs.cc
> @@ -1,2 +1,2 @@
>  #define _FILE_OFFSET_BITS 64
> -#include "tst-chk1.c"
> +#include "tst-chk-0.c"
> diff --git a/debug/tst-chk-0-cc.cc b/debug/tst-chk-0-cc.cc
> new file mode 100644
> index 0000000000..be76fc69d4
> --- /dev/null
> +++ b/debug/tst-chk-0-cc.cc
> @@ -0,0 +1 @@
> +#include "tst-chk-0.c"
> diff --git a/debug/tst-lfschk2.c b/debug/tst-chk-0-lfs.c
> similarity index 55%
> rename from debug/tst-lfschk2.c
> rename to debug/tst-chk-0-lfs.c
> index 95d4db1d32..db699b2391 100644
> --- a/debug/tst-lfschk2.c
> +++ b/debug/tst-chk-0-lfs.c
> @@ -1,2 +1,2 @@
>  #define _FILE_OFFSET_BITS 64
> -#include "tst-chk2.c"
> +#include "tst-chk-0.c"
> diff --git a/debug/tst-chk1.c b/debug/tst-chk-0.c
> similarity index 100%
> rename from debug/tst-chk1.c
> rename to debug/tst-chk-0.c
> diff --git a/debug/tst-lfschk3.c b/debug/tst-chk-1-cc-lfs.cc
> similarity index 55%
> rename from debug/tst-lfschk3.c
> rename to debug/tst-chk-1-cc-lfs.cc
> index 50a1ae1258..0d67643e9e 100644
> --- a/debug/tst-lfschk3.c
> +++ b/debug/tst-chk-1-cc-lfs.cc
> @@ -1,2 +1,2 @@
>  #define _FILE_OFFSET_BITS 64
> -#include "tst-chk3.c"
> +#include "tst-chk-1.c"
> diff --git a/debug/tst-chk2.c b/debug/tst-chk-1-cc.cc
> similarity index 53%
> rename from debug/tst-chk2.c
> rename to debug/tst-chk-1-cc.cc
> index be37ce2d22..945c1f8d5b 100644
> --- a/debug/tst-chk2.c
> +++ b/debug/tst-chk-1-cc.cc
> @@ -1,2 +1,2 @@
>  #define _FORTIFY_SOURCE 1
> -#include "tst-chk1.c"
> +#include "tst-chk-0.c"
> diff --git a/debug/tst-lfschk4.cc b/debug/tst-chk-1-lfs.c
> similarity index 55%
> rename from debug/tst-lfschk4.cc
> rename to debug/tst-chk-1-lfs.c
> index f3e6d47d5e..0d67643e9e 100644
> --- a/debug/tst-lfschk4.cc
> +++ b/debug/tst-chk-1-lfs.c
> @@ -1,2 +1,2 @@
>  #define _FILE_OFFSET_BITS 64
> -#include "tst-chk1.c"
> +#include "tst-chk-1.c"
> diff --git a/debug/tst-chk5.cc b/debug/tst-chk-1.c
> similarity index 53%
> rename from debug/tst-chk5.cc
> rename to debug/tst-chk-1.c
> index be37ce2d22..945c1f8d5b 100644
> --- a/debug/tst-chk5.cc
> +++ b/debug/tst-chk-1.c
> @@ -1,2 +1,2 @@
>  #define _FORTIFY_SOURCE 1
> -#include "tst-chk1.c"
> +#include "tst-chk-0.c"
> diff --git a/debug/tst-chk-2-cc-lfs.cc b/debug/tst-chk-2-cc-lfs.cc
> new file mode 100644
> index 0000000000..97c83def5c
> --- /dev/null
> +++ b/debug/tst-chk-2-cc-lfs.cc
> @@ -0,0 +1,2 @@
> +#define _FILE_OFFSET_BITS 64
> +#include "tst-chk-2.c"
> diff --git a/debug/tst-chk6.cc b/debug/tst-chk-2-cc.cc
> similarity index 53%
> rename from debug/tst-chk6.cc
> rename to debug/tst-chk-2-cc.cc
> index 38b8e4fb36..f178340bbd 100644
> --- a/debug/tst-chk6.cc
> +++ b/debug/tst-chk-2-cc.cc
> @@ -1,2 +1,2 @@
>  #define _FORTIFY_SOURCE 2
> -#include "tst-chk1.c"
> +#include "tst-chk-0.c"
> diff --git a/debug/tst-chk-2-lfs.c b/debug/tst-chk-2-lfs.c
> new file mode 100644
> index 0000000000..97c83def5c
> --- /dev/null
> +++ b/debug/tst-chk-2-lfs.c
> @@ -0,0 +1,2 @@
> +#define _FILE_OFFSET_BITS 64
> +#include "tst-chk-2.c"
> diff --git a/debug/tst-chk3.c b/debug/tst-chk-2.c
> similarity index 53%
> rename from debug/tst-chk3.c
> rename to debug/tst-chk-2.c
> index 38b8e4fb36..f178340bbd 100644
> --- a/debug/tst-chk3.c
> +++ b/debug/tst-chk-2.c
> @@ -1,2 +1,2 @@
>  #define _FORTIFY_SOURCE 2
> -#include "tst-chk1.c"
> +#include "tst-chk-0.c"
> diff --git a/debug/tst-chk-3-cc-lfs.cc b/debug/tst-chk-3-cc-lfs.cc
> new file mode 100644
> index 0000000000..d5d8c28bc7
> --- /dev/null
> +++ b/debug/tst-chk-3-cc-lfs.cc
> @@ -0,0 +1,2 @@
> +#define _FILE_OFFSET_BITS 64
> +#include "tst-chk-3.c"
> diff --git a/debug/tst-chk7.c b/debug/tst-chk-3-cc.cc
> similarity index 53%
> rename from debug/tst-chk7.c
> rename to debug/tst-chk-3-cc.cc
> index 2a7b323812..c1ddac1261 100644
> --- a/debug/tst-chk7.c
> +++ b/debug/tst-chk-3-cc.cc
> @@ -1,2 +1,2 @@
>  #define _FORTIFY_SOURCE 3
> -#include "tst-chk1.c"
> +#include "tst-chk-0.c"
> diff --git a/debug/tst-chk-3-lfs.c b/debug/tst-chk-3-lfs.c
> new file mode 100644
> index 0000000000..d5d8c28bc7
> --- /dev/null
> +++ b/debug/tst-chk-3-lfs.c
> @@ -0,0 +1,2 @@
> +#define _FILE_OFFSET_BITS 64
> +#include "tst-chk-3.c"
> diff --git a/debug/tst-chk8.cc b/debug/tst-chk-3.c
> similarity index 53%
> rename from debug/tst-chk8.cc
> rename to debug/tst-chk-3.c
> index 2a7b323812..c1ddac1261 100644
> --- a/debug/tst-chk8.cc
> +++ b/debug/tst-chk-3.c
> @@ -1,2 +1,2 @@
>  #define _FORTIFY_SOURCE 3
> -#include "tst-chk1.c"
> +#include "tst-chk-0.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-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"
  
Siddhesh Poyarekar Jan. 7, 2022, 2:09 a.m. UTC | #2
On 07/01/2022 02:21, Adhemerval Zanella wrote:
> 
> 
> On 05/01/2022 01:45, Siddhesh Poyarekar via Libc-alpha wrote:
>> Rename all debug/tst-chk* tests to reflect the fortification level
>> they're testing and any additional macros so that rules for them can be
>> autogenerated.  tst-chk0* are without fortification, tst-chk1 for
>> _FORTIFY_SOURCE=1 and so on.  This allows easier replication of the
>> tests to check additional macros.
>>
>> The change also expands the -lfs to include _FORTIFY_SOURCE=3.
>>
>> Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
> 
> Looks good in general, some comments below.
> 
>> ---
>>   debug/Makefile                               | 75 +++++++++-----------
>>   debug/{tst-lfschk1.c => tst-chk-0-cc-lfs.cc} |  2 +-
>>   debug/tst-chk-0-cc.cc                        |  1 +
>>   debug/{tst-lfschk2.c => tst-chk-0-lfs.c}     |  2 +-
>>   debug/{tst-chk1.c => tst-chk-0.c}            |  0
>>   debug/{tst-lfschk3.c => tst-chk-1-cc-lfs.cc} |  2 +-
>>   debug/{tst-chk2.c => tst-chk-1-cc.cc}        |  2 +-
>>   debug/{tst-lfschk4.cc => tst-chk-1-lfs.c}    |  2 +-
>>   debug/{tst-chk5.cc => tst-chk-1.c}           |  2 +-
>>   debug/tst-chk-2-cc-lfs.cc                    |  2 +
>>   debug/{tst-chk6.cc => tst-chk-2-cc.cc}       |  2 +-
>>   debug/tst-chk-2-lfs.c                        |  2 +
>>   debug/{tst-chk3.c => tst-chk-2.c}            |  2 +-
>>   debug/tst-chk-3-cc-lfs.cc                    |  2 +
>>   debug/{tst-chk7.c => tst-chk-3-cc.cc}        |  2 +-
>>   debug/tst-chk-3-lfs.c                        |  2 +
>>   debug/{tst-chk8.cc => tst-chk-3.c}           |  2 +-
>>   debug/tst-chk4.cc                            |  1 -
>>   debug/tst-lfschk5.cc                         |  2 -
>>   debug/tst-lfschk6.cc                         |  2 -
>>   20 files changed, 52 insertions(+), 57 deletions(-)
>>   rename debug/{tst-lfschk1.c => tst-chk-0-cc-lfs.cc} (55%)
>>   create mode 100644 debug/tst-chk-0-cc.cc
>>   rename debug/{tst-lfschk2.c => tst-chk-0-lfs.c} (55%)
>>   rename debug/{tst-chk1.c => tst-chk-0.c} (100%)
>>   rename debug/{tst-lfschk3.c => tst-chk-1-cc-lfs.cc} (55%)
>>   rename debug/{tst-chk2.c => tst-chk-1-cc.cc} (53%)
>>   rename debug/{tst-lfschk4.cc => tst-chk-1-lfs.c} (55%)
>>   rename debug/{tst-chk5.cc => tst-chk-1.c} (53%)
>>   create mode 100644 debug/tst-chk-2-cc-lfs.cc
>>   rename debug/{tst-chk6.cc => tst-chk-2-cc.cc} (53%)
>>   create mode 100644 debug/tst-chk-2-lfs.c
>>   rename debug/{tst-chk3.c => tst-chk-2.c} (53%)
>>   create mode 100644 debug/tst-chk-3-cc-lfs.cc
>>   rename debug/{tst-chk7.c => tst-chk-3-cc.cc} (53%)
>>   create mode 100644 debug/tst-chk-3-lfs.c
>>   rename debug/{tst-chk8.cc => tst-chk-3.c} (53%)
>>   delete mode 100644 debug/tst-chk4.cc
>>   delete mode 100644 debug/tst-lfschk5.cc
>>   delete mode 100644 debug/tst-lfschk6.cc
>>
>> diff --git a/debug/Makefile b/debug/Makefile
>> index 9c2ce61a86..9aa27eb00c 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,31 @@ 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.
>> +tests-chk = $(addprefix tst-chk-, 0 1 2 3)
>> +tests-chk-cc = $(addsuffix -cc, $(tests-chk))
>> +tests-chk-lfs = $(addsuffix -lfs, $(tests-chk))
>> +tests-chk-cc-lfs = $(addsuffix -lfs, $(tests-chk-cc))
>> +
>>   # 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 disable-warnings
>> +CFLAGS-$(1).$(2) += -Wno-format -Wno-deprecated-declarations -Wno-error
>> +endef
>> +
>> +$(foreach t,$(tests-chk) $(tests-chk-lfs), \
>> +	  $(eval $(call disable-warnings,$(t),c)))
>> +
>> +$(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs), \
>> +	  $(eval $(call disable-warnings,$(t),cc)))
>> +
>> +define link-cc
>> +LDLIBS-$(1) = -lstdc++
>> +endef
>> +$(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs), $(eval $(call link-cc,$(t))))
>>   
>>   # backtrace_symbols only works if we link with -rdynamic.  backtrace
>>   # requires unwind tables on most architectures.
>> @@ -152,19 +152,18 @@ LDFLAGS-tst-backtrace6 = -rdynamic
>>   
>>   CFLAGS-tst-ssp-1.c += -fstack-protector-all
>>   
> 
> Nice, it does simplify the required rules.  Maybe you could also extend it to
> LFS as well:
> 
> diff --git a/debug/Makefile b/debug/Makefile
> index dc73600213..019046391b 100644
> --- a/debug/Makefile
> +++ b/debug/Makefile
> @@ -127,6 +127,9 @@ tests-chk-cc-nongnu = $(addsuffix -nongnu, $(tests-chk-cc))
>   define disable-warnings
>   CFLAGS-$(1).$(2) += -Wno-format -Wno-deprecated-declarations -Wno-error
>   endef
> +define enable-lfs
> +CFLAGS-$(1).$(2) += -D_FILE_OFFSET_BITS=64
> +endef
>   
>   $(foreach t,$(tests-chk) $(tests-chk-lfs) $(tests-chk-nongnu), \
>   	  $(eval $(call disable-warnings,$(t),c)))
> @@ -134,6 +137,9 @@ $(foreach t,$(tests-chk) $(tests-chk-lfs) $(tests-chk-nongnu), \
>   $(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs) $(tests-chk-cc-nongnu), \
>   	  $(eval $(call disable-warnings,$(t),cc)))
>   
> +$(foreach t,$(tests-chk-lfs), $(eval $(call enable-lfs,$(t),c)))
> +$(foreach t,$(tests-chk-cc-lfs), $(eval $(call enable-lfs,$(t),cc)))
> +
>   define link-cc
>   LDLIBS-$(1) = -lstdc++
>   endef
> 
> And then remove the '#define _FILE_OFFSET_BITS 64' so the rule is applied
> regardless whether the file defines or not.

While it works for _FILE_OFFSET_BITS, I doubt if it'll work for 
_GNU_SOURCE since it will get overridden by libc-symbols.h.

At some point I want to do a cleanup where libc-symbols.h undefines 
_GNU_SOURCE for tests and only tests that require it, define it 
explicitly.  Then we can properly auto-generate _FORTIFY_SOURCE tests 
out of tst-chk-0.c just like we do for mcheck and malloc-check tests.

May I keep it like this for now and do this additional cleanup later?

> 
>> -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-chk) $(tests-chk-cc) $(tests-chk-lfs) $(tests-chk-cc-lfs)
> 
> Since you are touching, put one file per line.

OK.

> 
>>   
>>   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-chk-cc) $(tests-chk-cc-lfs)
> 
> Same.
> 
>>   endif
>>   
>>   extra-libs = libSegFault libpcprofile
>> @@ -191,20 +190,12 @@ 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-chk) $(tests-chk-cc) $(tests-chk-lfs) $(tests-chk-cc-lfs), \
>> +	  $(eval $(call link-cc,$(t))))
>>   endif
>>   
>>   sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
> 
> Same.

OK.

> 
>> diff --git a/debug/tst-lfschk1.c b/debug/tst-chk-0-cc-lfs.cc
>> similarity index 55%
>> rename from debug/tst-lfschk1.c
>> rename to debug/tst-chk-0-cc-lfs.cc
>> index f3e6d47d5e..db699b2391 100644
>> --- a/debug/tst-lfschk1.c
>> +++ b/debug/tst-chk-0-cc-lfs.cc
>> @@ -1,2 +1,2 @@
>>   #define _FILE_OFFSET_BITS 64
>> -#include "tst-chk1.c"
>> +#include "tst-chk-0.c"
>> diff --git a/debug/tst-chk-0-cc.cc b/debug/tst-chk-0-cc.cc
>> new file mode 100644
>> index 0000000000..be76fc69d4
>> --- /dev/null
>> +++ b/debug/tst-chk-0-cc.cc
>> @@ -0,0 +1 @@
>> +#include "tst-chk-0.c"
>> diff --git a/debug/tst-lfschk2.c b/debug/tst-chk-0-lfs.c
>> similarity index 55%
>> rename from debug/tst-lfschk2.c
>> rename to debug/tst-chk-0-lfs.c
>> index 95d4db1d32..db699b2391 100644
>> --- a/debug/tst-lfschk2.c
>> +++ b/debug/tst-chk-0-lfs.c
>> @@ -1,2 +1,2 @@
>>   #define _FILE_OFFSET_BITS 64
>> -#include "tst-chk2.c"
>> +#include "tst-chk-0.c"
>> diff --git a/debug/tst-chk1.c b/debug/tst-chk-0.c
>> similarity index 100%
>> rename from debug/tst-chk1.c
>> rename to debug/tst-chk-0.c
>> diff --git a/debug/tst-lfschk3.c b/debug/tst-chk-1-cc-lfs.cc
>> similarity index 55%
>> rename from debug/tst-lfschk3.c
>> rename to debug/tst-chk-1-cc-lfs.cc
>> index 50a1ae1258..0d67643e9e 100644
>> --- a/debug/tst-lfschk3.c
>> +++ b/debug/tst-chk-1-cc-lfs.cc
>> @@ -1,2 +1,2 @@
>>   #define _FILE_OFFSET_BITS 64
>> -#include "tst-chk3.c"
>> +#include "tst-chk-1.c"
>> diff --git a/debug/tst-chk2.c b/debug/tst-chk-1-cc.cc
>> similarity index 53%
>> rename from debug/tst-chk2.c
>> rename to debug/tst-chk-1-cc.cc
>> index be37ce2d22..945c1f8d5b 100644
>> --- a/debug/tst-chk2.c
>> +++ b/debug/tst-chk-1-cc.cc
>> @@ -1,2 +1,2 @@
>>   #define _FORTIFY_SOURCE 1
>> -#include "tst-chk1.c"
>> +#include "tst-chk-0.c"
>> diff --git a/debug/tst-lfschk4.cc b/debug/tst-chk-1-lfs.c
>> similarity index 55%
>> rename from debug/tst-lfschk4.cc
>> rename to debug/tst-chk-1-lfs.c
>> index f3e6d47d5e..0d67643e9e 100644
>> --- a/debug/tst-lfschk4.cc
>> +++ b/debug/tst-chk-1-lfs.c
>> @@ -1,2 +1,2 @@
>>   #define _FILE_OFFSET_BITS 64
>> -#include "tst-chk1.c"
>> +#include "tst-chk-1.c"
>> diff --git a/debug/tst-chk5.cc b/debug/tst-chk-1.c
>> similarity index 53%
>> rename from debug/tst-chk5.cc
>> rename to debug/tst-chk-1.c
>> index be37ce2d22..945c1f8d5b 100644
>> --- a/debug/tst-chk5.cc
>> +++ b/debug/tst-chk-1.c
>> @@ -1,2 +1,2 @@
>>   #define _FORTIFY_SOURCE 1
>> -#include "tst-chk1.c"
>> +#include "tst-chk-0.c"
>> diff --git a/debug/tst-chk-2-cc-lfs.cc b/debug/tst-chk-2-cc-lfs.cc
>> new file mode 100644
>> index 0000000000..97c83def5c
>> --- /dev/null
>> +++ b/debug/tst-chk-2-cc-lfs.cc
>> @@ -0,0 +1,2 @@
>> +#define _FILE_OFFSET_BITS 64
>> +#include "tst-chk-2.c"
>> diff --git a/debug/tst-chk6.cc b/debug/tst-chk-2-cc.cc
>> similarity index 53%
>> rename from debug/tst-chk6.cc
>> rename to debug/tst-chk-2-cc.cc
>> index 38b8e4fb36..f178340bbd 100644
>> --- a/debug/tst-chk6.cc
>> +++ b/debug/tst-chk-2-cc.cc
>> @@ -1,2 +1,2 @@
>>   #define _FORTIFY_SOURCE 2
>> -#include "tst-chk1.c"
>> +#include "tst-chk-0.c"
>> diff --git a/debug/tst-chk-2-lfs.c b/debug/tst-chk-2-lfs.c
>> new file mode 100644
>> index 0000000000..97c83def5c
>> --- /dev/null
>> +++ b/debug/tst-chk-2-lfs.c
>> @@ -0,0 +1,2 @@
>> +#define _FILE_OFFSET_BITS 64
>> +#include "tst-chk-2.c"
>> diff --git a/debug/tst-chk3.c b/debug/tst-chk-2.c
>> similarity index 53%
>> rename from debug/tst-chk3.c
>> rename to debug/tst-chk-2.c
>> index 38b8e4fb36..f178340bbd 100644
>> --- a/debug/tst-chk3.c
>> +++ b/debug/tst-chk-2.c
>> @@ -1,2 +1,2 @@
>>   #define _FORTIFY_SOURCE 2
>> -#include "tst-chk1.c"
>> +#include "tst-chk-0.c"
>> diff --git a/debug/tst-chk-3-cc-lfs.cc b/debug/tst-chk-3-cc-lfs.cc
>> new file mode 100644
>> index 0000000000..d5d8c28bc7
>> --- /dev/null
>> +++ b/debug/tst-chk-3-cc-lfs.cc
>> @@ -0,0 +1,2 @@
>> +#define _FILE_OFFSET_BITS 64
>> +#include "tst-chk-3.c"
>> diff --git a/debug/tst-chk7.c b/debug/tst-chk-3-cc.cc
>> similarity index 53%
>> rename from debug/tst-chk7.c
>> rename to debug/tst-chk-3-cc.cc
>> index 2a7b323812..c1ddac1261 100644
>> --- a/debug/tst-chk7.c
>> +++ b/debug/tst-chk-3-cc.cc
>> @@ -1,2 +1,2 @@
>>   #define _FORTIFY_SOURCE 3
>> -#include "tst-chk1.c"
>> +#include "tst-chk-0.c"
>> diff --git a/debug/tst-chk-3-lfs.c b/debug/tst-chk-3-lfs.c
>> new file mode 100644
>> index 0000000000..d5d8c28bc7
>> --- /dev/null
>> +++ b/debug/tst-chk-3-lfs.c
>> @@ -0,0 +1,2 @@
>> +#define _FILE_OFFSET_BITS 64
>> +#include "tst-chk-3.c"
>> diff --git a/debug/tst-chk8.cc b/debug/tst-chk-3.c
>> similarity index 53%
>> rename from debug/tst-chk8.cc
>> rename to debug/tst-chk-3.c
>> index 2a7b323812..c1ddac1261 100644
>> --- a/debug/tst-chk8.cc
>> +++ b/debug/tst-chk-3.c
>> @@ -1,2 +1,2 @@
>>   #define _FORTIFY_SOURCE 3
>> -#include "tst-chk1.c"
>> +#include "tst-chk-0.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-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"
> 

Thanks,
Siddhesh
  
Adhemerval Zanella Jan. 7, 2022, 1 p.m. UTC | #3
On 06/01/2022 23:09, Siddhesh Poyarekar wrote:
> On 07/01/2022 02:21, Adhemerval Zanella wrote:
>>
>>
>> On 05/01/2022 01:45, Siddhesh Poyarekar via Libc-alpha wrote:
>>> Rename all debug/tst-chk* tests to reflect the fortification level
>>> they're testing and any additional macros so that rules for them can be
>>> autogenerated.  tst-chk0* are without fortification, tst-chk1 for
>>> _FORTIFY_SOURCE=1 and so on.  This allows easier replication of the
>>> tests to check additional macros.
>>>
>>> The change also expands the -lfs to include _FORTIFY_SOURCE=3.
>>>
>>> Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
>>
>> Looks good in general, some comments below.
>>
>>> ---
>>>   debug/Makefile                               | 75 +++++++++-----------
>>>   debug/{tst-lfschk1.c => tst-chk-0-cc-lfs.cc} |  2 +-
>>>   debug/tst-chk-0-cc.cc                        |  1 +
>>>   debug/{tst-lfschk2.c => tst-chk-0-lfs.c}     |  2 +-
>>>   debug/{tst-chk1.c => tst-chk-0.c}            |  0
>>>   debug/{tst-lfschk3.c => tst-chk-1-cc-lfs.cc} |  2 +-
>>>   debug/{tst-chk2.c => tst-chk-1-cc.cc}        |  2 +-
>>>   debug/{tst-lfschk4.cc => tst-chk-1-lfs.c}    |  2 +-
>>>   debug/{tst-chk5.cc => tst-chk-1.c}           |  2 +-
>>>   debug/tst-chk-2-cc-lfs.cc                    |  2 +
>>>   debug/{tst-chk6.cc => tst-chk-2-cc.cc}       |  2 +-
>>>   debug/tst-chk-2-lfs.c                        |  2 +
>>>   debug/{tst-chk3.c => tst-chk-2.c}            |  2 +-
>>>   debug/tst-chk-3-cc-lfs.cc                    |  2 +
>>>   debug/{tst-chk7.c => tst-chk-3-cc.cc}        |  2 +-
>>>   debug/tst-chk-3-lfs.c                        |  2 +
>>>   debug/{tst-chk8.cc => tst-chk-3.c}           |  2 +-
>>>   debug/tst-chk4.cc                            |  1 -
>>>   debug/tst-lfschk5.cc                         |  2 -
>>>   debug/tst-lfschk6.cc                         |  2 -
>>>   20 files changed, 52 insertions(+), 57 deletions(-)
>>>   rename debug/{tst-lfschk1.c => tst-chk-0-cc-lfs.cc} (55%)
>>>   create mode 100644 debug/tst-chk-0-cc.cc
>>>   rename debug/{tst-lfschk2.c => tst-chk-0-lfs.c} (55%)
>>>   rename debug/{tst-chk1.c => tst-chk-0.c} (100%)
>>>   rename debug/{tst-lfschk3.c => tst-chk-1-cc-lfs.cc} (55%)
>>>   rename debug/{tst-chk2.c => tst-chk-1-cc.cc} (53%)
>>>   rename debug/{tst-lfschk4.cc => tst-chk-1-lfs.c} (55%)
>>>   rename debug/{tst-chk5.cc => tst-chk-1.c} (53%)
>>>   create mode 100644 debug/tst-chk-2-cc-lfs.cc
>>>   rename debug/{tst-chk6.cc => tst-chk-2-cc.cc} (53%)
>>>   create mode 100644 debug/tst-chk-2-lfs.c
>>>   rename debug/{tst-chk3.c => tst-chk-2.c} (53%)
>>>   create mode 100644 debug/tst-chk-3-cc-lfs.cc
>>>   rename debug/{tst-chk7.c => tst-chk-3-cc.cc} (53%)
>>>   create mode 100644 debug/tst-chk-3-lfs.c
>>>   rename debug/{tst-chk8.cc => tst-chk-3.c} (53%)
>>>   delete mode 100644 debug/tst-chk4.cc
>>>   delete mode 100644 debug/tst-lfschk5.cc
>>>   delete mode 100644 debug/tst-lfschk6.cc
>>>
>>> diff --git a/debug/Makefile b/debug/Makefile
>>> index 9c2ce61a86..9aa27eb00c 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,31 @@ 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.
>>> +tests-chk = $(addprefix tst-chk-, 0 1 2 3)
>>> +tests-chk-cc = $(addsuffix -cc, $(tests-chk))
>>> +tests-chk-lfs = $(addsuffix -lfs, $(tests-chk))
>>> +tests-chk-cc-lfs = $(addsuffix -lfs, $(tests-chk-cc))
>>> +
>>>   # 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 disable-warnings
>>> +CFLAGS-$(1).$(2) += -Wno-format -Wno-deprecated-declarations -Wno-error
>>> +endef
>>> +
>>> +$(foreach t,$(tests-chk) $(tests-chk-lfs), \
>>> +      $(eval $(call disable-warnings,$(t),c)))
>>> +
>>> +$(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs), \
>>> +      $(eval $(call disable-warnings,$(t),cc)))
>>> +
>>> +define link-cc
>>> +LDLIBS-$(1) = -lstdc++
>>> +endef
>>> +$(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs), $(eval $(call link-cc,$(t))))
>>>     # backtrace_symbols only works if we link with -rdynamic.  backtrace
>>>   # requires unwind tables on most architectures.
>>> @@ -152,19 +152,18 @@ LDFLAGS-tst-backtrace6 = -rdynamic
>>>     CFLAGS-tst-ssp-1.c += -fstack-protector-all
>>>   
>>
>> Nice, it does simplify the required rules.  Maybe you could also extend it to
>> LFS as well:
>>
>> diff --git a/debug/Makefile b/debug/Makefile
>> index dc73600213..019046391b 100644
>> --- a/debug/Makefile
>> +++ b/debug/Makefile
>> @@ -127,6 +127,9 @@ tests-chk-cc-nongnu = $(addsuffix -nongnu, $(tests-chk-cc))
>>   define disable-warnings
>>   CFLAGS-$(1).$(2) += -Wno-format -Wno-deprecated-declarations -Wno-error
>>   endef
>> +define enable-lfs
>> +CFLAGS-$(1).$(2) += -D_FILE_OFFSET_BITS=64
>> +endef
>>     $(foreach t,$(tests-chk) $(tests-chk-lfs) $(tests-chk-nongnu), \
>>         $(eval $(call disable-warnings,$(t),c)))
>> @@ -134,6 +137,9 @@ $(foreach t,$(tests-chk) $(tests-chk-lfs) $(tests-chk-nongnu), \
>>   $(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs) $(tests-chk-cc-nongnu), \
>>         $(eval $(call disable-warnings,$(t),cc)))
>>   +$(foreach t,$(tests-chk-lfs), $(eval $(call enable-lfs,$(t),c)))
>> +$(foreach t,$(tests-chk-cc-lfs), $(eval $(call enable-lfs,$(t),cc)))
>> +
>>   define link-cc
>>   LDLIBS-$(1) = -lstdc++
>>   endef
>>
>> And then remove the '#define _FILE_OFFSET_BITS 64' so the rule is applied
>> regardless whether the file defines or not.
> 
> While it works for _FILE_OFFSET_BITS, I doubt if it'll work for _GNU_SOURCE since it will get overridden by libc-symbols.h.
> 
> At some point I want to do a cleanup where libc-symbols.h undefines _GNU_SOURCE for tests and only tests that require it, define it explicitly.  Then we can properly auto-generate _FORTIFY_SOURCE tests out of tst-chk-0.c just like we do for mcheck and malloc-check tests.
> 
> May I keep it like this for now and do this additional cleanup later?

Indeed for _GNU_SOURCE it will get overridden, but I think it is still
useful to use with _FILE_OFFSET_BITS.

> 
>>
>>> -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-chk) $(tests-chk-cc) $(tests-chk-lfs) $(tests-chk-cc-lfs)
>>
>> Since you are touching, put one file per line.
> 
> OK.
> 
>>
>>>     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-chk-cc) $(tests-chk-cc-lfs)
>>
>> Same.
>>
>>>   endif
>>>     extra-libs = libSegFault libpcprofile
>>> @@ -191,20 +190,12 @@ 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-chk) $(tests-chk-cc) $(tests-chk-lfs) $(tests-chk-cc-lfs), \
>>> +      $(eval $(call link-cc,$(t))))
>>>   endif
>>>     sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
>>
>> Same.
> 
> OK.
> 
>>
>>> diff --git a/debug/tst-lfschk1.c b/debug/tst-chk-0-cc-lfs.cc
>>> similarity index 55%
>>> rename from debug/tst-lfschk1.c
>>> rename to debug/tst-chk-0-cc-lfs.cc
>>> index f3e6d47d5e..db699b2391 100644
>>> --- a/debug/tst-lfschk1.c
>>> +++ b/debug/tst-chk-0-cc-lfs.cc
>>> @@ -1,2 +1,2 @@
>>>   #define _FILE_OFFSET_BITS 64
>>> -#include "tst-chk1.c"
>>> +#include "tst-chk-0.c"
>>> diff --git a/debug/tst-chk-0-cc.cc b/debug/tst-chk-0-cc.cc
>>> new file mode 100644
>>> index 0000000000..be76fc69d4
>>> --- /dev/null
>>> +++ b/debug/tst-chk-0-cc.cc
>>> @@ -0,0 +1 @@
>>> +#include "tst-chk-0.c"
>>> diff --git a/debug/tst-lfschk2.c b/debug/tst-chk-0-lfs.c
>>> similarity index 55%
>>> rename from debug/tst-lfschk2.c
>>> rename to debug/tst-chk-0-lfs.c
>>> index 95d4db1d32..db699b2391 100644
>>> --- a/debug/tst-lfschk2.c
>>> +++ b/debug/tst-chk-0-lfs.c
>>> @@ -1,2 +1,2 @@
>>>   #define _FILE_OFFSET_BITS 64
>>> -#include "tst-chk2.c"
>>> +#include "tst-chk-0.c"
>>> diff --git a/debug/tst-chk1.c b/debug/tst-chk-0.c
>>> similarity index 100%
>>> rename from debug/tst-chk1.c
>>> rename to debug/tst-chk-0.c
>>> diff --git a/debug/tst-lfschk3.c b/debug/tst-chk-1-cc-lfs.cc
>>> similarity index 55%
>>> rename from debug/tst-lfschk3.c
>>> rename to debug/tst-chk-1-cc-lfs.cc
>>> index 50a1ae1258..0d67643e9e 100644
>>> --- a/debug/tst-lfschk3.c
>>> +++ b/debug/tst-chk-1-cc-lfs.cc
>>> @@ -1,2 +1,2 @@
>>>   #define _FILE_OFFSET_BITS 64
>>> -#include "tst-chk3.c"
>>> +#include "tst-chk-1.c"
>>> diff --git a/debug/tst-chk2.c b/debug/tst-chk-1-cc.cc
>>> similarity index 53%
>>> rename from debug/tst-chk2.c
>>> rename to debug/tst-chk-1-cc.cc
>>> index be37ce2d22..945c1f8d5b 100644
>>> --- a/debug/tst-chk2.c
>>> +++ b/debug/tst-chk-1-cc.cc
>>> @@ -1,2 +1,2 @@
>>>   #define _FORTIFY_SOURCE 1
>>> -#include "tst-chk1.c"
>>> +#include "tst-chk-0.c"
>>> diff --git a/debug/tst-lfschk4.cc b/debug/tst-chk-1-lfs.c
>>> similarity index 55%
>>> rename from debug/tst-lfschk4.cc
>>> rename to debug/tst-chk-1-lfs.c
>>> index f3e6d47d5e..0d67643e9e 100644
>>> --- a/debug/tst-lfschk4.cc
>>> +++ b/debug/tst-chk-1-lfs.c
>>> @@ -1,2 +1,2 @@
>>>   #define _FILE_OFFSET_BITS 64
>>> -#include "tst-chk1.c"
>>> +#include "tst-chk-1.c"
>>> diff --git a/debug/tst-chk5.cc b/debug/tst-chk-1.c
>>> similarity index 53%
>>> rename from debug/tst-chk5.cc
>>> rename to debug/tst-chk-1.c
>>> index be37ce2d22..945c1f8d5b 100644
>>> --- a/debug/tst-chk5.cc
>>> +++ b/debug/tst-chk-1.c
>>> @@ -1,2 +1,2 @@
>>>   #define _FORTIFY_SOURCE 1
>>> -#include "tst-chk1.c"
>>> +#include "tst-chk-0.c"
>>> diff --git a/debug/tst-chk-2-cc-lfs.cc b/debug/tst-chk-2-cc-lfs.cc
>>> new file mode 100644
>>> index 0000000000..97c83def5c
>>> --- /dev/null
>>> +++ b/debug/tst-chk-2-cc-lfs.cc
>>> @@ -0,0 +1,2 @@
>>> +#define _FILE_OFFSET_BITS 64
>>> +#include "tst-chk-2.c"
>>> diff --git a/debug/tst-chk6.cc b/debug/tst-chk-2-cc.cc
>>> similarity index 53%
>>> rename from debug/tst-chk6.cc
>>> rename to debug/tst-chk-2-cc.cc
>>> index 38b8e4fb36..f178340bbd 100644
>>> --- a/debug/tst-chk6.cc
>>> +++ b/debug/tst-chk-2-cc.cc
>>> @@ -1,2 +1,2 @@
>>>   #define _FORTIFY_SOURCE 2
>>> -#include "tst-chk1.c"
>>> +#include "tst-chk-0.c"
>>> diff --git a/debug/tst-chk-2-lfs.c b/debug/tst-chk-2-lfs.c
>>> new file mode 100644
>>> index 0000000000..97c83def5c
>>> --- /dev/null
>>> +++ b/debug/tst-chk-2-lfs.c
>>> @@ -0,0 +1,2 @@
>>> +#define _FILE_OFFSET_BITS 64
>>> +#include "tst-chk-2.c"
>>> diff --git a/debug/tst-chk3.c b/debug/tst-chk-2.c
>>> similarity index 53%
>>> rename from debug/tst-chk3.c
>>> rename to debug/tst-chk-2.c
>>> index 38b8e4fb36..f178340bbd 100644
>>> --- a/debug/tst-chk3.c
>>> +++ b/debug/tst-chk-2.c
>>> @@ -1,2 +1,2 @@
>>>   #define _FORTIFY_SOURCE 2
>>> -#include "tst-chk1.c"
>>> +#include "tst-chk-0.c"
>>> diff --git a/debug/tst-chk-3-cc-lfs.cc b/debug/tst-chk-3-cc-lfs.cc
>>> new file mode 100644
>>> index 0000000000..d5d8c28bc7
>>> --- /dev/null
>>> +++ b/debug/tst-chk-3-cc-lfs.cc
>>> @@ -0,0 +1,2 @@
>>> +#define _FILE_OFFSET_BITS 64
>>> +#include "tst-chk-3.c"
>>> diff --git a/debug/tst-chk7.c b/debug/tst-chk-3-cc.cc
>>> similarity index 53%
>>> rename from debug/tst-chk7.c
>>> rename to debug/tst-chk-3-cc.cc
>>> index 2a7b323812..c1ddac1261 100644
>>> --- a/debug/tst-chk7.c
>>> +++ b/debug/tst-chk-3-cc.cc
>>> @@ -1,2 +1,2 @@
>>>   #define _FORTIFY_SOURCE 3
>>> -#include "tst-chk1.c"
>>> +#include "tst-chk-0.c"
>>> diff --git a/debug/tst-chk-3-lfs.c b/debug/tst-chk-3-lfs.c
>>> new file mode 100644
>>> index 0000000000..d5d8c28bc7
>>> --- /dev/null
>>> +++ b/debug/tst-chk-3-lfs.c
>>> @@ -0,0 +1,2 @@
>>> +#define _FILE_OFFSET_BITS 64
>>> +#include "tst-chk-3.c"
>>> diff --git a/debug/tst-chk8.cc b/debug/tst-chk-3.c
>>> similarity index 53%
>>> rename from debug/tst-chk8.cc
>>> rename to debug/tst-chk-3.c
>>> index 2a7b323812..c1ddac1261 100644
>>> --- a/debug/tst-chk8.cc
>>> +++ b/debug/tst-chk-3.c
>>> @@ -1,2 +1,2 @@
>>>   #define _FORTIFY_SOURCE 3
>>> -#include "tst-chk1.c"
>>> +#include "tst-chk-0.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-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"
>>
> 
> Thanks,
> Siddhesh
  

Patch

diff --git a/debug/Makefile b/debug/Makefile
index 9c2ce61a86..9aa27eb00c 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,31 @@  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.
+tests-chk = $(addprefix tst-chk-, 0 1 2 3)
+tests-chk-cc = $(addsuffix -cc, $(tests-chk))
+tests-chk-lfs = $(addsuffix -lfs, $(tests-chk))
+tests-chk-cc-lfs = $(addsuffix -lfs, $(tests-chk-cc))
+
 # 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 disable-warnings
+CFLAGS-$(1).$(2) += -Wno-format -Wno-deprecated-declarations -Wno-error
+endef
+
+$(foreach t,$(tests-chk) $(tests-chk-lfs), \
+	  $(eval $(call disable-warnings,$(t),c)))
+
+$(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs), \
+	  $(eval $(call disable-warnings,$(t),cc)))
+
+define link-cc
+LDLIBS-$(1) = -lstdc++
+endef
+$(foreach t,$(tests-chk-cc) $(tests-chk-cc-lfs), $(eval $(call link-cc,$(t))))
 
 # backtrace_symbols only works if we link with -rdynamic.  backtrace
 # requires unwind tables on most architectures.
@@ -152,19 +152,18 @@  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-chk) $(tests-chk-cc) $(tests-chk-lfs) $(tests-chk-cc-lfs)
 
 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-chk-cc) $(tests-chk-cc-lfs)
 endif
 
 extra-libs = libSegFault libpcprofile
@@ -191,20 +190,12 @@  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-chk) $(tests-chk-cc) $(tests-chk-lfs) $(tests-chk-cc-lfs), \
+	  $(eval $(call link-cc,$(t))))
 endif
 
 sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
diff --git a/debug/tst-lfschk1.c b/debug/tst-chk-0-cc-lfs.cc
similarity index 55%
rename from debug/tst-lfschk1.c
rename to debug/tst-chk-0-cc-lfs.cc
index f3e6d47d5e..db699b2391 100644
--- a/debug/tst-lfschk1.c
+++ b/debug/tst-chk-0-cc-lfs.cc
@@ -1,2 +1,2 @@ 
 #define _FILE_OFFSET_BITS 64
-#include "tst-chk1.c"
+#include "tst-chk-0.c"
diff --git a/debug/tst-chk-0-cc.cc b/debug/tst-chk-0-cc.cc
new file mode 100644
index 0000000000..be76fc69d4
--- /dev/null
+++ b/debug/tst-chk-0-cc.cc
@@ -0,0 +1 @@ 
+#include "tst-chk-0.c"
diff --git a/debug/tst-lfschk2.c b/debug/tst-chk-0-lfs.c
similarity index 55%
rename from debug/tst-lfschk2.c
rename to debug/tst-chk-0-lfs.c
index 95d4db1d32..db699b2391 100644
--- a/debug/tst-lfschk2.c
+++ b/debug/tst-chk-0-lfs.c
@@ -1,2 +1,2 @@ 
 #define _FILE_OFFSET_BITS 64
-#include "tst-chk2.c"
+#include "tst-chk-0.c"
diff --git a/debug/tst-chk1.c b/debug/tst-chk-0.c
similarity index 100%
rename from debug/tst-chk1.c
rename to debug/tst-chk-0.c
diff --git a/debug/tst-lfschk3.c b/debug/tst-chk-1-cc-lfs.cc
similarity index 55%
rename from debug/tst-lfschk3.c
rename to debug/tst-chk-1-cc-lfs.cc
index 50a1ae1258..0d67643e9e 100644
--- a/debug/tst-lfschk3.c
+++ b/debug/tst-chk-1-cc-lfs.cc
@@ -1,2 +1,2 @@ 
 #define _FILE_OFFSET_BITS 64
-#include "tst-chk3.c"
+#include "tst-chk-1.c"
diff --git a/debug/tst-chk2.c b/debug/tst-chk-1-cc.cc
similarity index 53%
rename from debug/tst-chk2.c
rename to debug/tst-chk-1-cc.cc
index be37ce2d22..945c1f8d5b 100644
--- a/debug/tst-chk2.c
+++ b/debug/tst-chk-1-cc.cc
@@ -1,2 +1,2 @@ 
 #define _FORTIFY_SOURCE 1
-#include "tst-chk1.c"
+#include "tst-chk-0.c"
diff --git a/debug/tst-lfschk4.cc b/debug/tst-chk-1-lfs.c
similarity index 55%
rename from debug/tst-lfschk4.cc
rename to debug/tst-chk-1-lfs.c
index f3e6d47d5e..0d67643e9e 100644
--- a/debug/tst-lfschk4.cc
+++ b/debug/tst-chk-1-lfs.c
@@ -1,2 +1,2 @@ 
 #define _FILE_OFFSET_BITS 64
-#include "tst-chk1.c"
+#include "tst-chk-1.c"
diff --git a/debug/tst-chk5.cc b/debug/tst-chk-1.c
similarity index 53%
rename from debug/tst-chk5.cc
rename to debug/tst-chk-1.c
index be37ce2d22..945c1f8d5b 100644
--- a/debug/tst-chk5.cc
+++ b/debug/tst-chk-1.c
@@ -1,2 +1,2 @@ 
 #define _FORTIFY_SOURCE 1
-#include "tst-chk1.c"
+#include "tst-chk-0.c"
diff --git a/debug/tst-chk-2-cc-lfs.cc b/debug/tst-chk-2-cc-lfs.cc
new file mode 100644
index 0000000000..97c83def5c
--- /dev/null
+++ b/debug/tst-chk-2-cc-lfs.cc
@@ -0,0 +1,2 @@ 
+#define _FILE_OFFSET_BITS 64
+#include "tst-chk-2.c"
diff --git a/debug/tst-chk6.cc b/debug/tst-chk-2-cc.cc
similarity index 53%
rename from debug/tst-chk6.cc
rename to debug/tst-chk-2-cc.cc
index 38b8e4fb36..f178340bbd 100644
--- a/debug/tst-chk6.cc
+++ b/debug/tst-chk-2-cc.cc
@@ -1,2 +1,2 @@ 
 #define _FORTIFY_SOURCE 2
-#include "tst-chk1.c"
+#include "tst-chk-0.c"
diff --git a/debug/tst-chk-2-lfs.c b/debug/tst-chk-2-lfs.c
new file mode 100644
index 0000000000..97c83def5c
--- /dev/null
+++ b/debug/tst-chk-2-lfs.c
@@ -0,0 +1,2 @@ 
+#define _FILE_OFFSET_BITS 64
+#include "tst-chk-2.c"
diff --git a/debug/tst-chk3.c b/debug/tst-chk-2.c
similarity index 53%
rename from debug/tst-chk3.c
rename to debug/tst-chk-2.c
index 38b8e4fb36..f178340bbd 100644
--- a/debug/tst-chk3.c
+++ b/debug/tst-chk-2.c
@@ -1,2 +1,2 @@ 
 #define _FORTIFY_SOURCE 2
-#include "tst-chk1.c"
+#include "tst-chk-0.c"
diff --git a/debug/tst-chk-3-cc-lfs.cc b/debug/tst-chk-3-cc-lfs.cc
new file mode 100644
index 0000000000..d5d8c28bc7
--- /dev/null
+++ b/debug/tst-chk-3-cc-lfs.cc
@@ -0,0 +1,2 @@ 
+#define _FILE_OFFSET_BITS 64
+#include "tst-chk-3.c"
diff --git a/debug/tst-chk7.c b/debug/tst-chk-3-cc.cc
similarity index 53%
rename from debug/tst-chk7.c
rename to debug/tst-chk-3-cc.cc
index 2a7b323812..c1ddac1261 100644
--- a/debug/tst-chk7.c
+++ b/debug/tst-chk-3-cc.cc
@@ -1,2 +1,2 @@ 
 #define _FORTIFY_SOURCE 3
-#include "tst-chk1.c"
+#include "tst-chk-0.c"
diff --git a/debug/tst-chk-3-lfs.c b/debug/tst-chk-3-lfs.c
new file mode 100644
index 0000000000..d5d8c28bc7
--- /dev/null
+++ b/debug/tst-chk-3-lfs.c
@@ -0,0 +1,2 @@ 
+#define _FILE_OFFSET_BITS 64
+#include "tst-chk-3.c"
diff --git a/debug/tst-chk8.cc b/debug/tst-chk-3.c
similarity index 53%
rename from debug/tst-chk8.cc
rename to debug/tst-chk-3.c
index 2a7b323812..c1ddac1261 100644
--- a/debug/tst-chk8.cc
+++ b/debug/tst-chk-3.c
@@ -1,2 +1,2 @@ 
 #define _FORTIFY_SOURCE 3
-#include "tst-chk1.c"
+#include "tst-chk-0.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-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"