Merge pull request #3096 from crab2313/riscv-disassemble

Riscv disassembler support
This commit is contained in:
Pat Hickey
2021-07-19 09:27:49 -07:00
committed by GitHub
4 changed files with 27 additions and 8 deletions

8
Cargo.lock generated
View File

@@ -368,9 +368,9 @@ dependencies = [
[[package]] [[package]]
name = "capstone" name = "capstone"
version = "0.8.0" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51e4890dad38e19668a2a9bce54242e6b0dece021b862ba25ae80b439c6d36b6" checksum = "178b3c80b4ce3939792d1dd6600575e012da806a10e81abe812dc29cbfe629ec"
dependencies = [ dependencies = [
"capstone-sys", "capstone-sys",
"libc", "libc",
@@ -378,9 +378,9 @@ dependencies = [
[[package]] [[package]]
name = "capstone-sys" name = "capstone-sys"
version = "0.12.0" version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81c2624132869952c2db6f1d77e24da16b6db5f5a918270c5685a5ea8db822c4" checksum = "cf2f3d97b88fa4a9a6464c7c08b8c4588aaea8c18d0651eca11f2ca15f50f1f6"
dependencies = [ dependencies = [
"cc", "cc",
"libc", "libc",

View File

@@ -33,7 +33,7 @@ cranelift-fuzzgen = { path = "fuzzgen", version = "0.75.0" }
filecheck = "0.5.0" filecheck = "0.5.0"
log = "0.4.8" log = "0.4.8"
termcolor = "1.1.2" termcolor = "1.1.2"
capstone = { version = "0.8.0", optional = true } capstone = { version = "0.9.0", optional = true }
wat = { version = "1.0.36", optional = true } wat = { version = "1.0.36", optional = true }
target-lexicon = { version = "0.12", features = ["std"] } target-lexicon = { version = "0.12", features = ["std"] }
peepmatic-souper = { path = "./peepmatic/crates/souper", version = "0.75.0", optional = true } peepmatic-souper = { path = "./peepmatic/crates/souper", version = "0.75.0", optional = true }

View File

@@ -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()

View File

@@ -12,7 +12,7 @@ edition = "2018"
[dependencies] [dependencies]
arrayvec = "0.5" arrayvec = "0.5"
capstone = "0.8.0" capstone = "0.9.0"
cranelift-codegen = { path = "../../cranelift/codegen", version = "0.75.0" } cranelift-codegen = { path = "../../cranelift/codegen", version = "0.75.0" }
derive_more = "0.99" derive_more = "0.99"
dynasm = "1.0.0" dynasm = "1.0.0"