LLVM
15.0.0git
|
The Dwarf streaming logic. More...
#include "llvm/DWARFLinker/DWARFStreamer.h"
Public Member Functions | |
DwarfStreamer (OutputFileType OutFileType, raw_pwrite_stream &OutFile, std::function< StringRef(StringRef Input)> Translator, messageHandler Error, messageHandler Warning) | |
bool | init (Triple TheTriple, StringRef Swift5ReflectionSegmentName) |
void | finish () |
Dump the file to the disk. More... | |
AsmPrinter & | getAsmPrinter () const |
void | switchToDebugInfoSection (unsigned DwarfVersion) |
Set the current output section to debug_info and change the MC Dwarf version to DwarfVersion . More... | |
void | emitCompileUnitHeader (CompileUnit &Unit, unsigned DwarfVersion) override |
Emit the compilation unit header for Unit in the debug_info section. More... | |
void | emitDIE (DIE &Die) override |
Recursively emit the DIE tree rooted at Die . More... | |
void | emitAbbrevs (const std::vector< std::unique_ptr< DIEAbbrev >> &Abbrevs, unsigned DwarfVersion) override |
Emit the abbreviation table Abbrevs to the debug_abbrev section. More... | |
void | emitPaperTrailWarningsDie (DIE &Die) override |
Emit DIE containing warnings. More... | |
void | emitSectionContents (StringRef SecData, StringRef SecName) override |
Emit contents of section SecName From Obj. More... | |
void | emitStrings (const NonRelocatableStringpool &Pool) override |
Emit the string table described by Pool . More... | |
void | emitSwiftAST (StringRef Buffer) |
Emit the swift_ast section stored in Buffer . More... | |
void | emitSwiftReflectionSection (llvm::binaryformat::Swift5ReflectionSectionKind ReflSectionKind, StringRef Buffer, uint32_t Alignment, uint32_t Size) |
Emit the swift reflection section stored in Buffer . More... | |
void | emitRangesEntries (int64_t UnitPcOffset, uint64_t OrigLowPc, const FunctionIntervals::const_iterator &FuncRange, const std::vector< DWARFDebugRangeList::RangeListEntry > &Entries, unsigned AddressSize) override |
Emit debug_ranges for FuncRange by translating the original Entries . More... | |
void | emitUnitRangesEntries (CompileUnit &Unit, bool DoRangesSection) override |
Emit debug_aranges entries for Unit and if DoRangesSection is true, also emit the debug_ranges entries for the DW_TAG_compile_unit's DW_AT_ranges attribute. More... | |
uint64_t | getRangesSectionSize () const override |
Returns size of generated .debug_ranges section. More... | |
void | emitLocationsForUnit (const CompileUnit &Unit, DWARFContext &Dwarf, std::function< void(StringRef, SmallVectorImpl< uint8_t > &)> ProcessExpr) override |
Emit the debug_loc contribution for Unit by copying the entries from Dwarf and offsetting them. More... | |
void | emitLineTableForUnit (MCDwarfLineTableParams Params, StringRef PrologueBytes, unsigned MinInstLength, std::vector< DWARFDebugLine::Row > &Rows, unsigned AdddressSize) override |
Emit the line table described in Rows into the debug_line section. More... | |
void | translateLineTable (DataExtractor LineData, uint64_t Offset) override |
Copy the debug_line over to the updated binary while unobfuscating the file names and directories. More... | |
uint64_t | getLineSectionSize () const override |
Returns size of generated .debug_line section. More... | |
void | emitPubNamesForUnit (const CompileUnit &Unit) override |
Emit the .debug_pubnames contribution for Unit . More... | |
void | emitPubTypesForUnit (const CompileUnit &Unit) override |
Emit the .debug_pubtypes contribution for Unit . More... | |
void | emitCIE (StringRef CIEBytes) override |
Emit a CIE. More... | |
void | emitFDE (uint32_t CIEOffset, uint32_t AddreSize, uint32_t Address, StringRef Bytes) override |
Emit an FDE with data Bytes . More... | |
void | emitDebugNames (AccelTable< DWARF5AccelTableStaticData > &Table) override |
Emit DWARF debug names. More... | |
void | emitAppleNamespaces (AccelTable< AppleAccelTableStaticOffsetData > &Table) override |
Emit Apple namespaces accelerator table. More... | |
void | emitAppleNames (AccelTable< AppleAccelTableStaticOffsetData > &Table) override |
Emit Apple names accelerator table. More... | |
void | emitAppleObjc (AccelTable< AppleAccelTableStaticOffsetData > &Table) override |
Emit Apple Objective-C accelerator table. More... | |
void | emitAppleTypes (AccelTable< AppleAccelTableStaticTypeData > &Table) override |
Emit Apple type accelerator table. More... | |
uint64_t | getFrameSectionSize () const override |
Returns size of generated .debug_frame section. More... | |
uint64_t | getDebugInfoSectionSize () const override |
Returns size of generated .debug_info section. More... | |
![]() | |
virtual | ~DwarfEmitter () |
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 45 of file DWARFStreamer.h.
|
inline |
Definition at line 47 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 174 of file DWARFStreamer.cpp.
References llvm::MCStreamer::SwitchSection().
|
overridevirtual |
Emit Apple names accelerator table.
Implements llvm::DwarfEmitter.
Definition at line 274 of file DWARFStreamer.cpp.
References llvm::emitAppleAccelTable().
|
overridevirtual |
Emit Apple namespaces accelerator table.
Implements llvm::DwarfEmitter.
Definition at line 266 of file DWARFStreamer.cpp.
References llvm::emitAppleAccelTable().
|
overridevirtual |
Emit Apple Objective-C accelerator table.
Implements llvm::DwarfEmitter.
Definition at line 282 of file DWARFStreamer.cpp.
References llvm::emitAppleAccelTable().
|
overridevirtual |
Emit Apple type accelerator table.
Implements llvm::DwarfEmitter.
Definition at line 290 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 786 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 139 of file DWARFStreamer.cpp.
References switchToDebugInfoSection().
|
overridevirtual |
Emit DWARF debug names.
Implements llvm::DwarfEmitter.
Definition at line 243 of file DWARFStreamer.cpp.
References llvm::emitDWARF5AccelTable().
|
overridevirtual |
Recursively emit the DIE tree rooted at Die
.
Implements llvm::DwarfEmitter.
Definition at line 183 of file DWARFStreamer.cpp.
References llvm::DIE::getSize(), and llvm::MCStreamer::SwitchSection().
Referenced by emitPaperTrailWarningsDie().
|
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 796 of file DWARFStreamer.cpp.
References llvm::MCStreamer::emitBytes(), llvm::MCStreamer::emitIntValue(), llvm::StringRef::size(), and llvm::MCStreamer::SwitchSection().
|
overridevirtual |
Emit the line table described in Rows
into the debug_line section.
Implements llvm::DwarfEmitter.
Definition at line 505 of file DWARFStreamer.cpp.
References llvm::AddressDelta, llvm::MCStreamer::emitBytes(), llvm::MCStreamer::emitIntValue(), llvm::MCStreamer::emitLabel(), llvm::MCStreamer::emitSLEB128IntValue(), llvm::MCStreamer::emitULEB128IntValue(), llvm::MCDwarfLineAddr::Encode(), llvm::getSLEB128Size(), llvm::getULEB128Size(), llvm::max(), llvm::jitlink::x86_64::PointerSize, llvm::SmallVectorImpl< T >::resize(), llvm::StringRef::size(), llvm::raw_svector_ostream::str(), and llvm::MCStreamer::SwitchSection().
|
overridevirtual |
Emit the debug_loc contribution for Unit
by copying the entries from Dwarf
and offsetting them.
Emit location lists for Unit
and update attributes to point to the new entries.
Update the location attributes to point to the new entries.
Implements llvm::DwarfEmitter.
Definition at line 441 of file DWARFStreamer.cpp.
References Attributes, llvm::DWARFSection::Data, llvm::Data, llvm::Dwarf, llvm::DWARFUnit::getUnitDIE(), High, llvm::Low, llvm::max(), llvm::SmallVectorImpl< T >::reserve(), llvm::SmallVectorImpl< T >::resize(), llvm::StringRef::substr(), llvm::MCStreamer::SwitchSection(), and llvm::dwarf::toAddress().
|
overridevirtual |
Emit DIE containing warnings.
Implements llvm::DwarfEmitter.
Definition at line 210 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 774 of file DWARFStreamer.cpp.
|
overridevirtual |
Emit the .debug_pubtypes contribution for Unit
.
Emit .debug_pubtypes for Unit
.
Implements llvm::DwarfEmitter.
Definition at line 780 of file DWARFStreamer.cpp.
|
overridevirtual |
Emit debug_ranges for FuncRange
by translating the original Entries
.
Emit the debug_range section contents for FuncRange
by translating the original Entries
.
The debug_range section format is totally trivial, consisting just of pairs of address sized addresses describing the ranges.
Implements llvm::DwarfEmitter.
Definition at line 322 of file DWARFStreamer.cpp.
|
overridevirtual |
Emit contents of section SecName From Obj.
Implements llvm::DwarfEmitter.
Definition at line 190 of file DWARFStreamer.cpp.
References llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Default(), llvm::MCStreamer::emitBytes(), llvm::objcopy::SecData, and llvm::MCStreamer::SwitchSection().
|
overridevirtual |
Emit the string table described by Pool
.
Emit the debug_str section stored in Pool
.
Implements llvm::DwarfEmitter.
Definition at line 222 of file DWARFStreamer.cpp.
void llvm::DwarfStreamer::emitSwiftAST | ( | StringRef | Buffer | ) |
Emit the swift_ast section stored in Buffer
.
Emit the swift_ast section stored in Buffers
.
Definition at line 299 of file DWARFStreamer.cpp.
References Align, llvm::MCStreamer::emitBytes(), llvm::MCSection::setAlignment(), and llvm::MCStreamer::SwitchSection().
void llvm::DwarfStreamer::emitSwiftReflectionSection | ( | llvm::binaryformat::Swift5ReflectionSectionKind | ReflSectionKind, |
StringRef | Buffer, | ||
uint32_t | Alignment, | ||
uint32_t | Size | ||
) |
Emit the swift reflection section stored in Buffer
.
Definition at line 306 of file DWARFStreamer.cpp.
References Align, llvm::MCStreamer::emitBytes(), llvm::MCSection::setAlignment(), and llvm::MCStreamer::SwitchSection().
|
overridevirtual |
Emit debug_aranges entries for Unit
and if DoRangesSection
is true, also emit the debug_ranges entries for the DW_TAG_compile_unit's DW_AT_ranges attribute.
Emit the debug_aranges contribution of a unit and if DoDebugRanges
is true the debug_range contents for a compile_unit level DW_AT_ranges attribute (Which are basically the same thing with a different base address).
Just aggregate all the ranges gathered inside that unit.
Implements llvm::DwarfEmitter.
Definition at line 361 of file DWARFStreamer.cpp.
void llvm::DwarfStreamer::finish | ( | ) |
Dump the file to the disk.
Definition at line 116 of file DWARFStreamer.cpp.
References llvm::MCStreamer::Finish().
|
inline |
Definition at line 58 of file DWARFStreamer.h.
Referenced by emitPaperTrailWarningsDie().
|
inlineoverridevirtual |
Returns size of generated .debug_info section.
Implements llvm::DwarfEmitter.
Definition at line 164 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_frame section.
Implements llvm::DwarfEmitter.
Definition at line 162 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_line section.
Implements llvm::DwarfEmitter.
Definition at line 128 of file DWARFStreamer.h.
|
inlineoverridevirtual |
Returns size of generated .debug_ranges section.
Implements llvm::DwarfEmitter.
Definition at line 108 of file DWARFStreamer.h.
Definition at line 29 of file DWARFStreamer.cpp.
References llvm::Assembly, Context, 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::Target::createTargetMachine(), llvm::Triple::getTriple(), llvm::mc::InitMCTargetOptionsFromFlags(), llvm::TargetRegistry::lookupTarget(), llvm::MCTargetOptions::MCIncrementalLinkerCompatible, llvm::MCTargetOptions::MCRelaxAll, llvm::None, and llvm::Object.
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 118 of file DWARFStreamer.cpp.
References llvm::MCStreamer::SwitchSection().
Referenced by emitCompileUnitHeader(), and emitPaperTrailWarningsDie().
|
overridevirtual |
Copy the debug_line over to the updated binary while unobfuscating the file names and directories.
Implements llvm::DwarfEmitter.
Definition at line 651 of file DWARFStreamer.cpp.
References llvm::Data, llvm::StringRef::size(), llvm::StringRef::slice(), llvm::MCStreamer::SwitchSection(), and Version.