Hi linux-perf-users,
It's actually a patch, and I didn't find a development mailing list
for perf, so I just post it here. If this is not the right place to
post patches, could someone direct me to it? Thanks in advance!
In tools/perf/util/symbol-elf.c, we don't adjust symbol address for
ET_DYN type of ELF files because we think ET_DYN is always
relocatable.
But that's not necessarily true; there are some non-relocatable ET_DYN
ELF files. For those files, we should still adjust symbol address.
Suggested patch attached.
Thanks.
--
Best Regards, Tong Shen
Hi linux-perf-users,
It's actually a patch, and I didn't find a development mailing list for perf, so I just post it here. If this is not the right place to post patches, could someone direct me to it? Thanks in advance!
In tools/perf/util/symbol-elf.c, we don't adjust symbol address for ET_DYN type of ELF files because we think ET_DYN is always relocatable.
But that's not necessarily true; there are some non-relocatable ET_DYN ELF files. For those files, we should still adjust symbol address.
Thanks.
Suggested patch: (HTML subpart now allowed in this mailing list...)
diff --git a/perf-3.12.0/tools/perf/util/symbol-elf.c b/perf-3.12.0/tools/perf/util/symbol-elf.c
index a9c829b..0606c6f 100644
--- a/perf-3.12.0/tools/perf/util/symbol-elf.c
+++ b/perf-3.12.0/tools/perf/util/symbol-elf.c
@@ -915,7 +915,10 @@ int dso__load_sym(struct dso *dso, struct map *map,
}
if ((used_opd && runtime_ss->adjust_symbols)
- || (!used_opd && syms_ss->adjust_symbols)) {
+ || (!used_opd && syms_ss->adjust_symbols)
+ || (syms_ss->ehdr.e_type == ET_DYN
+ && shdr.sh_addr != shdr.sh_offset
+ && elf_sec__is_text(&shdr, secstrs))) {
pr_debug4("%s: adjusting symbol: st_value: %#" PRIx64 " "
"sh_addr: %#" PRIx64 " sh_offset: %#" PRIx64 "\n", __func__,
(u64)sym.st_value, (u64)shdr.sh_addr,