[llvm] r366160 - Revert "[DebugInfo] Move function from line table to the prologue (NFC)"
Jonas Devlieghere via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 15 17:59:04 PDT 2019
Author: jdevlieghere
Date: Mon Jul 15 17:59:04 2019
New Revision: 366160
URL: http://llvm.org/viewvc/llvm-project?rev=366160&view=rev
Log:
Revert "[DebugInfo] Move function from line table to the prologue (NFC)"
This broke LLD, which I didn't have enabled.
Modified:
llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h?rev=366160&r1=366159&r2=366160&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h Mon Jul 15 17:59:04 2019
@@ -121,17 +121,6 @@ public:
return LineBase + (int8_t)LineRange - 1;
}
- /// Get DWARF-version aware access to the file name entry at the provided
- /// index.
- const llvm::DWARFDebugLine::FileNameEntry &
- getFileNameEntry(uint64_t Index) const;
-
- bool hasFileAtIndex(uint64_t FileIndex) const;
-
- bool getFileNameByIndex(uint64_t FileIndex, StringRef CompDir,
- DILineInfoSpecifier::FileLineInfoKind Kind,
- std::string &Result) const;
-
void clear();
void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const;
Error parse(const DWARFDataExtractor &DebugLineData, uint32_t *OffsetPtr,
@@ -251,20 +240,16 @@ public:
bool lookupAddressRange(object::SectionedAddress Address, uint64_t Size,
std::vector<uint32_t> &Result) const;
- bool hasFileAtIndex(uint64_t FileIndex) const {
- return Prologue.hasFileAtIndex(FileIndex);
- }
+ bool hasFileAtIndex(uint64_t FileIndex) const;
/// Extracts filename by its index in filename table in prologue.
/// In Dwarf 4, the files are 1-indexed and the current compilation file
/// name is not represented in the list. In DWARF v5, the files are
/// 0-indexed and the primary source file has the index 0.
/// Returns true on success.
- bool getFileNameByIndex(uint64_t FileIndex, StringRef CompDir,
+ bool getFileNameByIndex(uint64_t FileIndex, const char *CompDir,
DILineInfoSpecifier::FileLineInfoKind Kind,
- std::string &Result) const {
- return Prologue.getFileNameByIndex(FileIndex, CompDir, Kind, Result);
- }
+ std::string &Result) const;
/// Fills the Result argument with the file and line information
/// corresponding to Address. Returns true on success.
@@ -283,6 +268,11 @@ public:
std::function<void(Error)> RecoverableErrorCallback,
raw_ostream *OS = nullptr);
+ /// Get DWARF-version aware access to the file name entry at the provided
+ /// index.
+ const llvm::DWARFDebugLine::FileNameEntry &
+ getFileNameEntry(uint64_t Index) const;
+
using RowVector = std::vector<Row>;
using RowIter = RowVector::const_iterator;
using SequenceVector = std::vector<Sequence>;
Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp?rev=366160&r1=366159&r2=366160&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp (original)
+++ llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp Mon Jul 15 17:59:04 2019
@@ -66,26 +66,6 @@ void DWARFDebugLine::ContentTypeTracker:
DWARFDebugLine::Prologue::Prologue() { clear(); }
-bool DWARFDebugLine::Prologue::hasFileAtIndex(uint64_t FileIndex) const {
- uint16_t DwarfVersion = getVersion();
- assert(DwarfVersion != 0 &&
- "line table prologue has no dwarf version information");
- if (DwarfVersion >= 5)
- return FileIndex < FileNames.size();
- return FileIndex != 0 && FileIndex <= FileNames.size();
-}
-
-const llvm::DWARFDebugLine::FileNameEntry &
-DWARFDebugLine::Prologue::getFileNameEntry(uint64_t Index) const {
- uint16_t DwarfVersion = getVersion();
- assert(DwarfVersion != 0 &&
- "line table prologue has no dwarf version information");
- // In DWARF v5 the file names are 0-indexed.
- if (DwarfVersion >= 5)
- return FileNames[Index];
- return FileNames[Index - 1];
-}
-
void DWARFDebugLine::Prologue::clear() {
TotalLength = PrologueLength = 0;
SegSelectorSize = 0;
@@ -988,11 +968,30 @@ bool DWARFDebugLine::LineTable::lookupAd
return true;
}
+bool DWARFDebugLine::LineTable::hasFileAtIndex(uint64_t FileIndex) const {
+ uint16_t DwarfVersion = Prologue.getVersion();
+ assert(DwarfVersion != 0 && "LineTable has no dwarf version information");
+ if (DwarfVersion >= 5)
+ return FileIndex < Prologue.FileNames.size();
+ return FileIndex != 0 && FileIndex <= Prologue.FileNames.size();
+}
+
+const llvm::DWARFDebugLine::FileNameEntry &
+DWARFDebugLine::LineTable::getFileNameEntry(uint64_t Index) const {
+ uint16_t DwarfVersion = Prologue.getVersion();
+ assert(DwarfVersion != 0 && "LineTable has no dwarf version information");
+ // In DWARF v5 the file names are 0-indexed.
+ if (DwarfVersion >= 5)
+ return Prologue.FileNames[Index];
+ else
+ return Prologue.FileNames[Index - 1];
+}
+
Optional<StringRef> DWARFDebugLine::LineTable::getSourceByIndex(uint64_t FileIndex,
FileLineInfoKind Kind) const {
- if (Kind == FileLineInfoKind::None || !Prologue.hasFileAtIndex(FileIndex))
+ if (Kind == FileLineInfoKind::None || !hasFileAtIndex(FileIndex))
return None;
- const FileNameEntry &Entry = Prologue.getFileNameEntry(FileIndex);
+ const FileNameEntry &Entry = getFileNameEntry(FileIndex);
if (Optional<const char *> source = Entry.Source.getAsCString())
return StringRef(*source);
return None;
@@ -1006,10 +1005,10 @@ static bool isPathAbsoluteOnWindowsOrPos
sys::path::is_absolute(Path, sys::path::Style::windows);
}
-bool DWARFDebugLine::Prologue::getFileNameByIndex(uint64_t FileIndex,
- StringRef CompDir,
- FileLineInfoKind Kind,
- std::string &Result) const {
+bool DWARFDebugLine::LineTable::getFileNameByIndex(uint64_t FileIndex,
+ const char *CompDir,
+ FileLineInfoKind Kind,
+ std::string &Result) const {
if (Kind == FileLineInfoKind::None || !hasFileAtIndex(FileIndex))
return false;
const FileNameEntry &Entry = getFileNameEntry(FileIndex);
@@ -1023,18 +1022,20 @@ bool DWARFDebugLine::Prologue::getFileNa
SmallString<16> FilePath;
StringRef IncludeDir;
// Be defensive about the contents of Entry.
- if (getVersion() >= 5) {
- if (Entry.DirIdx < IncludeDirectories.size())
- IncludeDir = IncludeDirectories[Entry.DirIdx].getAsCString().getValue();
- } else {
- if (0 < Entry.DirIdx && Entry.DirIdx <= IncludeDirectories.size())
+ if (Prologue.getVersion() >= 5) {
+ if (Entry.DirIdx < Prologue.IncludeDirectories.size())
IncludeDir =
- IncludeDirectories[Entry.DirIdx - 1].getAsCString().getValue();
+ Prologue.IncludeDirectories[Entry.DirIdx].getAsCString().getValue();
+ } else {
+ if (0 < Entry.DirIdx && Entry.DirIdx <= Prologue.IncludeDirectories.size())
+ IncludeDir = Prologue.IncludeDirectories[Entry.DirIdx - 1]
+ .getAsCString()
+ .getValue();
// We may still need to append compilation directory of compile unit.
// We know that FileName is not absolute, the only way to have an
// absolute path at this point would be if IncludeDir is absolute.
- if (!CompDir.empty() && !isPathAbsoluteOnWindowsOrPosix(IncludeDir))
+ if (CompDir && !isPathAbsoluteOnWindowsOrPosix(IncludeDir))
sys::path::append(FilePath, CompDir);
}
More information about the llvm-commits
mailing list