/*
* 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_ */