From e1fb3527a4a20167ba19e7e0930c227a1b2b6156 Mon Sep 17 00:00:00 2001 From: Jeremy <51220084+jeremy-rifkin@users.noreply.github.com> Date: Thu, 11 Jul 2024 18:50:35 -0500 Subject: [PATCH] Fix an issue with split dwarf on clang --- src/symbols/dwarf/dwarf_resolver.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/symbols/dwarf/dwarf_resolver.cpp b/src/symbols/dwarf/dwarf_resolver.cpp index 1c47a17..163e27b 100644 --- a/src/symbols/dwarf/dwarf_resolver.cpp +++ b/src/symbols/dwarf/dwarf_resolver.cpp @@ -1010,8 +1010,11 @@ namespace libdwarf { if(cu) { const auto& cu_die = cu.unwrap().cu_die.get(); // gnu non-standard debug-fission may create non-skeleton CU DIEs and just add dwo attributes + // clang emits dwo names in the split CUs, so guard against going down the dwarf fission path (which + // doesn't infinitely recurse because it's not emitted as an absolute path and there's no comp dir but + // it's good to guard against the infinite recursion anyway) auto dwo_name = get_dwo_name(cu_die); - if(cu_die.get_tag() == DW_TAG_skeleton_unit || dwo_name) { + if(cu_die.get_tag() == DW_TAG_skeleton_unit || (dwo_name && !skeleton)) { perform_dwarf_fission_resolution(cu_die, dwo_name, object_frame_info, frame, inlines); } else { retrieve_line_info(cu_die, pc, frame);