Make -no-pie option work for native Windows
Binutils 2.36/2.37 generate PIE executables by default on native Windows (because --dynamicbase is the default) so it makes sense to have a simple way to counter that and -no-pie seems appropriate, all the more so that it is automatically passed when building the compiler itself. gcc/ * configure.ac (PE linker --disable-dynamicbase support): New check. * configure: Regenerate. * config.in: Likewise. * config/i386/mingw32.h (LINK_SPEC_DISABLE_DYNAMICBASE): New define. (LINK_SPEC): Use it. * config/i386/mingw-w64.h (LINK_SPEC_DISABLE_DYNAMICBASE): Likewise. (LINK_SPEC): Likewise.
This commit is contained in:
parent
95e1eca43d
commit
2bdf17de1d
@ -1695,6 +1695,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
/* Define if the PE linker supports --disable-dynamicbase option. */
|
||||
#ifndef USED_FOR_TARGET
|
||||
#undef HAVE_LD_PE_DISABLE_DYNAMICBASE
|
||||
#endif
|
||||
|
||||
|
||||
/* Define if your linker supports PIE option. */
|
||||
#ifndef USED_FOR_TARGET
|
||||
#undef HAVE_LD_PIE
|
||||
|
@ -89,6 +89,14 @@ along with GCC; see the file COPYING3. If not see
|
||||
# define LINK_SPEC_LARGE_ADDR_AWARE ""
|
||||
#endif
|
||||
|
||||
#undef LINK_SPEC_DISABLE_DYNAMICBASE
|
||||
#if HAVE_LD_PE_DISABLE_DYNAMICBASE
|
||||
# define LINK_SPEC_DISABLE_DYNAMICBASE \
|
||||
"%{!shared:%{!mdll:%{no-pie:--disable-dynamicbase}}}"
|
||||
#else
|
||||
# define LINK_SPEC_DISABLE_DYNAMICBASE ""
|
||||
#endif
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC SUB_LINK_SPEC " %{mwindows:--subsystem windows} \
|
||||
%{mconsole:--subsystem console} \
|
||||
@ -97,6 +105,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
%{static:-Bstatic} %{!static:-Bdynamic} \
|
||||
%{shared|mdll: " SUB_LINK_ENTRY " --enable-auto-image-base} \
|
||||
" LINK_SPEC_LARGE_ADDR_AWARE "\
|
||||
" LINK_SPEC_DISABLE_DYNAMICBASE "\
|
||||
%(shared_libgcc_undefs)"
|
||||
|
||||
/* Enable sincos optimization, overriding cygming.h. sincos, sincosf
|
||||
|
@ -148,6 +148,13 @@ along with GCC; see the file COPYING3. If not see
|
||||
"%{!shared:%{!mdll:%{!m64:--large-address-aware}}}"
|
||||
#endif
|
||||
|
||||
#if HAVE_LD_PE_DISABLE_DYNAMICBASE
|
||||
# define LINK_SPEC_DISABLE_DYNAMICBASE \
|
||||
"%{!shared:%{!mdll:%{no-pie:--disable-dynamicbase}}}"
|
||||
#else
|
||||
# define LINK_SPEC_DISABLE_DYNAMICBASE ""
|
||||
#endif
|
||||
|
||||
#define LINK_SPEC "%{mwindows:--subsystem windows} \
|
||||
%{mconsole:--subsystem console} \
|
||||
%{shared: %{mdll: %eshared and mdll are not compatible}} \
|
||||
@ -155,6 +162,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
%{static:-Bstatic} %{!static:-Bdynamic} \
|
||||
%{shared|mdll: " SUB_LINK_ENTRY " --enable-auto-image-base} \
|
||||
" LINK_SPEC_LARGE_ADDR_AWARE "\
|
||||
" LINK_SPEC_DISABLE_DYNAMICBASE "\
|
||||
%(shared_libgcc_undefs)"
|
||||
|
||||
/* Include in the mingw32 libraries with libgcc */
|
||||
|
20
gcc/configure
vendored
20
gcc/configure
vendored
@ -30613,6 +30613,26 @@ $as_echo "#define HAVE_LD_BROKEN_PE_DWARF5 1" >>confdefs.h
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_broken_pe_dwarf5" >&5
|
||||
$as_echo "$gcc_cv_ld_broken_pe_dwarf5" >&6; }
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking PE linker --disable-dynamicbase support" >&5
|
||||
$as_echo_n "checking PE linker --disable-dynamicbase support... " >&6; }
|
||||
gcc_cv_ld_disable_dynamicbase=no
|
||||
if test $in_tree_ld = yes; then
|
||||
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 36 -o "$gcc_cv_gld_major_version" -gt 2; then \
|
||||
gcc_cv_ld_disable_dynamicbase=yes
|
||||
fi
|
||||
else
|
||||
if $gcc_cv_ld --help 2>&1 | grep -q 'disable\-]dynamicbase' > /dev/null; then
|
||||
gcc_cv_ld_disable_dynamicbase=yes
|
||||
fi
|
||||
fi
|
||||
if test x"$gcc_cv_ld_disable_dynamicbase" = xyes; then
|
||||
|
||||
$as_echo "#define HAVE_LD_PE_DISABLE_DYNAMICBASE 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_disable_dynamicbase" >&5
|
||||
$as_echo "$gcc_cv_ld_disable_dynamicbase" >&6; }
|
||||
;;
|
||||
esac
|
||||
|
||||
|
@ -6383,6 +6383,23 @@ case $target_os in
|
||||
[Define if the PE linker has broken DWARF 5 support.])
|
||||
fi
|
||||
AC_MSG_RESULT($gcc_cv_ld_broken_pe_dwarf5)
|
||||
|
||||
AC_MSG_CHECKING(PE linker --disable-dynamicbase support)
|
||||
gcc_cv_ld_disable_dynamicbase=no
|
||||
if test $in_tree_ld = yes; then
|
||||
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 36 -o "$gcc_cv_gld_major_version" -gt 2; then \
|
||||
gcc_cv_ld_disable_dynamicbase=yes
|
||||
fi
|
||||
else
|
||||
if $gcc_cv_ld --help 2>&1 | grep -q 'disable\-]dynamicbase' > /dev/null; then
|
||||
gcc_cv_ld_disable_dynamicbase=yes
|
||||
fi
|
||||
fi
|
||||
if test x"$gcc_cv_ld_disable_dynamicbase" = xyes; then
|
||||
AC_DEFINE(HAVE_LD_PE_DISABLE_DYNAMICBASE, 1,
|
||||
[Define if the PE linker supports --disable-dynamicbase option.])
|
||||
fi
|
||||
AC_MSG_RESULT($gcc_cv_ld_disable_dynamicbase)
|
||||
;;
|
||||
esac
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user