From 6d3c63ccd85b90ddda98f1b529660f0e7454bae6 Mon Sep 17 00:00:00 2001 From: angie Date: Sat, 5 Oct 2024 09:53:54 -0600 Subject: [PATCH] Use rabbitizer 2 Co-Authored-By: Luke Street --- Cargo.lock | 185 +++++++++++----------------------- objdiff-core/Cargo.toml | 2 +- objdiff-core/src/arch/mips.rs | 121 ++++++++++++---------- 3 files changed, 123 insertions(+), 185 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 29f6997..86fb307 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -89,7 +89,7 @@ dependencies = [ "ndk", "ndk-context", "ndk-sys 0.6.0+11769913", - "num_enum 0.7.3", + "num_enum", "thiserror 1.0.69", ] @@ -147,7 +147,7 @@ dependencies = [ "proc-macro2", "pulldown-cmark", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -318,7 +318,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -353,7 +353,7 @@ checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -498,7 +498,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -870,7 +870,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn", ] [[package]] @@ -881,7 +881,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -928,7 +928,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -1182,7 +1182,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -1203,7 +1203,7 @@ checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -1214,7 +1214,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -1444,7 +1444,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -1537,7 +1537,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -1618,12 +1618,6 @@ dependencies = [ "xml-rs", ] -[[package]] -name = "glob" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" - [[package]] name = "globset" version = "0.4.15" @@ -2079,7 +2073,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -2187,7 +2181,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -2587,7 +2581,7 @@ dependencies = [ "jni-sys", "log", "ndk-sys 0.6.0+11769913", - "num_enum 0.7.3", + "num_enum", "raw-window-handle", "thiserror 1.0.69", ] @@ -2698,34 +2692,13 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive 0.5.11", -] - [[package]] name = "num_enum" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "num_enum_derive 0.7.3", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", + "num_enum_derive", ] [[package]] @@ -2734,10 +2707,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -3031,7 +3004,7 @@ dependencies = [ "similar", "spin", "strum", - "syn 2.0.96", + "syn", "talc", "tempfile", "time", @@ -3134,7 +3107,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -3310,7 +3283,7 @@ checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -3416,17 +3389,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn 2.0.96", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", + "syn", ] [[package]] @@ -3435,7 +3398,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.22.22", + "toml_edit", ] [[package]] @@ -3479,7 +3442,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.96", + "syn", "tempfile", ] @@ -3493,7 +3456,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -3598,13 +3561,10 @@ dependencies = [ [[package]] name = "rabbitizer" -version = "1.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "676ff0dc2e6bd3f7a42c7b49985d8af5644c4466f819fbc30f916ea474426ed3" +version = "2.0.0-dev0" +source = "git+https://github.com/Decompollaborate/rabbitizer.git?branch=🦀#aa49a93e06904afc66fc730eb5900e51088ee34c" dependencies = [ - "cc", - "glob", - "num_enum 0.5.11", + "bitflags 2.8.0", ] [[package]] @@ -4085,7 +4045,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -4108,7 +4068,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -4340,7 +4300,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.96", + "syn", ] [[package]] @@ -4358,17 +4318,6 @@ dependencies = [ "is_ci", ] -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.96" @@ -4397,7 +4346,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -4474,7 +4423,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -4485,7 +4434,7 @@ checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -4613,7 +4562,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.22", + "toml_edit", ] [[package]] @@ -4625,17 +4574,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.22" @@ -4646,7 +4584,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.24", + "winnow", ] [[package]] @@ -4695,7 +4633,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -4960,7 +4898,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn", "wasm-bindgen-shared", ] @@ -4995,7 +4933,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5372,7 +5310,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -5383,7 +5321,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -5696,15 +5634,6 @@ dependencies = [ "xkbcommon-dl", ] -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.6.24" @@ -5773,7 +5702,7 @@ dependencies = [ "heck", "indexmap", "prettyplease", - "syn 2.0.96", + "syn", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -5789,7 +5718,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.96", + "syn", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -5975,7 +5904,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", "synstructure", ] @@ -6008,7 +5937,7 @@ dependencies = [ "tracing", "uds_windows", "windows-sys 0.59.0", - "winnow 0.6.24", + "winnow", "xdg-home", "zbus_macros", "zbus_names", @@ -6021,10 +5950,10 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3685b5c81fce630efc3e143a4ded235b107f1b1cdf186c3f115529e5e5ae4265" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.96", + "syn", "zbus_names", "zvariant", "zvariant_utils", @@ -6038,7 +5967,7 @@ checksum = "519629a3f80976d89c575895b05677cbc45eaf9f70d62a364d819ba646409cc8" dependencies = [ "serde", "static_assertions", - "winnow 0.6.24", + "winnow", "zvariant", ] @@ -6060,7 +5989,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -6080,7 +6009,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", "synstructure", ] @@ -6109,7 +6038,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn", ] [[package]] @@ -6123,7 +6052,7 @@ dependencies = [ "serde", "static_assertions", "url", - "winnow 0.6.24", + "winnow", "zvariant_derive", "zvariant_utils", ] @@ -6134,10 +6063,10 @@ version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "573a8dd76961957108b10f7a45bac6ab1ea3e9b7fe01aff88325dc57bb8f5c8b" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.96", + "syn", "zvariant_utils", ] @@ -6151,6 +6080,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn 2.0.96", - "winnow 0.6.24", + "syn", + "winnow", ] diff --git a/objdiff-core/Cargo.toml b/objdiff-core/Cargo.toml index 11a0a49..3614c78 100644 --- a/objdiff-core/Cargo.toml +++ b/objdiff-core/Cargo.toml @@ -155,7 +155,7 @@ cwextab = { version = "1.0", optional = true, git = "https://github.com/encounte ppc750cl = { version = "0.3", optional = true } # mips -rabbitizer = { version = "1.12", optional = true } +rabbitizer = { git = "https://github.com/Decompollaborate/rabbitizer.git", branch = "🦀", default-features = false, optional = true } # x86 cpp_demangle = { version = "0.4", default-features = false, features = ["alloc"], optional = true } diff --git a/objdiff-core/src/arch/mips.rs b/objdiff-core/src/arch/mips.rs index c2fb1b0..ebe7aa1 100644 --- a/objdiff-core/src/arch/mips.rs +++ b/objdiff-core/src/arch/mips.rs @@ -1,12 +1,16 @@ -use alloc::{borrow::Cow, collections::BTreeMap, format, vec::Vec}; -use std::sync::Mutex; +use alloc::{borrow::Cow, collections::BTreeMap, format, string::ToString, vec::Vec}; -use anyhow::{anyhow, bail, Result}; +use anyhow::{bail, Result}; use object::{ elf, Endian, Endianness, File, FileFlags, Object, ObjectSection, ObjectSymbol, Relocation, RelocationFlags, RelocationTarget, }; -use rabbitizer::{config, Abi, InstrCategory, Instruction, OperandType}; +use rabbitizer::{ + abi::Abi, + operands::{ValuedOperand, IU16}, + registers_meta::Register, + Instruction, InstructionDisplayFlags, InstructionFlags, IsaExtension, IsaVersion, Vram, +}; use crate::{ arch::{ObjArch, ProcessCodeResult}, @@ -14,18 +18,10 @@ use crate::{ obj::{ObjIns, ObjInsArg, ObjInsArgValue, ObjReloc, ObjSection}, }; -static RABBITIZER_MUTEX: Mutex<()> = Mutex::new(()); - -fn configure_rabbitizer(abi: Abi) { - unsafe { - config::RabbitizerConfig_Cfg.reg_names.fpr_abi_names = abi; - } -} - pub struct ObjArchMips { pub endianness: Endianness, pub abi: Abi, - pub instr_category: InstrCategory, + pub isa_extension: Option, pub ri_gp_value: i32, } @@ -39,8 +35,8 @@ const R_MIPS15_S3: u32 = 119; impl ObjArchMips { pub fn new(object: &File) -> Result { - let mut abi = Abi::NUMERIC; - let mut instr_category = InstrCategory::CPU; + let mut abi = Abi::O32; + let mut isa_extension = None; match object.flags() { FileFlags::None => {} FileFlags::Elf { e_flags, .. } => { @@ -51,14 +47,14 @@ impl ObjArchMips { if e_flags & elf::EF_MIPS_ABI2 != 0 { Abi::N32 } else { - Abi::NUMERIC + Abi::O32 } } }; - instr_category = match e_flags & EF_MIPS_MACH { - EF_MIPS_MACH_ALLEGREX => InstrCategory::R4000ALLEGREX, - EF_MIPS_MACH_5900 => InstrCategory::R5900, - _ => InstrCategory::CPU, + isa_extension = match e_flags & EF_MIPS_MACH { + EF_MIPS_MACH_ALLEGREX => Some(IsaExtension::R4000ALLEGREX), + EF_MIPS_MACH_5900 => Some(IsaExtension::R5900), + _ => None, }; } _ => bail!("Unsupported MIPS file flags"), @@ -75,7 +71,7 @@ impl ObjArchMips { .map(|bytes| object.endianness().read_i32_bytes(bytes)) .unwrap_or(0); - Ok(Self { endianness: object.endianness(), abi, instr_category, ri_gp_value }) + Ok(Self { endianness: object.endianness(), abi, isa_extension, ri_gp_value }) } } @@ -89,21 +85,25 @@ impl ObjArch for ObjArchMips { line_info: &BTreeMap, config: &DiffObjConfig, ) -> Result { - let _guard = RABBITIZER_MUTEX.lock().map_err(|e| anyhow!("Failed to lock mutex: {e}"))?; - configure_rabbitizer(match config.mips_abi { + let isa_extension = match config.mips_instr_category { + MipsInstrCategory::Auto => self.isa_extension, + MipsInstrCategory::Cpu => None, + MipsInstrCategory::Rsp => Some(IsaExtension::RSP), + MipsInstrCategory::R3000gte => Some(IsaExtension::R3000GTE), + MipsInstrCategory::R4000allegrex => Some(IsaExtension::R4000ALLEGREX), + MipsInstrCategory::R5900 => Some(IsaExtension::R5900), + }; + let instruction_flags = match isa_extension { + Some(extension) => InstructionFlags::new_extension(extension), + None => InstructionFlags::new_isa(IsaVersion::MIPS_III, None), + } + .with_abi(match config.mips_abi { MipsAbi::Auto => self.abi, MipsAbi::O32 => Abi::O32, MipsAbi::N32 => Abi::N32, MipsAbi::N64 => Abi::N64, }); - let instr_category = match config.mips_instr_category { - MipsInstrCategory::Auto => self.instr_category, - MipsInstrCategory::Cpu => InstrCategory::CPU, - MipsInstrCategory::Rsp => InstrCategory::RSP, - MipsInstrCategory::R3000gte => InstrCategory::R3000GTE, - MipsInstrCategory::R4000allegrex => InstrCategory::R4000ALLEGREX, - MipsInstrCategory::R5900 => InstrCategory::R5900, - }; + let display_flags = InstructionDisplayFlags::default().with_unknown_instr_comment(false); let start_address = address; let end_address = address + code.len() as u64; @@ -114,32 +114,35 @@ impl ObjArch for ObjArchMips { for chunk in code.chunks_exact(4) { let reloc = relocations.iter().find(|r| (r.address as u32 & !3) == cur_addr); let code = self.endianness.read_u32_bytes(chunk.try_into()?); - let instruction = Instruction::new(code, cur_addr, instr_category); + let instruction = Instruction::new(code, Vram::new(cur_addr), instruction_flags); - let formatted = instruction.disassemble(None, 0); - let op = instruction.unique_id as u16; + let formatted = instruction.display(&display_flags, None::<&str>, 0).to_string(); + let op = instruction.opcode() as u16; ops.push(op); - let mnemonic = instruction.opcode_name(); - let is_branch = instruction.is_branch(); - let branch_offset = instruction.branch_offset(); - let mut branch_dest = if is_branch { - cur_addr.checked_add_signed(branch_offset).map(|a| a as u64) - } else { - None - }; + let mnemonic = instruction.opcode().name(); + let mut branch_dest = instruction.get_branch_offset_generic().map(|a| a.inner() as u64); - let operands = instruction.get_operands_slice(); - let mut args = Vec::with_capacity(operands.len() + 1); - for (idx, op) in operands.iter().enumerate() { + let operands = instruction.valued_operands_iter(); + + let mut args = Vec::with_capacity(6); + for (idx, op) in operands.enumerate() { if idx > 0 { args.push(ObjInsArg::PlainText(config.separator().into())); } match op { - OperandType::cpu_immediate - | OperandType::cpu_label - | OperandType::cpu_branch_target_label => { + ValuedOperand::core_immediate(imm) => { + if let Some(reloc) = reloc { + push_reloc(&mut args, reloc)?; + } else { + args.push(ObjInsArg::Arg(match imm { + IU16::Integer(s) => ObjInsArgValue::Signed(s as i64), + IU16::Unsigned(u) => ObjInsArgValue::Unsigned(u as u64), + })); + } + } + ValuedOperand::core_label(..) | ValuedOperand::core_branch_target_label(..) => { if let Some(reloc) = reloc { // If the relocation target is within the current function, we can // convert it into a relative branch target. Note that we check @@ -161,25 +164,29 @@ impl ObjArch for ObjArchMips { args.push(ObjInsArg::BranchDest(branch_dest)); } else { args.push(ObjInsArg::Arg(ObjInsArgValue::Opaque( - op.disassemble(&instruction, None).into(), + op.display(&instruction, &display_flags, None::<&str>) + .to_string() + .into(), ))); } } - OperandType::cpu_immediate_base => { + ValuedOperand::core_immediate_base(imm, base) => { if let Some(reloc) = reloc { push_reloc(&mut args, reloc)?; } else { - args.push(ObjInsArg::Arg(ObjInsArgValue::Opaque( - OperandType::cpu_immediate.disassemble(&instruction, None).into(), - ))); + args.push(ObjInsArg::Arg(match imm { + IU16::Integer(s) => ObjInsArgValue::Signed(s as i64), + IU16::Unsigned(u) => ObjInsArgValue::Unsigned(u as u64), + })); } args.push(ObjInsArg::PlainText("(".into())); args.push(ObjInsArg::Arg(ObjInsArgValue::Opaque( - OperandType::cpu_rs.disassemble(&instruction, None).into(), + base.either_name(instruction.flags().abi(), display_flags.named_gpr()) + .into(), ))); args.push(ObjInsArg::PlainText(")".into())); } - // OperandType::r5900_immediate15 => match reloc { + // ValuedOperand::r5900_immediate15(..) => match reloc { // Some(reloc) // if reloc.flags == RelocationFlags::Elf { r_type: R_MIPS15_S3 } => // { @@ -193,7 +200,9 @@ impl ObjArch for ObjArchMips { // }, _ => { args.push(ObjInsArg::Arg(ObjInsArgValue::Opaque( - op.disassemble(&instruction, None).into(), + op.display(&instruction, &display_flags, None::<&str>) + .to_string() + .into(), ))); } }