diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2023-06-20 16:55:10 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2023-07-10 15:58:41 -0300 |
commit | 035ca6b5365cc4772f3f08fe7d9639f5c7fc254c (patch) | |
tree | 869c73d085d03e1103bd3d2c6c662301b6ac1feb | |
parent | 3dd2a57ab095f478eea1c99c0e4c584471db71ce (diff) | |
download | glibc-035ca6b5365cc4772f3f08fe7d9639f5c7fc254c.tar.gz glibc-035ca6b5365cc4772f3f08fe7d9639f5c7fc254c.tar.xz glibc-035ca6b5365cc4772f3f08fe7d9639f5c7fc254c.zip |
scripts: Add fortify checks on installed headers azanella/check-headers
The _FORTIFY_SOURCE is used as default by some system compilers, and there is no way to check if some fortify extension does not trigger any conformance issue. Checked on x86_64-linux-gnu. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
-rw-r--r-- | scripts/check-installed-headers.sh | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/scripts/check-installed-headers.sh b/scripts/check-installed-headers.sh index 5a50a491ca..23506a2514 100644 --- a/scripts/check-installed-headers.sh +++ b/scripts/check-installed-headers.sh @@ -29,6 +29,9 @@ cxx_modes="-std=c++98 -std=gnu++98 -std=c++11 -std=gnu++11" # These are probably the most commonly used three. lib_modes="-D_DEFAULT_SOURCE=1 -D_GNU_SOURCE=1 -D_XOPEN_SOURCE=700" +# Also check for fortify modes, since it might be enabled as default. +fortify_modes="1 2 3" + if [ $# -lt 3 ]; then echo "usage: $0 c|c++ \"compile command\" header header header..." >&2 exit 2 @@ -100,29 +103,36 @@ EOF echo :: "$header" for lang_mode in "" $lang_modes; do for lib_mode in "" $lib_modes; do - echo :::: $lang_mode $lib_mode - if [ -z "$lib_mode" ]; then - expanded_lib_mode='/* default library mode */' - else - expanded_lib_mode=$(echo : $lib_mode | \ - sed 's/^: -D/#define /; s/=/ /') - fi - cat >"$cih_test_c" <<EOF + for fortify_mode in "" $fortify_modes; do + echo :::: $lang_mode $lib_mode $fortify_mode + if [ -z "$lib_mode" ]; then + expanded_lib_mode='/* default library mode */' + else + expanded_lib_mode=$(echo : $lib_mode | \ + sed 's/^: -D/#define /; s/=/ /') + fi + if [ ! -z $fortify_mode ]; then + fortify_mode="#define _FORTIFY_SOURCE $fortify_mode" + fi + cat >"$cih_test_c" <<EOF /* These macros may have been defined on the command line. They are inappropriate for this test. */ #undef _LIBC #undef _GNU_SOURCE +#undef _FORTIFY_SOURCE +$fortify_mode /* The library mode is selected here rather than on the command line to ensure that this selection wins. */ $expanded_lib_mode #include <$header> int avoid_empty_translation_unit; EOF - if $cc_cmd -finput-charset=ascii -fsyntax-only $lang_mode \ - "$cih_test_c" 2>&1 - then : - else failed=1 - fi + if $cc_cmd -finput-charset=ascii -fsyntax-only $lang_mode \ + "$cih_test_c" 2>&1 + then : + else failed=1 + fi + done done done done |