summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2013-12-13 01:06:41 +0000
committerDavid Blaikie <dblaikie@gmail.com>2013-12-13 01:06:41 +0000
commitbaaf74d4ca5efcf23a3f4fb896e550a35b147a2f (patch)
treef77684663efd8e758b884791231066a04aff62bf /llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
parentb4119f7459cd35e99957edf86800eb762d736098 (diff)
downloadbcm5719-llvm-baaf74d4ca5efcf23a3f4fb896e550a35b147a2f.tar.gz
bcm5719-llvm-baaf74d4ca5efcf23a3f4fb896e550a35b147a2f.zip
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. Originally committed as r197073 and reverted in r197079. This commit originally got jumbled up with another build-breaking commit and I can't find the failures I thought this caused anymore. Recommitting to hopefully get some clean buildbot results to work from. I have a sneaking suspicion there's unstable output in the comdat group output of MCStreamer... llvm-svn: 197197
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
index 26b5f09004e..6242a058cf8 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
@@ -413,14 +413,15 @@ public:
/// Compute the size of a header for this unit, not including the initial
/// length field.
- unsigned getHeaderSize() const {
+ virtual unsigned getHeaderSize() const {
return sizeof(int16_t) + // DWARF version number
sizeof(int32_t) + // Offset Into Abbrev. Section
sizeof(int8_t); // Pointer Size (in bytes)
}
/// Emit the header for this unit, not including the initial length field.
- void emitHeader(const MCSection *ASection, const MCSymbol *ASectionSym) const;
+ virtual void emitHeader(const MCSection *ASection,
+ const MCSymbol *ASectionSym) const;
protected:
/// getOrCreateStaticMemberDIE - Create new static data member DIE.
@@ -513,12 +514,25 @@ public:
class DwarfTypeUnit : public DwarfUnit {
private:
uint16_t Language;
+ uint64_t TypeSignature;
+ const DIE *Ty;
public:
DwarfTypeUnit(unsigned UID, DIE *D, uint16_t Language, AsmPrinter *A,
DwarfDebug *DW, DwarfFile *DWU);
+ void setTypeSignature(uint64_t Signature) { TypeSignature = Signature; }
+ void setType(const DIE *Ty) { this->Ty = Ty; }
+
uint16_t getLanguage() const LLVM_OVERRIDE { return Language; }
+ /// Emit the header for this unit, not including the initial length field.
+ void emitHeader(const MCSection *ASection, const MCSymbol *ASectionSym) const
+ LLVM_OVERRIDE;
+ unsigned getHeaderSize() const LLVM_OVERRIDE {
+ return DwarfUnit::getHeaderSize() + sizeof(uint64_t) + // Type Signature
+ sizeof(uint32_t); // Type DIE Offset
+ }
+ void initSection(const MCSection *Section);
};
} // end llvm namespace
#endif
OpenPOWER on IntegriCloud