summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyleMiles <krm504@nyu.edu>2024-01-16 16:56:07 -0500
committerKyleMiles <krm504@nyu.edu>2024-01-19 15:45:24 -0500
commitd92f60bc1cb5ee88a9cce69d004f15c81618fdea (patch)
treec30d77df6e9fe0f2411eb461099911356bf2b3a2
parente9b7c410bd50582d2a6ecd49cf02ea8f54ec1f1d (diff)
DWARF Import : Detect and resolve trivial infinite abstract origin cycles
-rw-r--r--rust/examples/dwarf/dwarf_import/src/helpers.rs7
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