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/die_handlers.rs | |
| parent | 02ea8d7309a0c0777ac8a07bfc1e0fd497e9f5f5 (diff) | |
DWARF Import : Improved Cross-Compilation-Unit Handling
Diffstat (limited to 'rust/examples/dwarf/dwarf_import/src/die_handlers.rs')
| -rw-r--r-- | rust/examples/dwarf/dwarf_import/src/die_handlers.rs | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/rust/examples/dwarf/dwarf_import/src/die_handlers.rs b/rust/examples/dwarf/dwarf_import/src/die_handlers.rs index 5563b2a5..39e25669 100644 --- a/rust/examples/dwarf/dwarf_import/src/die_handlers.rs +++ b/rust/examples/dwarf/dwarf_import/src/die_handlers.rs @@ -41,12 +41,8 @@ pub fn handle_base_type<R: Reader<Offset = usize>>( // TODO : By spec base types need to have a name, what if it's spec non-conforming? let name = get_name(dwarf, unit, entry).expect("DW_TAG_base does not have name attribute"); - - // TODO : Handle other size specifiers (bits, offset, high_pc?, etc) let size = get_size_as_usize(entry).expect("DW_TAG_base does not have size attribute"); - match entry.attr_value(constants::DW_AT_encoding) { - // TODO : Need more binaries to see what's going on Ok(Some(Encoding(encoding))) => { match encoding { constants::DW_ATE_address => None, @@ -199,25 +195,23 @@ pub fn handle_pointer<R: Reader<Offset = usize>>( Some(reference_type), )) } + } else if let Some(entry_type_offset) = entry_type { + let parent_type = debug_info_builder.get_type(entry_type_offset).unwrap().1; + Some(Type::pointer_of_width( + parent_type.as_ref(), + debug_info_builder.default_address_size(), + false, + false, + Some(reference_type), + )) } else { - if let Some(entry_type_offset) = entry_type { - let parent_type = debug_info_builder.get_type(entry_type_offset).unwrap().1; - Some(Type::pointer_of_width( - parent_type.as_ref(), - debug_info_builder.default_address_size(), - false, - false, - Some(reference_type), - )) - } else { - Some(Type::pointer_of_width( - Type::void().as_ref(), - debug_info_builder.default_address_size(), - false, - false, - Some(reference_type), - )) - } + Some(Type::pointer_of_width( + Type::void().as_ref(), + debug_info_builder.default_address_size(), + false, + false, + Some(reference_type), + )) } } |
