summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-12 16:39:37 +0000
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-12 16:39:37 +0000
commitfc00a76a26bb71539e8e4355e824986baf852f32 (patch)
tree6e130fcc873dab0799a165c43fa8b39c4b2eb9be /gcc
parentcab932e0f7e8c311fd9fac996bb95d1cec76bb64 (diff)
downloadgcc-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/ChangeLog14
-rw-r--r--gcc/config.gcc6
-rw-r--r--gcc/config/i386/i386.c61
-rwxr-xr-xgcc/configure24
-rw-r--r--gcc/configure.ac14
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