forked from OSchip/llvm-project
Debug Info: Store the SDK in the DICompileUnit.
This is another intermediate step for PR44213 (https://bugs.llvm.org/show_bug.cgi?id=44213). This stores the SDK *name* in the debug info, to make it possible to `-fdebug-prefix-map`-replace the sysroot with a recognizable string and allowing the debugger to find a fitting SDK relative to itself, not the machine the executable was compiled on. rdar://problem/51645582
This commit is contained in:
parent
afc4dcee83
commit
842ea709e4
clang
|
@ -611,9 +611,15 @@ void CGDebugInfo::CreateCompileUnit() {
|
|||
remapDIPath(MainFileName), remapDIPath(getCurrentDirname()), CSInfo,
|
||||
getSource(SM, SM.getMainFileID()));
|
||||
|
||||
StringRef Sysroot;
|
||||
if (CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::LLDB)
|
||||
StringRef Sysroot, SDK;
|
||||
if (CGM.getCodeGenOpts().getDebuggerTuning() == llvm::DebuggerKind::LLDB) {
|
||||
Sysroot = CGM.getHeaderSearchOpts().Sysroot;
|
||||
auto B = llvm::sys::path::rbegin(Sysroot);
|
||||
auto E = llvm::sys::path::rend(Sysroot);
|
||||
auto It = std::find_if(B, E, [](auto SDK) { return SDK.endswith(".sdk"); });
|
||||
if (It != E)
|
||||
SDK = *It;
|
||||
}
|
||||
|
||||
// Create new compile unit.
|
||||
TheCU = DBuilder.createCompileUnit(
|
||||
|
@ -625,7 +631,7 @@ void CGDebugInfo::CreateCompileUnit() {
|
|||
? llvm::DICompileUnit::DebugNameTableKind::None
|
||||
: static_cast<llvm::DICompileUnit::DebugNameTableKind>(
|
||||
CGOpts.DebugNameTable),
|
||||
CGOpts.DebugRangesBaseAddress, Sysroot);
|
||||
CGOpts.DebugRangesBaseAddress, Sysroot, SDK);
|
||||
}
|
||||
|
||||
llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \
|
||||
// RUN: %s -isysroot /CLANG_SYSROOT/MacOSX.sdk -emit-llvm -o - \
|
||||
// RUN: -debugger-tuning=lldb | FileCheck %s --check-prefix=LLDB
|
||||
// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \
|
||||
// RUN: %s -isysroot /CLANG_SYSROOT/MacOSX.sdk -emit-llvm -o - \
|
||||
// RUN: -debugger-tuning=gdb | FileCheck %s --check-prefix=GDB
|
||||
|
||||
void foo() {}
|
||||
|
||||
// The sysroot and sdk are LLDB-tuning-specific attributes.
|
||||
|
||||
// LLDB: distinct !DICompileUnit({{.*}}sysroot: "/CLANG_SYSROOT/MacOSX.sdk",
|
||||
// LLDB-SAME: sdk: "MacOSX.sdk"
|
||||
// GDB: distinct !DICompileUnit(
|
||||
// GDB-NOT: sysroot: "/CLANG_SYSROOT/MacOSX.sdk"
|
||||
// GDB-NOT: sdk: "MacOSX.sdk"
|
|
@ -1,15 +0,0 @@
|
|||
// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \
|
||||
// RUN: %s -isysroot /CLANG_SYSROOT -emit-llvm -o - \
|
||||
// RUN: -debugger-tuning=lldb | FileCheck %s --check-prefix=LLDB
|
||||
// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \
|
||||
// RUN: %s -isysroot /CLANG_SYSROOT -emit-llvm -o - \
|
||||
// RUN: -debugger-tuning=gdb | FileCheck %s --check-prefix=GDB
|
||||
|
||||
void foo() {}
|
||||
|
||||
// The sysroot is an LLDB-tuning-specific attribute.
|
||||
|
||||
// LLDB: distinct !DICompileUnit({{.*}}sysroot: "/CLANG_SYSROOT"
|
||||
// GDB: distinct !DICompileUnit(
|
||||
// GDB-NOT: sysroot: "/CLANG_SYSROOT"
|
||||
|
Loading…
Reference in New Issue