]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Function profiling macro support for Aarch64
authorVenkataramanan Kumar <venkataramanan.kumar@linaro.org>
Mon, 30 Sep 2013 10:20:11 +0000 (10:20 +0000)
committerVenkataramanan Kumar <vekumar@gcc.gnu.org>
Mon, 30 Sep 2013 10:20:11 +0000 (10:20 +0000)
From-SVN: r203028

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.h
gcc/testsuite/lib/target-supports.exp

index 552893aee16150e7252adc156512af0db3960779..7c7974845e8b44d146d53c142c7693e1ec3e19a7 100644 (file)
@@ -1,3 +1,11 @@
+2013-09-30  Venkataramanan Kumar  <venkataramanan.kumar@linaro.org>
+
+       * config/aarch64/aarch64.h (MCOUNT_NAME): Define.
+       (NO_PROFILE_COUNTERS): Likewise.
+       (PROFILE_HOOK): Likewise.
+       (FUNCTION_PROFILER): Likewise.
+       * config/aarch64/aarch64.c (aarch64_function_profiler): Remove.
+
 2013-09-30  Iain Sandoe  <iain@codesourcery.com>
 
        * config/rs6000/darwin.md (load_macho_picbase_si): Wrap machopic
index 1558183a08f334417bf70a89f0372a383417a124..ee2cb4cd6df3a1ef8cfe9a97f105f90f1397e1de 100644 (file)
@@ -3858,13 +3858,6 @@ aarch64_print_operand_address (FILE *f, rtx x)
   output_addr_const (f, x);
 }
 
-void
-aarch64_function_profiler (FILE *f ATTRIBUTE_UNUSED,
-                          int labelno ATTRIBUTE_UNUSED)
-{
-  sorry ("function profiling");
-}
-
 bool
 aarch64_label_mentioned_p (rtx x)
 {
index d8012f88049039cbd3faa751425e256913069e31..da2b46d14cf02814f93aeda1535461c242174aae 100644 (file)
@@ -783,8 +783,22 @@ do {                                                                            \
 #define PRINT_OPERAND_ADDRESS(STREAM, X) \
   aarch64_print_operand_address (STREAM, X)
 
-#define FUNCTION_PROFILER(STREAM, LABELNO) \
-  aarch64_function_profiler (STREAM, LABELNO)
+#define MCOUNT_NAME "_mcount"
+
+#define NO_PROFILE_COUNTERS 1
+
+/* Emit rtl for profiling.  Output assembler code to FILE
+   to call "_mcount" for profiling a function entry.  */
+#define PROFILE_HOOK(LABEL)                                    \
+{                                                              \
+  rtx fun,lr;                                                  \
+  lr = get_hard_reg_initial_val (Pmode, LR_REGNUM);            \
+  fun = gen_rtx_SYMBOL_REF (Pmode, MCOUNT_NAME);               \
+  emit_library_call (fun, LCT_NORMAL, VOIDmode, 1, lr, Pmode); \
+}
+
+/* All the work done in PROFILE_HOOK, but still required.  */
+#define FUNCTION_PROFILER(STREAM, LABELNO) do { } while (0)
 
 /* For some reason, the Linux headers think they know how to define
    these macros.  They don't!!!  */
index 99784f9760d809048d832f955614547fe9ebf2dc..f99703106562ccb53bf50180491a03004c0cebb2 100644 (file)
@@ -494,13 +494,6 @@ proc check_profiling_available { test_what } {
        return 0
     }
 
-    # We don't yet support profiling for AArch64.
-    if { [istarget aarch64*-*-*]
-        && ([lindex $test_what 1] == "-p"
-            || [lindex $test_what 1] == "-pg") } {
-       return 0
-    }
-
     # cygwin does not support -p.
     if { [istarget *-*-cygwin*] && $test_what == "-p" } {
        return 0