]> git.itanic.dy.fi Git - linux-stable/commitdiff
perf symbols: Check SHT_RELA and SHT_REL type earlier
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 20 Jan 2023 12:34:56 +0000 (14:34 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Sun, 22 Jan 2023 21:10:50 +0000 (18:10 -0300)
Make the code more readable by checking for SHT_RELA and SHT_REL type
earlier.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20230120123456.12449-11-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/symbol-elf.c

index e274f646ac328d06bb5c133d03748daa170e86c5..aa62735aea7b3429156f9e5d41ba028d75d1a1d5 100644 (file)
@@ -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;