summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <vinschen@redhat.com>2018-08-13 17:08:51 +0200
committerDamien Miller <djm@mindrot.org>2018-08-13 13:01:25 -0700
commit477b49a34b89f506f4794b35e3c70b3e2e83cd38 (patch)
tree9b744cef0d733197b71a2599334f78be52e025c7
parentb0917945efa374be7648d67dbbaaff323ab39edc (diff)
configure: work around GCC shortcoming on Cygwin
Cygwin's latest 7.x GCC allows to specify -mfunction-return=thunk as well as -mindirect-branch=thunk on the command line, albeit producing invalid code, leading to an error at link stage. The check in configure.ac only checks if the option is present, but not if it produces valid code. This patch fixes it by special-casing Cygwin. Another solution may be to change these to linker checks. Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
-rw-r--r--configure.ac11
1 files changed, 9 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index c4c759d4..83e53075 100644
--- a/configure.ac
+++ b/configure.ac
@@ -164,8 +164,15 @@ if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
OSSH_CHECK_CFLAG_COMPILE([-Wunused-result], [-Wno-unused-result])
OSSH_CHECK_CFLAG_COMPILE([-fno-strict-aliasing])
if test "x$use_toolchain_hardening" = "x1"; then
- OSSH_CHECK_CFLAG_COMPILE([-mfunction-return=thunk]) # gcc
- OSSH_CHECK_CFLAG_COMPILE([-mindirect-branch=thunk]) # gcc
+ # Cygwin GCC 7.x allows thunking on the CLI, but produces non-working
+ # code. Unfortunately you only notice this at link time.
+ case "$host" in
+ *-*-cygwin*) ;;
+ *)
+ OSSH_CHECK_CFLAG_COMPILE([-mfunction-return=thunk]) # gcc
+ OSSH_CHECK_CFLAG_COMPILE([-mindirect-branch=thunk]) # gcc
+ ;;
+ esac
OSSH_CHECK_CFLAG_COMPILE([-mretpoline]) # clang
OSSH_CHECK_LDFLAG_LINK([-Wl,-z,retpolineplt])
OSSH_CHECK_CFLAG_COMPILE([-D_FORTIFY_SOURCE=2])