Skip to content

Commit 238089d

Browse files
committed
remove the Architecture Handle
1 parent 71a1c7e commit 238089d

18 files changed

+353
-334
lines changed

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>> {

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

rust/examples/pdb-ng/src/type_parser.rs

+14-20
Original file line numberDiff line numberDiff line change
@@ -673,31 +673,31 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
673673
// TODO: Pointer suffix is not exposed
674674
match data.indirection {
675675
Some(Indirection::Near16) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
676-
&self.arch,
676+
self.arch,
677677
base.as_ref(),
678678
))))),
679679
Some(Indirection::Far16) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
680-
&self.arch,
680+
self.arch,
681681
base.as_ref(),
682682
))))),
683683
Some(Indirection::Huge16) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
684-
&self.arch,
684+
self.arch,
685685
base.as_ref(),
686686
))))),
687687
Some(Indirection::Near32) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
688-
&self.arch,
688+
self.arch,
689689
base.as_ref(),
690690
))))),
691691
Some(Indirection::Far32) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
692-
&self.arch,
692+
self.arch,
693693
base.as_ref(),
694694
))))),
695695
Some(Indirection::Near64) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
696-
&self.arch,
696+
self.arch,
697697
base.as_ref(),
698698
))))),
699699
Some(Indirection::Near128) => Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
700-
&self.arch,
700+
self.arch,
701701
base.as_ref(),
702702
))))),
703703
None => Ok(Some(Box::new(ParsedType::Bare(base)))),
@@ -843,10 +843,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
843843
Type::structure(builder.finalize().as_ref()),
844844
max_confidence(),
845845
),
846-
name: bitfield_name(
847-
last_bitfield_offset,
848-
last_bitfield_idx,
849-
),
846+
name: bitfield_name(last_bitfield_offset, last_bitfield_idx),
850847
offset: last_bitfield_offset,
851848
access: MemberAccess::PublicAccess,
852849
scope: MemberScope::NoScope,
@@ -880,10 +877,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
880877
Type::structure(builder.finalize().as_ref()),
881878
max_confidence(),
882879
),
883-
name: bitfield_name(
884-
last_bitfield_offset,
885-
last_bitfield_idx,
886-
),
880+
name: bitfield_name(last_bitfield_offset, last_bitfield_idx),
887881
offset: last_bitfield_offset,
888882
access: MemberAccess::PublicAccess,
889883
scope: MemberScope::NoScope,
@@ -1081,7 +1075,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
10811075
for (offset, (name, method)) in virt_methods {
10821076
vt.insert(
10831077
&Conf::new(
1084-
Type::pointer(&self.arch, &Conf::new(method.method_type, max_confidence())),
1078+
Type::pointer(self.arch, &Conf::new(method.method_type, max_confidence())),
10851079
max_confidence(),
10861080
),
10871081
&name,
@@ -1106,7 +1100,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
11061100
self.named_types.insert(vt_name.clone(), vt_type.clone());
11071101

11081102
let vt_pointer = Type::pointer(
1109-
&self.arch,
1103+
self.arch,
11101104
&Conf::new(
11111105
Type::named_type_from_type(&QualifiedName::from(vt_name), vt_type.as_ref()),
11121106
max_confidence(),
@@ -1224,7 +1218,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
12241218
// Return UDT??
12251219
// This probably means the return value got pushed to the stack
12261220
fancy_return_type = Type::pointer(
1227-
&self.arch,
1221+
self.arch,
12281222
&Conf::new(return_type.clone(), max_confidence()),
12291223
);
12301224
fancy_arguments.insert(
@@ -1507,7 +1501,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
15071501
if return_stacky {
15081502
// Stack return via a pointer in the first parameter
15091503
fancy_return_type =
1510-
Conf::new(Type::pointer(&self.arch, &return_type), max_confidence());
1504+
Conf::new(Type::pointer(self.arch, &return_type), max_confidence());
15111505
fancy_arguments.insert(
15121506
0,
15131507
FunctionParameter::new(fancy_return_type.clone(), "__return".to_string(), None),
@@ -1562,7 +1556,7 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
15621556

15631557
if let Some(base) = base {
15641558
Ok(Some(Box::new(ParsedType::Bare(Type::pointer(
1565-
&self.arch,
1559+
self.arch,
15661560
base.as_ref(),
15671561
)))))
15681562
} else {

0 commit comments

Comments
 (0)