From 0ad4078cd604797eec4b8922f169da5c2a1a16d3 Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Fri, 4 May 2018 14:06:44 +0200 Subject: [PATCH] Configure: move --noexecstack probe to Configure. config probe doesn't work in cross-compile scenarios or with clang. In addition consolidate -Qunused-arguments handling. Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/6174) --- Configurations/15-android.conf | 2 +- Configure | 26 +++++++++++++++++++++----- config | 8 -------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/Configurations/15-android.conf b/Configurations/15-android.conf index 9df4d9446e..ddd642a117 100644 --- a/Configurations/15-android.conf +++ b/Configurations/15-android.conf @@ -65,7 +65,7 @@ my ($api, $arch) = ($1, $2); my $triarch = $triplet{$arch}; - my $cflags = "-Wa,--noexecstack"; + my $cflags; my $cppflags; # see if there is NDK clang on $PATH diff --git a/Configure b/Configure index ffc5fe5d33..43effc2b46 100755 --- a/Configure +++ b/Configure @@ -1427,6 +1427,27 @@ if (!$disabled{makedepend}) { } } +if (!$disabled{asm}) { + # probe for -Wa,--noexecstack option... + if ($predefined{__clang__}) { + # clang has builtin assembler, which doesn't recognize --help, + # but it apparently recognizes the option in question on all + # supported platforms even when it's meaningless. In other words + # probe would fail, but probed option always accepted... + push @{$config{cflags}}, "-Wa,--noexecstack", "-Qunused-arguments"; + } elsif ($^O ne 'VMS') { + my $cc = $config{CROSS_COMPILE}.$config{CC}; + open(PIPE, "$cc -Wa,--help -c -o null.$$.o -x assembler /dev/null 2>&1 |"); + while() { + if (m/--noexecstack/) { + push @{$config{cflags}}, "-Wa,--noexecstack"; + last; + } + } + close(PIPE); + unlink("null.$$.o"); + } +} # Deal with bn_ops ################################################### @@ -1468,11 +1489,6 @@ if (defined($config{api})) { push @{$config{defines}}, $apiflag; } -if (defined($predefined{__clang__}) && !$disabled{asm}) { - push @{$config{cflags}}, "-Qunused-arguments"; - push @{$config{cxxflags}}, "-Qunused-arguments" if $config{CXX}; -} - if ($strict_warnings) { my $wopt; diff --git a/config b/config index a44cd21e93..b8adf34999 100755 --- a/config +++ b/config @@ -840,14 +840,6 @@ if [ -n "$CONFIG_OPTIONS" ]; then options="$options $CONFIG_OPTIONS" fi -if expr "$options" : '.*no\-asm' > /dev/null; then :; else - if sh -c "$CROSS_COMPILE${CC:-gcc} -Wa,--help -c -o /tmp/null.$$.o -x assembler /dev/null && rm /tmp/null.$$.o" 2>&1 | \ - grep \\--noexecstack >/dev/null; then - __CNF_CFLAGS="$__CNF_CFLAGS -Wa,--noexecstack" - __CNF_CXXFLAGS="$__CNF_CXXFLAGS -Wa,--noexecstack" - fi -fi - # gcc < 2.8 does not support -march=ultrasparc if [ "$OUT" = solaris-sparcv9-gcc -a $GCCVER -lt 28 ] then -- 2.25.1