From df8aeaefea026a25f443b8982186127291c6f149 Mon Sep 17 00:00:00 2001 From: Adrian Hunter Date: Fri, 20 Jan 2023 14:34:56 +0200 Subject: [PATCH] perf symbols: Check SHT_RELA and SHT_REL type earlier Make the code more readable by checking for SHT_RELA and SHT_REL type earlier. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers Cc: Jiri Olsa Cc: Namhyung Kim Link: https://lore.kernel.org/r/20230120123456.12449-11-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/symbol-elf.c | 54 ++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index e274f646ac32..aa62735aea7b 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -434,6 +434,10 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss) return 0; } + if (shdr_rel_plt.sh_type != SHT_RELA && + shdr_rel_plt.sh_type != SHT_REL) + return 0; + if (shdr_rel_plt.sh_link != dynsym_idx) goto out_elf_end; @@ -466,34 +470,30 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss) ri.is_rela = shdr_rel_plt.sh_type == SHT_RELA; - if (shdr_rel_plt.sh_type == SHT_RELA || - shdr_rel_plt.sh_type == SHT_REL) { - for (idx = 0; idx < nr_rel_entries; idx++) { - const char *elf_name = NULL; - char *demangled = NULL; - - gelf_getsym(syms, get_rel_symidx(&ri, idx), &sym); - - elf_name = elf_sym__name(&sym, symstrs); - demangled = demangle_sym(dso, 0, elf_name); - if (demangled != NULL) - elf_name = demangled; - if (*elf_name) - snprintf(sympltname, sizeof(sympltname), "%s@plt", elf_name); - else - snprintf(sympltname, sizeof(sympltname), - "offset_%#" PRIx64 "@plt", plt_offset); - free(demangled); - - f = symbol__new(plt_offset, plt_entry_size, - STB_GLOBAL, STT_FUNC, sympltname); - if (!f) - goto out_elf_end; + for (idx = 0; idx < nr_rel_entries; idx++) { + const char *elf_name = NULL; + char *demangled = NULL; - plt_offset += plt_entry_size; - symbols__insert(&dso->symbols, f); - ++nr; - } + gelf_getsym(syms, get_rel_symidx(&ri, idx), &sym); + + elf_name = elf_sym__name(&sym, symstrs); + demangled = demangle_sym(dso, 0, elf_name); + if (demangled) + elf_name = demangled; + if (*elf_name) + snprintf(sympltname, sizeof(sympltname), "%s@plt", elf_name); + else + snprintf(sympltname, sizeof(sympltname), + "offset_%#" PRIx64 "@plt", plt_offset); + free(demangled); + + f = symbol__new(plt_offset, plt_entry_size, STB_GLOBAL, STT_FUNC, sympltname); + if (!f) + goto out_elf_end; + + plt_offset += plt_entry_size; + symbols__insert(&dso->symbols, f); + ++nr; } err = 0; -- 2.11.0