diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2026-05-19 20:01:42 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2026-05-22 17:52:21 -0400 |
| commit | ea82d201e7efb2065d0cea459bea0fcda1985762 (patch) | |
| tree | fc7494275ddf85e7e68f3c333a79bd3404590dd6 /arch | |
| parent | ede9c92ba6155be37571743df7172aec76dd3c4b (diff) | |
Refactor calling convention Rust API to allow default implementations
Also implements the new calling convention APIs in Rust
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/riscv/src/lib.rs | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/arch/riscv/src/lib.rs b/arch/riscv/src/lib.rs index 3537a082..8504abe6 100644 --- a/arch/riscv/src/lib.rs +++ b/arch/riscv/src/lib.rs @@ -14,7 +14,9 @@ use binaryninja::{ UnusedRegisterStack, }, binary_view::{BinaryView, BinaryViewType}, - calling_convention::{register_calling_convention, CallingConvention, ConventionBuilder}, + calling_convention::{ + register_calling_convention, CallingConvention, ConventionBuilder, CoreCallingConvention, + }, disassembly::{InstructionTextToken, InstructionTextTokenKind}, function::Function, function_recognizer::FunctionRecognizer, @@ -2755,12 +2757,22 @@ impl<D: RiscVDisassembler> AsRef<CoreRelocationHandler> for RiscVELFRelocationHa } struct RiscVCC<D: RiscVDisassembler> { + core: CoreCallingConvention, _dis: PhantomData<D>, } impl<D: RiscVDisassembler> RiscVCC<D> { - fn new() -> Self { - RiscVCC { _dis: PhantomData } + fn new(core: CoreCallingConvention) -> Self { + RiscVCC { + core, + _dis: PhantomData, + } + } +} + +impl<D: RiscVDisassembler> AsRef<CoreCallingConvention> for RiscVCC<D> { + fn as_ref(&self) -> &CoreCallingConvention { + &self.core } } @@ -3087,17 +3099,13 @@ pub extern "C" fn CorePluginInit() -> bool { arch32.register_function_recognizer(RiscVELFPLTRecognizer); arch64.register_function_recognizer(RiscVELFPLTRecognizer); - let cc32 = register_calling_convention( - arch32, - "default", - RiscVCC::<RiscVIMACDisassembler<Rv32GRegs>>::new(), - ); + let cc32 = register_calling_convention(arch32, "default", |core| { + RiscVCC::<RiscVIMACDisassembler<Rv32GRegs>>::new(core) + }); arch32.set_default_calling_convention(&cc32); - let cc64 = register_calling_convention( - arch64, - "default", - RiscVCC::<RiscVIMACDisassembler<Rv64GRegs>>::new(), - ); + let cc64 = register_calling_convention(arch64, "default", |core| { + RiscVCC::<RiscVIMACDisassembler<Rv64GRegs>>::new(core) + }); arch64.set_default_calling_convention(&cc64); if let Some(bvt) = BinaryViewType::by_name("ELF") { |
