diff mbox series

scripts: Add forify checks on installed headers

Message ID 20230620165604.2042316-1-adhemerval.zanella@linaro.org
State New
Headers show
Series scripts: Add forify checks on installed headers | expand

Commit Message

Adhemerval Zanella Netto June 20, 2023, 4:56 p.m. UTC
The check-installed-headers.sh does not handle _FORTIFY_SOURCE, and
it is now defined as default for some system toolchain if optimization
is defined.  So currently there is no way to check if some fortify
extension does trigger any conformance issue.

Checked on x86_64-linux-gnu.
---
 scripts/check-installed-headers.sh | 36 +++++++++++++++++++-----------
 1 file changed, 23 insertions(+), 13 deletions(-)

Comments

Adhemerval Zanella Netto June 20, 2023, 7:55 p.m. UTC | #1
On 20/06/23 13:56, Adhemerval Zanella wrote:
> The check-installed-headers.sh does not handle _FORTIFY_SOURCE, and
> it is now defined as default for some system toolchain if optimization
> is defined.  So currently there is no way to check if some fortify
> extension does trigger any conformance issue.
> 
> Checked on x86_64-linux-gnu.

Ignore this version.
diff mbox series

Patch

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