On Fri, Feb 8, 2019 at 1:24 PM Uros Bizjak <ubiz...@gmail.com> wrote:
> Attached patch fixes --enable-frame-pointer handling, and this way > makes a couple of defines in config/i386/sol2.h obsolete. It turned out that --enable-frame-pointer does not work for multilibs at all. So, instead of pretending that -m32 on x86_64 and -m64 on i686 works as advertised, unify 32bit and 64bit handling. 2019-02-10 Uroš Bizjak <ubiz...@gmail.com> PR target/89221 * config.gcc (i[34567]86-*-*, x86_64-*-*): Move tests for enable_cld and enable_frame_pointer ... * configure.ac: ... here. Update help strings for --enable-frame-pointer. * configure: Regenerate. * config/i386/i386.c (ix86_option_override_internal): Remove USE_X86_64_FRAME_POINTER define, use USE_IX86_FRAME_POINTER instead. * config/i386/sol2.h (USE_IX86_FRAME_POINTER): Remove. (USE_X86_64_FRAME_POINTER): Ditto. Please note that this fix will re-enable frame pointer for all targets but linux* or darwin[[8912]]. However, since builds for e.g. cygwin and mingw survived just well without frame pointers in the mean time, we should probably list these targets as targets without frame pointers by default. Maintainers should decide. Which makes the patch gcc-10 material. Uros.
Index: config/i386/sol2.h =================================================================== --- config/i386/sol2.h (revision 268670) +++ config/i386/sol2.h (working copy) @@ -248,9 +248,6 @@ #define ASAN_REJECT_SPEC \ DEF_ARCH64_SPEC("%e:-fsanitize=address is not supported in this configuration") -#define USE_IX86_FRAME_POINTER 1 -#define USE_X86_64_FRAME_POINTER 1 - #undef NO_PROFILE_COUNTERS #undef MCOUNT_NAME Index: config.gcc =================================================================== --- config.gcc (revision 268670) +++ config.gcc (working copy) @@ -604,12 +604,6 @@ echo "This target does not support --with-abi." exit 1 fi - if test "x$enable_cld" = xyes; then - tm_defines="${tm_defines} USE_IX86_CLD=1" - fi - if test "x$enable_frame_pointer" = xyes; then - tm_defines="${tm_defines} USE_IX86_FRAME_POINTER=1" - fi ;; x86_64-*-*) case ${with_abi} in @@ -630,12 +624,6 @@ echo "Unknown ABI used in --with-abi=$with_abi" exit 1 esac - if test "x$enable_cld" = xyes; then - tm_defines="${tm_defines} USE_IX86_CLD=1" - fi - if test "x$enable_frame_pointer" = xyes; then - tm_defines="${tm_defines} USE_IX86_FRAME_POINTER=1" - fi ;; arm*-*-*) tm_p_file="arm/arm-flags.h ${tm_p_file} arm/aarch-common-protos.h" Index: configure =================================================================== --- configure (revision 268670) +++ configure (working copy) @@ -1688,8 +1688,7 @@ --enable-leading-mingw64-underscores enable leading underscores on 64 bit mingw targets --enable-cld enable -mcld by default for 32bit x86 - --enable-frame-pointer enable -fno-omit-frame-pointer by default for 32bit - x86 + --enable-frame-pointer enable -fno-omit-frame-pointer by default for x86 --disable-win32-registry disable lookup of installation paths in the Registry on Windows hosts @@ -12199,8 +12198,7 @@ case $target_os in linux* | darwin[8912]*) - # Enable -fomit-frame-pointer by default for Linux and Darwin with - # DWARF2. + # Enable -fomit-frame-pointer by default for Linux and Darwin with DWARF2. enable_frame_pointer=no ;; *) @@ -12211,6 +12209,17 @@ fi +case $target in +i[34567]86-*-* | x86_64-*-*) + if test "x$enable_cld" = xyes; then + tm_defines="${tm_defines} USE_IX86_CLD=1" + fi + if test "x$enable_frame_pointer" = xyes; then + tm_defines="${tm_defines} USE_IX86_FRAME_POINTER=1 USE_X86_64_FRAME_POINTER=1" + fi + ;; +esac + # Windows32 Registry support for specifying GCC installation paths. # Check whether --enable-win32-registry was given. if test "${enable_win32_registry+set}" = set; then : @@ -18646,7 +18655,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18640 "configure" +#line 18658 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18752,7 +18761,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18746 "configure" +#line 18764 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -25141,7 +25150,7 @@ no) ;; *) - as_fn_error "'$enableval' is an invalid value for --enable-standard-branch-protection.\ + as_fn_error $? "'$enableval' is an invalid value for --enable-standard-branch-protection.\ Valid choices are 'yes' and 'no'." "$LINENO" 5 ;; esac Index: configure.ac =================================================================== --- configure.ac (revision 268670) +++ configure.ac (working copy) @@ -1881,12 +1881,11 @@ AC_ARG_ENABLE(frame-pointer, [AS_HELP_STRING([--enable-frame-pointer], - [enable -fno-omit-frame-pointer by default for 32bit x86])], [], + [enable -fno-omit-frame-pointer by default for x86])], [], [ case $target_os in linux* | darwin[[8912]]*) - # Enable -fomit-frame-pointer by default for Linux and Darwin with - # DWARF2. + # Enable -fomit-frame-pointer by default for Linux and Darwin with DWARF2. enable_frame_pointer=no ;; *) @@ -1895,6 +1894,17 @@ esac ]) +case $target in +i[[34567]]86-*-* | x86_64-*-*) + if test "x$enable_cld" = xyes; then + tm_defines="${tm_defines} USE_IX86_CLD=1" + fi + if test "x$enable_frame_pointer" = xyes; then + tm_defines="${tm_defines} USE_IX86_FRAME_POINTER=1 USE_X86_64_FRAME_POINTER=1" + fi + ;; +esac + # Windows32 Registry support for specifying GCC installation paths. AC_ARG_ENABLE(win32-registry, [AS_HELP_STRING([--disable-win32-registry],