Rather than pass 0/EM_NONE, use the value computed in the disasm
struct arch. Switch the EM_NONE case to EM_HOST, rewriting EM_NONE if
it were passed to get_dwarf_regnum. Pass a flags value as
architectures like csky need the flags to determine the ABI variant.

Reviewed-by: Masami Hiramatsu (Google) <mhira...@kernel.org>
Signed-off-by: Ian Rogers <irog...@google.com>
---
 tools/perf/util/annotate.c           | 6 +++---
 tools/perf/util/dwarf-regs.c         | 8 ++++++--
 tools/perf/util/include/dwarf-regs.h | 5 +++--
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 37ce43c4eb8f..b1d98da79be8 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -2292,7 +2292,7 @@ static int extract_reg_offset(struct arch *arch, const 
char *str,
        if (regname == NULL)
                return -1;
 
-       op_loc->reg1 = get_dwarf_regnum(regname, 0);
+       op_loc->reg1 = get_dwarf_regnum(regname, arch->e_machine, 
arch->e_flags);
        free(regname);
 
        /* Get the second register */
@@ -2305,7 +2305,7 @@ static int extract_reg_offset(struct arch *arch, const 
char *str,
                if (regname == NULL)
                        return -1;
 
-               op_loc->reg2 = get_dwarf_regnum(regname, 0);
+               op_loc->reg2 = get_dwarf_regnum(regname, arch->e_machine, 
arch->e_flags);
                free(regname);
        }
        return 0;
@@ -2405,7 +2405,7 @@ int annotate_get_insn_location(struct arch *arch, struct 
disasm_line *dl,
                                return -1;
 
                        if (*s == arch->objdump.register_char)
-                               op_loc->reg1 = get_dwarf_regnum(s, 0);
+                               op_loc->reg1 = get_dwarf_regnum(s, 
arch->e_machine, arch->e_flags);
                        else if (*s == arch->objdump.imm_char) {
                                op_loc->offset = strtol(s + 1, &p, 0);
                                if (p && p != s + 1)
diff --git a/tools/perf/util/dwarf-regs.c b/tools/perf/util/dwarf-regs.c
index 7c01bc4d7e5b..1321387f6948 100644
--- a/tools/perf/util/dwarf-regs.c
+++ b/tools/perf/util/dwarf-regs.c
@@ -70,7 +70,7 @@ __weak int get_arch_regnum(const char *name __maybe_unused)
 }
 
 /* Return DWARF register number from architecture register name */
-int get_dwarf_regnum(const char *name, unsigned int machine)
+int get_dwarf_regnum(const char *name, unsigned int machine, unsigned int 
flags __maybe_unused)
 {
        char *regname = strdup(name);
        int reg = -1;
@@ -84,8 +84,12 @@ int get_dwarf_regnum(const char *name, unsigned int machine)
        if (p)
                *p = '\0';
 
+       if (machine == EM_NONE) {
+               /* Generic arch - use host arch */
+               machine = EM_HOST;
+       }
        switch (machine) {
-       case EM_NONE:   /* Generic arch - use host arch */
+       case EM_HOST:
                reg = get_arch_regnum(regname);
                break;
        default:
diff --git a/tools/perf/util/include/dwarf-regs.h 
b/tools/perf/util/include/dwarf-regs.h
index ce9f10b3282d..3c3a908b9f36 100644
--- a/tools/perf/util/include/dwarf-regs.h
+++ b/tools/perf/util/include/dwarf-regs.h
@@ -103,12 +103,13 @@ int get_arch_regnum(const char *name);
  * name: architecture register name
  * machine: ELF machine signature (EM_*)
  */
-int get_dwarf_regnum(const char *name, unsigned int machine);
+int get_dwarf_regnum(const char *name, unsigned int machine, unsigned int 
flags);
 
 #else /* HAVE_LIBDW_SUPPORT */
 
 static inline int get_dwarf_regnum(const char *name __maybe_unused,
-                                  unsigned int machine __maybe_unused)
+                                  unsigned int machine __maybe_unused,
+                                  unsigned int flags __maybe_unused)
 {
        return -1;
 }
-- 
2.47.0.277.g8800431eea-goog


Reply via email to