summaryrefslogtreecommitdiffstats
path: root/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-07-16 00:59:04 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2019-07-16 00:59:04 +0000
commit01ee172e9e4a32a326105b6817bb801a07f44bfa (patch)
tree869822172f38cd79c53424865629590540691453 /llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
parent50f0c824532886bea5b7536378a16ac9e3b12f9c (diff)
downloadbcm5719-llvm-01ee172e9e4a32a326105b6817bb801a07f44bfa.tar.gz
bcm5719-llvm-01ee172e9e4a32a326105b6817bb801a07f44bfa.zip
Revert "[DebugInfo] Move function from line table to the prologue (NFC)"
This broke LLD, which I didn't have enabled. llvm-svn: 366160
Diffstat (limited to 'llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp')
-rw-r--r--llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp67
1 files changed, 34 insertions, 33 deletions
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
index 8a621084710..9f9aaabf1e8 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
@@ -66,26 +66,6 @@ void DWARFDebugLine::ContentTypeTracker::trackContentType(
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::lookupAddressRangeImpl(
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 isPathAbsoluteOnWindowsOrPosix(const Twine &Path) {
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::getFileNameByIndex(uint64_t FileIndex,
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);
}
OpenPOWER on IntegriCloud