summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-04-04 22:33:59 +0000
committerChris Lattner <sabre@nondot.org>2010-04-04 22:33:59 +0000
commitfa070b01753e2d547539dca4e9d55459c652dc9c (patch)
treeebd70fc418b854d3a30eb7944ef9bbd8cd0638f5
parent2e3ebedc881091fcf0c68aebb48649582689ee78 (diff)
downloadllvm-fa070b01753e2d547539dca4e9d55459c652dc9c.tar.gz
llvm-fa070b01753e2d547539dca4e9d55459c652dc9c.tar.bz2
llvm-fa070b01753e2d547539dca4e9d55459c652dc9c.tar.xz
remove the didInitial ivar, rename emitInitial to be more
descriptive, change EmitSectionOffset back to taking a symbol instead of a string. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100361 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.cpp27
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.h10
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfPrinter.cpp15
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfPrinter.h7
4 files changed, 30 insertions, 29 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 32a632aa33..72bf0ad81a 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -301,8 +301,7 @@ DbgScope::~DbgScope() {
DwarfDebug::DwarfDebug(AsmPrinter *A)
: DwarfPrinter(A), ModuleCU(0),
- AbbreviationsSet(InitAbbreviationsSetSize), Abbreviations(),
- DIEBlocks(), SectionSourceLines(), didInitial(false), shouldEmit(false),
+ AbbreviationsSet(InitAbbreviationsSetSize), shouldEmit(false),
CurrentFnDbgScope(0), DebugTimer(0) {
NextStringPoolNumber = 0;
if (TimePassesIsEnabled)
@@ -1835,7 +1834,7 @@ void DwarfDebug::beginModule(Module *M) {
}
// Emit initial sections
- emitInitial();
+ EmitSectionLabels();
}
/// endModule - Emit all Dwarf sections that should come after the content.
@@ -2438,13 +2437,9 @@ void DwarfDebug::computeSizeAndOffsets() {
CompileUnitOffsets[ModuleCU] = 0;
}
-/// emitInitial - Emit initial Dwarf declarations. This is necessary for cc
+/// EmitSectionLabels - Emit initial Dwarf declarations. This is necessary for cc
/// tools to recognize the object file contains Dwarf information.
-void DwarfDebug::emitInitial() {
- // Check to see if we already emitted intial headers.
- if (didInitial) return;
- didInitial = true;
-
+void DwarfDebug::EmitSectionLabels() {
const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
// Dwarf sections base addresses.
@@ -2566,7 +2561,8 @@ void DwarfDebug::emitDebugInfo() {
Asm->OutStreamer.AddComment("DWARF version number");
Asm->EmitInt16(dwarf::DWARF_VERSION);
Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
- EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"), "section_abbrev");
+ EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
+ Asm->GetTempSymbol("section_abbrev"));
Asm->OutStreamer.AddComment("Address Size (in bytes)");
Asm->EmitInt8(TD->getPointerSize());
@@ -2878,7 +2874,7 @@ emitFunctionDebugFrame(const FunctionDebugFrameInfo &DebugFrameInfo) {
Asm->OutStreamer.AddComment("FDE CIE offset");
EmitSectionOffset(Asm->GetTempSymbol("debug_frame_common"),
- "section_debug_frame");
+ Asm->GetTempSymbol("section_debug_frame"));
Asm->OutStreamer.AddComment("FDE initial location");
MCSymbol *FuncBeginSym =
@@ -2917,7 +2913,7 @@ void DwarfDebug::emitDebugPubNames() {
Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
EmitSectionOffset(Asm->GetTempSymbol("info_begin", ModuleCU->getID()),
- "section_info");
+ Asm->GetTempSymbol("section_info"));
Asm->OutStreamer.AddComment("Compilation Unit Length");
Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", ModuleCU->getID()),
@@ -2961,7 +2957,7 @@ void DwarfDebug::emitDebugPubTypes() {
Asm->OutStreamer.AddComment("Offset of Compilation ModuleCU Info");
EmitSectionOffset(Asm->GetTempSymbol("info_begin", ModuleCU->getID()),
- "section_info");
+ Asm->GetTempSymbol("section_info"));
Asm->OutStreamer.AddComment("Compilation ModuleCU Length");
Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", ModuleCU->getID()),
@@ -3107,10 +3103,11 @@ void DwarfDebug::emitDebugInlineInfo() {
Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
} else
EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
- "section_str");
+ Asm->GetTempSymbol("section_str"));
Asm->OutStreamer.AddComment("Function name");
- EmitSectionOffset(getStringPoolEntry(Name), "section_str");
+ EmitSectionOffset(getStringPoolEntry(Name),
+ Asm->GetTempSymbol("section_str"));
Asm->EmitULEB128(Labels.size(), "Inline count");
for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h
index 5dabd8e48a..2268de528f 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.h
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h
@@ -120,10 +120,6 @@ class DwarfDebug : public DwarfPrinter {
///
std::vector<std::vector<SrcLineInfo> > SectionSourceLines;
- /// didInitial - Flag to indicate if initial emission has been done.
- ///
- bool didInitial;
-
/// shouldEmit - Flag to indicate if debug information should be emitted.
///
bool shouldEmit;
@@ -396,9 +392,9 @@ class DwarfDebug : public DwarfPrinter {
/// constructScopeDIE - Construct a DIE for this scope.
DIE *constructScopeDIE(DbgScope *Scope);
- /// emitInitial - Emit initial Dwarf declarations. This is necessary for cc
- /// tools to recognize the object file contains Dwarf information.
- void emitInitial();
+ /// EmitSectionLabels - Emit initial Dwarf sections with a label at
+ /// the start of each one.
+ void EmitSectionLabels();
/// emitDIE - Recusively Emits a debug information entry.
///
diff --git a/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp b/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
index 895898594e..71bdd52762 100644
--- a/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
@@ -35,11 +35,19 @@ using namespace llvm;
DwarfPrinter::DwarfPrinter(AsmPrinter *A)
: Asm(A), MAI(A->MAI), TD(Asm->TM.getTargetData()),
RI(Asm->TM.getRegisterInfo()), M(NULL), MF(NULL), MMI(NULL),
- SubprogramCount(0) {}
+ SubprogramCount(0) {
+}
+/// EmitSectionOffset - Emit the 4-byte offset of Label from the start of its
+/// section. This can be done with a special directive if the target supports
+/// it (e.g. cygwin) or by emitting it as an offset from a label at the start
+/// of the section.
+///
+/// SectionLabel is a temporary label emitted at the start of the section that
+/// Label lives in.
void DwarfPrinter::EmitSectionOffset(const MCSymbol *Label,
- const char *SectionLabel) {
+ const MCSymbol *SectionLabel) const {
// On COFF targets, we have to emit the special .secrel32 directive.
if (const char *SecOffDir = MAI->getDwarfSectionOffsetDirective()) {
// FIXME: MCize.
@@ -54,8 +62,7 @@ void DwarfPrinter::EmitSectionOffset(const MCSymbol *Label,
return;
}
- MCSymbol *SectionSym = Asm->GetTempSymbol(SectionLabel);
- Asm->EmitLabelDifference(Label, SectionSym, 4);
+ Asm->EmitLabelDifference(Label, SectionLabel, 4);
}
/// EmitFrameMoves - Emit frame instructions to describe the layout of the
diff --git a/lib/CodeGen/AsmPrinter/DwarfPrinter.h b/lib/CodeGen/AsmPrinter/DwarfPrinter.h
index 20bfbf9269..1c18490a71 100644
--- a/lib/CodeGen/AsmPrinter/DwarfPrinter.h
+++ b/lib/CodeGen/AsmPrinter/DwarfPrinter.h
@@ -79,9 +79,10 @@ public:
/// it (e.g. cygwin) or by emitting it as an offset from a label at the start
/// of the section.
///
- /// SectionLabel is the name of a temporary label emitted at the start of the
- /// section.
- void EmitSectionOffset(const MCSymbol *Label, const char *SectionLabel);
+ /// SectionLabel is a temporary label emitted at the start of the section that
+ /// Label lives in.
+ void EmitSectionOffset(const MCSymbol *Label,
+ const MCSymbol *SectionLabel) const;
/// EmitFrameMoves - Emit frame instructions to describe the layout of the
/// frame.