summaryrefslogtreecommitdiff
path: root/rust/examples/dwarf/dwarf_import/src/lib.rs
diff options
context:
space:
mode:
authorKyleMiles <krm504@nyu.edu>2023-08-22 13:01:09 -0400
committerKyleMiles <krm504@nyu.edu>2023-08-22 13:01:09 -0400
commit5b73fb82d272aa32ff124a69e96579679e7d3580 (patch)
tree182844e264b4c9ae5727a9a1c86aa7bf0fd462aa /rust/examples/dwarf/dwarf_import/src/lib.rs
parent02ea8d7309a0c0777ac8a07bfc1e0fd497e9f5f5 (diff)
DWARF Import : Improved Cross-Compilation-Unit Handling
Diffstat (limited to 'rust/examples/dwarf/dwarf_import/src/lib.rs')
-rw-r--r--rust/examples/dwarf/dwarf_import/src/lib.rs18
1 files changed, 8 insertions, 10 deletions
diff --git a/rust/examples/dwarf/dwarf_import/src/lib.rs b/rust/examples/dwarf/dwarf_import/src/lib.rs
index 69fe42aa..4a0d5a97 100644
--- a/rust/examples/dwarf/dwarf_import/src/lib.rs
+++ b/rust/examples/dwarf/dwarf_import/src/lib.rs
@@ -20,7 +20,7 @@ mod types;
use crate::dwarfdebuginfo::DebugInfoBuilder;
use crate::functions::parse_function_entry;
-use crate::helpers::{get_name, get_uid};
+use crate::helpers::{get_attr_die, get_name, get_uid};
use crate::types::parse_data_variable;
use binaryninja::{
@@ -33,10 +33,7 @@ use dwarfreader::{
create_section_reader, get_endian, is_dwo_dwarf, is_non_dwo_dwarf, is_raw_dwo_dwarf,
};
-use gimli::{
- constants, AttributeValue::UnitRef, DebuggingInformationEntry, Dwarf, DwarfFileType, Reader,
- Unit,
-};
+use gimli::{constants, DebuggingInformationEntry, Dwarf, DwarfFileType, Reader, SectionId, Unit};
use log::LevelFilter;
use std::ffi::CString;
@@ -78,13 +75,14 @@ fn recover_names<R: Reader<Offset = usize>>(
) {
if let Some(namespace_qualifier) = get_name(dwarf, unit, entry) {
namespace_qualifiers.push((depth, namespace_qualifier));
- } else if let Ok(Some(UnitRef(offset))) =
- entry.attr_value(constants::DW_AT_extension)
+ } else if let Some((entry_unit, entry_offset)) =
+ get_attr_die(dwarf, unit, entry, constants::DW_AT_extension)
{
+ let entry = entry_unit.entry(entry_offset).unwrap();
resolve_namespace_name(
dwarf,
- unit,
- &unit.entry(offset).unwrap(),
+ &entry_unit,
+ &entry,
namespace_qualifiers,
depth,
);
@@ -172,7 +170,7 @@ fn parse_unit<R: Reader<Offset = usize>>(
dwarf: &Dwarf<R>,
unit: &Unit<R>,
debug_info_builder: &mut DebugInfoBuilder,
- progress: &Box<dyn Fn(usize, usize) -> Result<(), ()>>,
+ progress: &dyn Fn(usize, usize) -> Result<(), ()>,
total_die_count: usize,
) {
let mut entries = unit.entries();