LLVM 17.0.0git
DWP.h
Go to the documentation of this file.
1#ifndef LLVM_DWP_DWP_H
2#define LLVM_DWP_DWP_H
3
4#include "DWPStringPool.h"
5#include "llvm/ADT/ArrayRef.h"
10#include "llvm/MC/MCSection.h"
11#include "llvm/MC/MCStreamer.h"
13#include "llvm/Support/Error.h"
14#include <deque>
15#include <vector>
16
17namespace llvm {
20 std::string Name;
21 std::string DWOName;
23};
24
25// Holds data for Skeleton, Split Compilation, and Type Unit Headers (only in
26// v5) as defined in Dwarf 5 specification, 7.5.1.2, 7.5.1.3 and Dwarf 4
27// specification 7.5.1.1.
29 // unit_length field. Note that the type is uint64_t even in 32-bit dwarf.
31
32 // version field.
34
35 // unit_type field. Initialized only if Version >= 5.
36 uint8_t UnitType = 0;
37
38 // address_size field.
39 uint8_t AddrSize = 0;
40
41 // debug_abbrev_offset field. Note that the type is uint64_t even in 32-bit
42 // dwarf. It is assumed to be 0.
44
45 // dwo_id field. This resides in the header only if Version >= 5.
46 // In earlier versions, it is read from DW_AT_GNU_dwo_id.
47 std::optional<uint64_t> Signature;
48
49 // Derived from the length of Length field.
51
52 // The size of the Header in bytes. This is derived while parsing the header,
53 // and is stored as a convenience.
54 uint8_t HeaderSize = 0;
55};
56
59 const char *Name = "";
60 const char *DWOName = "";
61};
62
64
65unsigned getContributionIndex(DWARFSectionKind Kind, uint32_t IndexVersion);
66
68 const StringMap<std::pair<MCSection *, DWARFSectionKind>> &KnownSections,
69 const MCSection *StrSection, const MCSection *StrOffsetSection,
70 const MCSection *TypesSection, const MCSection *CUIndexSection,
71 const MCSection *TUIndexSection, const MCSection *InfoSection,
72 const object::SectionRef &Section, MCStreamer &Out,
73 std::deque<SmallString<32>> &UncompressedSections,
74 uint32_t (&ContributionOffsets)[8], UnitIndexEntry &CurEntry,
75 StringRef &CurStrSection, StringRef &CurStrOffsetSection,
76 std::vector<StringRef> &CurTypesSection,
77 std::vector<StringRef> &CurInfoSection, StringRef &AbbrevSection,
78 StringRef &CurCUIndexSection, StringRef &CurTUIndexSection,
79 std::vector<std::pair<DWARFSectionKind, uint32_t>> &SectionLength);
80
82
84 MCSection *StrOffsetSection,
85 StringRef CurStrSection,
86 StringRef CurStrOffsetSection, uint16_t Version);
87
88Error buildDuplicateError(const std::pair<uint64_t, UnitIndexEntry> &PrevE,
89 const CompileUnitIdentifiers &ID, StringRef DWPName);
90
91void writeIndex(MCStreamer &Out, MCSection *Section,
92 ArrayRef<unsigned> ContributionOffsets,
93 const MapVector<uint64_t, UnitIndexEntry> &IndexEntries,
94 uint32_t IndexVersion);
95
96} // namespace llvm
97#endif // LLVM_DWP_DWP_H
Analysis containing CSE Info
Definition: CSEInfo.cpp:27
This file implements a map that provides insertion order iteration.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:41
Lightweight error class with error context and mandatory checking.
Definition: Error.h:156
Tagged union holding either a T or a Error.
Definition: Error.h:470
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Definition: MCSection.h:39
Streaming machine code generation interface.
Definition: MCStreamer.h:212
This class implements a map that also provides access to all stored values in a deterministic order.
Definition: MapVector.h:37
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
Definition: SmallString.h:26
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition: StringMap.h:111
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
This is a value type class that represents a single section in the list of sections in the object fil...
Definition: ObjectFile.h:80
UnitType
Constants for unit types in DWARF v5.
Definition: Dwarf.h:543
DwarfFormat
Constants that define the DWARF format as 32 or 64 bit.
Definition: Dwarf.h:91
@ DWARF32
Definition: Dwarf.h:91
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
Error write(MCStreamer &Out, ArrayRef< std::string > Inputs)
Definition: DWP.cpp:551
Error buildDuplicateError(const std::pair< uint64_t, UnitIndexEntry > &PrevE, const CompileUnitIdentifiers &ID, StringRef DWPName)
Definition: DWP.cpp:473
void writeIndex(MCStreamer &Out, MCSection *Section, ArrayRef< unsigned > ContributionOffsets, const MapVector< uint64_t, UnitIndexEntry > &IndexEntries, uint32_t IndexVersion)
Definition: DWP.cpp:419
void writeStringsAndOffsets(MCStreamer &Out, DWPStringPool &Strings, MCSection *StrOffsetSection, StringRef CurStrSection, StringRef CurStrOffsetSection, uint16_t Version)
Definition: DWP.cpp:368
DWARFSectionKind
The enum of section identifiers to be used in internal interfaces.
Error handleSection(const StringMap< std::pair< MCSection *, DWARFSectionKind > > &KnownSections, const MCSection *StrSection, const MCSection *StrOffsetSection, const MCSection *TypesSection, const MCSection *CUIndexSection, const MCSection *TUIndexSection, const MCSection *InfoSection, const object::SectionRef &Section, MCStreamer &Out, std::deque< SmallString< 32 > > &UncompressedSections, uint32_t(&ContributionOffsets)[8], UnitIndexEntry &CurEntry, StringRef &CurStrSection, StringRef &CurStrOffsetSection, std::vector< StringRef > &CurTypesSection, std::vector< StringRef > &CurInfoSection, StringRef &AbbrevSection, StringRef &CurCUIndexSection, StringRef &CurTUIndexSection, std::vector< std::pair< DWARFSectionKind, uint32_t > > &SectionLength)
Definition: DWP.cpp:482
unsigned getContributionIndex(DWARFSectionKind Kind, uint32_t IndexVersion)
Definition: DWP.cpp:160
Expected< InfoSectionUnitHeader > parseInfoSectionUnitHeader(StringRef Info)
Definition: DWP.cpp:309
const char * DWOName
Definition: DWP.h:60
const char * Name
Definition: DWP.h:59
dwarf::DwarfFormat Format
Definition: DWP.h:50
std::optional< uint64_t > Signature
Definition: DWP.h:47
uint64_t DebugAbbrevOffset
Definition: DWP.h:43
StringRef DWPName
Definition: DWP.h:22
std::string DWOName
Definition: DWP.h:21
DWARFUnitIndex::Entry::SectionContribution Contributions[8]
Definition: DWP.h:19
std::string Name
Definition: DWP.h:20