LLVM 20.0.0git
WasmYAML.cpp
Go to the documentation of this file.
1//===- WasmYAML.cpp - Wasm YAMLIO implementation --------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines classes for handling the YAML representation of wasm.
10//
11//===----------------------------------------------------------------------===//
12
14#include "llvm/ADT/StringRef.h"
19
20namespace llvm {
21
22namespace WasmYAML {
23
24// Declared here rather than in the header to comply with:
25// http://llvm.org/docs/CodingStandards.html#provide-a-virtual-method-anchor-for-classes-in-headers
26Section::~Section() = default;
27
28} // end namespace WasmYAML
29
30namespace yaml {
31
33 IO &IO, WasmYAML::FileHeader &FileHdr) {
34 IO.mapRequired("Version", FileHdr.Version);
35}
36
38 WasmYAML::Object &Object) {
39 IO.setContext(&Object);
40 IO.mapTag("!WASM", true);
41 IO.mapRequired("FileHeader", Object.Header);
42 IO.mapOptional("Sections", Object.Sections);
43 IO.setContext(nullptr);
44}
45
46static void commonSectionMapping(IO &IO, WasmYAML::Section &Section) {
47 IO.mapRequired("Type", Section.Type);
48 IO.mapOptional("Relocations", Section.Relocations);
49 IO.mapOptional("HeaderSecSizeEncodingLen", Section.HeaderSecSizeEncodingLen);
50}
51
52static void sectionMapping(IO &IO, WasmYAML::DylinkSection &Section) {
53 commonSectionMapping(IO, Section);
54 IO.mapRequired("Name", Section.Name);
55 IO.mapRequired("MemorySize", Section.MemorySize);
56 IO.mapRequired("MemoryAlignment", Section.MemoryAlignment);
57 IO.mapRequired("TableSize", Section.TableSize);
58 IO.mapRequired("TableAlignment", Section.TableAlignment);
59 IO.mapRequired("Needed", Section.Needed);
60 IO.mapOptional("ImportInfo", Section.ImportInfo);
61 IO.mapOptional("ExportInfo", Section.ExportInfo);
62}
63
64static void sectionMapping(IO &IO, WasmYAML::NameSection &Section) {
65 commonSectionMapping(IO, Section);
66 IO.mapRequired("Name", Section.Name);
67 IO.mapOptional("FunctionNames", Section.FunctionNames);
68 IO.mapOptional("GlobalNames", Section.GlobalNames);
69 IO.mapOptional("DataSegmentNames", Section.DataSegmentNames);
70}
71
72static void sectionMapping(IO &IO, WasmYAML::LinkingSection &Section) {
73 commonSectionMapping(IO, Section);
74 IO.mapRequired("Name", Section.Name);
75 IO.mapRequired("Version", Section.Version);
76 IO.mapOptional("SymbolTable", Section.SymbolTable);
77 IO.mapOptional("SegmentInfo", Section.SegmentInfos);
78 IO.mapOptional("InitFunctions", Section.InitFunctions);
79 IO.mapOptional("Comdats", Section.Comdats);
80}
81
82static void sectionMapping(IO &IO, WasmYAML::ProducersSection &Section) {
83 commonSectionMapping(IO, Section);
84 IO.mapRequired("Name", Section.Name);
85 IO.mapOptional("Languages", Section.Languages);
86 IO.mapOptional("Tools", Section.Tools);
87 IO.mapOptional("SDKs", Section.SDKs);
88}
89
90static void sectionMapping(IO &IO, WasmYAML::TargetFeaturesSection &Section) {
91 commonSectionMapping(IO, Section);
92 IO.mapRequired("Name", Section.Name);
93 IO.mapRequired("Features", Section.Features);
94}
95
96static void sectionMapping(IO &IO, WasmYAML::CustomSection &Section) {
97 commonSectionMapping(IO, Section);
98 IO.mapRequired("Name", Section.Name);
99 IO.mapRequired("Payload", Section.Payload);
100}
101
102static void sectionMapping(IO &IO, WasmYAML::TypeSection &Section) {
103 commonSectionMapping(IO, Section);
104 IO.mapOptional("Signatures", Section.Signatures);
105}
106
107static void sectionMapping(IO &IO, WasmYAML::ImportSection &Section) {
108 commonSectionMapping(IO, Section);
109 IO.mapOptional("Imports", Section.Imports);
110}
111
112static void sectionMapping(IO &IO, WasmYAML::FunctionSection &Section) {
113 commonSectionMapping(IO, Section);
114 IO.mapOptional("FunctionTypes", Section.FunctionTypes);
115}
116
117static void sectionMapping(IO &IO, WasmYAML::TableSection &Section) {
118 commonSectionMapping(IO, Section);
119 IO.mapOptional("Tables", Section.Tables);
120}
121
122static void sectionMapping(IO &IO, WasmYAML::MemorySection &Section) {
123 commonSectionMapping(IO, Section);
124 IO.mapOptional("Memories", Section.Memories);
125}
126
127static void sectionMapping(IO &IO, WasmYAML::TagSection &Section) {
128 commonSectionMapping(IO, Section);
129 IO.mapOptional("TagTypes", Section.TagTypes);
130}
131
132static void sectionMapping(IO &IO, WasmYAML::GlobalSection &Section) {
133 commonSectionMapping(IO, Section);
134 IO.mapOptional("Globals", Section.Globals);
135}
136
137static void sectionMapping(IO &IO, WasmYAML::ExportSection &Section) {
138 commonSectionMapping(IO, Section);
139 IO.mapOptional("Exports", Section.Exports);
140}
141
142static void sectionMapping(IO &IO, WasmYAML::StartSection &Section) {
143 commonSectionMapping(IO, Section);
144 IO.mapOptional("StartFunction", Section.StartFunction);
145}
146
147static void sectionMapping(IO &IO, WasmYAML::ElemSection &Section) {
148 commonSectionMapping(IO, Section);
149 IO.mapOptional("Segments", Section.Segments);
150}
151
152static void sectionMapping(IO &IO, WasmYAML::CodeSection &Section) {
153 commonSectionMapping(IO, Section);
154 IO.mapRequired("Functions", Section.Functions);
155}
156
157static void sectionMapping(IO &IO, WasmYAML::DataSection &Section) {
158 commonSectionMapping(IO, Section);
159 IO.mapRequired("Segments", Section.Segments);
160}
161
162static void sectionMapping(IO &IO, WasmYAML::DataCountSection &Section) {
163 commonSectionMapping(IO, Section);
164 IO.mapRequired("Count", Section.Count);
165}
166
168 IO &IO, std::unique_ptr<WasmYAML::Section> &Section) {
169 WasmYAML::SectionType SectionType;
170 if (IO.outputting())
171 SectionType = Section->Type;
172 else
173 IO.mapRequired("Type", SectionType);
174
175 switch (SectionType) {
178 if (IO.outputting()) {
179 auto CustomSection = cast<WasmYAML::CustomSection>(Section.get());
180 SectionName = CustomSection->Name;
181 } else {
182 IO.mapRequired("Name", SectionName);
183 }
184 if (SectionName == "dylink" || SectionName == "dylink.0") {
185 if (!IO.outputting())
186 Section.reset(new WasmYAML::DylinkSection());
187 sectionMapping(IO, *cast<WasmYAML::DylinkSection>(Section.get()));
188 } else if (SectionName == "linking") {
189 if (!IO.outputting())
190 Section.reset(new WasmYAML::LinkingSection());
191 sectionMapping(IO, *cast<WasmYAML::LinkingSection>(Section.get()));
192 } else if (SectionName == "name") {
193 if (!IO.outputting())
194 Section.reset(new WasmYAML::NameSection());
195 sectionMapping(IO, *cast<WasmYAML::NameSection>(Section.get()));
196 } else if (SectionName == "producers") {
197 if (!IO.outputting())
198 Section.reset(new WasmYAML::ProducersSection());
199 sectionMapping(IO, *cast<WasmYAML::ProducersSection>(Section.get()));
200 } else if (SectionName == "target_features") {
201 if (!IO.outputting())
202 Section.reset(new WasmYAML::TargetFeaturesSection());
203 sectionMapping(IO, *cast<WasmYAML::TargetFeaturesSection>(Section.get()));
204 } else {
205 if (!IO.outputting())
206 Section.reset(new WasmYAML::CustomSection(SectionName));
207 sectionMapping(IO, *cast<WasmYAML::CustomSection>(Section.get()));
208 }
209 break;
210 }
212 if (!IO.outputting())
213 Section.reset(new WasmYAML::TypeSection());
214 sectionMapping(IO, *cast<WasmYAML::TypeSection>(Section.get()));
215 break;
217 if (!IO.outputting())
218 Section.reset(new WasmYAML::ImportSection());
219 sectionMapping(IO, *cast<WasmYAML::ImportSection>(Section.get()));
220 break;
222 if (!IO.outputting())
223 Section.reset(new WasmYAML::FunctionSection());
224 sectionMapping(IO, *cast<WasmYAML::FunctionSection>(Section.get()));
225 break;
227 if (!IO.outputting())
228 Section.reset(new WasmYAML::TableSection());
229 sectionMapping(IO, *cast<WasmYAML::TableSection>(Section.get()));
230 break;
232 if (!IO.outputting())
233 Section.reset(new WasmYAML::MemorySection());
234 sectionMapping(IO, *cast<WasmYAML::MemorySection>(Section.get()));
235 break;
237 if (!IO.outputting())
238 Section.reset(new WasmYAML::TagSection());
239 sectionMapping(IO, *cast<WasmYAML::TagSection>(Section.get()));
240 break;
242 if (!IO.outputting())
243 Section.reset(new WasmYAML::GlobalSection());
244 sectionMapping(IO, *cast<WasmYAML::GlobalSection>(Section.get()));
245 break;
247 if (!IO.outputting())
248 Section.reset(new WasmYAML::ExportSection());
249 sectionMapping(IO, *cast<WasmYAML::ExportSection>(Section.get()));
250 break;
252 if (!IO.outputting())
253 Section.reset(new WasmYAML::StartSection());
254 sectionMapping(IO, *cast<WasmYAML::StartSection>(Section.get()));
255 break;
257 if (!IO.outputting())
258 Section.reset(new WasmYAML::ElemSection());
259 sectionMapping(IO, *cast<WasmYAML::ElemSection>(Section.get()));
260 break;
262 if (!IO.outputting())
263 Section.reset(new WasmYAML::CodeSection());
264 sectionMapping(IO, *cast<WasmYAML::CodeSection>(Section.get()));
265 break;
267 if (!IO.outputting())
268 Section.reset(new WasmYAML::DataSection());
269 sectionMapping(IO, *cast<WasmYAML::DataSection>(Section.get()));
270 break;
272 if (!IO.outputting())
273 Section.reset(new WasmYAML::DataCountSection());
274 sectionMapping(IO, *cast<WasmYAML::DataCountSection>(Section.get()));
275 break;
276 default:
277 llvm_unreachable("Unknown section type");
278 }
279}
280
281void ScalarEnumerationTraits<WasmYAML::SectionType>::enumeration(
282 IO &IO, WasmYAML::SectionType &Type) {
283#define ECase(X) IO.enumCase(Type, #X, wasm::WASM_SEC_##X);
284 ECase(CUSTOM);
285 ECase(TYPE);
286 ECase(IMPORT);
288 ECase(TABLE);
289 ECase(MEMORY);
290 ECase(GLOBAL);
291 ECase(TAG);
292 ECase(EXPORT);
293 ECase(START);
294 ECase(ELEM);
295 ECase(CODE);
296 ECase(DATA);
297 ECase(DATACOUNT);
298#undef ECase
299}
300
302 IO &IO, WasmYAML::Signature &Signature) {
303 IO.mapRequired("Index", Signature.Index);
304 IO.mapRequired("ParamTypes", Signature.ParamTypes);
305 IO.mapRequired("ReturnTypes", Signature.ReturnTypes);
306}
307
309 IO.mapRequired("Index", Table.Index);
310 IO.mapRequired("ElemType", Table.ElemType);
311 IO.mapRequired("Limits", Table.TableLimits);
312}
313
316 IO.mapRequired("Index", Function.Index);
317 IO.mapRequired("Locals", Function.Locals);
318 IO.mapRequired("Body", Function.Body);
319}
320
322 IO &IO, WasmYAML::Relocation &Relocation) {
323 IO.mapRequired("Type", Relocation.Type);
324 IO.mapRequired("Index", Relocation.Index);
325 IO.mapRequired("Offset", Relocation.Offset);
326 IO.mapOptional("Addend", Relocation.Addend, 0);
327}
328
330 IO &IO, WasmYAML::NameEntry &NameEntry) {
331 IO.mapRequired("Index", NameEntry.Index);
332 IO.mapRequired("Name", NameEntry.Name);
333}
334
336 IO &IO, WasmYAML::ProducerEntry &ProducerEntry) {
337 IO.mapRequired("Name", ProducerEntry.Name);
338 IO.mapRequired("Version", ProducerEntry.Version);
339}
340
341void ScalarEnumerationTraits<WasmYAML::FeaturePolicyPrefix>::enumeration(
342 IO &IO, WasmYAML::FeaturePolicyPrefix &Kind) {
343#define ECase(X) IO.enumCase(Kind, #X, wasm::WASM_FEATURE_PREFIX_##X);
344 ECase(USED);
345 ECase(DISALLOWED);
346#undef ECase
347}
348
350 IO &IO, WasmYAML::FeatureEntry &FeatureEntry) {
351 IO.mapRequired("Prefix", FeatureEntry.Prefix);
352 IO.mapRequired("Name", FeatureEntry.Name);
353}
354
356 IO &IO, WasmYAML::SegmentInfo &SegmentInfo) {
357 IO.mapRequired("Index", SegmentInfo.Index);
358 IO.mapRequired("Name", SegmentInfo.Name);
359 IO.mapRequired("Alignment", SegmentInfo.Alignment);
360 IO.mapRequired("Flags", SegmentInfo.Flags);
361}
362
364 IO &IO, WasmYAML::LocalDecl &LocalDecl) {
365 IO.mapRequired("Type", LocalDecl.Type);
366 IO.mapRequired("Count", LocalDecl.Count);
367}
368
370 WasmYAML::Limits &Limits) {
371 IO.mapOptional("Flags", Limits.Flags, 0);
372 IO.mapRequired("Minimum", Limits.Minimum);
373 if (!IO.outputting() || Limits.Flags & wasm::WASM_LIMITS_FLAG_HAS_MAX)
374 IO.mapOptional("Maximum", Limits.Maximum);
375}
376
378 IO &IO, WasmYAML::ElemSegment &Segment) {
379 IO.mapOptional("Flags", Segment.Flags, 0);
380 if (!IO.outputting() ||
382 IO.mapOptional("TableNumber", Segment.TableNumber);
383 if (!IO.outputting() ||
385 IO.mapOptional("ElemKind", Segment.ElemKind);
386 // TODO: Omit "offset" for passive segments? It's neither meaningful nor
387 // encoded.
388 IO.mapRequired("Offset", Segment.Offset);
389 IO.mapRequired("Functions", Segment.Functions);
390}
391
394 IO.mapRequired("Module", Import.Module);
395 IO.mapRequired("Field", Import.Field);
396 IO.mapRequired("Kind", Import.Kind);
399 IO.mapRequired("SigIndex", Import.SigIndex);
400 } else if (Import.Kind == wasm::WASM_EXTERNAL_GLOBAL) {
401 IO.mapRequired("GlobalType", Import.GlobalImport.Type);
402 IO.mapRequired("GlobalMutable", Import.GlobalImport.Mutable);
403 } else if (Import.Kind == wasm::WASM_EXTERNAL_TABLE) {
404 IO.mapRequired("Table", Import.TableImport);
405 } else if (Import.Kind == wasm::WASM_EXTERNAL_MEMORY) {
406 IO.mapRequired("Memory", Import.Memory);
407 } else {
408 llvm_unreachable("unhandled import type");
409 }
410}
411
414 IO.mapRequired("Name", Export.Name);
415 IO.mapRequired("Kind", Export.Kind);
416 IO.mapRequired("Index", Export.Index);
417}
418
421 IO.mapRequired("Index", Global.Index);
422 IO.mapRequired("Type", Global.Type);
423 IO.mapRequired("Mutable", Global.Mutable);
424 IO.mapRequired("InitExpr", Global.Init);
425}
426
428 WasmYAML::InitExpr &Expr) {
429 IO.mapOptional("Extended", Expr.Extended, false);
430 if (Expr.Extended) {
431 IO.mapRequired("Body", Expr.Body);
432 } else {
433 WasmYAML::Opcode Op = Expr.Inst.Opcode;
434 IO.mapRequired("Opcode", Op);
435 Expr.Inst.Opcode = Op;
436 switch (Expr.Inst.Opcode) {
438 IO.mapRequired("Value", Expr.Inst.Value.Int32);
439 break;
441 IO.mapRequired("Value", Expr.Inst.Value.Int64);
442 break;
444 IO.mapRequired("Value", Expr.Inst.Value.Float32);
445 break;
447 IO.mapRequired("Value", Expr.Inst.Value.Float64);
448 break;
450 IO.mapRequired("Index", Expr.Inst.Value.Global);
451 break;
453 WasmYAML::ValueType Ty = wasm::WASM_TYPE_EXTERNREF;
454 IO.mapRequired("Type", Ty);
455 break;
456 }
457 }
458 }
459}
460
462 IO &IO, WasmYAML::DataSegment &Segment) {
463 IO.mapOptional("SectionOffset", Segment.SectionOffset);
464 IO.mapRequired("InitFlags", Segment.InitFlags);
466 IO.mapRequired("MemoryIndex", Segment.MemoryIndex);
467 } else {
468 Segment.MemoryIndex = 0;
469 }
470 if ((Segment.InitFlags & wasm::WASM_DATA_SEGMENT_IS_PASSIVE) == 0) {
471 IO.mapRequired("Offset", Segment.Offset);
472 } else {
474 Segment.Offset.Inst.Value.Int32 = 0;
475 }
476 IO.mapRequired("Content", Segment.Content);
477}
478
480 IO &IO, WasmYAML::InitFunction &Init) {
481 IO.mapRequired("Priority", Init.Priority);
482 IO.mapRequired("Symbol", Init.Symbol);
483}
484
485void ScalarEnumerationTraits<WasmYAML::ComdatKind>::enumeration(
486 IO &IO, WasmYAML::ComdatKind &Kind) {
487#define ECase(X) IO.enumCase(Kind, #X, wasm::WASM_COMDAT_##X);
489 ECase(DATA);
490 ECase(SECTION);
491#undef ECase
492}
493
495 IO &IO, WasmYAML::ComdatEntry &ComdatEntry) {
496 IO.mapRequired("Kind", ComdatEntry.Kind);
497 IO.mapRequired("Index", ComdatEntry.Index);
498}
499
502 IO.mapRequired("Name", Comdat.Name);
503 IO.mapRequired("Entries", Comdat.Entries);
504}
505
508 IO.mapRequired("Index", Info.Index);
509 IO.mapRequired("Kind", Info.Kind);
511 IO.mapRequired("Name", Info.Name);
512 IO.mapRequired("Flags", Info.Flags);
514 IO.mapRequired("Function", Info.ElementIndex);
515 } else if (Info.Kind == wasm::WASM_SYMBOL_TYPE_GLOBAL) {
516 IO.mapRequired("Global", Info.ElementIndex);
517 } else if (Info.Kind == wasm::WASM_SYMBOL_TYPE_TABLE) {
518 IO.mapRequired("Table", Info.ElementIndex);
519 } else if (Info.Kind == wasm::WASM_SYMBOL_TYPE_TAG) {
520 IO.mapRequired("Tag", Info.ElementIndex);
521 } else if (Info.Kind == wasm::WASM_SYMBOL_TYPE_DATA) {
522 if ((Info.Flags & wasm::WASM_SYMBOL_UNDEFINED) == 0) {
523 if ((Info.Flags & wasm::WASM_SYMBOL_ABSOLUTE) == 0) {
524 IO.mapRequired("Segment", Info.DataRef.Segment);
525 }
526 IO.mapOptional("Offset", Info.DataRef.Offset, 0u);
527 IO.mapRequired("Size", Info.DataRef.Size);
528 }
529 } else if (Info.Kind == wasm::WASM_SYMBOL_TYPE_SECTION) {
530 IO.mapRequired("Section", Info.ElementIndex);
531 } else {
532 llvm_unreachable("unsupported symbol kind");
533 }
534}
535
538 IO.mapRequired("Module", Info.Module);
539 IO.mapRequired("Field", Info.Field);
540 IO.mapRequired("Flags", Info.Flags);
541}
542
545 IO.mapRequired("Name", Info.Name);
546 IO.mapRequired("Flags", Info.Flags);
547}
548
549void ScalarBitSetTraits<WasmYAML::LimitFlags>::bitset(
550 IO &IO, WasmYAML::LimitFlags &Value) {
551#define BCase(X) IO.bitSetCase(Value, #X, wasm::WASM_LIMITS_FLAG_##X)
552 BCase(HAS_MAX);
553 BCase(IS_SHARED);
554 BCase(IS_64);
555#undef BCase
556}
557
558void ScalarBitSetTraits<WasmYAML::SegmentFlags>::bitset(
559 IO &IO, WasmYAML::SegmentFlags &Value) {
560#define BCase(X) IO.bitSetCase(Value, #X, wasm::WASM_SEG_FLAG_##X)
561 BCase(STRINGS);
562 BCase(TLS);
563 BCase(RETAIN);
564#undef BCase
565}
566
567void ScalarBitSetTraits<WasmYAML::SymbolFlags>::bitset(
568 IO &IO, WasmYAML::SymbolFlags &Value) {
569#define BCaseMask(M, X) \
570 IO.maskedBitSetCase(Value, #X, wasm::WASM_SYMBOL_##X, wasm::WASM_SYMBOL_##M)
571 // BCaseMask(BINDING_MASK, BINDING_GLOBAL);
572 BCaseMask(BINDING_MASK, BINDING_WEAK);
573 BCaseMask(BINDING_MASK, BINDING_LOCAL);
574 // BCaseMask(VISIBILITY_MASK, VISIBILITY_DEFAULT);
575 BCaseMask(VISIBILITY_MASK, VISIBILITY_HIDDEN);
577 BCaseMask(EXPORTED, EXPORTED);
578 BCaseMask(EXPLICIT_NAME, EXPLICIT_NAME);
579 BCaseMask(NO_STRIP, NO_STRIP);
580 BCaseMask(TLS, TLS);
581 BCaseMask(ABSOLUTE, ABSOLUTE);
582#undef BCaseMask
583}
584
585void ScalarEnumerationTraits<WasmYAML::SymbolKind>::enumeration(
586 IO &IO, WasmYAML::SymbolKind &Kind) {
587#define ECase(X) IO.enumCase(Kind, #X, wasm::WASM_SYMBOL_TYPE_##X);
589 ECase(DATA);
590 ECase(GLOBAL);
591 ECase(TABLE);
592 ECase(SECTION);
593 ECase(TAG);
594#undef ECase
595}
596
597void ScalarEnumerationTraits<WasmYAML::ValueType>::enumeration(
598 IO &IO, WasmYAML::ValueType &Type) {
599#define CONCAT(X) (uint32_t) wasm::ValType::X
600#define ECase(X) IO.enumCase(Type, #X, CONCAT(X));
601 ECase(I32);
602 ECase(I64);
603 ECase(F32);
604 ECase(F64);
605 ECase(V128);
606 ECase(FUNCREF);
607 ECase(EXTERNREF);
608 ECase(EXNREF);
609 ECase(OTHERREF);
610#undef ECase
611}
612
613void ScalarEnumerationTraits<WasmYAML::ExportKind>::enumeration(
614 IO &IO, WasmYAML::ExportKind &Kind) {
615#define ECase(X) IO.enumCase(Kind, #X, wasm::WASM_EXTERNAL_##X);
617 ECase(TABLE);
618 ECase(MEMORY);
619 ECase(GLOBAL);
620 ECase(TAG);
621#undef ECase
622}
623
624void ScalarEnumerationTraits<WasmYAML::Opcode>::enumeration(
625 IO &IO, WasmYAML::Opcode &Code) {
626#define ECase(X) IO.enumCase(Code, #X, wasm::WASM_OPCODE_##X);
627 ECase(END);
628 ECase(I32_CONST);
629 ECase(I64_CONST);
630 ECase(F64_CONST);
631 ECase(F32_CONST);
632 ECase(GLOBAL_GET);
633 ECase(REF_NULL);
634#undef ECase
635}
636
637void ScalarEnumerationTraits<WasmYAML::TableType>::enumeration(
638 IO &IO, WasmYAML::TableType &Type) {
639#define CONCAT(X) (uint32_t) wasm::ValType::X
640#define ECase(X) IO.enumCase(Type, #X, CONCAT(X));
641 ECase(FUNCREF);
642 ECase(EXTERNREF);
643 ECase(EXNREF);
644 ECase(OTHERREF);
645#undef ECase
646}
647
648void ScalarEnumerationTraits<WasmYAML::RelocType>::enumeration(
649 IO &IO, WasmYAML::RelocType &Type) {
650#define WASM_RELOC(name, value) IO.enumCase(Type, #name, wasm::name);
651#include "llvm/BinaryFormat/WasmRelocs.def"
652#undef WASM_RELOC
653 IO.enumFallback<Hex32>(Type);
654}
655
656} // end namespace yaml
657
658} // end namespace llvm
static const LLT F64
static const LLT F32
#define BCase(X)
Definition: COFFYAML.cpp:267
Analysis containing CSE Info
Definition: CSEInfo.cpp:27
#define BCaseMask(X, M)
#define FUNCTION(NAME, NARG, ROUND_MODE, INTRINSIC)
static constexpr auto TAG
Definition: OpenMPOpt.cpp:184
This file declares classes for handling the YAML representation of wasm binaries.
#define ECase(X)
@ UNDEFINED
This class represents an Operation in the Expression.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:51
The instances of the Type class are immutable: once they are created, they are never changed.
Definition: Type.h:45
LLVM Value Representation.
Definition: Value.h:74
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
constexpr uint16_t VISIBILITY_MASK
Definition: XCOFF.h:259
@ WASM_OPCODE_F64_CONST
Definition: Wasm.h:105
@ WASM_OPCODE_REF_NULL
Definition: Wasm.h:112
@ WASM_OPCODE_F32_CONST
Definition: Wasm.h:104
@ WASM_OPCODE_GLOBAL_GET
Definition: Wasm.h:98
@ WASM_OPCODE_I64_CONST
Definition: Wasm.h:103
@ WASM_OPCODE_I32_CONST
Definition: Wasm.h:102
const unsigned WASM_SYMBOL_UNDEFINED
Definition: Wasm.h:243
@ WASM_TYPE_EXTERNREF
Definition: Wasm.h:64
@ WASM_ELEM_SEGMENT_HAS_TABLE_NUMBER
Definition: Wasm.h:170
@ WASM_EXTERNAL_TABLE
Definition: Wasm.h:85
@ WASM_EXTERNAL_FUNCTION
Definition: Wasm.h:84
@ WASM_EXTERNAL_TAG
Definition: Wasm.h:88
@ WASM_EXTERNAL_MEMORY
Definition: Wasm.h:86
@ WASM_EXTERNAL_GLOBAL
Definition: Wasm.h:87
const unsigned WASM_ELEM_SEGMENT_MASK_HAS_ELEM_KIND
Definition: Wasm.h:173
@ WASM_SYMBOL_TYPE_GLOBAL
Definition: Wasm.h:218
@ WASM_SYMBOL_TYPE_DATA
Definition: Wasm.h:217
@ WASM_SYMBOL_TYPE_TAG
Definition: Wasm.h:220
@ WASM_SYMBOL_TYPE_TABLE
Definition: Wasm.h:221
@ WASM_SYMBOL_TYPE_SECTION
Definition: Wasm.h:219
@ WASM_SYMBOL_TYPE_FUNCTION
Definition: Wasm.h:216
@ WASM_SEC_CODE
Definition: Wasm.h:45
@ WASM_SEC_MEMORY
Definition: Wasm.h:40
@ WASM_SEC_IMPORT
Definition: Wasm.h:37
@ WASM_SEC_EXPORT
Definition: Wasm.h:42
@ WASM_SEC_DATACOUNT
Definition: Wasm.h:47
@ WASM_SEC_CUSTOM
Definition: Wasm.h:35
@ WASM_SEC_FUNCTION
Definition: Wasm.h:38
@ WASM_SEC_ELEM
Definition: Wasm.h:44
@ WASM_SEC_START
Definition: Wasm.h:43
@ WASM_SEC_TABLE
Definition: Wasm.h:39
@ WASM_SEC_TYPE
Definition: Wasm.h:36
@ WASM_SEC_TAG
Definition: Wasm.h:48
@ WASM_SEC_GLOBAL
Definition: Wasm.h:41
@ WASM_SEC_DATA
Definition: Wasm.h:46
@ WASM_LIMITS_FLAG_HAS_MAX
Definition: Wasm.h:157
@ WASM_DATA_SEGMENT_IS_PASSIVE
Definition: Wasm.h:163
@ WASM_DATA_SEGMENT_HAS_MEMINDEX
Definition: Wasm.h:164
const unsigned WASM_SYMBOL_ABSOLUTE
Definition: Wasm.h:248
static void sectionMapping(IO &IO, ELFYAML::DynamicSection &Section)
Definition: ELFYAML.cpp:1405
static void commonSectionMapping(IO &IO, ELFYAML::Section &Section)
Definition: ELFYAML.cpp:1378
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
@ Export
Export information to summary.
@ Import
Import information from summary.
@ Global
Append to llvm.global_dtors.
DWARFExpression::Operation Op
yaml::BinaryRef Content
Definition: WasmYAML.h:128
std::vector< uint32_t > Functions
Definition: WasmYAML.h:79
FeaturePolicyPrefix Prefix
Definition: WasmYAML.h:142
wasm::WasmInitExprMVP Inst
Definition: WasmYAML.h:69
yaml::BinaryRef Body
Definition: WasmYAML.h:70
yaml::Hex32 Minimum
Definition: WasmYAML.h:49
LimitFlags Flags
Definition: WasmYAML.h:48
yaml::Hex32 Maximum
Definition: WasmYAML.h:50
std::vector< ValueType > ReturnTypes
Definition: WasmYAML.h:157
std::vector< ValueType > ParamTypes
Definition: WasmYAML.h:156
TableType ElemType
Definition: WasmYAML.h:54
union llvm::wasm::WasmInitExprMVP::@187 Value