rizin/librz/arch/p/asm/asm_xtensa_cs.c
Giovanni 144b47d455
Move RzBreakpoint into RzDebug (#5124)
- Move trap/sw breakpoint into RzArch
- Remove RzBreakpointPlugin & RzBreakpointArch
- Add get_sw_breakpoint_at/get_sw_breakpoint_size_at binds
- Remove `dbh-`
- Change `dbh` to just list supported archs for sw breakpoints
- Implement correct PPC traps
- Add missing x86 breakpoint callback
2025-05-13 01:57:37 +08:00

55 lines
1.4 KiB
C

// SPDX-FileCopyrightText: 2024 billow <billow.fun@gmail.com>
// SPDX-License-Identifier: LGPL-3.0-only
#include <rz_types.h>
#include <rz_asm.h>
#include <xtensa/xtensa.h>
static int asm_xtensa_disassemble(RzAsm *a, RzAsmOp *op, const ut8 *buf, int len) {
XtensaContext *ctx = a->plugin_data;
if (!xtensa_open(ctx, a->cpu, a->big_endian)) {
goto beach;
}
if (!xtensa_disassemble(ctx, buf, len, a->pc)) {
goto beach;
}
rz_asm_op_setf_asm(op,
"%s%s%s",
ctx->insn->mnemonic,
ctx->insn->op_str[0] ? " " : "",
ctx->insn->op_str);
op->size = ctx->insn->size;
xtensa_disassemble_fini(ctx);
return op->size;
beach:
rz_asm_op_set_asm(op, "illegal");
xtensa_disassemble_fini(ctx);
return -1;
}
static char **xtensa_cpu_descriptions() {
static char *cpu_desc[] = {
"esp32", "Xtensa microcontroller with Wi-Fi and Bluetooth capabilities",
"esp32s2", "Xtensa microcontroller with Wi-Fi and USB OTG support",
"esp8266", "Xtensa microcontroller with Wi-Fi support",
NULL
};
return cpu_desc;
}
RzAsmPlugin rz_asm_plugin_xtensa_cs = {
.name = "xtensa",
.license = "LGPL3",
.desc = "Tensilica Xtensa Capstone-based disassembler",
.author = "billow",
.arch = "xtensa",
.cpus = "esp32,esp32s2,esp8266",
.bits = 32,
.endian = RZ_SYS_ENDIAN_LITTLE | RZ_SYS_ENDIAN_BIG,
.disassemble = asm_xtensa_disassemble,
.init = &xtensa_init,
.fini = &xtensa_fini,
.get_cpu_desc = xtensa_cpu_descriptions,
};