|
15 | 15 | #include "llvm/ADT/STLExtras.h" |
16 | 16 | #include "llvm/DebugInfo/BTF/BTFContext.h" |
17 | 17 | #include "llvm/DebugInfo/DWARF/DWARFContext.h" |
18 | | -#include "llvm/DebugInfo/GSYM/GsymDIContext.h" |
19 | | -#include "llvm/DebugInfo/GSYM/GsymReader.h" |
20 | 18 | #include "llvm/DebugInfo/PDB/PDB.h" |
21 | 19 | #include "llvm/DebugInfo/PDB/PDBContext.h" |
22 | 20 | #include "llvm/DebugInfo/Symbolize/SymbolizableObjectFile.h" |
@@ -500,34 +498,6 @@ bool LLVMSymbolizer::getOrFindDebugBinary(const ArrayRef<uint8_t> BuildID, |
500 | 498 | return false; |
501 | 499 | } |
502 | 500 |
|
503 | | -std::string LLVMSymbolizer::lookUpGsymFile(const std::string &Path) { |
504 | | - if (Opts.DisableGsym) |
505 | | - return {}; |
506 | | - |
507 | | - auto CheckGsymFile = [](const llvm::StringRef &GsymPath) { |
508 | | - sys::fs::file_status Status; |
509 | | - std::error_code EC = llvm::sys::fs::status(GsymPath, Status); |
510 | | - return !EC && !llvm::sys::fs::is_directory(Status); |
511 | | - }; |
512 | | - |
513 | | - // First, look beside the binary file |
514 | | - if (const auto GsymPath = Path + ".gsym"; CheckGsymFile(GsymPath)) |
515 | | - return GsymPath; |
516 | | - |
517 | | - // Then, look in the directories specified by GsymFileDirectory |
518 | | - |
519 | | - for (const auto &Directory : Opts.GsymFileDirectory) { |
520 | | - SmallString<16> GsymPath = llvm::StringRef{Directory}; |
521 | | - llvm::sys::path::append(GsymPath, |
522 | | - llvm::sys::path::filename(Path) + ".gsym"); |
523 | | - |
524 | | - if (CheckGsymFile(GsymPath)) |
525 | | - return static_cast<std::string>(GsymPath); |
526 | | - } |
527 | | - |
528 | | - return {}; |
529 | | -} |
530 | | - |
531 | 501 | Expected<LLVMSymbolizer::ObjectPair> |
532 | 502 | LLVMSymbolizer::getOrCreateObjectPair(const std::string &Path, |
533 | 503 | const std::string &ArchName) { |
@@ -664,48 +634,30 @@ LLVMSymbolizer::getOrCreateModuleInfo(StringRef ModuleName) { |
664 | 634 | std::unique_ptr<DIContext> Context; |
665 | 635 | // If this is a COFF object containing PDB info and not containing DWARF |
666 | 636 | // section, use a PDBContext to symbolize. Otherwise, use DWARF. |
667 | | - // Create a DIContext to symbolize as follows: |
668 | | - // - If there is a GSYM file, create a GsymDIContext. |
669 | | - // - Otherwise, if this is a COFF object containing PDB info, create a |
670 | | - // PDBContext. |
671 | | - // - Otherwise, create a DWARFContext. |
672 | | - const auto GsymFile = lookUpGsymFile(BinaryName.str()); |
673 | | - if (!GsymFile.empty()) { |
674 | | - auto ReaderOrErr = gsym::GsymReader::openFile(GsymFile); |
675 | | - |
676 | | - if (ReaderOrErr) { |
677 | | - std::unique_ptr<gsym::GsymReader> Reader = |
678 | | - std::make_unique<gsym::GsymReader>(std::move(*ReaderOrErr)); |
679 | | - |
680 | | - Context = std::make_unique<gsym::GsymDIContext>(std::move(Reader)); |
681 | | - } |
682 | | - } |
683 | | - if (!Context) { |
684 | | - if (auto CoffObject = dyn_cast<COFFObjectFile>(Objects.first)) { |
685 | | - const codeview::DebugInfo *DebugInfo; |
686 | | - StringRef PDBFileName; |
687 | | - auto EC = CoffObject->getDebugPDBInfo(DebugInfo, PDBFileName); |
688 | | - // Use DWARF if there're DWARF sections. |
689 | | - bool HasDwarf = llvm::any_of( |
690 | | - Objects.first->sections(), [](SectionRef Section) -> bool { |
691 | | - if (Expected<StringRef> SectionName = Section.getName()) |
692 | | - return SectionName.get() == ".debug_info"; |
693 | | - return false; |
694 | | - }); |
695 | | - if (!EC && !HasDwarf && DebugInfo != nullptr && !PDBFileName.empty()) { |
696 | | - using namespace pdb; |
697 | | - std::unique_ptr<IPDBSession> Session; |
698 | | - |
699 | | - PDB_ReaderType ReaderType = |
700 | | - Opts.UseDIA ? PDB_ReaderType::DIA : PDB_ReaderType::Native; |
701 | | - if (auto Err = loadDataForEXE(ReaderType, Objects.first->getFileName(), |
702 | | - Session)) { |
703 | | - Modules.emplace(ModuleName, std::unique_ptr<SymbolizableModule>()); |
704 | | - // Return along the PDB filename to provide more context |
705 | | - return createFileError(PDBFileName, std::move(Err)); |
706 | | - } |
707 | | - Context.reset(new PDBContext(*CoffObject, std::move(Session))); |
| 637 | + if (auto CoffObject = dyn_cast<COFFObjectFile>(Objects.first)) { |
| 638 | + const codeview::DebugInfo *DebugInfo; |
| 639 | + StringRef PDBFileName; |
| 640 | + auto EC = CoffObject->getDebugPDBInfo(DebugInfo, PDBFileName); |
| 641 | + // Use DWARF if there're DWARF sections. |
| 642 | + bool HasDwarf = |
| 643 | + llvm::any_of(Objects.first->sections(), [](SectionRef Section) -> bool { |
| 644 | + if (Expected<StringRef> SectionName = Section.getName()) |
| 645 | + return SectionName.get() == ".debug_info"; |
| 646 | + return false; |
| 647 | + }); |
| 648 | + if (!EC && !HasDwarf && DebugInfo != nullptr && !PDBFileName.empty()) { |
| 649 | + using namespace pdb; |
| 650 | + std::unique_ptr<IPDBSession> Session; |
| 651 | + |
| 652 | + PDB_ReaderType ReaderType = |
| 653 | + Opts.UseDIA ? PDB_ReaderType::DIA : PDB_ReaderType::Native; |
| 654 | + if (auto Err = loadDataForEXE(ReaderType, Objects.first->getFileName(), |
| 655 | + Session)) { |
| 656 | + Modules.emplace(ModuleName, std::unique_ptr<SymbolizableModule>()); |
| 657 | + // Return along the PDB filename to provide more context |
| 658 | + return createFileError(PDBFileName, std::move(Err)); |
708 | 659 | } |
| 660 | + Context.reset(new PDBContext(*CoffObject, std::move(Session))); |
709 | 661 | } |
710 | 662 | } |
711 | 663 | if (!Context) |
|
0 commit comments