aprantl created this revision. aprantl added reviewers: davide, shafik, teemperor, JDevlieghere. aprantl added a project: debug-info. Herald added a subscriber: ormris.
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 https://reviews.llvm.org/D76100 Files: clang/lib/CodeGen/CGDebugInfo.cpp clang/test/CodeGen/debug-info-sysroot-sdk.c clang/test/CodeGen/debug-info-sysroot.c Index: clang/test/CodeGen/debug-info-sysroot.c =================================================================== --- clang/test/CodeGen/debug-info-sysroot.c +++ /dev/null @@ -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" - Index: clang/test/CodeGen/debug-info-sysroot-sdk.c =================================================================== --- /dev/null +++ clang/test/CodeGen/debug-info-sysroot-sdk.c @@ -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 a 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" Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -611,9 +611,15 @@ 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 @@ ? 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) {
Index: clang/test/CodeGen/debug-info-sysroot.c =================================================================== --- clang/test/CodeGen/debug-info-sysroot.c +++ /dev/null @@ -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" - Index: clang/test/CodeGen/debug-info-sysroot-sdk.c =================================================================== --- /dev/null +++ clang/test/CodeGen/debug-info-sysroot-sdk.c @@ -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 a 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" Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -611,9 +611,15 @@ 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 @@ ? 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) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits