Message ID | CAA3XUr2KUyafcnUggN7=xGNGSeRkkRtYtxZmwm4UC8sRCGup3g@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Jan 14, 2015 at 10:38:38AM -0800, Victor Kamensky wrote: > >From fed6caab410ddcaf487ff23a3908eca129e50b89 Mon Sep 17 00:00:00 2001 > From: Victor Kamensky <victor.kamensky@linaro.org> > Date: Wed, 14 Jan 2015 07:42:41 -0800 > Subject: [PATCH 3/3] perf symbols: improve abi compliance in arm mapping > symbols handling > > Both Arm and Aarch64 ELF ABI allow mapping symbols be in from > either "$d" or "$d.<any>". But current code that handles mapping > symbols only deals with the first, dollar character and a single > letter, case. > > The patch adds handling of the second case with period > followed by any characters. > > Suggested-by: Will Deacon <will.deacon@arm.com> > Signed-off-by: Victor Kamensky <victor.kamensky@linaro.org> I wonder if it would make more sense to re-use the "is_arm_mapping_symbol" thing which we have in kernel/module.c and scripts/kallsyms.c - it seems silly to re-invent code which we already have to detect these symbols.
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 1e188dd..ae92c27 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -859,7 +859,10 @@ int dso__load_sym(struct dso *dso, struct map *map, if (ehdr.e_machine == EM_ARM) { if (!strcmp(elf_name, "$a") || !strcmp(elf_name, "$d") || - !strcmp(elf_name, "$t")) + !strcmp(elf_name, "$t") || + !strncmp(elf_name, "$a.", 3) || + !strncmp(elf_name, "$d.", 3) || + !strncmp(elf_name, "$t.", 3)) continue; } /* Reject Aarch64 ELF "mapping symbols": these aren't unique and @@ -867,7 +870,9 @@ int dso__load_sym(struct dso *dso, struct map *map, * output: */ if (ehdr.e_machine == EM_AARCH64) { if (!strcmp(elf_name, "$x") || - !strcmp(elf_name, "$d")) + !strcmp(elf_name, "$d") || + !strncmp(elf_name, "$x.", 3) || + !strncmp(elf_name, "$d.", 3)) continue; }