Skip to content

Commit

Permalink
[lldb/DWARF] Search fallback to the manual index in GetFullyQualified… (
Browse files Browse the repository at this point in the history
llvm#102123)

…Type

This is needed to ensure we find a type if its definition is in a CU
that wasn't indexed. This can happen if the definition is in some
precompiled code (e.g. the c++ standard library) which was built with
different flags than the rest of the binary.
  • Loading branch information
labath committed Aug 12, 2024
1 parent 7727853 commit 21ef272
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ void DebugNamesDWARFIndex::GetFullyQualifiedType(
!ProcessEntry(entry, callback))
return;
}
m_fallback.GetFullyQualifiedType(context, callback);
}

bool DebugNamesDWARFIndex::SameParentChain(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
REQUIRES: lld, python

RUN: split-file %s %t
RUN: %clang --target=x86_64-pc-linux -g -gpubnames -c %t/file1.c -o %t-1.o
RUN: %clang --target=x86_64-pc-linux -g -gno-pubnames -c %t/file2.c -o %t-2.o
RUN: llvm-dwarfdump %t-1.o --debug-names | FileCheck %s --check-prefix=PUBNAMES
RUN: llvm-dwarfdump %t-2.o --debug-names | FileCheck %s --check-prefix=NOPUBNAMES
RUN: ld.lld %t-1.o %t-2.o -o %t.out
RUN: %lldb %t.out -s %t/commands -o exit | FileCheck %s

// Precondition check: The first file should contain a debug_names index, but no
// entries for MYSTRUCT.
PUBNAMES: Name Index @ 0x0 {
PUBNAMES-NOT: MYSTRUCT

// The second file should not contain an index.
NOPUBNAMES-NOT: Name Index

// Starting from the variable in the first file, we should be able to find the
// declaration of the type in the first unit, and then match that with the
// definition in the second unit.
CHECK: (lldb) script
CHECK: struct MYSTRUCT {
CHECK-NEXT: int x;
CHECK-NEXT: }

#--- commands
script lldb.target.FindFirstGlobalVariable("struct_ptr").GetType().GetPointeeType()
#--- file1.c
struct MYSTRUCT *struct_ptr;
#--- file2.c
struct MYSTRUCT {
int x;
};
struct MYSTRUCT struct_;

0 comments on commit 21ef272

Please sign in to comment.