diff options
| author | KyleMiles <krm504@nyu.edu> | 2024-01-16 16:56:07 -0500 |
|---|---|---|
| committer | KyleMiles <krm504@nyu.edu> | 2024-01-19 15:45:24 -0500 |
| commit | d92f60bc1cb5ee88a9cce69d004f15c81618fdea (patch) | |
| tree | c30d77df6e9fe0f2411eb461099911356bf2b3a2 | |
| parent | e9b7c410bd50582d2a6ecd49cf02ea8f54ec1f1d (diff) | |
DWARF Import : Detect and resolve trivial infinite abstract origin cycles
| -rw-r--r-- | rust/examples/dwarf/dwarf_import/src/helpers.rs | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/rust/examples/dwarf/dwarf_import/src/helpers.rs b/rust/examples/dwarf/dwarf_import/src/helpers.rs index 4788df76..ed40d446 100644 --- a/rust/examples/dwarf/dwarf_import/src/helpers.rs +++ b/rust/examples/dwarf/dwarf_import/src/helpers.rs @@ -92,8 +92,11 @@ pub(crate) fn resolve_specification<'a, R: Reader<Offset = usize>>( ) { match die_reference { DieReference::UnitAndOffset((entry_unit, entry_offset)) => { - if let Ok(entry) = entry_unit.entry(entry_offset) { - resolve_specification(entry_unit, &entry, debug_info_builder_context) + if entry_offset == entry.offset() { + warn!("DWARF information is invalid (infinite abstract origin reference cycle). Debug information may be incomplete."); + DieReference::Err + } else if let Ok(new_entry) = entry_unit.entry(entry_offset) { + resolve_specification(entry_unit, &new_entry, debug_info_builder_context) } else { warn!("Failed to fetch DIE. Debug information may be incomplete."); DieReference::Err |
