26 while (!Opts.
empty()) {
30 Result += join(ThisGroup, Sep);
42 std::string Result =
"[";
43 for (
const auto &S : Strings) {
67 "merged assembly input");
82 "DEBUG_S_CROSSSCOPEIMPORTS");
84 "DEBUG_S_CROSSSCOPEEXPORTS");
87 "DEBUG_S_FUNC_MDTOKEN_MAP");
89 "DEBUG_S_TYPE_MDTOKEN_MAP");
91 "DEBUG_S_MERGED_ASSEMBLYINPUT");
93 "DEBUG_S_COFF_SYMBOL_RVA");
95 "DEBUG_S_XFGHASH_TYPE");
97 "DEBUG_S_XFGHASH_VIRTUAL");
106#define SYMBOL_RECORD(EnumName, value, name) \
109#define CV_SYMBOL(EnumName, value) SYMBOL_RECORD(EnumName, value, EnumName)
110#include "llvm/DebugInfo/CodeView/CodeViewSymbols.def"
117#define TYPE_RECORD(EnumName, value, name) \
120#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
122 return formatv(
"UNKNOWN RECORD ({0:X})",
123 static_cast<std::underlying_type_t<TypeLeafKind>
>(K))
132#define PUSH_CHARACTERISTIC_FLAG(Enum, TheOpt, Value, Style, Descriptive) \
133 PUSH_FLAG(Enum, TheOpt, Value, \
134 ((Style == CharacteristicStyle::HeaderDefinition) ? #TheOpt \
137#define PUSH_MASKED_CHARACTERISTIC_FLAG(Enum, Mask, TheOpt, Value, Style, \
139 PUSH_MASKED_FLAG(Enum, Mask, TheOpt, Value, \
140 ((Style == CharacteristicStyle::HeaderDefinition) \
150 std::vector<std::string> Opts;
161 "uninitialized data");
172 Style,
"1 byte align");
174 Style,
"2 byte align");
176 Style,
"4 byte align");
178 Style,
"8 byte align");
180 Style,
"16 byte align");
182 Style,
"32 byte align");
184 Style,
"64 byte align");
186 Style,
"128 byte align");
188 Style,
"256 byte align");
190 Style,
"512 byte align");
192 Style,
"1024 byte align");
194 Style,
"2048 byte align");
196 Style,
"4096 byte align");
198 Style,
"8192 byte align");
208 "execute permissions");
212 "write permissions");
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
ArrayRef< T > take_front(size_t N=1) const
Return a copy of *this with only the first N elements.
ArrayRef< T > drop_front(size_t N=1) const
Drop the first N elements of the array.
size_t size() const
size - Get the array size.
bool empty() const
empty - Check if the array is empty.
StringRef - Represent a constant reference to a string, i.e.
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
SymbolKind
Duplicate copy of the above enum, but using the official CV names.
std::string formatSegmentOffset(uint16_t Segment, uint32_t Offset)
std::string formatUnknownEnum(T Value)
std::string typesetStringList(uint32_t IndentLevel, ArrayRef< StringRef > Strings)
std::string formatSymbolKind(codeview::SymbolKind K)
std::string formatTypeLeafKind(codeview::TypeLeafKind K)
std::string formatChunkKind(codeview::DebugSubsectionKind Kind, bool Friendly=true)
std::string formatSectionCharacteristics(uint32_t IndentLevel, uint32_t C, uint32_t FlagsPerLine, StringRef Separator, CharacteristicStyle Style=CharacteristicStyle::HeaderDefinition)
std::string typesetItemList(ArrayRef< std::string > Opts, uint32_t IndentLevel, uint32_t GroupSize, StringRef Sep)
This is an optimization pass for GlobalISel generic memory operations.
auto formatv(const char *Fmt, Ts &&... Vals) -> formatv_object< decltype(std::make_tuple(detail::build_format_adapter(std::forward< Ts >(Vals))...))>
detail::RepeatAdapter< T > fmt_repeat(T &&Item, size_t Count)
Data in the SUBSEC_FRAMEDATA subection.