Mercurial > hg > CbC > CbC_llvm
diff include/llvm/ObjectYAML/WasmYAML.h @ 148:63bd29f05246
merged
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 14 Aug 2019 19:46:37 +0900 |
parents | c2174574ed3a |
children |
line wrap: on
line diff
--- a/include/llvm/ObjectYAML/WasmYAML.h Sun Dec 23 19:23:36 2018 +0900 +++ b/include/llvm/ObjectYAML/WasmYAML.h Wed Aug 14 19:46:37 2019 +0900 @@ -1,14 +1,13 @@ //===- WasmYAML.h - Wasm YAMLIO implementation ------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file -/// \brief This file declares classes for handling the YAML representation +/// This file declares classes for handling the YAML representation /// of wasm binaries. /// //===----------------------------------------------------------------------===// @@ -28,16 +27,18 @@ namespace WasmYAML { LLVM_YAML_STRONG_TYPEDEF(uint32_t, SectionType) -LLVM_YAML_STRONG_TYPEDEF(int32_t, ValueType) -LLVM_YAML_STRONG_TYPEDEF(int32_t, TableType) -LLVM_YAML_STRONG_TYPEDEF(int32_t, SignatureForm) +LLVM_YAML_STRONG_TYPEDEF(uint32_t, ValueType) +LLVM_YAML_STRONG_TYPEDEF(uint32_t, TableType) +LLVM_YAML_STRONG_TYPEDEF(uint32_t, SignatureForm) LLVM_YAML_STRONG_TYPEDEF(uint32_t, ExportKind) LLVM_YAML_STRONG_TYPEDEF(uint32_t, Opcode) LLVM_YAML_STRONG_TYPEDEF(uint32_t, RelocType) LLVM_YAML_STRONG_TYPEDEF(uint32_t, SymbolFlags) +LLVM_YAML_STRONG_TYPEDEF(uint32_t, SymbolKind) LLVM_YAML_STRONG_TYPEDEF(uint32_t, SegmentFlags) LLVM_YAML_STRONG_TYPEDEF(uint32_t, LimitFlags) LLVM_YAML_STRONG_TYPEDEF(uint32_t, ComdatKind) +LLVM_YAML_STRONG_TYPEDEF(uint32_t, FeaturePolicyPrefix) struct FileHeader { yaml::Hex32 Version; @@ -73,6 +74,12 @@ wasm::WasmInitExpr InitExpr; }; +struct Event { + uint32_t Index; + uint32_t Attribute; + uint32_t SigIndex; +}; + struct Import { StringRef Module; StringRef Field; @@ -82,6 +89,7 @@ Global GlobalImport; Table TableImport; Limits Memory; + Event EventImport; }; }; @@ -104,8 +112,9 @@ }; struct DataSegment { + uint32_t SectionOffset; + uint32_t InitFlags; uint32_t MemoryIndex; - uint32_t SectionOffset; wasm::WasmInitExpr Offset; yaml::BinaryRef Content; }; @@ -115,6 +124,16 @@ StringRef Name; }; +struct ProducerEntry { + std::string Name; + std::string Version; +}; + +struct FeatureEntry { + FeaturePolicyPrefix Prefix; + std::string Name; +}; + struct SegmentInfo { uint32_t Index; StringRef Name; @@ -130,13 +149,19 @@ }; struct SymbolInfo { + uint32_t Index; StringRef Name; + SymbolKind Kind; SymbolFlags Flags; + union { + uint32_t ElementIndex; + wasm::WasmDataReference DataRef; + }; }; struct InitFunction { uint32_t Priority; - uint32_t FunctionIndex; + uint32_t Symbol; }; struct ComdatEntry { @@ -169,6 +194,21 @@ yaml::BinaryRef Payload; }; +struct DylinkSection : CustomSection { + DylinkSection() : CustomSection("dylink") {} + + static bool classof(const Section *S) { + auto C = dyn_cast<CustomSection>(S); + return C && C->Name == "dylink"; + } + + uint32_t MemorySize; + uint32_t MemoryAlignment; + uint32_t TableSize; + uint32_t TableAlignment; + std::vector<StringRef> Needed; +}; + struct NameSection : CustomSection { NameSection() : CustomSection("name") {} @@ -188,13 +228,37 @@ return C && C->Name == "linking"; } - uint32_t DataSize; - std::vector<SymbolInfo> SymbolInfos; + uint32_t Version; + std::vector<SymbolInfo> SymbolTable; std::vector<SegmentInfo> SegmentInfos; std::vector<InitFunction> InitFunctions; std::vector<Comdat> Comdats; }; +struct ProducersSection : CustomSection { + ProducersSection() : CustomSection("producers") {} + + static bool classof(const Section *S) { + auto C = dyn_cast<CustomSection>(S); + return C && C->Name == "producers"; + } + + std::vector<ProducerEntry> Languages; + std::vector<ProducerEntry> Tools; + std::vector<ProducerEntry> SDKs; +}; + +struct TargetFeaturesSection : CustomSection { + TargetFeaturesSection() : CustomSection("target_features") {} + + static bool classof(const Section *S) { + auto C = dyn_cast<CustomSection>(S); + return C && C->Name == "target_features"; + } + + std::vector<FeatureEntry> Features; +}; + struct TypeSection : Section { TypeSection() : Section(wasm::WASM_SEC_TYPE) {} @@ -255,6 +319,16 @@ std::vector<Global> Globals; }; +struct EventSection : Section { + EventSection() : Section(wasm::WASM_SEC_EVENT) {} + + static bool classof(const Section *S) { + return S->Type == wasm::WASM_SEC_EVENT; + } + + std::vector<Event> Events; +}; + struct ExportSection : Section { ExportSection() : Section(wasm::WASM_SEC_EXPORT) {} @@ -305,6 +379,16 @@ std::vector<DataSegment> Segments; }; +struct DataCountSection : Section { + DataCountSection() : Section(wasm::WASM_SEC_DATACOUNT) {} + + static bool classof(const Section *S) { + return S->Type == wasm::WASM_SEC_DATACOUNT; + } + + uint32_t Count; +}; + struct Object { FileHeader Header; std::vector<std::unique_ptr<Section>> Sections; @@ -327,11 +411,14 @@ LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::LocalDecl) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Relocation) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::NameEntry) +LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::ProducerEntry) +LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::FeatureEntry) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::SegmentInfo) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::SymbolInfo) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::InitFunction) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::ComdatEntry) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Comdat) +LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Event) namespace llvm { namespace yaml { @@ -368,6 +455,10 @@ static void bitset(IO &IO, WasmYAML::SymbolFlags &Value); }; +template <> struct ScalarEnumerationTraits<WasmYAML::SymbolKind> { + static void enumeration(IO &IO, WasmYAML::SymbolKind &Kind); +}; + template <> struct ScalarBitSetTraits<WasmYAML::SegmentFlags> { static void bitset(IO &IO, WasmYAML::SegmentFlags &Value); }; @@ -400,6 +491,18 @@ static void mapping(IO &IO, WasmYAML::NameEntry &NameEntry); }; +template <> struct MappingTraits<WasmYAML::ProducerEntry> { + static void mapping(IO &IO, WasmYAML::ProducerEntry &ProducerEntry); +}; + +template <> struct ScalarEnumerationTraits<WasmYAML::FeaturePolicyPrefix> { + static void enumeration(IO &IO, WasmYAML::FeaturePolicyPrefix &Prefix); +}; + +template <> struct MappingTraits<WasmYAML::FeatureEntry> { + static void mapping(IO &IO, WasmYAML::FeatureEntry &FeatureEntry); +}; + template <> struct MappingTraits<WasmYAML::SegmentInfo> { static void mapping(IO &IO, WasmYAML::SegmentInfo &SegmentInfo); }; @@ -460,6 +563,10 @@ static void enumeration(IO &IO, WasmYAML::RelocType &Kind); }; +template <> struct MappingTraits<WasmYAML::Event> { + static void mapping(IO &IO, WasmYAML::Event &Event); +}; + } // end namespace yaml } // end namespace llvm