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>
This commit is contained in:
Corinna Vinschen 2018-08-13 17:08:51 +02:00 committed by Damien Miller
parent b0917945ef
commit 477b49a34b
1 changed files with 9 additions and 2 deletions

View File

@ -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])