summaryrefslogtreecommitdiff
path: root/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2013-12-11 21:36:27 +0000
committerDavid Blaikie <dblaikie@gmail.com>2013-12-11 21:36:27 +0000
commit3d2670cc54ede7f00b496e38fe05ef3ff35b7f6c (patch)
tree1c205b7fa6956f192ae7966a6cb283293a3c4ae3 /lib/CodeGen/AsmPrinter/DwarfUnit.cpp
parentbd71b0a1617f77f61d23c38ebe079fff71289164 (diff)
downloadllvm-3d2670cc54ede7f00b496e38fe05ef3ff35b7f6c.tar.gz
llvm-3d2670cc54ede7f00b496e38fe05ef3ff35b7f6c.tar.bz2
llvm-3d2670cc54ede7f00b496e38fe05ef3ff35b7f6c.tar.xz
DebugInfo: Move type units into the debug_types section with appropriate comdat grouping and type unit headers
This commit does not complete the type units feature - there are issues around fission support (skeletal type units, pubtypes/pubnames) and hashing of some types including those containing references to types in other type units. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197073 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfUnit.cpp')
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfUnit.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
index f87480d290..709f5bec03 100644
--- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
@@ -1997,3 +1997,27 @@ void DwarfUnit::emitHeader(const MCSection *ASection,
Asm->OutStreamer.AddComment("Address Size (in bytes)");
Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
}
+
+void DwarfTypeUnit::emitHeader(const MCSection *ASection,
+ const MCSymbol *ASectionSym) const {
+ DwarfUnit::emitHeader(ASection, ASectionSym);
+ Asm->OutStreamer.AddComment("Type Signature");
+ Asm->OutStreamer.EmitIntValue(TypeSignature, sizeof(TypeSignature));
+ Asm->OutStreamer.AddComment("Type DIE Offset");
+ Asm->OutStreamer.EmitIntValue(Ty->getOffset(), sizeof(Ty->getOffset()));
+}
+
+void DwarfTypeUnit::initSection(const MCSection *Section) {
+ assert(!this->Section);
+ this->Section = Section;
+ // Since each type unit is contained in its own COMDAT section, the begin
+ // label and the section label are the same. Using the begin label emission in
+ // DwarfDebug to emit the section label as well is slightly subtle/sneaky, but
+ // the only other alternative of lazily constructing start-of-section labels
+ // and storing a mapping in DwarfDebug (or AsmPrinter).
+ this->SectionSym = this->LabelBegin =
+ Asm->GetTempSymbol(Section->getLabelBeginName(), getUniqueID());
+ this->LabelEnd =
+ Asm->GetTempSymbol(Section->getLabelEndName(), getUniqueID());
+ this->LabelRange = Asm->GetTempSymbol("gnu_ranges", getUniqueID());
+}