mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-23 20:29:30 +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 <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
class MCAsmBackend;
|
class MCAsmBackend;
|
||||||
@ -174,38 +175,49 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class MCDwarfFileTable {
|
struct MCDwarfLineTableHeader {
|
||||||
MCSymbol *Label;
|
MCSymbol *Label;
|
||||||
SmallVector<std::string, 3> MCDwarfDirs;
|
SmallVector<std::string, 3> MCDwarfDirs;
|
||||||
SmallVector<MCDwarfFile, 3> MCDwarfFiles;
|
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;
|
MCLineSection MCLineSections;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//
|
|
||||||
// This emits the Dwarf file and the line tables for all Compile Units.
|
// This emits the Dwarf file and the line tables for all Compile Units.
|
||||||
//
|
|
||||||
static const MCSymbol *Emit(MCStreamer *MCOS);
|
static const MCSymbol *Emit(MCStreamer *MCOS);
|
||||||
//
|
|
||||||
// This emits the Dwarf file and the line tables for a given Compile Unit.
|
// This emits the Dwarf file and the line tables for a given Compile Unit.
|
||||||
//
|
|
||||||
const MCSymbol *EmitCU(MCStreamer *MCOS) const;
|
const MCSymbol *EmitCU(MCStreamer *MCOS) const;
|
||||||
|
|
||||||
unsigned getFile(StringRef Directory, StringRef FileName, unsigned FileNumber);
|
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 {
|
const SmallVectorImpl<std::string> &getMCDwarfDirs() const {
|
||||||
return MCDwarfDirs;
|
return Header.MCDwarfDirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
SmallVectorImpl<std::string> &getMCDwarfDirs() {
|
SmallVectorImpl<std::string> &getMCDwarfDirs() {
|
||||||
return MCDwarfDirs;
|
return Header.MCDwarfDirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
const SmallVectorImpl<MCDwarfFile> &getMCDwarfFiles() const {
|
const SmallVectorImpl<MCDwarfFile> &getMCDwarfFiles() const {
|
||||||
return MCDwarfFiles;
|
return Header.MCDwarfFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
SmallVectorImpl<MCDwarfFile> &getMCDwarfFiles() {
|
SmallVectorImpl<MCDwarfFile> &getMCDwarfFiles() {
|
||||||
return MCDwarfFiles;
|
return Header.MCDwarfFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCLineSection &getMCLineSections() const {
|
const MCLineSection &getMCLineSections() const {
|
||||||
@ -214,14 +226,6 @@ public:
|
|||||||
MCLineSection &getMCLineSections() {
|
MCLineSection &getMCLineSections() {
|
||||||
return MCLineSections;
|
return MCLineSections;
|
||||||
}
|
}
|
||||||
|
|
||||||
MCSymbol *getLabel() const {
|
|
||||||
return Label;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setLabel(MCSymbol *Label) {
|
|
||||||
this->Label = Label;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class MCDwarfLineAddr {
|
class MCDwarfLineAddr {
|
||||||
|
@ -224,11 +224,9 @@ const MCSymbol *MCDwarfFileTable::Emit(MCStreamer *MCOS) {
|
|||||||
return LineStartSym;
|
return LineStartSym;
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const {
|
std::pair<MCSymbol *, MCSymbol *> MCDwarfLineTableHeader::Emit(MCStreamer *MCOS) const {
|
||||||
MCContext &context = MCOS->getContext();
|
MCContext &context = MCOS->getContext();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Create a symbol at the beginning of the line table.
|
// Create a symbol at the beginning of the line table.
|
||||||
MCSymbol *LineStartSym = Label;
|
MCSymbol *LineStartSym = Label;
|
||||||
if (!LineStartSym)
|
if (!LineStartSym)
|
||||||
@ -302,6 +300,14 @@ const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const {
|
|||||||
// end of the prologue (that was used in a previous expression).
|
// end of the prologue (that was used in a previous expression).
|
||||||
MCOS->EmitLabel(ProEndSym);
|
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.
|
// Put out the line tables.
|
||||||
for (const auto &LineSec : MCLineSections.getMCLineEntries())
|
for (const auto &LineSec : MCLineSections.getMCLineEntries())
|
||||||
EmitDwarfLineTable(MCOS, LineSec.first, LineSec.second);
|
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) {
|
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.
|
// Make space for this FileNumber in the MCDwarfFiles vector if needed.
|
||||||
MCDwarfFiles.resize(FileNumber + 1);
|
MCDwarfFiles.resize(FileNumber + 1);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user