1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00

debug: Autogenerate _FORTIFY_SOURCE tests

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>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
This commit is contained in:
Siddhesh Poyarekar
2022-01-12 23:34:23 +05:30
parent f0ed50e1c7
commit db27f1251b
16 changed files with 73 additions and 67 deletions

View File

@@ -424,6 +424,12 @@ $(objpfx)%$o: $(objpfx)%.c $(before-compile); $$(compile-command.c)
endef endef
object-suffixes-left := $(all-object-suffixes) object-suffixes-left := $(all-object-suffixes)
include $(o-iterator) 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 endif
# Generate .dT files as we compile. # Generate .dT files as we compile.

View File

@@ -1,4 +1,5 @@
# Copyright (C) 1998-2022 Free Software Foundation, Inc. # Copyright (C) 1998-2022 Free Software Foundation, Inc.
# Copyright The GNU Toolchain Authors.
# This file is part of the GNU C Library. # This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or # 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-longjmp_chk3.c += -D_FORTIFY_SOURCE=1
CPPFLAGS-tst-realpath-chk.c += -D_FORTIFY_SOURCE=2 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 know these tests have problems with format strings, this is what
# we are testing. Disable that warning. They are also testing # we are testing. Disable that warning. They are also testing
# deprecated functions (notably gets) so disable that warning as well. # deprecated functions (notably gets) so disable that warning as well.
# And they also generate warnings from warning attributes, which # And they also generate warnings from warning attributes, which
# cannot be disabled via pragmas, so require -Wno-error to be used. # cannot be disabled via pragmas, so require -Wno-error to be used.
CFLAGS-tst-chk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error define gen-chk-test
CFLAGS-tst-chk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error tests-$(1)-chk += tst-fortify-$(1)-$(2)-$(3)
CFLAGS-tst-chk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error CFLAGS-tst-fortify-$(1)-$(2)-$(3).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \
CFLAGS-tst-chk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -Wno-deprecated-declarations \
CFLAGS-tst-chk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error -Wno-error
CFLAGS-tst-chk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error $(eval $(call cflags-$(2),$(1),$(3)))
CFLAGS-tst-chk7.c += -Wno-format -Wno-deprecated-declarations -Wno-error $(objpfx)tst-fortify-$(1)-$(2)-$(3).$(1): tst-fortify.c Makefile
CFLAGS-tst-chk8.cc += -Wno-format -Wno-deprecated-declarations -Wno-error ( echo "/* Autogenerated from Makefile. */"; \
CFLAGS-tst-lfschk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error echo ""; \
CFLAGS-tst-lfschk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error echo "#include \"tst-fortify.c\"" ) > $$@.tmp
CFLAGS-tst-lfschk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error mv $$@.tmp $$@
CFLAGS-tst-lfschk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error endef
CFLAGS-tst-lfschk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
CFLAGS-tst-lfschk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error chk-extensions = c cc
LDLIBS-tst-chk4 = -lstdc++ chk-types = default lfs
LDLIBS-tst-chk5 = -lstdc++ chk-levels = 1 2 3
LDLIBS-tst-chk6 = -lstdc++
LDLIBS-tst-chk8 = -lstdc++ $(foreach e,$(chk-extensions), \
LDLIBS-tst-lfschk4 = -lstdc++ $(foreach t,$(chk-types), \
LDLIBS-tst-lfschk5 = -lstdc++ $(foreach l,$(chk-levels), \
LDLIBS-tst-lfschk6 = -lstdc++ $(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 # backtrace_symbols only works if we link with -rdynamic. backtrace
# requires unwind tables on most architectures. # requires unwind tables on most architectures.
@@ -152,19 +181,25 @@ LDFLAGS-tst-backtrace6 = -rdynamic
CFLAGS-tst-ssp-1.c += -fstack-protector-all CFLAGS-tst-ssp-1.c += -fstack-protector-all
tests = backtrace-tst tst-longjmp_chk tst-chk1 tst-chk2 tst-chk3 \ tests = backtrace-tst \
tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk \ tst-longjmp_chk \
tst-chk4 tst-chk5 tst-chk6 tst-chk7 tst-chk8 tst-lfschk4 tst-lfschk5 \ test-strcpy_chk \
tst-lfschk6 tst-longjmp_chk2 tst-backtrace2 tst-backtrace3 \ test-stpcpy_chk \
tst-backtrace4 tst-backtrace5 tst-backtrace6 tst-realpath-chk tst-longjmp_chk2 \
tst-backtrace2 \
tst-backtrace3 \
tst-backtrace4 \
tst-backtrace5 \
tst-backtrace6 \
tst-realpath-chk \
$(tests-all-chk)
ifeq ($(have-ssp),yes) ifeq ($(have-ssp),yes)
tests += tst-ssp-1 tests += tst-ssp-1
endif endif
ifeq (,$(CXX)) ifeq (,$(CXX))
tests-unsupported = tst-chk4 tst-chk5 tst-chk6 tst-chk8 \ tests-unsupported = $(tests-cc-chk)
tst-lfschk4 tst-lfschk5 tst-lfschk6
endif endif
extra-libs = libpcprofile extra-libs = libpcprofile
@@ -185,20 +220,10 @@ ifeq ($(run-built-tests),yes)
LOCALES := de_DE.UTF-8 LOCALES := de_DE.UTF-8
include ../gen-locales.mk include ../gen-locales.mk
$(objpfx)tst-chk1.out: $(gen-locales) define chk-gen-locales
$(objpfx)tst-chk2.out: $(gen-locales) $(objpfx)$(1).out: $(gen-locales)
$(objpfx)tst-chk3.out: $(gen-locales) endef
$(objpfx)tst-chk4.out: $(gen-locales) $(foreach t, $(tests-all-chk), $(eval $(call chk-gen-locales,$(t))))
$(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)
endif endif
sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,') sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')

View File

@@ -1,2 +0,0 @@
#define _FORTIFY_SOURCE 1
#include "tst-chk1.c"

View File

@@ -1,2 +0,0 @@
#define _FORTIFY_SOURCE 2
#include "tst-chk1.c"

View File

@@ -1 +0,0 @@
#include "tst-chk1.c"

View File

@@ -1,2 +0,0 @@
#define _FORTIFY_SOURCE 1
#include "tst-chk1.c"

View File

@@ -1,2 +0,0 @@
#define _FORTIFY_SOURCE 2
#include "tst-chk1.c"

View File

@@ -1,2 +0,0 @@
#define _FORTIFY_SOURCE 3
#include "tst-chk1.c"

View File

@@ -1,2 +0,0 @@
#define _FORTIFY_SOURCE 3
#include "tst-chk1.c"

View File

@@ -1,2 +0,0 @@
#define _FILE_OFFSET_BITS 64
#include "tst-chk1.c"

View File

@@ -1,2 +0,0 @@
#define _FILE_OFFSET_BITS 64
#include "tst-chk2.c"

View File

@@ -1,2 +0,0 @@
#define _FILE_OFFSET_BITS 64
#include "tst-chk3.c"

View File

@@ -1,2 +0,0 @@
#define _FILE_OFFSET_BITS 64
#include "tst-chk1.c"

View File

@@ -1,2 +0,0 @@
#define _FILE_OFFSET_BITS 64
#include "tst-chk2.c"

View File

@@ -1,2 +0,0 @@
#define _FILE_OFFSET_BITS 64
#include "tst-chk3.c"