Skip to content

Commit 028e247

Browse files
committed
Prefer DWARF section
1 parent bf2c0e3 commit 028e247

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

llvm/lib/DebugInfo/Symbolize/Symbolize.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -628,13 +628,20 @@ LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName) {
628628
ObjectPair Objects = ObjectsOrErr.get();
629629

630630
std::unique_ptr<DIContext> Context;
631-
// If this is a COFF object containing PDB info, use a PDBContext to
632-
// symbolize. Otherwise, use DWARF.
631+
// If this is a COFF object containing PDB info and not containing DWARF
632+
// section, use a PDBContext to symbolize. Otherwise, use DWARF.
633633
if (auto CoffObject = dyn_cast<COFFObjectFile>(Objects.first)) {
634634
const codeview::DebugInfo *DebugInfo;
635635
StringRef PDBFileName;
636636
auto EC = CoffObject->getDebugPDBInfo(DebugInfo, PDBFileName);
637-
if (!EC && DebugInfo != nullptr && !PDBFileName.empty()) {
637+
// Use DWARF if there're DWARF sections.
638+
bool HasDwarf =
639+
llvm::any_of(Objects.first->sections(), [](SectionRef Section) -> bool {
640+
if (Expected<StringRef> SectionName = Section.getName())
641+
return SectionName.get() == ".debug_info";
642+
return false;
643+
});
644+
if (!EC && !HasDwarf && DebugInfo != nullptr && !PDBFileName.empty()) {
638645
using namespace pdb;
639646
std::unique_ptr<IPDBSession> Session;
640647

llvm/test/tools/llvm-profgen/coff-profile.test

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,34 @@
22
; RUN: FileCheck %s --input-file %t
33

44
; CHECK: main:2914368:0
5-
; CHECK-NEXT: 0: 31124
5+
; CHECK-NEXT: 3.1: 0
6+
; CHECK-NEXT: 3.2: 0
7+
; CHECK-NEXT: 8: 0
8+
; CHECK-NEXT: 65501: 0
9+
; CHECK-NEXT: 1: ??$init@HG@MyNameSpace2@@YAXHPEAG@Z:0
10+
; CHECK-NEXT: 1: 0
11+
; CHECK-NEXT: 1.1: 0
12+
; CHECK-NEXT: 1.2: 0
13+
; CHECK-NEXT: 2: 0
14+
; CHECK-NEXT: 13: 0
15+
; CHECK-NEXT: 65514: 0
16+
; CHECK-NEXT: 4: ?work1@?$MyClass@GH@MyNameSpace1@@QEAAXQEAGH@Z:299952
17+
; CHECK-NEXT: 0: ?work@?$MyClass@GH@MyNameSpace1@@AEAAXQEAGHH@Z:299952
18+
; CHECK-NEXT: 1.1: 2913
19+
; CHECK-NEXT: 1.2: 2913
20+
; CHECK-NEXT: 2: 2912
21+
; CHECK-NEXT: 3: 2913
22+
; CHECK-NEXT: 65530: 0
23+
; CHECK-NEXT: 5: ?work2@?$MyClass@GH@MyNameSpace1@@QEAAXQEAGH@Z:2614416
24+
; CHECK-NEXT: 0: ?work@?$MyClass@GH@MyNameSpace1@@AEAAXQEAGHH@Z:2614416
25+
; CHECK-NEXT: 1.1: 31124
26+
; CHECK-NEXT: 1.2: 31124
27+
; CHECK-NEXT: 2: 31124
28+
; CHECK-NEXT: 3: 31124
29+
; CHECK-NEXT: 65530: 0
30+
; CHECK-NEXT: 7: ?print@MyNameSpace2@@YAXPEAGH@Z:0
31+
; CHECK-NEXT: 1: 0
32+
; CHECK-NEXT: 65508: 0
633

734
; Original code
835
; clang-cl.exe -O2 -gdwarf coff-profile.cpp -fuse-ld=lld -Xclang -fdebug-info-for-profiling -o coff-profile.exe /link /debug:dwarf

0 commit comments

Comments
 (0)