Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf dwarf-regs: Move x86 dwarf-regs out of arch

Move arch/x86/util/dwarf-regs.c to util/dwarf-regs-x86.c and compile
in unconditionally. To avoid get_arch_regnum being duplicated, rename
to get_x86_regnum and add to get_dwarf_regnum switch.

For get_arch_regstr, this was unused on x86 unless the machine type
was EM_NONE. Map that case to EM_HOST and remove get_arch_regstr from
dwarf-regs-x86.c.

Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Anup Patel <anup@brainfault.org>
Cc: Yang Jihong <yangjihong@bytedance.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Shenlin Liang <liangshenlin@eswincomputing.com>
Cc: Nick Terrell <terrelln@fb.com>
Cc: Guilherme Amadio <amadio@gentoo.org>
Cc: Steinar H. Gunderson <sesse@google.com>
Cc: Changbin Du <changbin.du@huawei.com>
Cc: Alexander Lobakin <aleksander.lobakin@intel.com>
Cc: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Guo Ren <guoren@kernel.org>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Will Deacon <will@kernel.org>
Cc: James Clark <james.clark@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Chen Pei <cp0613@linux.alibaba.com>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: Aditya Gupta <adityag@linux.ibm.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-riscv@lists.infradead.org
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Atish Patra <atishp@rivosinc.com>
Cc: Dima Kogan <dima@secretsauce.net>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Dr. David Alan Gilbert <linux@treblig.org>
Cc: linux-csky@vger.kernel.org
Link: https://lore.kernel.org/r/20241108234606.429459-8-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>

authored by

Ian Rogers and committed by
Namhyung Kim
bf4e799a a784847c

+27 -26
-3
tools/perf/arch/x86/util/Build
··· 11 11 perf-util-y += evsel.o 12 12 perf-util-y += iostat.o 13 13 14 - perf-util-$(CONFIG_LIBDW) += dwarf-regs.o 15 - perf-util-$(CONFIG_BPF_PROLOGUE) += dwarf-regs.o 16 - 17 14 perf-util-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o 18 15 perf-util-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o 19 16
+1 -23
tools/perf/arch/x86/util/dwarf-regs.c tools/perf/util/dwarf-regs-x86.c
··· 11 11 #include <linux/kernel.h> /* for ARRAY_SIZE */ 12 12 #include <dwarf-regs.h> 13 13 14 - #define DEFINE_DWARF_REGSTR_TABLE 1 15 - #include "dwarf-regs-table.h" 16 - 17 - /* Return architecture dependent register string (for kprobe-tracer) */ 18 - const char *get_arch_regstr(unsigned int n) 19 - { 20 - #if defined(__i386__) 21 - size_t len = ARRAY_SIZE(x86_32_regstr_tbl); 22 - #else 23 - size_t len = ARRAY_SIZE(x86_64_regstr_tbl); 24 - #endif 25 - 26 - if (n >= len) 27 - return NULL; 28 - 29 - #if defined(__i386__) 30 - return x86_32_regstr_tbl[n]; 31 - #else 32 - return x86_64_regstr_tbl[n]; 33 - #endif 34 - } 35 - 36 14 struct dwarf_regs_idx { 37 15 const char *name; 38 16 int idx; ··· 36 58 { "rip", DWARF_REG_PC }, 37 59 }; 38 60 39 - int get_arch_regnum(const char *name) 61 + int get_x86_regnum(const char *name) 40 62 { 41 63 unsigned int i; 42 64
+1
tools/perf/util/Build
··· 204 204 perf-util-$(CONFIG_LIBDW) += probe-finder.o 205 205 perf-util-$(CONFIG_LIBDW) += dwarf-aux.o 206 206 perf-util-$(CONFIG_LIBDW) += dwarf-regs.o 207 + perf-util-$(CONFIG_LIBDW) += dwarf-regs-x86.o 207 208 perf-util-$(CONFIG_LIBDW) += debuginfo.o 208 209 perf-util-$(CONFIG_LIBDW) += annotate-data.o 209 210
+17
tools/perf/util/dwarf-regs.c
··· 32 32 const char *get_dwarf_regstr(unsigned int n, unsigned int machine, 33 33 unsigned int flags __maybe_unused) 34 34 { 35 + #if EM_HOST == EM_X86_64 || EM_HOST == EM_386 36 + if (machine == EM_NONE) { 37 + /* Generic arch - use host arch */ 38 + machine = EM_HOST; 39 + } 40 + #endif 35 41 switch (machine) { 42 + #if EM_HOST != EM_X86_64 && EM_HOST != EM_386 36 43 case EM_NONE: /* Generic arch - use host arch */ 37 44 return get_arch_regstr(n); 45 + #endif 38 46 case EM_386: 39 47 return __get_dwarf_regstr(x86_32_regstr_tbl, n); 40 48 case EM_X86_64: ··· 73 65 return NULL; 74 66 } 75 67 68 + #if EM_HOST != EM_X86_64 && EM_HOST != EM_386 76 69 __weak int get_arch_regnum(const char *name __maybe_unused) 77 70 { 78 71 return -ENOTSUP; 79 72 } 73 + #endif 80 74 81 75 /* Return DWARF register number from architecture register name */ 82 76 int get_dwarf_regnum(const char *name, unsigned int machine, unsigned int flags __maybe_unused) ··· 100 90 machine = EM_HOST; 101 91 } 102 92 switch (machine) { 93 + #if EM_HOST != EM_X86_64 && EM_HOST != EM_386 103 94 case EM_HOST: 104 95 reg = get_arch_regnum(regname); 96 + break; 97 + #endif 98 + case EM_X86_64: 99 + fallthrough; 100 + case EM_386: 101 + reg = get_x86_regnum(regname); 105 102 break; 106 103 default: 107 104 pr_err("ELF MACHINE %x is not supported.\n", machine);
+8
tools/perf/util/include/dwarf-regs.h
··· 89 89 #define DWARF_REG_FB 0xd3affb /* random number */ 90 90 91 91 #ifdef HAVE_LIBDW_SUPPORT 92 + #if !defined(__x86_64__) && !defined(__i386__) 92 93 const char *get_arch_regstr(unsigned int n); 94 + #endif 95 + 93 96 /** 94 97 * get_dwarf_regstr() - Returns ftrace register string from DWARF regnum. 95 98 * @n: DWARF register number. ··· 101 98 */ 102 99 const char *get_dwarf_regstr(unsigned int n, unsigned int machine, unsigned int flags); 103 100 101 + int get_x86_regnum(const char *name); 102 + 103 + #if !defined(__x86_64__) && !defined(__i386__) 104 104 int get_arch_regnum(const char *name); 105 + #endif 106 + 105 107 /* 106 108 * get_dwarf_regnum - Returns DWARF regnum from register name 107 109 * name: architecture register name