Skip to content

Commit ba95ecc

Browse files
committed
remove the Architecture Handle
1 parent 7a52185 commit ba95ecc

21 files changed

+539
-493
lines changed

Diff for: arch/riscv/src/lib.rs

+16-23
Original file line numberDiff line numberDiff line change
@@ -624,14 +624,11 @@ impl<D: RiscVDisassembler> architecture::Intrinsic for RiscVIntrinsic<D> {
624624
}
625625

626626
struct RiscVArch<D: 'static + RiscVDisassembler + Send + Sync> {
627-
handle: CoreArchitecture,
628-
custom_handle: CustomArchitectureHandle<RiscVArch<D>>,
627+
handle: &'static CoreArchitecture,
629628
_dis: PhantomData<D>,
630629
}
631630

632631
impl<D: 'static + RiscVDisassembler + Send + Sync> architecture::Architecture for RiscVArch<D> {
633-
type Handle = CustomArchitectureHandle<Self>;
634-
635632
type RegisterInfo = Register<D>;
636633
type Register = Register<D>;
637634
type RegisterStackInfo = UnusedRegisterStackInfo<Self::Register>;
@@ -674,7 +671,7 @@ impl<D: 'static + RiscVDisassembler + Send + Sync> architecture::Architecture fo
674671
self.max_instr_len()
675672
}
676673

677-
fn associated_arch_by_addr(&self, _addr: &mut u64) -> CoreArchitecture {
674+
fn associated_arch_by_addr(&self, _addr: &mut u64) -> &'static CoreArchitecture {
678675
self.handle
679676
}
680677

@@ -2140,8 +2137,8 @@ impl<D: 'static + RiscVDisassembler + Send + Sync> architecture::Architecture fo
21402137
true
21412138
}
21422139

2143-
fn handle(&self) -> CustomArchitectureHandle<Self> {
2144-
self.custom_handle
2140+
fn core(&self) -> &'static CoreArchitecture {
2141+
self.handle
21452142
}
21462143
}
21472144

@@ -2868,22 +2865,18 @@ pub extern "C" fn CorePluginInit() -> bool {
28682865
binaryninja::logger::init(log::LevelFilter::Trace).expect("Failed to set up logging");
28692866

28702867
use riscv_dis::{RiscVIMACDisassembler, Rv32GRegs, Rv64GRegs};
2871-
let arch32 =
2872-
architecture::register_architecture("rv32gc", |custom_handle, core_arch| RiscVArch::<
2873-
RiscVIMACDisassembler<Rv32GRegs>,
2874-
> {
2875-
handle: core_arch,
2876-
custom_handle,
2877-
_dis: PhantomData,
2878-
});
2879-
let arch64 =
2880-
architecture::register_architecture("rv64gc", |custom_handle, core_arch| RiscVArch::<
2881-
RiscVIMACDisassembler<Rv64GRegs>,
2882-
> {
2883-
handle: core_arch,
2884-
custom_handle,
2885-
_dis: PhantomData,
2886-
});
2868+
let arch32 = architecture::register_architecture("rv32gc", |core_arch| RiscVArch::<
2869+
RiscVIMACDisassembler<Rv32GRegs>,
2870+
> {
2871+
handle: core_arch,
2872+
_dis: PhantomData,
2873+
});
2874+
let arch64 = architecture::register_architecture("rv64gc", |core_arch| RiscVArch::<
2875+
RiscVIMACDisassembler<Rv64GRegs>,
2876+
> {
2877+
handle: core_arch,
2878+
_dis: PhantomData,
2879+
});
28872880

28882881
arch32.register_relocation_handler("ELF", |custom_handle, core_handler| {
28892882
RiscVELFRelocationHandler::<RiscVIMACDisassembler<Rv32GRegs>> {

Diff for: rust/examples/pdb-ng/src/parser.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub struct PDBParserInstance<'a, S: Source<'a> + 'a> {
4444
/// Parent binary view (usually during BinaryView::Finalize)
4545
pub(crate) bv: &'a BinaryView,
4646
/// Default arch of self.bv
47-
pub(crate) arch: CoreArchitecture,
47+
pub(crate) arch: &'static CoreArchitecture,
4848
/// Default calling convention for self.arch
4949
pub(crate) default_cc: Ref<CallingConvention<CoreArchitecture>>,
5050
/// Thiscall calling convention for self.bv, or default_cc if we can't find one

Diff for: rust/examples/pdb-ng/src/type_parser.rs

+12-12
Original file line numberDiff line numberDiff line change
@@ -700,31 +700,31 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
700700
// TODO: Pointer suffix is not exposed
701701
match data.indirection {
702702
Some(Indirection::Near16) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
703-
&self.arch,
703+
self.arch,
704704
base.as_ref(),
705705
))))),
706706
Some(Indirection::Far16) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
707-
&self.arch,
707+
self.arch,
708708
base.as_ref(),
709709
))))),
710710
Some(Indirection::Huge16) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
711-
&self.arch,
711+
self.arch,
712712
base.as_ref(),
713713
))))),
714714
Some(Indirection::Near32) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
715-
&self.arch,
715+
self.arch,
716716
base.as_ref(),
717717
))))),
718718
Some(Indirection::Far32) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
719-
&self.arch,
719+
self.arch,
720720
base.as_ref(),
721721
))))),
722722
Some(Indirection::Near64) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
723-
&self.arch,
723+
self.arch,
724724
base.as_ref(),
725725
))))),
726726
Some(Indirection::Near128) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
727-
&self.arch,
727+
self.arch,
728728
base.as_ref(),
729729
))))),
730730
None => Ok(Some(Box::new(ParsedType::Bare(base)))),
@@ -1102,7 +1102,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
11021102
for (offset, (name, method)) in virt_methods {
11031103
vt.insert(
11041104
&Conf::new(
1105-
Type::pointer(&self.arch, &Conf::new(method.method_type, max_confidence())),
1105+
Type::pointer(self.arch, &Conf::new(method.method_type, max_confidence())),
11061106
max_confidence(),
11071107
),
11081108
&name,
@@ -1127,7 +1127,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
11271127
self.named_types.insert(vt_name.clone(), vt_type.clone());
11281128

11291129
let vt_pointer = Type::pointer(
1130-
&self.arch,
1130+
self.arch,
11311131
&Conf::new(
11321132
Type::named_type_from_type(&QualifiedName::from(vt_name), vt_type.as_ref()),
11331133
max_confidence(),
@@ -1245,7 +1245,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
12451245
// Return UDT??
12461246
// This probably means the return value got pushed to the stack
12471247
fancy_return_type = Type::pointer(
1248-
&self.arch,
1248+
self.arch,
12491249
&Conf::new(return_type.clone(), max_confidence()),
12501250
);
12511251
fancy_arguments.insert(
@@ -1528,7 +1528,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
15281528
if return_stacky {
15291529
// Stack return via a pointer in the first parameter
15301530
fancy_return_type =
1531-
Conf::new(Type::pointer(&self.arch, &return_type), max_confidence());
1531+
Conf::new(Type::pointer(self.arch, &return_type), max_confidence());
15321532
fancy_arguments.insert(
15331533
0,
15341534
FunctionParameter::new(fancy_return_type.clone(), "__return".to_string(), None),
@@ -1583,7 +1583,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
15831583

15841584
if let Some(base) = base {
15851585
Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
1586-
&self.arch,
1586+
self.arch,
15871587
base.as_ref(),
15881588
)))))
15891589
} else {

0 commit comments

Comments
 (0)