or1k: Implement profile hook calling _mcount
authorStafford Horne <shorne@gmail.com>
Mon, 14 Oct 2019 06:14:20 +0000 (15:14 +0900)
committerStafford Horne <shorne@gmail.com>
Wed, 13 Jan 2021 23:45:00 +0000 (08:45 +0900)
Defining this to not abort as found when working on running tests in
the glibc test suite.

We implement this with a call to _mcount with no arguments.  The required
return address's will be pulled from the stack.  Passing the LR (r9) as
an argument had problems as sometimes r9 is clobbered by the GOT logic
in the prologue before the call to _mcount.

gcc/ChangeLog:

* config/or1k/or1k.h (NO_PROFILE_COUNTERS): Define as 1.
(PROFILE_HOOK): Define to call _mcount.
(FUNCTION_PROFILER): Change from abort to no-op.

gcc/config/or1k/or1k.h

index ab1c4bbd2a7e244d0e07034f7d9323de17745336..dc579e4a388ab5dc5c0fd4be0fe90a8ed9ee168c 100644 (file)
@@ -379,8 +379,19 @@ do {                                                    \
 /* Always pass the SYMBOL_REF for direct calls to the expanders.  */
 #define NO_FUNCTION_CSE 1
 
-/* Profiling */
-#define FUNCTION_PROFILER(FILE,LABELNO) (abort (), 0)
+#define NO_PROFILE_COUNTERS 1
+
+/* Emit rtl for profiling.  Output assembler code to call "_mcount" for
+   profiling a function entry.  */
+#define PROFILE_HOOK(LABEL)                                            \
+  {                                                                    \
+    rtx fun;                                                           \
+    fun = gen_rtx_SYMBOL_REF (Pmode, "_mcount");                       \
+    emit_library_call (fun, LCT_NORMAL, VOIDmode);                     \
+  }
+
+/* All the work is done in PROFILE_HOOK, but this is still required.  */
+#define FUNCTION_PROFILER(STREAM, LABELNO) do { } while (0)
 
 /* Dwarf 2 Support */
 #define DWARF2_DEBUGGING_INFO 1