mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-21 19:32:16 +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 {
|
||||
return !MCDwarfFiles.empty();
|
||||
}
|
||||
bool hasDwarfLines() const {
|
||||
return !MCLineSectionOrder.empty();
|
||||
}
|
||||
|
||||
const std::vector<MCDwarfFile *> &getMCDwarfFiles() {
|
||||
return MCDwarfFiles;
|
||||
|
@ -209,7 +209,8 @@ namespace llvm {
|
||||
// This emits the Dwarf file and the line tables.
|
||||
//
|
||||
static void Emit(MCStreamer *MCOS, const MCSection *DwarfLineSection,
|
||||
MCSectionData *DLS, int PointerSize);
|
||||
MCSectionData *DLS, int PointerSize,
|
||||
const MCSection *TextSection = NULL);
|
||||
};
|
||||
|
||||
class MCDwarfLineAddr {
|
||||
|
@ -885,9 +885,9 @@ void MCAsmStreamer::EmitRawText(StringRef String) {
|
||||
|
||||
void MCAsmStreamer::Finish() {
|
||||
// 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,
|
||||
PointerSize);
|
||||
PointerSize, TLOF->getTextSection());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -241,7 +241,8 @@ static inline void EmitDwarfLineTable(MCStreamer *MCOS,
|
||||
void MCDwarfFileTable::Emit(MCStreamer *MCOS,
|
||||
const MCSection *DwarfLineSection,
|
||||
MCSectionData *DLS,
|
||||
int PointerSize) {
|
||||
int PointerSize,
|
||||
const MCSection *TextSection) {
|
||||
// Switch to the section where the table will be emitted into.
|
||||
MCOS->SwitchSection(DwarfLineSection);
|
||||
|
||||
@ -339,6 +340,23 @@ void MCDwarfFileTable::Emit(MCStreamer *MCOS,
|
||||
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
|
||||
// of this section (that was used in a previous expression).
|
||||
MCOS->EmitLabel(LineEndSym);
|
||||
|
Loading…
x
Reference in New Issue
Block a user