my @def_cppflags = ();
my @def_cppflags_fortify = (
'-D_FORTIFY_SOURCE=2', # must be first, see cppflags_fortify_broken()
+ # If you add another flag fix hack below (search for "Hack to fix").
);
my @def_cppflags_fortify_bad = (
# These flags may overwrite -D_FORTIFY_SOURCE=2.
@ldflags = (@ldflags, @def_ldflags_bindnow);
}
+ # Hack to fix cppflags_fortify_broken() if --ignore-flag
+ # -D_FORTIFY_SOURCE=2 is used to ignore missing fortification. Only works
+ # as long as @def_cppflags_fortify contains only one variable.
+ if (scalar @def_cppflags_fortify == 0) {
+ $harden_fortify = 0;
+ }
+
# Ignore flags for this arch if requested.
if ($arch and exists $option_ignore_arch_flag{$arch}) {
my @flag_refs = (\@cflags, \@cxxflags, \@cppflags, \@ldflags);
use strict;
use warnings;
-use Test::More tests => 192;
+use Test::More tests => 194;
sub is_blhc {
CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -D_FORTIFY_SOURCE=1 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -c test-f.c
';
+is_blhc 'bad-cppflags', '--ignore-flag -D_FORTIFY_SOURCE=2', 0,
+ '';
+
my $bad_ldflags =
'LDFLAGS missing (-Wl,-z,relro): gcc -o test test-a.o test-b.o test-c.o -ltest
';