Skip to content

Commit 807526d

Browse files
committed
More rust cleanup
- Fixed MANY memory leaks (most due to QualifiedName) - Made StructureBuilder more builder and less structure - Fixed CMakeLists.txt that were globbing entire api, resulting in 100 second slowdown on cmake generation - Added more Debug impl's - Added some more tests - Fixed TypeParserResult UB - Moved the From impls to blank impl for clarity, we have multiple different variants of core to rust for some structures, it should be explicit which one you are choosing. - PossibleValueSet should now be able to allocate so we can go from rust to core with those variants that require allocation - Misc doc code formatting
1 parent 12fe44d commit 807526d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1841
-1513
lines changed

arch/riscv/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ impl<D: 'static + RiscVDisassembler> PartialEq for Register<D> {
264264

265265
impl<D: 'static + RiscVDisassembler> Eq for Register<D> {}
266266

267-
impl<D: 'static + RiscVDisassembler + Send + Sync> fmt::Debug for Register<D> {
267+
impl<D: 'static + RiscVDisassembler> fmt::Debug for Register<D> {
268268
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
269269
f.write_str(self.name().as_ref())
270270
}

plugins/dwarf/dwarf_export/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ file(GLOB PLUGIN_SOURCES CONFIGURE_DEPENDS
99
${PROJECT_SOURCE_DIR}/../shared/src/*.rs)
1010

1111
file(GLOB_RECURSE API_SOURCES CONFIGURE_DEPENDS
12-
${PROJECT_SOURCE_DIR}/../../../../binaryninjacore.h
13-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore-sys/build.rs
14-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore-sys/Cargo.toml
15-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore-sys/src/*
16-
${PROJECT_SOURCE_DIR}/../../../Cargo.toml
17-
${PROJECT_SOURCE_DIR}/../../../src/*.rs)
12+
${PROJECT_SOURCE_DIR}/../../binaryninjacore.h
13+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/build.rs
14+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/Cargo.toml
15+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/src/*
16+
${PROJECT_SOURCE_DIR}/../../rust/Cargo.toml
17+
${PROJECT_SOURCE_DIR}/../../rust/src/*.rs)
1818

1919
if(CMAKE_BUILD_TYPE MATCHES Debug)
2020
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/debug)

plugins/dwarf/dwarf_import/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ file(GLOB PLUGIN_SOURCES CONFIGURE_DEPENDS
99
${PROJECT_SOURCE_DIR}/../shared/src/*.rs)
1010

1111
file(GLOB_RECURSE API_SOURCES CONFIGURE_DEPENDS
12-
${PROJECT_SOURCE_DIR}/../../../../binaryninjacore.h
13-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore-sys/build.rs
14-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore-sys/Cargo.toml
15-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore-sys/src/*
16-
${PROJECT_SOURCE_DIR}/../../../Cargo.toml
17-
${PROJECT_SOURCE_DIR}/../../../src/*.rs)
12+
${PROJECT_SOURCE_DIR}/../../binaryninjacore.h
13+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/build.rs
14+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/Cargo.toml
15+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/src/*
16+
${PROJECT_SOURCE_DIR}/../../rust/Cargo.toml
17+
${PROJECT_SOURCE_DIR}/../../rust/src/*.rs)
1818

1919
if(CMAKE_BUILD_TYPE MATCHES Debug)
2020
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/debug)

plugins/dwarf/dwarf_import/src/die_handlers.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ pub(crate) fn handle_function<R: ReaderType>(
306306
if let Some(name) = debug_info_builder_context.get_name(dwarf, unit, entry) {
307307
let ntr = Type::named_type_from_type(
308308
&name,
309-
&Type::function(return_type.as_ref(), &[], false),
309+
&Type::function(return_type.as_ref(), vec![], false),
310310
);
311311
debug_info_builder.add_type(
312312
get_uid(dwarf, unit, entry),
@@ -350,7 +350,7 @@ pub(crate) fn handle_function<R: ReaderType>(
350350

351351
Some(Type::function(
352352
return_type.as_ref(),
353-
&parameters,
353+
parameters,
354354
variable_arguments,
355355
))
356356
}

plugins/dwarf/dwarf_import/src/dwarfdebuginfo.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ impl DebugInfoBuilder {
563563
})
564564
.collect();
565565

566-
Type::function(&return_type, &parameters, function.variable_arguments)
566+
Type::function(&return_type, parameters, function.variable_arguments)
567567
}
568568

569569
fn commit_functions(&self, debug_info: &mut DebugInfo) {

plugins/dwarf/dwarf_import/src/types.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,11 @@ fn do_structure_parse<R: ReaderType>(
132132

133133
// Create structure with proper size
134134
let size = get_size_as_u64(entry).unwrap_or(0);
135-
let structure_builder: StructureBuilder = StructureBuilder::new();
135+
let mut structure_builder = StructureBuilder::new();
136136
structure_builder
137-
.set_packed(true)
138-
.set_width(size)
139-
.set_structure_type(structure_type);
137+
.packed(true)
138+
.width(size)
139+
.structure_type(structure_type);
140140

141141
// This reference type will be used by any children to grab while we're still building this type
142142
// it will also be how any other types refer to this struct

plugins/idb_import/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ file(GLOB_RECURSE PLUGIN_SOURCES CONFIGURE_DEPENDS
77
${PROJECT_SOURCE_DIR}/src/*.rs)
88

99
file(GLOB_RECURSE API_SOURCES CONFIGURE_DEPENDS
10-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore.h
11-
${PROJECT_SOURCE_DIR}/../../binaryninjacore-sys/build.rs
12-
${PROJECT_SOURCE_DIR}/../../binaryninjacore-sys/Cargo.toml
13-
${PROJECT_SOURCE_DIR}/../../binaryninjacore-sys/src/*
14-
${PROJECT_SOURCE_DIR}/../../Cargo.toml
15-
${PROJECT_SOURCE_DIR}/../../src/*.rs)
10+
${PROJECT_SOURCE_DIR}/../../binaryninjacore.h
11+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/build.rs
12+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/Cargo.toml
13+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/src/*
14+
${PROJECT_SOURCE_DIR}/../../rust/Cargo.toml
15+
${PROJECT_SOURCE_DIR}/../../rust/src/*.rs)
1616

1717
if(CMAKE_BUILD_TYPE MATCHES Debug)
1818
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/debug)

plugins/idb_import/src/types.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
251251
bn_args.push(FunctionParameter::new(arg, name, loc));
252252
}
253253

254-
let ty = Type::function(&return_ty, &bn_args, false);
254+
let ty = Type::function(&return_ty, bn_args, false);
255255
if is_partial {
256256
let error = (errors.ret.is_some() || !errors.args.is_empty())
257257
.then(|| BnTypeError::Function(errors));
@@ -284,7 +284,7 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
284284
&self,
285285
offset: usize,
286286
members_slice: &[TILStructMember],
287-
struct_builder: &StructureBuilder,
287+
struct_builder: &mut StructureBuilder,
288288
) {
289289
if members_slice.is_empty() {
290290
unreachable!()
@@ -301,7 +301,7 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
301301
let mut current_field_bits: u32 = first_field.width.into();
302302
let mut start_idx = 0;
303303

304-
let create_field = |start_idx, i, bytes| {
304+
let mut create_field = |start_idx, i, bytes| {
305305
let name = if start_idx == i - 1 {
306306
let member: &TILStructMember = &members_slice[i - 1];
307307
member
@@ -354,8 +354,8 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
354354
return TranslateTypeResult::Translated(Type::void());
355355
}
356356
let mut is_partial = false;
357-
let structure = StructureBuilder::new();
358-
structure.set_alignment(effective_alignment.into());
357+
let mut structure = StructureBuilder::new();
358+
structure.alignment(effective_alignment.into());
359359

360360
let mut errors = vec![];
361361
let mut first_bitfield_seq = None;
@@ -372,7 +372,7 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
372372
(_, Some(start_idx)) => {
373373
first_bitfield_seq = None;
374374
let members_bitrange = &members[start_idx..i];
375-
self.condensate_bitfields_from_struct(start_idx, members_bitrange, &structure);
375+
self.condensate_bitfields_from_struct(start_idx, members_bitrange, &mut structure);
376376
}
377377

378378
(_, None) => {}
@@ -402,7 +402,7 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
402402
}
403403
if let Some(start_idx) = first_bitfield_seq {
404404
let members_bitrange = &members[start_idx..];
405-
self.condensate_bitfields_from_struct(start_idx, members_bitrange, &structure);
405+
self.condensate_bitfields_from_struct(start_idx, members_bitrange, &mut structure);
406406
}
407407
let bn_ty = Type::structure(&structure.finalize());
408408
if is_partial {
@@ -420,8 +420,8 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {
420420
_effective_alignment: u16,
421421
) -> TranslateTypeResult {
422422
let mut is_partial = false;
423-
let structure = StructureBuilder::new();
424-
structure.set_structure_type(StructureType::UnionStructureType);
423+
let mut structure = StructureBuilder::new();
424+
structure.structure_type(StructureType::UnionStructureType);
425425
let mut errors = vec![];
426426
for (i, (member_name, member_type)) in members.iter().enumerate() {
427427
// bitfields can be translated into complete fields

plugins/pdb-ng/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ file(GLOB PLUGIN_SOURCES CONFIGURE_DEPENDS
77
${PROJECT_SOURCE_DIR}/src/*.rs)
88

99
file(GLOB_RECURSE API_SOURCES CONFIGURE_DEPENDS
10-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore.h
11-
${PROJECT_SOURCE_DIR}/../../binaryninjacore-sys/build.rs
12-
${PROJECT_SOURCE_DIR}/../../binaryninjacore-sys/Cargo.toml
13-
${PROJECT_SOURCE_DIR}/../../binaryninjacore-sys/src/*
14-
${PROJECT_SOURCE_DIR}/../../Cargo.toml
15-
${PROJECT_SOURCE_DIR}/../../src/*.rs)
10+
${PROJECT_SOURCE_DIR}/../../binaryninjacore.h
11+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/build.rs
12+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/Cargo.toml
13+
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/src/*
14+
${PROJECT_SOURCE_DIR}/../../rust/Cargo.toml
15+
${PROJECT_SOURCE_DIR}/../../rust/src/*.rs)
1616

1717
if(CMAKE_BUILD_TYPE MATCHES Debug)
1818
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/debug)

plugins/pdb-ng/src/parser.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -407,21 +407,21 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
407407
NamedTypeReferenceClass::ClassNamedTypeClass
408408
| NamedTypeReferenceClass::StructNamedTypeClass
409409
| NamedTypeReferenceClass::UnionNamedTypeClass => {
410-
let structure = StructureBuilder::new();
410+
let mut structure = StructureBuilder::new();
411411
match class {
412412
NamedTypeReferenceClass::ClassNamedTypeClass => {
413-
structure.set_structure_type(StructureType::ClassStructureType);
413+
structure.structure_type(StructureType::ClassStructureType);
414414
}
415415
NamedTypeReferenceClass::StructNamedTypeClass => {
416-
structure.set_structure_type(StructureType::StructStructureType);
416+
structure.structure_type(StructureType::StructStructureType);
417417
}
418418
NamedTypeReferenceClass::UnionNamedTypeClass => {
419-
structure.set_structure_type(StructureType::UnionStructureType);
419+
structure.structure_type(StructureType::UnionStructureType);
420420
}
421421
_ => {}
422422
}
423-
structure.set_width(1);
424-
structure.set_alignment(1);
423+
structure.width(1);
424+
structure.alignment(1);
425425

426426
self.debug_info.add_type(
427427
&name,

0 commit comments

Comments
 (0)