From 4cdd46b54eeaf5e7a3a6aac2aaa6f3afb993b6ce Mon Sep 17 00:00:00 2001 From: billow Date: Thu, 6 Feb 2025 11:50:05 +0800 Subject: [PATCH] librz/bin/dwarf: add xtensa register mapping (#4878) --- librz/arch/dwarf_process.c | 4 ++++ .../isa/xtensa/xtensa_dwarf_regnum_table.h | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 librz/arch/isa/xtensa/xtensa_dwarf_regnum_table.h diff --git a/librz/arch/dwarf_process.c b/librz/arch/dwarf_process.c index 660dd1f0edd..3afb055d5f5 100644 --- a/librz/arch/dwarf_process.c +++ b/librz/arch/dwarf_process.c @@ -480,6 +480,7 @@ static const char *map_dwarf_reg_to_riscv_reg(ut32 reg_num) { #include #include #include +#include /** * \brief Returns a function that maps a DWARF register number to a register name @@ -547,6 +548,9 @@ static DWARF_RegisterMapping dwarf_register_mapping_query(RZ_NONNULL char *arch, if (RZ_STR_EQ(arch, "rx")) { return map_dwarf_reg_to_rx_reg; } + if (RZ_STR_EQ(arch, "xtensa")) { + return xtensa_register_name; + } RZ_LOG_ERROR("No DWARF register mapping function defined for %s %d bits\n", arch, bits); return map_dwarf_register_dummy; } diff --git a/librz/arch/isa/xtensa/xtensa_dwarf_regnum_table.h b/librz/arch/isa/xtensa/xtensa_dwarf_regnum_table.h new file mode 100644 index 00000000000..3a4c4002ba7 --- /dev/null +++ b/librz/arch/isa/xtensa/xtensa_dwarf_regnum_table.h @@ -0,0 +1,23 @@ +// SPDX-FileCopyrightText: 2025 Billow +// SPDX-License-Identifier: LGPL-3.0-only + +#ifndef XTENSA_DWARF_REGNUM_TABLE_H +#define XTENSA_DWARF_REGNUM_TABLE_H + +static const char * +xtensa_register_name(ut32 index) { + static const char *const reg_names[] = { + "a0", "sp", "a2", "a3", "a4", "a5", "a6", "a7", + "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15", + "fp", "argp", "b0", + "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", + "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", + "acc" + }; + if (index >= RZ_ARRAY_SIZE(reg_names)) { + return NULL; + } + return reg_names[index]; +} + +#endif // XTENSA_DWARF_REGNUM_TABLE_H