Go to the documentation of this file.
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");
@ IMAGE_SCN_ALIGN_64BYTES
@ IMAGE_SCN_ALIGN_2048BYTES
This is an optimization pass for GlobalISel generic memory operations.
@ IMAGE_SCN_LNK_NRELOC_OVFL
@ IMAGE_SCN_ALIGN_16BYTES
@ IMAGE_SCN_CNT_UNINITIALIZED_DATA
@ IMAGE_SCN_ALIGN_256BYTES
SymbolKind
Duplicate copy of the above enum, but using the official CV names.
@ IMAGE_SCN_MEM_NOT_PAGED
@ IMAGE_SCN_MEM_DISCARDABLE
Data in the SUBSEC_FRAMEDATA subection.
@ IMAGE_SCN_ALIGN_512BYTES
bool empty() const
empty - Check if the array is empty.
auto formatv(const char *Fmt, Ts &&... Vals) -> formatv_object< decltype(std::make_tuple(detail::build_format_adapter(std::forward< Ts >(Vals))...))>
@ IMAGE_SCN_CNT_INITIALIZED_DATA
@ SC
CHAIN = SC CHAIN, Imm128 - System call.
(vector float) vec_cmpeq(*A, *B) C
@ IMAGE_SCN_ALIGN_32BYTES
@ IMAGE_SCN_MEM_PURGEABLE
std::string typesetItemList(ArrayRef< std::string > Opts, uint32_t IndentLevel, uint32_t GroupSize, StringRef Sep)
std::string formatChunkKind(codeview::DebugSubsectionKind Kind, bool Friendly=true)
ArrayRef< T > drop_front(size_t N=1) const
Drop the first N elements of the array.
@ IMAGE_SCN_ALIGN_8192BYTES
std::string formatSegmentOffset(uint16_t Segment, uint32_t Offset)
detail::RepeatAdapter< T > fmt_repeat(T &&Item, size_t Count)
std::string formatTypeLeafKind(codeview::TypeLeafKind K)
StringRef - Represent a constant reference to a string, i.e.
@ IMAGE_SCN_ALIGN_4096BYTES
@ IMAGE_SCN_ALIGN_128BYTES
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
std::string formatSectionCharacteristics(uint32_t IndentLevel, uint32_t C, uint32_t FlagsPerLine, StringRef Separator, CharacteristicStyle Style=CharacteristicStyle::HeaderDefinition)
ArrayRef< T > take_front(size_t N=1) const
Return a copy of *this with only the first N elements.
@ IMAGE_SCN_ALIGN_1024BYTES
std::string typesetStringList(uint32_t IndentLevel, ArrayRef< StringRef > Strings)
std::string formatUnknownEnum(T Value)
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
size_t size() const
size - Get the array size.
@ IMAGE_SCN_MEM_NOT_CACHED
std::string formatSymbolKind(codeview::SymbolKind K)