[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190731090437.19867-1-jiping.ma2@windriver.com>
Date: Wed, 31 Jul 2019 17:04:37 +0800
From: Jiping Ma <jiping.ma2@...driver.com>
To: <rostedt@...dmis.org>, <mingo@...hat.com>
CC: <linux-kernel@...r.kernel.org>, <jiping.ma2@...driver.com>
Subject: [PATCH] Function stack size and its name mismatch in arm64
The PC of one the frame is matched to the next frame function, rather
than the function of his frame.
Signed-off-by: Jiping Ma <jiping.ma2@...driver.com>
---
kernel/trace/trace_stack.c | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 5d16f73898db..ed80b95abf06 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -40,16 +40,28 @@ static void print_max_stack(void)
pr_emerg(" Depth Size Location (%d entries)\n"
" ----- ---- --------\n",
+#ifdef CONFIG_ARM64
+ stack_trace_nr_entries - 1);
+#else
stack_trace_nr_entries);
-
+#endif
+#ifdef CONFIG_ARM64
+ for (i = 1; i < stack_trace_nr_entries; i++) {
+#else
for (i = 0; i < stack_trace_nr_entries; i++) {
+#endif
if (i + 1 == stack_trace_nr_entries)
size = stack_trace_index[i];
else
size = stack_trace_index[i] - stack_trace_index[i+1];
+#ifdef CONFIG_ARM64
+ pr_emerg("%3ld) %8d %5d %pS\n", i-1, stack_trace_index[i],
+ size, (void *)stack_dump_trace[i-1]);
+#else
pr_emerg("%3ld) %8d %5d %pS\n", i, stack_trace_index[i],
size, (void *)stack_dump_trace[i]);
+#endif
}
}
@@ -324,8 +336,11 @@ static int t_show(struct seq_file *m, void *v)
seq_printf(m, " Depth Size Location"
" (%d entries)\n"
" ----- ---- --------\n",
+#ifdef CONFIG_ARM64
+ stack_trace_nr_entries - 1);
+#else
stack_trace_nr_entries);
-
+#endif
if (!stack_tracer_enabled && !stack_trace_max_size)
print_disabled(m);
@@ -334,6 +349,10 @@ static int t_show(struct seq_file *m, void *v)
i = *(long *)v;
+#ifdef CONFIG_ARM64
+ if (i == 0)
+ return 0;
+#endif
if (i >= stack_trace_nr_entries)
return 0;
@@ -342,9 +361,14 @@ static int t_show(struct seq_file *m, void *v)
else
size = stack_trace_index[i] - stack_trace_index[i+1];
+#ifdef CONFIG_ARM64
+ seq_printf(m, "%3ld) %8d %5d ", i-1, stack_trace_index[i], size);
+ trace_lookup_stack(m, i-1);
+#else
seq_printf(m, "%3ld) %8d %5d ", i, stack_trace_index[i], size);
trace_lookup_stack(m, i);
+#endif
return 0;
}
--
2.18.1
Powered by blists - more mailing lists