LLVM 17.0.0git
|
The Dwarf streaming logic. More...
#include "llvm/DWARFLinker/DWARFStreamer.h"
Public Member Functions | |
DwarfStreamer (DWARFLinker::OutputFileType OutFileType, raw_pwrite_stream &OutFile, std::function< StringRef(StringRef Input)> Translator, DWARFLinker::messageHandler Warning) | |
Error | init (Triple TheTriple, StringRef Swift5ReflectionSegmentName) |
void | finish () override |
Dump the file to the disk. | |
AsmPrinter & | getAsmPrinter () const override |
Returns underlying AsmPrinter. | |
void | switchToDebugInfoSection (unsigned DwarfVersion) |
Set the current output section to debug_info and change the MC Dwarf version to DwarfVersion . | |
void | emitCompileUnitHeader (CompileUnit &Unit, unsigned DwarfVersion) override |
Emit the compilation unit header for Unit in the debug_info section. | |
void | emitDIE (DIE &Die) override |
Recursively emit the DIE tree rooted at Die . | |
void | emitAbbrevs (const std::vector< std::unique_ptr< DIEAbbrev > > &Abbrevs, unsigned DwarfVersion) override |
Emit the abbreviation table Abbrevs to the debug_abbrev section. | |
void | emitPaperTrailWarningsDie (DIE &Die) override |
Emit DIE containing warnings. | |
void | emitSectionContents (StringRef SecData, StringRef SecName) override |
Emit contents of section SecName From Obj. | |
void | emitStrings (const NonRelocatableStringpool &Pool) override |
Emit the string table described by Pool into .debug_str table. | |
void | emitLineStrings (const NonRelocatableStringpool &Pool) override |
Emit the string table described by Pool into .debug_line_str table. | |
void | emitSwiftAST (StringRef Buffer) override |
Emit the swift_ast section stored in Buffer . | |
void | emitSwiftReflectionSection (llvm::binaryformat::Swift5ReflectionSectionKind ReflSectionKind, StringRef Buffer, uint32_t Alignment, uint32_t Size) override |
Emit the swift reflection section stored in Buffer . | |
MCSymbol * | emitDwarfDebugRangeListHeader (const CompileUnit &Unit) override |
Emit debug ranges(.debug_ranges, .debug_rnglists) header. | |
void | emitDwarfDebugRangeListFragment (const CompileUnit &Unit, const AddressRanges &LinkedRanges, PatchLocation Patch) override |
Emit debug ranges(.debug_ranges, .debug_rnglists) fragment. | |
void | emitDwarfDebugRangeListFooter (const CompileUnit &Unit, MCSymbol *EndLabel) override |
Emit debug ranges(.debug_ranges, .debug_rnglists) footer. | |
MCSymbol * | emitDwarfDebugLocListHeader (const CompileUnit &Unit) override |
Emit debug locations(.debug_loc, .debug_loclists) header. | |
void | emitDwarfDebugLocListFragment (const CompileUnit &Unit, const DWARFLocationExpressionsVector &LinkedLocationExpression, PatchLocation Patch) override |
Emit debug ranges(.debug_loc, .debug_loclists) fragment. | |
void | emitDwarfDebugLocListFooter (const CompileUnit &Unit, MCSymbol *EndLabel) override |
Emit debug ranges(.debug_loc, .debug_loclists) footer. | |
void | emitDwarfDebugArangesTable (const CompileUnit &Unit, const AddressRanges &LinkedRanges) override |
Emit .debug_aranges entries for Unit . | |
uint64_t | getRangesSectionSize () const override |
Returns size of generated .debug_ranges section. | |
uint64_t | getRngListsSectionSize () const override |
Returns size of generated .debug_rnglists section. | |
void | emitLineTableForUnit (const DWARFDebugLine::LineTable &LineTable, const CompileUnit &Unit, OffsetsStringPool &DebugStrPool, OffsetsStringPool &DebugLineStrPool) override |
Emit .debug_line table entry for specified LineTable . | |
uint64_t | getLineSectionSize () const override |
Returns size of generated .debug_line section. | |
void | emitPubNamesForUnit (const CompileUnit &Unit) override |
Emit the .debug_pubnames contribution for Unit . | |
void | emitPubTypesForUnit (const CompileUnit &Unit) override |
Emit the .debug_pubtypes contribution for Unit . | |
void | emitCIE (StringRef CIEBytes) override |
Emit a CIE. | |
void | emitFDE (uint32_t CIEOffset, uint32_t AddreSize, uint64_t Address, StringRef Bytes) override |
Emit an FDE with data Bytes . | |
void | emitDebugNames (AccelTable< DWARF5AccelTableStaticData > &Table) override |
Emit DWARF debug names. | |
void | emitAppleNamespaces (AccelTable< AppleAccelTableStaticOffsetData > &Table) override |
Emit Apple namespaces accelerator table. | |
void | emitAppleNames (AccelTable< AppleAccelTableStaticOffsetData > &Table) override |
Emit Apple names accelerator table. | |
void | emitAppleObjc (AccelTable< AppleAccelTableStaticOffsetData > &Table) override |
Emit Apple Objective-C accelerator table. | |
void | emitAppleTypes (AccelTable< AppleAccelTableStaticTypeData > &Table) override |
Emit Apple type accelerator table. | |
uint64_t | getFrameSectionSize () const override |
Returns size of generated .debug_frame section. | |
uint64_t | getDebugInfoSectionSize () const override |
Returns size of generated .debug_info section. | |
uint64_t | getDebugMacInfoSectionSize () const override |
Returns size of generated .debug_macinfo section. | |
uint64_t | getDebugMacroSectionSize () const override |
Returns size of generated .debug_macro section. | |
uint64_t | getLocListsSectionSize () const override |
Returns size of generated .debug_loclists section. | |
void | emitMacroTables (DWARFContext *Context, const Offset2UnitMap &UnitMacroMap, OffsetsStringPool &StringPool) override |
Emit all available macro tables(DWARFv4 and DWARFv5). | |
![]() | |
virtual | ~DwarfEmitter () |
virtual void | emitPaperTrailWarningsDie (DIE &Die)=0 |
Emit DIE containing warnings. | |
virtual void | emitSectionContents (StringRef SecData, StringRef SecName)=0 |
Emit section named SecName with data SecData. | |
virtual void | emitAbbrevs (const std::vector< std::unique_ptr< DIEAbbrev > > &Abbrevs, unsigned DwarfVersion)=0 |
Emit the abbreviation table Abbrevs to the .debug_abbrev section. | |
virtual void | emitStrings (const NonRelocatableStringpool &Pool)=0 |
Emit the string table described by Pool into .debug_str table. | |
virtual void | emitLineStrings (const NonRelocatableStringpool &Pool)=0 |
Emit the string table described by Pool into .debug_line_str table. | |
virtual void | emitDebugNames (AccelTable< DWARF5AccelTableStaticData > &Table)=0 |
Emit DWARF debug names. | |
virtual void | emitAppleNamespaces (AccelTable< AppleAccelTableStaticOffsetData > &Table)=0 |
Emit Apple namespaces accelerator table. | |
virtual void | emitAppleNames (AccelTable< AppleAccelTableStaticOffsetData > &Table)=0 |
Emit Apple names accelerator table. | |
virtual void | emitAppleObjc (AccelTable< AppleAccelTableStaticOffsetData > &Table)=0 |
Emit Apple Objective-C accelerator table. | |
virtual void | emitAppleTypes (AccelTable< AppleAccelTableStaticTypeData > &Table)=0 |
Emit Apple type accelerator table. | |
virtual MCSymbol * | emitDwarfDebugRangeListHeader (const CompileUnit &Unit)=0 |
Emit debug ranges (.debug_ranges, .debug_rnglists) header. | |
virtual void | emitDwarfDebugRangeListFragment (const CompileUnit &Unit, const AddressRanges &LinkedRanges, PatchLocation Patch)=0 |
Emit debug ranges (.debug_ranges, .debug_rnglists) fragment. | |
virtual void | emitDwarfDebugRangeListFooter (const CompileUnit &Unit, MCSymbol *EndLabel)=0 |
Emit debug ranges (.debug_ranges, .debug_rnglists) footer. | |
virtual MCSymbol * | emitDwarfDebugLocListHeader (const CompileUnit &Unit)=0 |
Emit debug locations (.debug_loc, .debug_loclists) header. | |
virtual void | emitDwarfDebugLocListFragment (const CompileUnit &Unit, const DWARFLocationExpressionsVector &LinkedLocationExpression, PatchLocation Patch)=0 |
Emit debug locations (.debug_loc, .debug_loclists) fragment. | |
virtual void | emitDwarfDebugLocListFooter (const CompileUnit &Unit, MCSymbol *EndLabel)=0 |
Emit debug locations (.debug_loc, .debug_loclists) footer. | |
virtual void | emitDwarfDebugArangesTable (const CompileUnit &Unit, const AddressRanges &LinkedRanges)=0 |
Emit .debug_aranges entries for Unit . | |
virtual void | emitLineTableForUnit (const DWARFDebugLine::LineTable &LineTable, const CompileUnit &Unit, OffsetsStringPool &DebugStrPool, OffsetsStringPool &DebugLineStrPool)=0 |
Emit specified LineTable into .debug_line table. | |
virtual void | emitPubNamesForUnit (const CompileUnit &Unit)=0 |
Emit the .debug_pubnames contribution for Unit . | |
virtual void | emitPubTypesForUnit (const CompileUnit &Unit)=0 |
Emit the .debug_pubtypes contribution for Unit . | |
virtual void | emitCIE (StringRef CIEBytes)=0 |
Emit a CIE. | |
virtual void | emitFDE (uint32_t CIEOffset, uint32_t AddreSize, uint64_t Address, StringRef Bytes)=0 |
Emit an FDE with data Bytes . | |
virtual void | emitCompileUnitHeader (CompileUnit &Unit, unsigned DwarfVersion)=0 |
Emit the compilation unit header for Unit in the .debug_info section. | |
virtual void | emitDIE (DIE &Die)=0 |
Recursively emit the DIE tree rooted at Die . | |
virtual void | emitMacroTables (DWARFContext *Context, const Offset2UnitMap &UnitMacroMap, OffsetsStringPool &StringPool)=0 |
Emit all available macro tables(DWARFv4 and DWARFv5). | |
virtual uint64_t | getLineSectionSize () const =0 |
Returns size of generated .debug_line section. | |
virtual uint64_t | getFrameSectionSize () const =0 |
Returns size of generated .debug_frame section. | |
virtual uint64_t | getRangesSectionSize () const =0 |
Returns size of generated .debug_ranges section. | |
virtual uint64_t | getRngListsSectionSize () const =0 |
Returns size of generated .debug_rnglists section. | |
virtual uint64_t | getDebugInfoSectionSize () const =0 |
Returns size of generated .debug_info section. | |
virtual uint64_t | getDebugMacInfoSectionSize () const =0 |
Returns size of generated .debug_macinfo section. | |
virtual uint64_t | getDebugMacroSectionSize () const =0 |
Returns size of generated .debug_macro section. | |
virtual uint64_t | getLocListsSectionSize () const =0 |
Returns size of generated .debug_loclists section. | |
virtual void | finish ()=0 |
Dump the file to the disk. | |
virtual void | emitSwiftAST (StringRef Buffer)=0 |
Emit the swift_ast section stored in Buffer . | |
virtual void | emitSwiftReflectionSection (llvm::binaryformat::Swift5ReflectionSectionKind ReflSectionKind, StringRef Buffer, uint32_t Alignment, uint32_t Size)=0 |
Emit the swift reflection section stored in Buffer . | |
virtual AsmPrinter & | getAsmPrinter () const =0 |
Returns underlying AsmPrinter. | |
The Dwarf streaming logic.
All interactions with the MC layer that is used to build the debug information binary representation are handled in this class.
Definition at line 41 of file DWARFStreamer.h.
|
inline |
Definition at line 43 of file DWARFStreamer.h.
|
overridevirtual |
Emit the abbreviation table Abbrevs
to the debug_abbrev section.
Emit the Abbrevs
array as the shared abbreviation table for the linked Dwarf file.
Implements llvm::DwarfEmitter.
Definition at line 197 of file DWARFStreamer.cpp.
References llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit Apple names accelerator table.
Implements llvm::DwarfEmitter.
Definition at line 304 of file DWARFStreamer.cpp.
References llvm::emitAppleAccelTable().
|
overridevirtual |
Emit Apple namespaces accelerator table.
Implements llvm::DwarfEmitter.
Definition at line 296 of file DWARFStreamer.cpp.
References llvm::emitAppleAccelTable().
|
overridevirtual |
Emit Apple Objective-C accelerator table.
Implements llvm::DwarfEmitter.
Definition at line 312 of file DWARFStreamer.cpp.
References llvm::emitAppleAccelTable().
|
overridevirtual |
Emit Apple type accelerator table.
Implements llvm::DwarfEmitter.
Definition at line 320 of file DWARFStreamer.cpp.
References llvm::emitAppleAccelTable().
|
overridevirtual |
Emit a CIE.
Emit a CIE into the debug_frame section.
Implements llvm::DwarfEmitter.
Definition at line 1066 of file DWARFStreamer.cpp.
References llvm::MCStreamer::emitBytes(), llvm::StringRef::size(), and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit the compilation unit header for Unit
in the debug_info section.
As a side effect, this also switches the current Dwarf version of the MC layer to the one of U.getOrigUnit().
A Dwarf 4 section header is encoded as: uint32_t Unit length (omitting this field) uint16_t Version uint32_t Abbreviation table offset uint8_t Address size Leading to a total of 11 bytes.
A Dwarf 5 section header is encoded as: uint32_t Unit length (omitting this field) uint16_t Version uint8_t Unit type uint8_t Address size uint32_t Abbreviation table offset Leading to a total of 12 bytes.
The start of the unit within its section.
Implements llvm::DwarfEmitter.
Definition at line 162 of file DWARFStreamer.cpp.
References switchToDebugInfoSection().
|
overridevirtual |
Emit DWARF debug names.
Implements llvm::DwarfEmitter.
Definition at line 273 of file DWARFStreamer.cpp.
References llvm::emitDWARF5AccelTable().
|
overridevirtual |
Recursively emit the DIE tree rooted at Die
.
Implements llvm::DwarfEmitter.
Definition at line 206 of file DWARFStreamer.cpp.
References llvm::DIE::getSize(), and llvm::MCStreamer::switchSection().
Referenced by emitPaperTrailWarningsDie().
|
overridevirtual |
Emit .debug_aranges entries for Unit
.
Implements llvm::DwarfEmitter.
Definition at line 348 of file DWARFStreamer.cpp.
References llvm::dwarf::DW_ARANGES_VERSION, llvm::MCStreamer::emitIntValue(), llvm::offsetToAlignment(), and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit debug ranges(.debug_loc, .debug_loclists) footer.
Emit debug locations(.debug_loc, .debug_loclists) footer.
Implements llvm::DwarfEmitter.
Definition at line 557 of file DWARFStreamer.cpp.
References llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit debug ranges(.debug_loc, .debug_loclists) fragment.
Emit debug locations(.debug_loc, .debug_loclists) fragment.
Implements llvm::DwarfEmitter.
Definition at line 544 of file DWARFStreamer.cpp.
|
overridevirtual |
Emit debug locations(.debug_loc, .debug_loclists) header.
Implements llvm::DwarfEmitter.
Definition at line 508 of file DWARFStreamer.cpp.
References llvm::MCStreamer::emitInt16(), llvm::MCStreamer::emitInt32(), llvm::MCStreamer::emitInt8(), and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit debug ranges(.debug_ranges, .debug_rnglists) footer.
Implements llvm::DwarfEmitter.
Definition at line 467 of file DWARFStreamer.cpp.
References llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit debug ranges(.debug_ranges, .debug_rnglists) fragment.
Implements llvm::DwarfEmitter.
Definition at line 456 of file DWARFStreamer.cpp.
|
overridevirtual |
Emit debug ranges(.debug_ranges, .debug_rnglists) header.
Implements llvm::DwarfEmitter.
Definition at line 421 of file DWARFStreamer.cpp.
References llvm::MCStreamer::emitInt16(), llvm::MCStreamer::emitInt32(), llvm::MCStreamer::emitInt8(), and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit an FDE with data Bytes
.
Emit a FDE into the debug_frame section.
FDEBytes
contains the FDE data without the length, CIE offset and address which will be replaced with the parameter values.
Implements llvm::DwarfEmitter.
Definition at line 1076 of file DWARFStreamer.cpp.
References llvm::Address, llvm::MCStreamer::emitBytes(), llvm::MCStreamer::emitIntValue(), llvm::StringRef::size(), and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit the string table described by Pool
into .debug_line_str table.
Emit the debug_line_str section stored in Pool
.
Implements llvm::DwarfEmitter.
Definition at line 262 of file DWARFStreamer.cpp.
References llvm::NonRelocatableStringpool::getEntriesForEmission().
|
overridevirtual |
Emit .debug_line table entry for specified LineTable
.
Implements llvm::DwarfEmitter.
Definition at line 652 of file DWARFStreamer.cpp.
References llvm::dwarf::DW_LENGTH_DWARF64, llvm::dwarf::DWARF64, llvm::MCStreamer::emitInt32(), llvm::dwarf::FormParams::Format, llvm::DWARFDebugLine::Prologue::FormParams, llvm::DWARFDebugLine::LineTable::Prologue, and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit all available macro tables(DWARFv4 and DWARFv5).
Use UnitMacroMap
to get compilation unit by macro table offset. Side effects: Fill StringPool
with macro strings, update DW_AT_macro_info, DW_AT_macros attributes for corresponding compile units.
Implements llvm::DwarfEmitter.
Definition at line 1087 of file DWARFStreamer.cpp.
References assert(), Context, and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit DIE containing warnings.
Implements llvm::DwarfEmitter.
Definition at line 238 of file DWARFStreamer.cpp.
References emitDIE(), getAsmPrinter(), llvm::DIE::getSize(), and switchToDebugInfoSection().
|
overridevirtual |
Emit the .debug_pubnames contribution for Unit
.
Emit .debug_pubnames for Unit
.
Implements llvm::DwarfEmitter.
Definition at line 1054 of file DWARFStreamer.cpp.
|
overridevirtual |
Emit the .debug_pubtypes contribution for Unit
.
Emit .debug_pubtypes for Unit
.
Implements llvm::DwarfEmitter.
Definition at line 1060 of file DWARFStreamer.cpp.
|
overridevirtual |
Emit contents of section SecName From Obj.
Implements llvm::DwarfEmitter.
Definition at line 213 of file DWARFStreamer.cpp.
References llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Default(), llvm::MCStreamer::emitBytes(), and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit the string table described by Pool
into .debug_str table.
Emit the debug_str section stored in Pool
.
Implements llvm::DwarfEmitter.
Definition at line 250 of file DWARFStreamer.cpp.
References llvm::NonRelocatableStringpool::getEntriesForEmission().
|
overridevirtual |
Emit the swift_ast section stored in Buffer
.
Emit the swift_ast section stored in Buffers
.
Implements llvm::DwarfEmitter.
Definition at line 329 of file DWARFStreamer.cpp.
References llvm::MCStreamer::emitBytes(), llvm::MCSection::setAlignment(), and llvm::MCStreamer::switchSection().
|
overridevirtual |
Emit the swift reflection section stored in Buffer
.
Implements llvm::DwarfEmitter.
Definition at line 336 of file DWARFStreamer.cpp.
References llvm::MCStreamer::emitBytes(), llvm::MCSection::setAlignment(), and llvm::MCStreamer::switchSection().
|
overridevirtual |
Dump the file to the disk.
Implements llvm::DwarfEmitter.
Definition at line 139 of file DWARFStreamer.cpp.
References llvm::MCStreamer::finish().
|
inlineoverridevirtual |
Returns underlying AsmPrinter.
Implements llvm::DwarfEmitter.
Definition at line 55 of file DWARFStreamer.h.
Referenced by emitPaperTrailWarningsDie().
|
inlineoverridevirtual |
Returns size of generated .debug_info section.
Implements llvm::DwarfEmitter.
Definition at line 172 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_macinfo section.
Implements llvm::DwarfEmitter.
Definition at line 176 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_macro section.
Implements llvm::DwarfEmitter.
Definition at line 180 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_frame section.
Implements llvm::DwarfEmitter.
Definition at line 170 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_line section.
Implements llvm::DwarfEmitter.
Definition at line 136 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_loclists section.
Implements llvm::DwarfEmitter.
Definition at line 184 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_ranges section.
Implements llvm::DwarfEmitter.
Definition at line 124 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_rnglists section.
Implements llvm::DwarfEmitter.
Definition at line 126 of file DWARFStreamer.h.
Definition at line 31 of file DWARFStreamer.cpp.
References llvm::DWARFLinker::Assembly, llvm::Target::createAsmPrinter(), llvm::Target::createAsmStreamer(), llvm::Target::createMCAsmBackend(), llvm::Target::createMCAsmInfo(), llvm::Target::createMCCodeEmitter(), llvm::Target::createMCInstPrinter(), llvm::Target::createMCInstrInfo(), llvm::Target::createMCObjectFileInfo(), llvm::Target::createMCObjectStreamer(), llvm::Target::createMCRegInfo(), llvm::Target::createMCSubtargetInfo(), llvm::MCAsmBackend::createObjectWriter(), llvm::createStringError(), llvm::Target::createTargetMachine(), llvm::Triple::getTriple(), llvm::mc::InitMCTargetOptionsFromFlags(), llvm::TargetRegistry::lookupTarget(), llvm::MCTargetOptions::MCIncrementalLinkerCompatible, llvm::MCTargetOptions::MCRelaxAll, llvm::DWARFLinker::Object, and llvm::Error::success().
void llvm::DwarfStreamer::switchToDebugInfoSection | ( | unsigned | DwarfVersion | ) |
Set the current output section to debug_info and change the MC Dwarf version to DwarfVersion
.
Definition at line 141 of file DWARFStreamer.cpp.
References llvm::MCStreamer::switchSection().
Referenced by emitCompileUnitHeader(), and emitPaperTrailWarningsDie().