mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-22 20:20:03 +00:00
MCDwarf: Extract the DWARF line table header handling into its own type
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203856 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
303d39f1c4
commit
91d5586086
@ -23,6 +23,7 @@
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
namespace llvm {
|
||||
class MCAsmBackend;
|
||||
@ -174,38 +175,49 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class MCDwarfFileTable {
|
||||
struct MCDwarfLineTableHeader {
|
||||
MCSymbol *Label;
|
||||
SmallVector<std::string, 3> MCDwarfDirs;
|
||||
SmallVector<MCDwarfFile, 3> MCDwarfFiles;
|
||||
unsigned getFile(StringRef Directory, StringRef FileName, unsigned FileNumber);
|
||||
std::pair<MCSymbol *, MCSymbol *> Emit(MCStreamer *MCOS) const;
|
||||
};
|
||||
|
||||
class MCDwarfFileTable {
|
||||
MCDwarfLineTableHeader Header;
|
||||
MCLineSection MCLineSections;
|
||||
|
||||
public:
|
||||
//
|
||||
// This emits the Dwarf file and the line tables for all Compile Units.
|
||||
//
|
||||
static const MCSymbol *Emit(MCStreamer *MCOS);
|
||||
//
|
||||
|
||||
// This emits the Dwarf file and the line tables for a given Compile Unit.
|
||||
//
|
||||
const MCSymbol *EmitCU(MCStreamer *MCOS) const;
|
||||
|
||||
unsigned getFile(StringRef Directory, StringRef FileName, unsigned FileNumber);
|
||||
|
||||
MCSymbol *getLabel() const {
|
||||
return Header.Label;
|
||||
}
|
||||
|
||||
void setLabel(MCSymbol *Label) {
|
||||
Header.Label = Label;
|
||||
}
|
||||
|
||||
const SmallVectorImpl<std::string> &getMCDwarfDirs() const {
|
||||
return MCDwarfDirs;
|
||||
return Header.MCDwarfDirs;
|
||||
}
|
||||
|
||||
SmallVectorImpl<std::string> &getMCDwarfDirs() {
|
||||
return MCDwarfDirs;
|
||||
return Header.MCDwarfDirs;
|
||||
}
|
||||
|
||||
const SmallVectorImpl<MCDwarfFile> &getMCDwarfFiles() const {
|
||||
return MCDwarfFiles;
|
||||
return Header.MCDwarfFiles;
|
||||
}
|
||||
|
||||
SmallVectorImpl<MCDwarfFile> &getMCDwarfFiles() {
|
||||
return MCDwarfFiles;
|
||||
return Header.MCDwarfFiles;
|
||||
}
|
||||
|
||||
const MCLineSection &getMCLineSections() const {
|
||||
@ -214,14 +226,6 @@ public:
|
||||
MCLineSection &getMCLineSections() {
|
||||
return MCLineSections;
|
||||
}
|
||||
|
||||
MCSymbol *getLabel() const {
|
||||
return Label;
|
||||
}
|
||||
|
||||
void setLabel(MCSymbol *Label) {
|
||||
this->Label = Label;
|
||||
}
|
||||
};
|
||||
|
||||
class MCDwarfLineAddr {
|
||||
|
@ -224,11 +224,9 @@ const MCSymbol *MCDwarfFileTable::Emit(MCStreamer *MCOS) {
|
||||
return LineStartSym;
|
||||
}
|
||||
|
||||
const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const {
|
||||
std::pair<MCSymbol *, MCSymbol *> MCDwarfLineTableHeader::Emit(MCStreamer *MCOS) const {
|
||||
MCContext &context = MCOS->getContext();
|
||||
|
||||
|
||||
|
||||
// Create a symbol at the beginning of the line table.
|
||||
MCSymbol *LineStartSym = Label;
|
||||
if (!LineStartSym)
|
||||
@ -302,6 +300,14 @@ const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const {
|
||||
// end of the prologue (that was used in a previous expression).
|
||||
MCOS->EmitLabel(ProEndSym);
|
||||
|
||||
return std::make_pair(LineStartSym, LineEndSym);
|
||||
}
|
||||
|
||||
const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const {
|
||||
MCSymbol *LineStartSym;
|
||||
MCSymbol *LineEndSym;
|
||||
std::tie(LineStartSym, LineEndSym) = Header.Emit(MCOS);
|
||||
|
||||
// Put out the line tables.
|
||||
for (const auto &LineSec : MCLineSections.getMCLineEntries())
|
||||
EmitDwarfLineTable(MCOS, LineSec.first, LineSec.second);
|
||||
@ -326,6 +332,10 @@ const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const {
|
||||
}
|
||||
|
||||
unsigned MCDwarfFileTable::getFile(StringRef Directory, StringRef FileName, unsigned FileNumber) {
|
||||
return Header.getFile(Directory, FileName, FileNumber);
|
||||
}
|
||||
|
||||
unsigned MCDwarfLineTableHeader::getFile(StringRef Directory, StringRef FileName, unsigned FileNumber) {
|
||||
// Make space for this FileNumber in the MCDwarfFiles vector if needed.
|
||||
MCDwarfFiles.resize(FileNumber + 1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user