1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/*
* 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_ALL_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,
// tag names are yet part of the extended-name-section proposal (because it
// only deals with naming things that are in the spec already). However, we
// include names for Tags in wabt using this enum value on the basis that tags
// can only exist when exceptions are enabled and that engines should ignore
// unknown name types.
Tag = 10,
First = Module,
Last = Tag,
};
const char* GetNameSectionSubsectionName(NameSectionSubsection subsec);
} // namespace wabt
#endif /* WABT_BINARY_H_ */
|