diff --git a/gcc/config.in b/gcc/config.in index 7c89cab7717..a79c51adb2b 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -2320,6 +2320,13 @@ #endif +/* Define if personality and ADDR_NO_RANDOMIZE are declared in + sys/personality.h. */ +#ifndef USED_FOR_TARGET +#undef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE +#endif + + /* Define which stat syscall is able to handle 64bit indodes. */ #ifndef USED_FOR_TARGET #undef HOST_STAT_FOR_64BIT_INODES diff --git a/gcc/configure b/gcc/configure index ab6bec1f0ae..821f8b44bc6 100755 --- a/gcc/configure +++ b/gcc/configure @@ -12694,6 +12694,42 @@ $as_echo "#define HOST_HAS_O_NONBLOCK 1" >>confdefs.h fi +# Check if personality and ADDR_NO_RANDOMIZE are declared +# in sys/personality.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for personality ADDR_NO_RANDOMIZE" >&5 +$as_echo_n "checking for personality ADDR_NO_RANDOMIZE... " >&6; } +if ${ac_cv_personality_addr_no_randomize+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int +main () +{ + +personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_personality_addr_no_randomize=yes +else + ac_cv_personality_addr_no_randomize=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_personality_addr_no_randomize" >&5 +$as_echo "$ac_cv_personality_addr_no_randomize" >&6; } +if test $ac_cv_personality_addr_no_randomize = yes; then + +$as_echo "#define HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE 1" >>confdefs.h + +fi + # C++ Modules would like some networking features to provide the mapping # server. You can still use modules without them though. @@ -21484,7 +21520,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21487 "configure" +#line 21523 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -21590,7 +21626,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21593 "configure" +#line 21629 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/gcc/configure.ac b/gcc/configure.ac index fca0579574f..3d0a4e6f8f5 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1781,6 +1781,21 @@ if test $ac_cv_have_decl_O_NONBLOCK = yes; then [Define if O_NONBLOCK supported by fcntl.]) fi +# Check if personality and ADDR_NO_RANDOMIZE are declared +# in sys/personality.h +AC_CACHE_CHECK(for personality ADDR_NO_RANDOMIZE, + ac_cv_personality_addr_no_randomize, [ +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include ]], [[ +personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE);]])], +[ac_cv_personality_addr_no_randomize=yes], +[ac_cv_personality_addr_no_randomize=no])]) +if test $ac_cv_personality_addr_no_randomize = yes; then + AC_DEFINE(HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE, 1, + [Define if personality and ADDR_NO_RANDOMIZE are declared in +sys/personality.h.]) +fi + # C++ Modules would like some networking features to provide the mapping # server. You can still use modules without them though. diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 9064671b86c..4fd87f2c4a1 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -30,6 +30,9 @@ compilation is specified by a string called a "spec". */ #define INCLUDE_STRING #include "config.h" #include "system.h" +#ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE +#include +#endif #include "coretypes.h" #include "multilib.h" /* before tm.h */ #include "tm.h" @@ -8003,6 +8006,10 @@ try_generate_repro (const char **argv) else new_argv[out_arg] = "-o-"; +#ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE + personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE); +#endif + int status; for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS; ++attempt) {