]> git.itanic.dy.fi Git - linux-stable/commitdiff
perf symbols: Factor out get_plt_sizes()
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 20 Jan 2023 12:34:48 +0000 (14:34 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Sun, 22 Jan 2023 21:10:03 +0000 (18:10 -0300)
Factor out get_plt_sizes() to make the code more readable and further
changes to dso__synthesize_plt_symbols() easier to follow.

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-3-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/symbol-elf.c

index 96767d1b3f1c233dcd7552de0996c3cd036d2f3b..4605680a22a37c4f05b36a84df563bd244f4c326 100644 (file)
@@ -323,6 +323,33 @@ static char *demangle_sym(struct dso *dso, int kmodule, const char *elf_name)
        return demangled;
 }
 
+static void get_plt_sizes(GElf_Ehdr *ehdr, GElf_Shdr *shdr_plt,
+                         u64 *plt_header_size, u64 *plt_entry_size)
+{
+       switch (ehdr->e_machine) {
+       case EM_ARM:
+               *plt_header_size = 20;
+               *plt_entry_size = 12;
+               return;
+       case EM_AARCH64:
+               *plt_header_size = 32;
+               *plt_entry_size = 16;
+               return;
+       case EM_SPARC:
+               *plt_header_size = 48;
+               *plt_entry_size = 12;
+               return;
+       case EM_SPARCV9:
+               *plt_header_size = 128;
+               *plt_entry_size = 32;
+               return;
+       default: /* FIXME: s390/alpha/mips/parisc/poperpc/sh/xtensa need to be checked */
+               *plt_header_size = shdr_plt->sh_entsize;
+               *plt_entry_size = shdr_plt->sh_entsize;
+               return;
+       }
+}
+
 #define elf_section__for_each_rel(reldata, pos, pos_mem, idx, nr_entries) \
        for (idx = 0, pos = gelf_getrel(reldata, 0, &pos_mem); \
             idx < nr_entries; \
@@ -411,32 +438,7 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss)
 
        nr_rel_entries = shdr_rel_plt.sh_size / shdr_rel_plt.sh_entsize;
        plt_offset = shdr_plt.sh_offset;
-       switch (ehdr.e_machine) {
-               case EM_ARM:
-                       plt_header_size = 20;
-                       plt_entry_size = 12;
-                       break;
-
-               case EM_AARCH64:
-                       plt_header_size = 32;
-                       plt_entry_size = 16;
-                       break;
-
-               case EM_SPARC:
-                       plt_header_size = 48;
-                       plt_entry_size = 12;
-                       break;
-
-               case EM_SPARCV9:
-                       plt_header_size = 128;
-                       plt_entry_size = 32;
-                       break;
-
-               default: /* FIXME: s390/alpha/mips/parisc/poperpc/sh/xtensa need to be checked */
-                       plt_header_size = shdr_plt.sh_entsize;
-                       plt_entry_size = shdr_plt.sh_entsize;
-                       break;
-       }
+       get_plt_sizes(&ehdr, &shdr_plt, &plt_header_size, &plt_entry_size);
        plt_offset += plt_header_size;
 
        if (shdr_rel_plt.sh_type == SHT_RELA) {