mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-01 17:32:36 +00:00
It may not be an option to skip .debug_line if there are file reference in already emitted debug info. So, for now, emit dummy line table entry to make older linker and assemblers happy. This is not a new behavior, original AsmPrinter emitted similar line table entries.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120760 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3fda44f276
commit
5113cdbfff
@ -180,9 +180,6 @@ namespace llvm {
|
|||||||
bool hasDwarfFiles() const {
|
bool hasDwarfFiles() const {
|
||||||
return !MCDwarfFiles.empty();
|
return !MCDwarfFiles.empty();
|
||||||
}
|
}
|
||||||
bool hasDwarfLines() const {
|
|
||||||
return !MCLineSectionOrder.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::vector<MCDwarfFile *> &getMCDwarfFiles() {
|
const std::vector<MCDwarfFile *> &getMCDwarfFiles() {
|
||||||
return MCDwarfFiles;
|
return MCDwarfFiles;
|
||||||
|
@ -209,7 +209,8 @@ namespace llvm {
|
|||||||
// This emits the Dwarf file and the line tables.
|
// This emits the Dwarf file and the line tables.
|
||||||
//
|
//
|
||||||
static void Emit(MCStreamer *MCOS, const MCSection *DwarfLineSection,
|
static void Emit(MCStreamer *MCOS, const MCSection *DwarfLineSection,
|
||||||
MCSectionData *DLS, int PointerSize);
|
MCSectionData *DLS, int PointerSize,
|
||||||
|
const MCSection *TextSection = NULL);
|
||||||
};
|
};
|
||||||
|
|
||||||
class MCDwarfLineAddr {
|
class MCDwarfLineAddr {
|
||||||
|
@ -885,9 +885,9 @@ void MCAsmStreamer::EmitRawText(StringRef String) {
|
|||||||
|
|
||||||
void MCAsmStreamer::Finish() {
|
void MCAsmStreamer::Finish() {
|
||||||
// Dump out the dwarf file & directory tables and line tables.
|
// Dump out the dwarf file & directory tables and line tables.
|
||||||
if (getContext().hasDwarfFiles() && getContext().hasDwarfLines() && TLOF) {
|
if (getContext().hasDwarfFiles() && TLOF) {
|
||||||
MCDwarfFileTable::Emit(this, TLOF->getDwarfLineSection(), NULL,
|
MCDwarfFileTable::Emit(this, TLOF->getDwarfLineSection(), NULL,
|
||||||
PointerSize);
|
PointerSize, TLOF->getTextSection());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,7 +241,8 @@ static inline void EmitDwarfLineTable(MCStreamer *MCOS,
|
|||||||
void MCDwarfFileTable::Emit(MCStreamer *MCOS,
|
void MCDwarfFileTable::Emit(MCStreamer *MCOS,
|
||||||
const MCSection *DwarfLineSection,
|
const MCSection *DwarfLineSection,
|
||||||
MCSectionData *DLS,
|
MCSectionData *DLS,
|
||||||
int PointerSize) {
|
int PointerSize,
|
||||||
|
const MCSection *TextSection) {
|
||||||
// Switch to the section where the table will be emitted into.
|
// Switch to the section where the table will be emitted into.
|
||||||
MCOS->SwitchSection(DwarfLineSection);
|
MCOS->SwitchSection(DwarfLineSection);
|
||||||
|
|
||||||
@ -339,6 +340,23 @@ void MCDwarfFileTable::Emit(MCStreamer *MCOS,
|
|||||||
delete Line;
|
delete Line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (TextSection && MCLineSectionOrder.begin() == MCLineSectionOrder.end()) {
|
||||||
|
// Emit dummy entry if line table is empty.
|
||||||
|
|
||||||
|
MCOS->SwitchSection(TextSection);
|
||||||
|
MCSymbol *SectionEnd = MCOS->getContext().CreateTempSymbol();
|
||||||
|
// Set the value of the symbol, as we are at the end of the section.
|
||||||
|
MCOS->EmitLabel(SectionEnd);
|
||||||
|
|
||||||
|
// Switch back the the dwarf line section.
|
||||||
|
MCOS->SwitchSection(DwarfLineSection);
|
||||||
|
|
||||||
|
// emit the sequence to set the address
|
||||||
|
EmitDwarfSetAddress(MCOS, SectionEnd, PointerSize);
|
||||||
|
// emit the sequence for the LineDelta (from 1) and a zero address delta.
|
||||||
|
MCDwarfLineAddr::Emit(MCOS, INT64_MAX, 0);
|
||||||
|
}
|
||||||
|
|
||||||
// This is the end of the section, so set the value of the symbol at the end
|
// This is the end of the section, so set the value of the symbol at the end
|
||||||
// of this section (that was used in a previous expression).
|
// of this section (that was used in a previous expression).
|
||||||
MCOS->EmitLabel(LineEndSym);
|
MCOS->EmitLabel(LineEndSym);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user