108 lines
3.3 KiB
C++
108 lines
3.3 KiB
C++
/*
|
|
* Copyright 2016 WebAssembly Community Group participants
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef WABT_BINARY_H_
|
|
#define WABT_BINARY_H_
|
|
|
|
#include "wabt/common.h"
|
|
|
|
#define WABT_BINARY_MAGIC 0x6d736100
|
|
#define WABT_BINARY_VERSION 1
|
|
#define WABT_BINARY_LIMITS_HAS_MAX_FLAG 0x1
|
|
#define WABT_BINARY_LIMITS_IS_SHARED_FLAG 0x2
|
|
#define WABT_BINARY_LIMITS_IS_64_FLAG 0x4
|
|
#define WABT_BINARY_LIMITS_HAS_CUSTOM_PAGE_SIZE_FLAG 0x8
|
|
#define WABT_BINARY_LIMITS_ALL_MEMORY_FLAGS \
|
|
(WABT_BINARY_LIMITS_HAS_MAX_FLAG | WABT_BINARY_LIMITS_IS_SHARED_FLAG | \
|
|
WABT_BINARY_LIMITS_IS_64_FLAG | \
|
|
WABT_BINARY_LIMITS_HAS_CUSTOM_PAGE_SIZE_FLAG)
|
|
#define WABT_BINARY_LIMITS_ALL_TABLE_FLAGS \
|
|
(WABT_BINARY_LIMITS_HAS_MAX_FLAG | WABT_BINARY_LIMITS_IS_SHARED_FLAG | \
|
|
WABT_BINARY_LIMITS_IS_64_FLAG)
|
|
|
|
#define WABT_BINARY_SECTION_NAME "name"
|
|
#define WABT_BINARY_SECTION_RELOC "reloc"
|
|
#define WABT_BINARY_SECTION_LINKING "linking"
|
|
#define WABT_BINARY_SECTION_TARGET_FEATURES "target_features"
|
|
#define WABT_BINARY_SECTION_DYLINK "dylink"
|
|
#define WABT_BINARY_SECTION_DYLINK0 "dylink.0"
|
|
#define WABT_BINARY_SECTION_CODE_METADATA "metadata.code."
|
|
|
|
#define WABT_FOREACH_BINARY_SECTION(V) \
|
|
V(Custom, custom, 0) \
|
|
V(Type, type, 1) \
|
|
V(Import, import, 2) \
|
|
V(Function, function, 3) \
|
|
V(Table, table, 4) \
|
|
V(Memory, memory, 5) \
|
|
V(Tag, tag, 13) \
|
|
V(Global, global, 6) \
|
|
V(Export, export, 7) \
|
|
V(Start, start, 8) \
|
|
V(Elem, elem, 9) \
|
|
V(DataCount, data_count, 12) \
|
|
V(Code, code, 10) \
|
|
V(Data, data, 11)
|
|
|
|
namespace wabt {
|
|
|
|
/* clang-format off */
|
|
enum class BinarySection {
|
|
#define V(Name, name, code) Name = code,
|
|
WABT_FOREACH_BINARY_SECTION(V)
|
|
#undef V
|
|
Invalid = ~0,
|
|
|
|
First = Custom,
|
|
Last = Tag,
|
|
};
|
|
/* clang-format on */
|
|
constexpr int kBinarySectionCount = WABT_ENUM_COUNT(BinarySection);
|
|
|
|
enum class BinarySectionOrder {
|
|
#define V(Name, name, code) Name,
|
|
WABT_FOREACH_BINARY_SECTION(V)
|
|
#undef V
|
|
};
|
|
|
|
BinarySectionOrder GetSectionOrder(BinarySection);
|
|
const char* GetSectionName(BinarySection);
|
|
|
|
// See
|
|
// https://github.com/WebAssembly/extended-name-section/blob/main/proposals/extended-name-section/Overview.md
|
|
enum class NameSectionSubsection {
|
|
Module = 0,
|
|
Function = 1,
|
|
Local = 2,
|
|
Label = 3,
|
|
Type = 4,
|
|
Table = 5,
|
|
Memory = 6,
|
|
Global = 7,
|
|
ElemSegment = 8,
|
|
DataSegment = 9,
|
|
Field = 10,
|
|
Tag = 11,
|
|
|
|
First = Module,
|
|
Last = Tag,
|
|
};
|
|
const char* GetNameSectionSubsectionName(NameSectionSubsection subsec);
|
|
|
|
} // namespace wabt
|
|
|
|
#endif /* WABT_BINARY_H_ */
|