diff options
author | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-08-12 16:39:37 +0000 |
---|---|---|
committer | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-08-12 16:39:37 +0000 |
commit | fc00a76a26bb71539e8e4355e824986baf852f32 (patch) | |
tree | 6e130fcc873dab0799a165c43fa8b39c4b2eb9be /gcc | |
parent | cab932e0f7e8c311fd9fac996bb95d1cec76bb64 (diff) | |
download | gcc-fc00a76a26bb71539e8e4355e824986baf852f32.tar.gz |
Turn on -fomit-frame-pointer by default for 32bit Linux/x86.
2010-08-12 H.J. Lu <hongjiu.lu@intel.com>
Uros Bizjak <ubizjak@gmail.com>
* config.gcc: Handle --enable-frame-pointer.
* configure.ac: Add --enable-frame-pointer.
* configure: Regenerated.
* config/i386/i386.c (USE_IX86_FRAME_POINTER): Default to 0.
(override_options): If not configured with --enable-frame-pointer,
enable -fomit-frame-pointer (but not for TARGET_MACHO or when
optimizing for size), -fasynchronous-unwind-tables and
-maccumulate-outgoing-args by default.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163196 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/config.gcc | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 61 | ||||
-rwxr-xr-x | gcc/configure | 24 | ||||
-rw-r--r-- | gcc/configure.ac | 14 |
5 files changed, 90 insertions, 29 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 31dd288030f..39b2e75ca82 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2010-08-12 H.J. Lu <hongjiu.lu@intel.com> + Uros Bizjak <ubizjak@gmail.com> + + * config.gcc: Handle --enable-frame-pointer. + + * configure.ac: Add --enable-frame-pointer. + * configure: Regenerated. + + * config/i386/i386.c (USE_IX86_FRAME_POINTER): Default to 0. + (override_options): If not configured with --enable-frame-pointer, + enable -fomit-frame-pointer (but not for TARGET_MACHO or when + optimizing for size), -fasynchronous-unwind-tables and + -maccumulate-outgoing-args by default. + 2010-08-12 Jakub Jelinek <jakub@redhat.com> * builtins.c (fold_builtin_memory_op): Avoid -Wsign-compare diff --git a/gcc/config.gcc b/gcc/config.gcc index 9170fc819c7..62dd9f65045 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -406,6 +406,9 @@ i[34567]86-*-*) 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 tm_file="vxworks-dummy.h ${tm_file}" ;; x86_64-*-*) @@ -413,6 +416,9 @@ 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" + fi tm_file="vxworks-dummy.h ${tm_file}" ;; esac diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c3863acb81f..a87175cf96d 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2979,32 +2979,6 @@ override_options (bool main_args_p) if (TARGET_MACHO && TARGET_64BIT) flag_pic = 2; - /* Set the default values for switches whose default depends on TARGET_64BIT - in case they weren't overwritten by command line options. */ - if (TARGET_64BIT) - { - if (flag_zee == 2) - flag_zee = 1; - /* Mach-O doesn't support omitting the frame pointer for now. */ - if (flag_omit_frame_pointer == 2) - flag_omit_frame_pointer = (TARGET_MACHO ? 0 : 1); - if (flag_asynchronous_unwind_tables == 2) - flag_asynchronous_unwind_tables = 1; - if (flag_pcc_struct_return == 2) - flag_pcc_struct_return = 0; - } - else - { - if (flag_zee == 2) - flag_zee = 0; - if (flag_omit_frame_pointer == 2) - flag_omit_frame_pointer = 0; - if (flag_asynchronous_unwind_tables == 2) - flag_asynchronous_unwind_tables = 0; - if (flag_pcc_struct_return == 2) - flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN; - } - /* Need to check -mtune=generic first. */ if (ix86_tune_string) { @@ -3292,6 +3266,38 @@ override_options (bool main_args_p) for (i = 0; i < X86_TUNE_LAST; ++i) ix86_tune_features[i] = !!(initial_ix86_tune_features[i] & ix86_tune_mask); +#ifndef USE_IX86_FRAME_POINTER +#define USE_IX86_FRAME_POINTER 0 +#endif + + /* Set the default values for switches whose default depends on TARGET_64BIT + in case they weren't overwritten by command line options. */ + if (TARGET_64BIT) + { + if (flag_zee == 2) + flag_zee = 1; + /* Mach-O doesn't support omitting the frame pointer for now. */ + if (flag_omit_frame_pointer == 2) + flag_omit_frame_pointer = (TARGET_MACHO ? 0 : 1); + if (flag_asynchronous_unwind_tables == 2) + flag_asynchronous_unwind_tables = 1; + if (flag_pcc_struct_return == 2) + flag_pcc_struct_return = 0; + } + else + { + if (flag_zee == 2) + flag_zee = 0; + /* Mach-O doesn't support omitting the frame pointer for now. */ + if (flag_omit_frame_pointer == 2) + flag_omit_frame_pointer = + (TARGET_MACHO ? 0 : !(USE_IX86_FRAME_POINTER || optimize_size)); + if (flag_asynchronous_unwind_tables == 2) + flag_asynchronous_unwind_tables = !USE_IX86_FRAME_POINTER; + if (flag_pcc_struct_return == 2) + flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN; + } + if (optimize_size) ix86_cost = &ix86_size_cost; else @@ -3574,7 +3580,8 @@ override_options (bool main_args_p) prefix, suffix, sw); } - if ((x86_accumulate_outgoing_args & ix86_tune_mask) + if ((!USE_IX86_FRAME_POINTER + || (x86_accumulate_outgoing_args & ix86_tune_mask)) && !(target_flags_explicit & MASK_ACCUMULATE_OUTGOING_ARGS) && !optimize_size) target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS; diff --git a/gcc/configure b/gcc/configure index aa61cd6589c..ad548fc8c08 100755 --- a/gcc/configure +++ b/gcc/configure @@ -898,6 +898,7 @@ with_system_libunwind enable_secureplt enable_leading_mingw64_underscores enable_cld +enable_frame_pointer enable_win32_registry enable_static with_pic @@ -1597,6 +1598,7 @@ Optional Features: --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 --disable-win32-registry disable lookup of installation paths in the Registry on Windows hosts @@ -10708,6 +10710,24 @@ else fi +# Check whether --enable-frame-pointer was given. +if test "${enable_frame_pointer+set}" = set; then : + enableval=$enable_frame_pointer; +else + +case $target_os in +linux*) + # Enable -fomit-frame-pointer by default for Linux. + enable_frame_pointer=no + ;; +*) + enable_frame_pointer=yes + ;; +esac + +fi + + # Windows32 Registry support for specifying GCC installation paths. # Check whether --enable-win32-registry was given. if test "${enable_win32_registry+set}" = set; then : @@ -17109,7 +17129,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 17112 "configure" +#line 17132 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -17215,7 +17235,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 17218 "configure" +#line 17238 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/gcc/configure.ac b/gcc/configure.ac index 24d38aa73c3..dd0b1984c9f 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1580,6 +1580,20 @@ AC_ARG_ENABLE(cld, [ --enable-cld enable -mcld by default for 32bit x86], [], [enable_cld=no]) +AC_ARG_ENABLE(frame-pointer, +[ --enable-frame-pointer enable -fno-omit-frame-pointer by default for 32bit x86], [], +[ +case $target_os in +linux*) + # Enable -fomit-frame-pointer by default for Linux. + enable_frame_pointer=no + ;; +*) + enable_frame_pointer=yes + ;; +esac +]) + # Windows32 Registry support for specifying GCC installation paths. AC_ARG_ENABLE(win32-registry, [ --disable-win32-registry |