File function-profiling-aarch64.patch of Package gcc48.2996

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.

Index: gcc-4.8.2-r206703/gcc/config/aarch64/aarch64.c
===================================================================
--- gcc-4.8.2-r206703.orig/gcc/config/aarch64/aarch64.c
+++ gcc-4.8.2-r206703/gcc/config/aarch64/aarch64.c
@@ -3647,13 +3647,6 @@ aarch64_print_operand_address (FILE *f,
   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: gcc-4.8.2-r206703/gcc/config/aarch64/aarch64.h
===================================================================
--- gcc-4.8.2-r206703.orig/gcc/config/aarch64/aarch64.h
+++ gcc-4.8.2-r206703/gcc/config/aarch64/aarch64.h
@@ -758,8 +758,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: gcc-4.8.2-r206703/gcc/testsuite/lib/target-supports.exp
===================================================================
--- gcc-4.8.2-r206703.orig/gcc/testsuite/lib/target-supports.exp
+++ gcc-4.8.2-r206703/gcc/testsuite/lib/target-supports.exp
@@ -487,13 +487,6 @@ proc check_profiling_available { test_wh
 	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