* 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
+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.
/* 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;
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"
? 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
@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
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)
{