1pub use gear_wasm_instrument::{parity_wasm::SerializationError, InstrumentationError};
22pub use wasmparser::BinaryReaderError;
23
24#[derive(PartialEq, Eq, Debug, derive_more::Display)]
26pub enum SectionName {
27 #[display(fmt = "Type section")]
29 Type,
30 #[display(fmt = "Import section")]
32 Import,
33 #[display(fmt = "Function section")]
35 Function,
36 #[display(fmt = "Data section")]
38 Data,
39 #[display(fmt = "Global section")]
41 Global,
42 #[display(fmt = "Table section")]
44 Table,
45 #[display(fmt = "Element section")]
47 Element,
48 #[display(fmt = "Export section")]
50 Export,
51 #[display(fmt = "Start section")]
53 Start,
54}
55
56#[derive(Debug, derive_more::Display)]
58pub enum SectionError {
59 #[display(fmt = "{_0} not found")]
61 NotFound(SectionName),
62 #[display(fmt = "{_0} not supported")]
64 NotSupported(SectionName),
65}
66
67#[derive(Debug, derive_more::Display)]
69pub enum MemoryError {
70 #[display(fmt = "Memory entry not found")]
72 EntryNotFound,
73 #[display(fmt = "The WASM module has invalid count of static memory pages")]
75 InvalidStaticPageCount,
76}
77
78#[derive(Debug, derive_more::Display)]
80pub enum StackEndError {
81 #[display(fmt = "Unsupported initialization of gear stack end global")]
83 Initialization,
84 #[display(fmt = "Gear stack end {_0:#x} is not aligned to wasm page size")]
86 NotAligned(u32),
87 #[display(fmt = "Gear stack end {_0:#x} is out of static memory 0x0..{_1:#x}")]
89 OutOfStatic(u32, u64),
90}
91
92#[derive(Debug, derive_more::Display)]
94pub enum DataSectionError {
95 #[display(fmt = "Unsupported initialization of data segment")]
97 Initialization,
98 #[display(fmt = "Data segment {_0:#x} overlaps gear stack 0x0..{_1:#x}")]
100 GearStackOverlaps(u32, u32),
101 #[display(fmt = "Data segment {_0:#x} ends out of possible 32 bits address space")]
103 EndAddressOverflow(u32),
104 #[display(fmt = "Data segment {_0:#x}..={_1:#x} is out of static memory 0x0..{_2:#x}")]
106 EndAddressOutOfStaticMemory(u32, u32, u64),
107 #[display(fmt = "Data segment amount limit exceeded: limit={limit}, actual={actual}")]
109 DataSegmentsAmountLimit {
110 limit: u32,
112 actual: u32,
114 },
115}
116
117#[derive(Debug, derive_more::Display)]
119pub enum TableSectionError {
120 #[display(fmt = "Number of table limit exceeded: limit={limit}, actual={actual}")]
122 TableNumberLimit {
123 limit: u32,
125 actual: u32,
127 },
128}
129
130#[derive(Debug, derive_more::Display)]
132pub enum ExportError {
133 #[display(fmt = "Global index `{_0}` in export index `{_1}` is incorrect")]
135 IncorrectGlobalIndex(u32, u32),
136 #[display(fmt = "Global index `{_0}` in export index `{_1}` cannot be mutable")]
138 MutableGlobalExport(u32, u32),
139 #[display(fmt = "Export index `{_0}` references to imported function with index `{_1}`")]
141 ExportReferencesToImportFunction(u32, u32),
142 #[display(fmt = "Export index `{_0}` references to imported global with index `{_1}`")]
144 ExportReferencesToImportGlobal(u32, u32),
145 #[display(fmt = "Exported function with index `{_0}` must have signature `fn f() {{ ... }}`")]
147 InvalidExportFnSignature(u32),
148 #[display(fmt = "Excess export with index `{_0}` found")]
150 ExcessExport(u32),
151 #[display(fmt = "Required export function `init` or `handle` is not found")]
153 RequiredExportNotFound,
154}
155
156#[derive(Debug, derive_more::Display)]
158pub enum ImportError {
159 #[display(fmt = "Unknown imported function with index `{_0}`")]
161 UnknownImport(u32),
162 #[display(fmt = "Imported function with index `{_0}` is declared multiple times")]
164 DuplicateImport(u32),
165 #[display(fmt = "Invalid function signature for imported function with index `{_0}`")]
167 InvalidImportFnSignature(u32),
168 #[display(fmt = "Unexpected import kind `{kind}` with index `{index}`")]
170 UnexpectedImportKind {
171 kind: &'static &'static str,
173 index: u32,
175 },
176}
177
178#[derive(Debug, derive_more::Display)]
180pub enum CodecError {
181 #[display(fmt = "The wasm bytecode is failed to be decoded: {_0}")]
183 Decode(SerializationError),
184 #[display(fmt = "Failed to encode instrumented program: {_0}")]
186 Encode(SerializationError),
187}
188
189#[derive(Debug, derive_more::Display, derive_more::From)]
191pub enum CodeError {
192 #[display(fmt = "Wasmer validation error: {_0}")]
194 Validation(BinaryReaderError),
195 #[display(fmt = "Codec error: {_0}")]
197 Codec(CodecError),
198 #[display(fmt = "Section error: {_0}")]
200 Section(SectionError),
201 #[display(fmt = "Memory error: {_0}")]
203 Memory(MemoryError),
204 #[display(fmt = "Stack end error: {_0}")]
206 StackEnd(StackEndError),
207 #[display(fmt = "Data section error: {_0}")]
209 DataSection(DataSectionError),
210 #[display(fmt = "Table section error: {_0}")]
212 TableSection(TableSectionError),
213 #[display(fmt = "Export error: {_0}")]
215 Export(ExportError),
216 #[display(fmt = "Import error: {_0}")]
218 Import(ImportError),
219 #[display(fmt = "Instrumentation error: {_0}")]
221 Instrumentation(InstrumentationError),
222}