mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-11 07:18:44 +00:00
Revert "[DebugInfo] Move function from line table to the prologue (NFC)"
This broke LLD, which I didn't have enabled. llvm-svn: 366160
This commit is contained in:
parent
fe3b4f3f08
commit
3d2f6011b6
@ -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>;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user