Skip to content

Commit 88d2765

Browse files
committed
remove the Architecture Handle
1 parent 98a5094 commit 88d2765

19 files changed

+365
-365
lines changed

arch/riscv/src/lib.rs

Lines changed: 26 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ use std::fmt;
99
use std::hash::Hash;
1010
use std::marker::PhantomData;
1111

12+
use binaryninja::architecture::ArchitectureExt;
1213
use binaryninja::relocation::{Relocation, RelocationHandlerExt};
1314
use binaryninja::{
1415
add_optional_plugin_dependency, architecture,
1516
architecture::{
16-
llvm_assemble, Architecture, ArchitectureExt, CoreArchitecture, CustomArchitectureHandle,
17-
ImplicitRegisterExtend, InstructionInfo, LlvmServicesCodeModel, LlvmServicesDialect,
18-
LlvmServicesRelocMode, Register as Reg, RegisterInfo, UnusedFlag, UnusedRegisterStack,
19-
UnusedRegisterStackInfo,
17+
llvm_assemble, Architecture, CoreArchitecture, ImplicitRegisterExtend, InstructionInfo,
18+
LlvmServicesCodeModel, LlvmServicesDialect, LlvmServicesRelocMode, Register as Reg,
19+
RegisterInfo, UnusedFlag, UnusedRegisterStack, UnusedRegisterStackInfo,
2020
},
2121
binaryview::{BinaryView, BinaryViewExt},
2222
callingconvention::{register_calling_convention, CallingConventionBase, ConventionBuilder},
@@ -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

@@ -977,29 +974,20 @@ impl<D: 'static + RiscVDisassembler + Send + Sync> architecture::Architecture fo
977974
Text,
978975
));
979976
} else {
980-
res.push(InstructionTextToken::new(
981-
",",
982-
OperandSeparator,
983-
));
977+
res.push(InstructionTextToken::new(",", OperandSeparator));
984978
res.push(InstructionTextToken::new(" ", Text));
985979
}
986980

987981
match *oper {
988982
Operand::R(r) => {
989983
let reg = self::Register::from(r);
990984

991-
res.push(InstructionTextToken::new(
992-
&reg.name(),
993-
Register,
994-
));
985+
res.push(InstructionTextToken::new(&reg.name(), Register));
995986
}
996987
Operand::F(r) => {
997988
let reg = self::Register::from(r);
998989

999-
res.push(InstructionTextToken::new(
1000-
&reg.name(),
1001-
Register,
1002-
));
990+
res.push(InstructionTextToken::new(&reg.name(), Register));
1003991
}
1004992
Operand::I(i) => {
1005993
match op {
@@ -1032,10 +1020,7 @@ impl<D: 'static + RiscVDisassembler + Send + Sync> architecture::Architecture fo
10321020
Operand::M(i, b) => {
10331021
let reg = self::Register::from(b);
10341022

1035-
res.push(InstructionTextToken::new(
1036-
"",
1037-
BeginMemoryOperand,
1038-
));
1023+
res.push(InstructionTextToken::new("", BeginMemoryOperand));
10391024
res.push(InstructionTextToken::new(
10401025
&if i < 0 {
10411026
format!("-0x{:x}", -i)
@@ -1046,15 +1031,9 @@ impl<D: 'static + RiscVDisassembler + Send + Sync> architecture::Architecture fo
10461031
));
10471032

10481033
res.push(InstructionTextToken::new("(", Brace));
1049-
res.push(InstructionTextToken::new(
1050-
&reg.name(),
1051-
Register,
1052-
));
1034+
res.push(InstructionTextToken::new(&reg.name(), Register));
10531035
res.push(InstructionTextToken::new(")", Brace));
1054-
res.push(InstructionTextToken::new(
1055-
"",
1056-
EndMemoryOperand,
1057-
));
1036+
res.push(InstructionTextToken::new("", EndMemoryOperand));
10581037
}
10591038
Operand::RM(r) => {
10601039
res.push(InstructionTextToken::new(r.name(), Register));
@@ -2140,8 +2119,8 @@ impl<D: 'static + RiscVDisassembler + Send + Sync> architecture::Architecture fo
21402119
true
21412120
}
21422121

2143-
fn handle(&self) -> CustomArchitectureHandle<Self> {
2144-
self.custom_handle
2122+
fn core(&self) -> &'static CoreArchitecture {
2123+
self.handle
21452124
}
21462125
}
21472126

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

28712850
use riscv_dis::{RiscVIMACDisassembler, Rv32GRegs, Rv64GRegs};
2872-
let arch32 =
2873-
architecture::register_architecture("rv32gc", |custom_handle, core_arch| RiscVArch::<
2874-
RiscVIMACDisassembler<Rv32GRegs>,
2875-
> {
2876-
handle: core_arch,
2877-
custom_handle,
2878-
_dis: PhantomData,
2879-
});
2880-
let arch64 =
2881-
architecture::register_architecture("rv64gc", |custom_handle, core_arch| RiscVArch::<
2882-
RiscVIMACDisassembler<Rv64GRegs>,
2883-
> {
2884-
handle: core_arch,
2885-
custom_handle,
2886-
_dis: PhantomData,
2887-
});
2851+
let arch32 = architecture::register_architecture("rv32gc", |core_arch| RiscVArch::<
2852+
RiscVIMACDisassembler<Rv32GRegs>,
2853+
> {
2854+
handle: core_arch,
2855+
_dis: PhantomData,
2856+
});
2857+
let arch64 = architecture::register_architecture("rv64gc", |core_arch| RiscVArch::<
2858+
RiscVIMACDisassembler<Rv64GRegs>,
2859+
> {
2860+
handle: core_arch,
2861+
_dis: PhantomData,
2862+
});
28882863

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use binaryninja::downloadprovider::{DownloadInstanceInputOutputCallbacks, Downlo
3030
use binaryninja::interaction::{MessageBoxButtonResult, MessageBoxButtonSet};
3131
use binaryninja::settings::Settings;
3232
use binaryninja::string::BnString;
33-
use binaryninja::{add_optional_plugin_dependency, interaction, logger, user_directory};
33+
use binaryninja::{interaction, logger, user_directory};
3434
use parser::PDBParserInstance;
3535

3636
/// PDB Parser!!

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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 14 additions & 20 deletions
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)