mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
MCDwarf: Rename MCDwarfFileTable to MCDwarfLineTable
This type now represents all the data for the DWARF line table: directory names, file names, and the line table proper. llvm-svn: 203858
This commit is contained in:
parent
b8849a248d
commit
8b87e0f89d
@ -116,7 +116,7 @@ namespace llvm {
|
||||
/// We now emit a line table for each compile unit. To reduce the prologue
|
||||
/// size of each line table, the files and directories used by each compile
|
||||
/// unit are separated.
|
||||
std::map<unsigned, MCDwarfFileTable> MCDwarfFileTablesCUMap;
|
||||
std::map<unsigned, MCDwarfLineTable> MCDwarfLineTablesCUMap;
|
||||
|
||||
/// The current dwarf line information from the last dwarf .loc directive.
|
||||
MCDwarfLoc CurrentDwarfLoc;
|
||||
@ -302,35 +302,35 @@ namespace llvm {
|
||||
|
||||
bool hasDwarfFiles() const {
|
||||
// Traverse MCDwarfFilesCUMap and check whether each entry is empty.
|
||||
for (const auto &FileTable : MCDwarfFileTablesCUMap)
|
||||
for (const auto &FileTable : MCDwarfLineTablesCUMap)
|
||||
if (!FileTable.second.getMCDwarfFiles().empty())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
const std::map<unsigned, MCDwarfFileTable> &getMCDwarfFileTables() const {
|
||||
return MCDwarfFileTablesCUMap;
|
||||
const std::map<unsigned, MCDwarfLineTable> &getMCDwarfLineTables() const {
|
||||
return MCDwarfLineTablesCUMap;
|
||||
}
|
||||
|
||||
MCDwarfFileTable &getMCDwarfFileTable(unsigned CUID) {
|
||||
return MCDwarfFileTablesCUMap[CUID];
|
||||
MCDwarfLineTable &getMCDwarfLineTable(unsigned CUID) {
|
||||
return MCDwarfLineTablesCUMap[CUID];
|
||||
}
|
||||
|
||||
const MCDwarfFileTable &getMCDwarfFileTable(unsigned CUID) const {
|
||||
auto I = MCDwarfFileTablesCUMap.find(CUID);
|
||||
assert(I != MCDwarfFileTablesCUMap.end());
|
||||
const MCDwarfLineTable &getMCDwarfLineTable(unsigned CUID) const {
|
||||
auto I = MCDwarfLineTablesCUMap.find(CUID);
|
||||
assert(I != MCDwarfLineTablesCUMap.end());
|
||||
return I->second;
|
||||
}
|
||||
|
||||
const SmallVectorImpl<MCDwarfFile> &getMCDwarfFiles(unsigned CUID = 0) {
|
||||
return getMCDwarfFileTable(CUID).getMCDwarfFiles();
|
||||
return getMCDwarfLineTable(CUID).getMCDwarfFiles();
|
||||
}
|
||||
const SmallVectorImpl<std::string> &getMCDwarfDirs(unsigned CUID = 0) {
|
||||
return getMCDwarfFileTable(CUID).getMCDwarfDirs();
|
||||
return getMCDwarfLineTable(CUID).getMCDwarfDirs();
|
||||
}
|
||||
|
||||
bool hasMCLineSections() const {
|
||||
for (const auto &Table : MCDwarfFileTablesCUMap)
|
||||
for (const auto &Table : MCDwarfLineTablesCUMap)
|
||||
if (!Table.second.getMCDwarfFiles().empty() || Table.second.getLabel())
|
||||
return true;
|
||||
return false;
|
||||
@ -342,10 +342,10 @@ namespace llvm {
|
||||
DwarfCompileUnitID = CUIndex;
|
||||
}
|
||||
MCSymbol *getMCLineTableSymbol(unsigned ID) const {
|
||||
return getMCDwarfFileTable(ID).getLabel();
|
||||
return getMCDwarfLineTable(ID).getLabel();
|
||||
}
|
||||
void setMCLineTableSymbol(MCSymbol *Sym, unsigned ID) {
|
||||
getMCDwarfFileTable(ID).setLabel(Sym);
|
||||
getMCDwarfLineTable(ID).setLabel(Sym);
|
||||
}
|
||||
|
||||
/// setCurrentDwarfLoc - saves the information from the currently parsed
|
||||
|
@ -183,7 +183,7 @@ struct MCDwarfLineTableHeader {
|
||||
std::pair<MCSymbol *, MCSymbol *> Emit(MCStreamer *MCOS) const;
|
||||
};
|
||||
|
||||
class MCDwarfFileTable {
|
||||
class MCDwarfLineTable {
|
||||
MCDwarfLineTableHeader Header;
|
||||
MCLineSection MCLineSections;
|
||||
|
||||
|
@ -84,7 +84,7 @@ void MCContext::reset() {
|
||||
Symbols.clear();
|
||||
Allocator.Reset();
|
||||
Instances.clear();
|
||||
MCDwarfFileTablesCUMap.clear();
|
||||
MCDwarfLineTablesCUMap.clear();
|
||||
MCGenDwarfLabelEntries.clear();
|
||||
DwarfDebugFlags = StringRef();
|
||||
DwarfCompileUnitID = 0;
|
||||
@ -337,7 +337,7 @@ const MCSectionCOFF *MCContext::getCOFFSection(StringRef Section) {
|
||||
/// allocated file number is returned. The file numbers may be in any order.
|
||||
unsigned MCContext::GetDwarfFile(StringRef Directory, StringRef FileName,
|
||||
unsigned FileNumber, unsigned CUID) {
|
||||
MCDwarfFileTable &Table = MCDwarfFileTablesCUMap[CUID];
|
||||
MCDwarfLineTable &Table = MCDwarfLineTablesCUMap[CUID];
|
||||
return Table.getFile(Directory, FileName, FileNumber);
|
||||
}
|
||||
|
||||
|
@ -82,7 +82,7 @@ void MCLineEntry::Make(MCStreamer *MCOS, const MCSection *Section) {
|
||||
|
||||
// Add the line entry to this section's entries.
|
||||
MCOS->getContext()
|
||||
.getMCDwarfFileTable(MCOS->getContext().getDwarfCompileUnitID())
|
||||
.getMCDwarfLineTable(MCOS->getContext().getDwarfCompileUnitID())
|
||||
.getMCLineSections()
|
||||
.addLineEntry(LineEntry, Section);
|
||||
}
|
||||
@ -204,14 +204,14 @@ EmitDwarfLineTable(MCStreamer *MCOS, const MCSection *Section,
|
||||
//
|
||||
// This emits the Dwarf file and the line tables.
|
||||
//
|
||||
const MCSymbol *MCDwarfFileTable::Emit(MCStreamer *MCOS) {
|
||||
const MCSymbol *MCDwarfLineTable::Emit(MCStreamer *MCOS) {
|
||||
MCContext &context = MCOS->getContext();
|
||||
|
||||
// CUID and MCLineTableSymbols are set in DwarfDebug, when DwarfDebug does
|
||||
// not exist, CUID will be 0 and MCLineTableSymbols will be empty.
|
||||
// Handle Compile Unit 0, the line table start symbol is the section symbol.
|
||||
auto I = MCOS->getContext().getMCDwarfFileTables().begin(),
|
||||
E = MCOS->getContext().getMCDwarfFileTables().end();
|
||||
auto I = MCOS->getContext().getMCDwarfLineTables().begin(),
|
||||
E = MCOS->getContext().getMCDwarfLineTables().end();
|
||||
|
||||
// Switch to the section where the table will be emitted into.
|
||||
MCOS->SwitchSection(context.getObjectFileInfo()->getDwarfLineSection());
|
||||
@ -303,7 +303,7 @@ std::pair<MCSymbol *, MCSymbol *> MCDwarfLineTableHeader::Emit(MCStreamer *MCOS)
|
||||
return std::make_pair(LineStartSym, LineEndSym);
|
||||
}
|
||||
|
||||
const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const {
|
||||
const MCSymbol *MCDwarfLineTable::EmitCU(MCStreamer *MCOS) const {
|
||||
MCSymbol *LineStartSym;
|
||||
MCSymbol *LineEndSym;
|
||||
std::tie(LineStartSym, LineEndSym) = Header.Emit(MCOS);
|
||||
@ -331,7 +331,8 @@ const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const {
|
||||
return LineStartSym;
|
||||
}
|
||||
|
||||
unsigned MCDwarfFileTable::getFile(StringRef Directory, StringRef FileName, unsigned FileNumber) {
|
||||
unsigned MCDwarfLineTable::getFile(StringRef Directory, StringRef FileName,
|
||||
unsigned FileNumber) {
|
||||
return Header.getFile(Directory, FileName, FileNumber);
|
||||
}
|
||||
|
||||
|
@ -380,7 +380,7 @@ void MCObjectStreamer::FinishImpl() {
|
||||
// Dump out the dwarf file & directory tables and line tables.
|
||||
const MCSymbol *LineSectionSymbol = NULL;
|
||||
if (getContext().hasMCLineSections())
|
||||
LineSectionSymbol = MCDwarfFileTable::Emit(this);
|
||||
LineSectionSymbol = MCDwarfLineTable::Emit(this);
|
||||
|
||||
// If we are generating dwarf for assembly source files dump out the sections.
|
||||
if (getContext().getGenDwarfForAssembly())
|
||||
|
Loading…
x
Reference in New Issue
Block a user