[lld] r374869 - [LLD] [COFF] Wrap file location pair<StringRef, int> in Optional<>. NFC.
Martin Storsjo via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 15 02:18:19 PDT 2019
Author: mstorsjo
Date: Tue Oct 15 02:18:18 2019
New Revision: 374869
URL: http://llvm.org/viewvc/llvm-project?rev=374869&view=rev
Log:
[LLD] [COFF] Wrap file location pair<StringRef,int> in Optional<>. NFC.
This makes use of it slightly clearer, and makes it match the
same construct in the lld ELF linker.
Differential Revision: https://reviews.llvm.org/D68935
Modified:
lld/trunk/COFF/PDB.cpp
lld/trunk/COFF/PDB.h
lld/trunk/COFF/SymbolTable.cpp
Modified: lld/trunk/COFF/PDB.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/PDB.cpp?rev=374869&r1=374868&r2=374869&view=diff
==============================================================================
--- lld/trunk/COFF/PDB.cpp (original)
+++ lld/trunk/COFF/PDB.cpp Tue Oct 15 02:18:18 2019
@@ -1791,8 +1791,8 @@ static bool findLineTable(const SectionC
// Use CodeView line tables to resolve a file and line number for the given
// offset into the given chunk and return them, or {"", 0} if a line table was
// not found.
-std::pair<StringRef, uint32_t> getFileLineCodeView(const SectionChunk *c,
- uint32_t addr) {
+Optional<std::pair<StringRef, uint32_t>>
+getFileLineCodeView(const SectionChunk *c, uint32_t addr) {
ExitOnError exitOnErr;
DebugStringTableSubsectionRef cVStrTab;
@@ -1801,7 +1801,7 @@ std::pair<StringRef, uint32_t> getFileLi
uint32_t offsetInLinetable;
if (!findLineTable(c, addr, cVStrTab, checksums, lines, offsetInLinetable))
- return {"", 0};
+ return None;
Optional<uint32_t> nameIndex;
Optional<uint32_t> lineNumber;
@@ -1815,16 +1815,16 @@ std::pair<StringRef, uint32_t> getFileLi
}
StringRef filename =
exitOnErr(getFileName(cVStrTab, checksums, *nameIndex));
- return {filename, *lineNumber};
+ return std::make_pair(filename, *lineNumber);
}
nameIndex = entry.NameIndex;
lineNumber = li.getStartLine();
}
}
if (!nameIndex)
- return {"", 0};
+ return None;
StringRef filename = exitOnErr(getFileName(cVStrTab, checksums, *nameIndex));
- return {filename, *lineNumber};
+ return std::make_pair(filename, *lineNumber);
}
} // namespace coff
Modified: lld/trunk/COFF/PDB.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/PDB.h?rev=374869&r1=374868&r2=374869&view=diff
==============================================================================
--- lld/trunk/COFF/PDB.h (original)
+++ lld/trunk/COFF/PDB.h Tue Oct 15 02:18:18 2019
@@ -10,6 +10,7 @@
#define LLD_COFF_PDB_H
#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
#include "llvm/ADT/StringRef.h"
namespace llvm {
@@ -29,9 +30,9 @@ void createPDB(SymbolTable *symtab,
llvm::ArrayRef<uint8_t> sectionTable,
llvm::codeview::DebugInfo *buildId);
-std::pair<llvm::StringRef, uint32_t> getFileLineCodeView(const SectionChunk *c,
- uint32_t addr);
-}
-}
+llvm::Optional<std::pair<llvm::StringRef, uint32_t>>
+getFileLineCodeView(const SectionChunk *c, uint32_t addr);
+} // namespace coff
+} // namespace lld
#endif
Modified: lld/trunk/COFF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/SymbolTable.cpp?rev=374869&r1=374868&r2=374869&view=diff
==============================================================================
--- lld/trunk/COFF/SymbolTable.cpp (original)
+++ lld/trunk/COFF/SymbolTable.cpp Tue Oct 15 02:18:18 2019
@@ -108,26 +108,27 @@ static std::vector<std::string> getSymbo
return {res};
}
-static std::pair<StringRef, uint32_t> getFileLineDwarf(const SectionChunk *c,
- uint32_t addr) {
+static Optional<std::pair<StringRef, uint32_t>>
+getFileLineDwarf(const SectionChunk *c, uint32_t addr) {
if (!config->symbolizer)
config->symbolizer = make<symbolize::LLVMSymbolizer>();
Expected<DILineInfo> expectedLineInfo = config->symbolizer->symbolizeCode(
*c->file->getCOFFObj(), {addr, c->getSectionNumber() - 1});
if (!expectedLineInfo)
- return {"", 0};
+ return None;
const DILineInfo &lineInfo = *expectedLineInfo;
if (lineInfo.FileName == DILineInfo::BadString)
- return {"", 0};
- return {saver.save(lineInfo.FileName), lineInfo.Line};
+ return None;
+ return std::make_pair(saver.save(lineInfo.FileName), lineInfo.Line);
}
-static std::pair<StringRef, uint32_t> getFileLine(const SectionChunk *c,
- uint32_t addr) {
+static Optional<std::pair<StringRef, uint32_t>>
+getFileLine(const SectionChunk *c, uint32_t addr) {
// MinGW can optionally use codeview, even if the default is dwarf.
- std::pair<StringRef, uint32_t> fileLine = getFileLineCodeView(c, addr);
+ Optional<std::pair<StringRef, uint32_t>> fileLine =
+ getFileLineCodeView(c, addr);
// If codeview didn't yield any result, check dwarf in MinGW mode.
- if (fileLine.first.empty() && config->mingw)
+ if (!fileLine && config->mingw)
fileLine = getFileLineDwarf(c, addr);
return fileLine;
}
@@ -150,11 +151,13 @@ std::vector<std::string> getSymbolLocati
for (const coff_relocation &r : sc->getRelocs()) {
if (r.SymbolTableIndex != symIndex)
continue;
- std::pair<StringRef, uint32_t> fileLine =
+ Optional<std::pair<StringRef, uint32_t>> fileLine =
getFileLine(sc, r.VirtualAddress);
Symbol *sym = getSymbol(sc, r.VirtualAddress);
- if (!fileLine.first.empty() || sym)
- locations.push_back({sym, fileLine});
+ if (fileLine)
+ locations.push_back({sym, *fileLine});
+ else if (sym)
+ locations.push_back({sym});
}
}
More information about the llvm-commits
mailing list