diff options
| author | KyleMiles <krm504@nyu.edu> | 2023-08-22 13:01:09 -0400 |
|---|---|---|
| committer | KyleMiles <krm504@nyu.edu> | 2023-08-22 13:01:09 -0400 |
| commit | 5b73fb82d272aa32ff124a69e96579679e7d3580 (patch) | |
| tree | 182844e264b4c9ae5727a9a1c86aa7bf0fd462aa /rust/examples/dwarf/dwarf_import/src/lib.rs | |
| parent | 02ea8d7309a0c0777ac8a07bfc1e0fd497e9f5f5 (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.rs | 18 |
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(); |
