Disassembler support for RV32/64
This commit is contained in:
@@ -111,8 +111,27 @@ cfg_if! {
|
|||||||
|
|
||||||
fn get_disassembler(isa: &dyn TargetIsa) -> Result<Capstone> {
|
fn get_disassembler(isa: &dyn TargetIsa) -> Result<Capstone> {
|
||||||
let cs = match isa.triple().architecture {
|
let cs = match isa.triple().architecture {
|
||||||
Architecture::Riscv32(_) | Architecture::Riscv64(_) => {
|
Architecture::Riscv32(_) => {
|
||||||
anyhow::bail!("No disassembler for RiscV");
|
let mut cs = Capstone::new()
|
||||||
|
.riscv()
|
||||||
|
.mode(arch::riscv::ArchMode::RiscV32)
|
||||||
|
.extra_mode(std::iter::once(arch::riscv::ArchExtraMode::RiscVC))
|
||||||
|
.build()
|
||||||
|
.map_err(map_caperr)?;
|
||||||
|
// See the comment of AArch64 below
|
||||||
|
cs.set_skipdata(true).map_err(map_caperr)?;
|
||||||
|
cs
|
||||||
|
}
|
||||||
|
Architecture::Riscv64(_) => {
|
||||||
|
let mut cs = Capstone::new()
|
||||||
|
.riscv()
|
||||||
|
.mode(arch::riscv::ArchMode::RiscV64)
|
||||||
|
.extra_mode(std::iter::once(arch::riscv::ArchExtraMode::RiscVC))
|
||||||
|
.build()
|
||||||
|
.map_err(map_caperr)?;
|
||||||
|
// See the comment of AArch64 below
|
||||||
|
cs.set_skipdata(true).map_err(map_caperr)?;
|
||||||
|
cs
|
||||||
}
|
}
|
||||||
Architecture::X86_32(_) => Capstone::new()
|
Architecture::X86_32(_) => Capstone::new()
|
||||||
.x86()
|
.x86()
|
||||||
|
|||||||
Reference in New Issue
Block a user