aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-05-30 14:01:20 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-05-30 14:01:20 -0700
commita7943381121420155a686f4d9a086acef1c95548 (patch)
tree3189b9893a9a67b8c812585c0cceff80317e6568 /gcc
parentde215bc6c56442bfb501afca9d8eaef9a3594066 (diff)
downloadgcc-a7943381121420155a686f4d9a086acef1c95548.zip
gcc-a7943381121420155a686f4d9a086acef1c95548.tar.gz
gcc-a7943381121420155a686f4d9a086acef1c95548.tar.bz2
defaults.h (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): Kill.
* defaults.h (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): Kill. * toplev.c (process_options): Don't check it. * doc/tm.texi: Don't document it. * config/i386/linux.h (SUBTARGET_FRAME_POINTER_REQUIRED): New. (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): Kill. * config/i386/i386.c (ix86_frame_pointer_required): Suppress leaf frame pointer optimization if current_function_profile. From-SVN: r54072
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.c3
-rw-r--r--gcc/config/i386/linux.h9
-rw-r--r--gcc/defaults.h7
-rw-r--r--gcc/doc/tm.texi16
-rw-r--r--gcc/toplev.c10
6 files changed, 15 insertions, 40 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2da1962..f145158 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2002-05-30 Richard Henderson <rth@redhat.com>
+
+ * defaults.h (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): Kill.
+ * toplev.c (process_options): Don't check it.
+ * doc/tm.texi: Don't document it.
+ * config/i386/linux.h (SUBTARGET_FRAME_POINTER_REQUIRED): New.
+ (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): Kill.
+ * config/i386/i386.c (ix86_frame_pointer_required): Suppress leaf
+ frame pointer optimization if current_function_profile.
+
2002-05-30 Kazu Hirata <kazu@cs.umass.edu>
* langhooks.c: Fix formatting.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 1715ca0..f89d163 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -3885,7 +3885,8 @@ ix86_frame_pointer_required ()
/* In override_options, TARGET_OMIT_LEAF_FRAME_POINTER turns off
the frame pointer by default. Turn it back on now if we've not
got a leaf function. */
- if (TARGET_OMIT_LEAF_FRAME_POINTER && ! leaf_function_p ())
+ if (TARGET_OMIT_LEAF_FRAME_POINTER
+ && (!current_function_is_leaf || current_function_profile))
return 1;
return 0;
diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
index fd4d7a0..db1583f 100644
--- a/gcc/config/i386/linux.h
+++ b/gcc/config/i386/linux.h
@@ -62,14 +62,11 @@ Boston, MA 02111-1307, USA. */
fprintf (FILE, "\tcall\tmcount\n"); \
}
-/* True if it is possible to profile code that does not have a frame
- pointer.
-
- The GLIBC version of mcount for the x86 assumes that there is a
+/* The GLIBC version of mcount for the x86 assumes that there is a
frame, so we cannot allow profiling without a frame pointer. */
-#undef TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
-#define TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER false
+#undef SUBTARGET_FRAME_POINTER_REQUIRED
+#define SUBTARGET_FRAME_POINTER_REQUIRED current_function_profile
#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 8ff73b1..6a18027 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -397,13 +397,6 @@ do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta)
#endif
-/* True if it is possible to profile code that does not have a frame
- pointer. */
-
-#ifndef TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
-#define TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER true
-#endif
-
#ifndef DEFAULT_GDB_EXTENSIONS
#define DEFAULT_GDB_EXTENSIONS 1
#endif
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index f82fd60..cc87da6 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -4160,22 +4160,6 @@ must not use the @var{labelno} argument to @code{FUNCTION_PROFILER}.
@item PROFILE_BEFORE_PROLOGUE
Define this macro if the code for function profiling should come before
the function prologue. Normally, the profiling code comes after.
-
-
-@findex TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
-@item TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
-On some targets, it is impossible to use profiling when the frame
-pointer has been omitted. For example, on x86 GNU/Linux systems,
-the @code{mcount} routine provided by the GNU C Library finds the
-address of the routine that called the routine that called @code{mcount}
-by looking in the immediate caller's stack frame. If the immediate
-caller has no frame pointer, this lookup will fail.
-
-By default, GCC assumes that the target does allow profiling when the
-frame pointer is omitted. This macro should be defined to a C
-expression that evaluates to @code{false} if the target does not allow
-profiling when the frame pointer is omitted.
-
@end table
@node Tail Calls
diff --git a/gcc/toplev.c b/gcc/toplev.c
index ccbb4bc..b37a4f5 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -4893,16 +4893,6 @@ process_options ()
warning ("this target machine does not have delayed branches");
#endif
- /* Some operating systems do not allow profiling without a frame
- pointer. */
- if (!TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER
- && profile_flag
- && flag_omit_frame_pointer)
- {
- error ("profiling does not work without a frame pointer");
- flag_omit_frame_pointer = 0;
- }
-
user_label_prefix = USER_LABEL_PREFIX;
if (flag_leading_underscore != -1)
{