Lexi Shao
unread,Oct 29, 2021, 2:51:28 AM10/29/21Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to linux-...@vger.kernel.org, linux-pe...@vger.kernel.org, james...@arm.com, ac...@kernel.org, alexander...@linux.intel.com, jo...@redhat.com, mark.r...@arm.com, mi...@redhat.com, namh...@kernel.org, nixia...@huawei.com, pet...@infradead.org, qiu...@huawei.com, shao...@huawei.com, wang...@huawei.com, je...@kernel.org, a...@kernel.org, dan...@iogearbox.net, and...@kernel.org, ka...@fb.com, songliu...@fb.com, y...@fb.com, john.fa...@gmail.com, kps...@kernel.org, natecha...@gmail.com, ndesau...@google.com, b...@vger.kernel.org, clang-bu...@googlegroups.com
On ARM machine, kernel symbols from modules can be resolved to $a
instead of printing the actual symbol name. Ignore symbols starting with
"$" when building kallsyms rbtree.
A sample stacktrace is shown as follows:
c0f2e39c schedule_hrtimeout+0x14 ([kernel.kallsyms])
bf4a66d8 $a+0x78 ([test_module])
c0a4f5f4 kthread+0x15c ([kernel.kallsyms])
c0a001f8 ret_from_fork+0x14 ([kernel.kallsyms])
On ARM machine, $a/$d symbols are used by the compiler to mark the
beginning of code/data part in code section. These symbols are filtered
out when linking vmlinux(see scripts/kallsyms.c ignored_prefixes), but
are left on modules. So there are $a symbols in /proc/kallsyms which
share the same addresses with the actual module symbols and confuses perf
when resolving symbols.
After this patch, the module symbol name is printed:
c0f2e39c schedule_hrtimeout+0x14 ([kernel.kallsyms])
bf4a66d8 test_func+0x78 ([test_module])
c0a4f5f4 kthread+0x15c ([kernel.kallsyms])
c0a001f8 ret_from_fork+0x14 ([kernel.kallsyms])
Signed-off-by: Lexi Shao <
shao...@huawei.com>
Reviewed-by: James Clark <
james...@arm.com>
---
tools/perf/util/symbol.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 0fc9a5410739..35116aed74eb 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -702,6 +702,10 @@ static int map__process_kallsym_symbol(void *arg, const char *name,
if (!symbol_type__filter(type))
return 0;
+ /* Ignore local symbols for ARM modules */
+ if (name[0] == '$')
+ return 0;
+
/*
* module symbols are not sorted so we add all
* symbols, setting length to 0, and rely on
--
2.12.3