Skip to content

Commit 539dd18

Browse files
committed
fix register table selection for riscv
1 parent 75985ae commit 539dd18

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

emulation_worker/src/architecture.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ static ARM_REGISTERS: &[(&str, u8)] = &[
6767
#[derive(Clone, Copy)]
6868
pub enum Architecture {
6969
Arm,
70-
Riscv,
70+
Riscv64,
7171
}
7272

7373
pub trait ArchitectureDependentOperations {
@@ -98,7 +98,7 @@ impl ArchitectureDependentOperations for ArchitectureDependentOperator {
9898
Architecture::Arm => {
9999
Unicorn::new(Arch::ARM, Mode::THUMB).expect("failed to initialize Unicorn instance")
100100
}
101-
Architecture::Riscv => Unicorn::new(Arch::RISCV, Mode::RISCV64)
101+
Architecture::Riscv64 => Unicorn::new(Arch::RISCV, Mode::RISCV64)
102102
.expect("failed to initialize Unicorn instance"),
103103
}
104104
}
@@ -118,7 +118,7 @@ impl ArchitectureDependentOperations for ArchitectureDependentOperator {
118118
// significant bit of pc if T-bit is set
119119
// in xpsr register
120120
}
121-
Architecture::Riscv => registers = RISCV_REGISTERS,
121+
Architecture::Riscv64 => registers = RISCV_REGISTERS,
122122
}
123123
for (name, reg) in registers {
124124
uc.reg_write(
@@ -136,7 +136,7 @@ impl ArchitectureDependentOperations for ArchitectureDependentOperator {
136136
.mode(capstone::arch::arm::ArchMode::Thumb)
137137
.build()
138138
.unwrap(),
139-
Architecture::Riscv => Capstone::new()
139+
Architecture::Riscv64 => Capstone::new()
140140
.riscv()
141141
.mode(capstone::arch::riscv::ArchMode::RiscV64)
142142
.extra_mode(std::iter::once(
@@ -156,7 +156,7 @@ impl ArchitectureDependentOperations for ArchitectureDependentOperator {
156156
let mut dump = HashMap::new();
157157
let registers = match self.architecture {
158158
Architecture::Arm => ARM_REGISTERS,
159-
Architecture::Riscv => RISCV_REGISTERS,
159+
Architecture::Riscv64 => RISCV_REGISTERS,
160160
};
161161
for (name, reg) in registers {
162162
dump.insert(name.to_string(), uc.reg_read(*reg).unwrap());

emulation_worker/src/lib.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ fn run_unicorn(
6262
.extract()?;
6363
let arch: Architecture = match arch_str {
6464
"arm" => Architecture::Arm,
65-
"riscv64" => Architecture::Riscv,
66-
_ => panic!("Unsupported architecture"),
65+
"riscv64" => Architecture::Riscv64,
66+
_ => panic!("Unsupported architecture!"),
6767
};
6868

6969
let memorydump: Vec<HashMap<&str, u64>> = config
@@ -73,8 +73,14 @@ fn run_unicorn(
7373
let arch_operator = ArchitectureDependentOperator { architecture: arch };
7474
let emu = &mut arch_operator.initialize_unicorn();
7575

76+
let register_table_name = match arch_str {
77+
arch_str if arch_str.starts_with("arm") => "armregisters",
78+
arch_str if arch_str.starts_with("riscv") => "riscvregisters",
79+
_ => panic!("Unsupported architecture!"),
80+
};
81+
7682
let registerdumps: &PyList = pregoldenrun_data
77-
.get_item(String::from(arch_str) + "registers")
83+
.get_item(register_table_name)
7884
.unwrap()
7985
.extract()?;
8086
let start: HashMap<String, u64> = config.get_item("start").unwrap().extract()?;

0 commit comments

Comments
 (0)