mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Added minimum Dwarf aranges. Cleaned up some section headers. Line number
support now works in gdb. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25417 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -855,12 +855,12 @@ public:
|
|||||||
}
|
}
|
||||||
void EmitLabel(const char *Tag, unsigned Number) const;
|
void EmitLabel(const char *Tag, unsigned Number) const;
|
||||||
|
|
||||||
/// EmitLabelReference - Emit a reference to a label.
|
/// EmitReference - Emit a reference to a label.
|
||||||
///
|
///
|
||||||
void EmitLabelReference(DWLabel Label) const {
|
void EmitReference(DWLabel Label) const {
|
||||||
EmitLabelReference(Label.Tag, Label.Number);
|
EmitReference(Label.Tag, Label.Number);
|
||||||
}
|
}
|
||||||
void EmitLabelReference(const char *Tag, unsigned Number) const;
|
void EmitReference(const char *Tag, unsigned Number) const;
|
||||||
|
|
||||||
/// EmitDifference - Emit the difference between two labels. Some
|
/// EmitDifference - Emit the difference between two labels. Some
|
||||||
/// assemblers do not behave with absolute expressions with data directives,
|
/// assemblers do not behave with absolute expressions with data directives,
|
||||||
@ -967,11 +967,11 @@ private:
|
|||||||
///
|
///
|
||||||
void EndModule();
|
void EndModule();
|
||||||
|
|
||||||
/// BeginFunction - Emit pre-function debug information.
|
/// BeginFunction - Gather pre-function debug information.
|
||||||
///
|
///
|
||||||
void BeginFunction();
|
void BeginFunction();
|
||||||
|
|
||||||
/// EndFunction - Emit post-function debug information.
|
/// EndFunction - Gather and emit post-function debug information.
|
||||||
///
|
///
|
||||||
void EndFunction();
|
void EndFunction();
|
||||||
};
|
};
|
||||||
|
@ -701,7 +701,7 @@ unsigned DIEString::SizeOf(const DwarfWriter &DW, unsigned Form) const {
|
|||||||
/// EmitValue - Emit label value.
|
/// EmitValue - Emit label value.
|
||||||
///
|
///
|
||||||
void DIELabel::EmitValue(const DwarfWriter &DW, unsigned Form) const {
|
void DIELabel::EmitValue(const DwarfWriter &DW, unsigned Form) const {
|
||||||
DW.EmitLabelReference(Value);
|
DW.EmitReference(Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// SizeOf - Determine size of label value in bytes.
|
/// SizeOf - Determine size of label value in bytes.
|
||||||
@ -893,9 +893,9 @@ void DwarfWriter::EmitLabel(const char *Tag, unsigned Number) const {
|
|||||||
O << ":\n";
|
O << ":\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitLabelReference - Emit a reference to a label.
|
/// EmitReference - Emit a reference to a label.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitLabelReference(const char *Tag, unsigned Number) const {
|
void DwarfWriter::EmitReference(const char *Tag, unsigned Number) const {
|
||||||
if (AddressSize == 4)
|
if (AddressSize == 4)
|
||||||
O << Asm->Data32bitsDirective;
|
O << Asm->Data32bitsDirective;
|
||||||
else
|
else
|
||||||
@ -1113,7 +1113,7 @@ void DwarfWriter::EmitDebugInfo() const {
|
|||||||
|
|
||||||
EmitShort(DWARF_VERSION); EOL("DWARF version number");
|
EmitShort(DWARF_VERSION); EOL("DWARF version number");
|
||||||
|
|
||||||
EmitLabelReference("abbrev", 0); EOL("Offset Into Abbrev. Section");
|
EmitReference("abbrev", 0); EOL("Offset Into Abbrev. Section");
|
||||||
|
|
||||||
EmitByte(AddressSize); EOL("Address Size (in bytes)");
|
EmitByte(AddressSize); EOL("Address Size (in bytes)");
|
||||||
|
|
||||||
@ -1252,7 +1252,7 @@ void DwarfWriter::EmitDebugLines() const {
|
|||||||
EmitByte(0); EOL("Extended Op");
|
EmitByte(0); EOL("Extended Op");
|
||||||
EmitByte(4 + 1); EOL("Op size");
|
EmitByte(4 + 1); EOL("Op size");
|
||||||
EmitByte(DW_LNE_set_address); EOL("DW_LNE_set_address");
|
EmitByte(DW_LNE_set_address); EOL("DW_LNE_set_address");
|
||||||
EmitLabelReference("loc", i + 1); EOL("Location label");
|
EmitReference("loc", i + 1); EOL("Location label");
|
||||||
|
|
||||||
// If change of source, then switch to the new source.
|
// If change of source, then switch to the new source.
|
||||||
if (Source != LineInfo->getSourceID()) {
|
if (Source != LineInfo->getSourceID()) {
|
||||||
@ -1297,41 +1297,79 @@ void DwarfWriter::EmitDebugLines() const {
|
|||||||
/// EmitDebugFrame - Emit visible names into a debug frame section.
|
/// EmitDebugFrame - Emit visible names into a debug frame section.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitDebugFrame() {
|
void DwarfWriter::EmitDebugFrame() {
|
||||||
|
// FIXME - Should be per frame
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitDebugPubNames - Emit visible names into a debug pubnames section.
|
/// EmitDebugPubNames - Emit visible names into a debug pubnames section.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitDebugPubNames() {
|
void DwarfWriter::EmitDebugPubNames() {
|
||||||
|
// Start the dwarf pubnames section.
|
||||||
|
Asm->SwitchSection(DwarfPubNamesSection, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitDebugPubTypes - Emit visible names into a debug pubtypes section.
|
/// EmitDebugPubTypes - Emit visible names into a debug pubtypes section.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitDebugPubTypes() {
|
void DwarfWriter::EmitDebugPubTypes() {
|
||||||
|
// Start the dwarf pubtypes section.
|
||||||
|
Asm->SwitchSection(DwarfPubTypesSection, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitDebugStr - Emit visible names into a debug str section.
|
/// EmitDebugStr - Emit visible names into a debug str section.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitDebugStr() {
|
void DwarfWriter::EmitDebugStr() {
|
||||||
|
// Start the dwarf str section.
|
||||||
|
Asm->SwitchSection(DwarfStrSection, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitDebugLoc - Emit visible names into a debug loc section.
|
/// EmitDebugLoc - Emit visible names into a debug loc section.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitDebugLoc() {
|
void DwarfWriter::EmitDebugLoc() {
|
||||||
|
// Start the dwarf loc section.
|
||||||
|
Asm->SwitchSection(DwarfLocSection, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitDebugARanges - Emit visible names into a debug aranges section.
|
/// EmitDebugARanges - Emit visible names into a debug aranges section.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitDebugARanges() {
|
void DwarfWriter::EmitDebugARanges() {
|
||||||
|
// Start the dwarf aranges section.
|
||||||
|
Asm->SwitchSection(DwarfARangesSection, 0);
|
||||||
|
|
||||||
|
// FIXME - Mock up
|
||||||
|
|
||||||
|
// Don't include size of length
|
||||||
|
EmitLong(0x1c); EOL("Length of Address Ranges Info");
|
||||||
|
|
||||||
|
EmitShort(DWARF_VERSION); EOL("Dwarf Version");
|
||||||
|
|
||||||
|
EmitReference("info", 0); EOL("Offset of Compilation Unit Info");
|
||||||
|
|
||||||
|
EmitByte(AddressSize); EOL("Size of Address");
|
||||||
|
|
||||||
|
EmitByte(0); EOL("Size of Segment Descriptor");
|
||||||
|
|
||||||
|
EmitShort(0); EOL("Pad (1)");
|
||||||
|
EmitShort(0); EOL("Pad (2)");
|
||||||
|
|
||||||
|
// Range 1
|
||||||
|
EmitReference("text_begin", 0); EOL("Address");
|
||||||
|
EmitDifference("text_end", 0, "text_begin", 0); EOL("Length");
|
||||||
|
|
||||||
|
EmitLong(0); EOL("EOM (1)");
|
||||||
|
EmitLong(0); EOL("EOM (2)");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitDebugRanges - Emit visible names into a debug ranges section.
|
/// EmitDebugRanges - Emit visible names into a debug ranges section.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitDebugRanges() {
|
void DwarfWriter::EmitDebugRanges() {
|
||||||
|
// Start the dwarf ranges section.
|
||||||
|
Asm->SwitchSection(DwarfRangesSection, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitDebugMacInfo - Emit visible names into a debug macinfo section.
|
/// EmitDebugMacInfo - Emit visible names into a debug macinfo section.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EmitDebugMacInfo() {
|
void DwarfWriter::EmitDebugMacInfo() {
|
||||||
|
// Start the dwarf macinfo section.
|
||||||
|
Asm->SwitchSection(DwarfMacInfoSection, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ShouldEmitDwarf - Determine if Dwarf declarations should be made.
|
/// ShouldEmitDwarf - Determine if Dwarf declarations should be made.
|
||||||
@ -1397,7 +1435,9 @@ void DwarfWriter::EndModule() {
|
|||||||
EOL("Dwarf End Module");
|
EOL("Dwarf End Module");
|
||||||
|
|
||||||
// Standard sections final addresses.
|
// Standard sections final addresses.
|
||||||
|
Asm->SwitchSection(TextSection, 0);
|
||||||
EmitLabel("text_end", 0);
|
EmitLabel("text_end", 0);
|
||||||
|
Asm->SwitchSection(DataSection, 0);
|
||||||
EmitLabel("data_end", 0);
|
EmitLabel("data_end", 0);
|
||||||
|
|
||||||
// Get directory and source information.
|
// Get directory and source information.
|
||||||
@ -1451,14 +1491,14 @@ void DwarfWriter::EndModule() {
|
|||||||
EmitDebugMacInfo();
|
EmitDebugMacInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// BeginFunction - Emit pre-function debug information.
|
/// BeginFunction - Gather pre-function debug information.
|
||||||
///
|
///
|
||||||
void DwarfWriter::BeginFunction() {
|
void DwarfWriter::BeginFunction() {
|
||||||
if (!ShouldEmitDwarf()) return;
|
if (!ShouldEmitDwarf()) return;
|
||||||
EOL("Dwarf Begin Function");
|
EOL("Dwarf Begin Function");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EndFunction - Emit post-function debug information.
|
/// EndFunction - Gather and emit post-function debug information.
|
||||||
///
|
///
|
||||||
void DwarfWriter::EndFunction() {
|
void DwarfWriter::EndFunction() {
|
||||||
if (!ShouldEmitDwarf()) return;
|
if (!ShouldEmitDwarf()) return;
|
||||||
|
@ -215,17 +215,18 @@ namespace {
|
|||||||
: DwarfWriter(o, ap)
|
: DwarfWriter(o, ap)
|
||||||
{
|
{
|
||||||
needsSet = true;
|
needsSet = true;
|
||||||
DwarfAbbrevSection = ".section __DWARFA,__debug_abbrev,regular,debug";
|
DwarfAbbrevSection = ".section __DWARFA,__debug_abbrev";
|
||||||
DwarfInfoSection = ".section __DWARFA,__debug_info,regular,debug";
|
DwarfInfoSection = ".section __DWARFA,__debug_info";
|
||||||
DwarfLineSection = ".section __DWARFA,__debug_line,regular,debug";
|
DwarfLineSection = ".section __DWARFA,__debug_line";
|
||||||
DwarfFrameSection = ".section __DWARFA,__debug_frame,regular,debug";
|
DwarfFrameSection =
|
||||||
DwarfPubNamesSection = ".section __DWARFA,__debug_pubnames,regular,debug";
|
".section __DWARFA,__debug_frame,,coalesced,no_toc+strip_static_syms";
|
||||||
DwarfPubTypesSection = ".section __DWARFA,__debug_pubtypes,regular,debug";
|
DwarfPubNamesSection = ".section __DWARFA,__debug_pubnames";
|
||||||
DwarfStrSection = ".section __DWARFA,__debug_str,regular,debug";
|
DwarfPubTypesSection = ".section __DWARFA,__debug_pubtypes";
|
||||||
DwarfLocSection = ".section __DWARFA,__debug_loc,regular,debug";
|
DwarfStrSection = ".section __DWARFA,__debug_str";
|
||||||
DwarfARangesSection = ".section __DWARFA,__debug_aranges,regular,debug";
|
DwarfLocSection = ".section __DWARFA,__debug_loc";
|
||||||
DwarfRangesSection = ".section __DWARFA,__debug_ranges,regular,debug";
|
DwarfARangesSection = ".section __DWARFA,__debug_aranges";
|
||||||
DwarfMacInfoSection = ".section __DWARFA,__debug_macinfo,regular,debug";
|
DwarfRangesSection = ".section __DWARFA,__debug_ranges";
|
||||||
|
DwarfMacInfoSection = ".section __DWARFA,__debug_macinfo";
|
||||||
TextSection = ".text";
|
TextSection = ".text";
|
||||||
DataSection = ".data";
|
DataSection = ".data";
|
||||||
}
|
}
|
||||||
@ -233,7 +234,6 @@ namespace {
|
|||||||
|
|
||||||
/// DarwinAsmPrinter - PowerPC assembly printer, customized for Darwin/Mac OS
|
/// DarwinAsmPrinter - PowerPC assembly printer, customized for Darwin/Mac OS
|
||||||
/// X
|
/// X
|
||||||
///
|
|
||||||
struct DarwinAsmPrinter : public PPCAsmPrinter {
|
struct DarwinAsmPrinter : public PPCAsmPrinter {
|
||||||
|
|
||||||
DarwinDwarfWriter DW;
|
DarwinDwarfWriter DW;
|
||||||
|
Reference in New Issue
Block a user