pub use gear_wasm_instrument::{parity_wasm::SerializationError, InstrumentationError};
pub use wasmparser::BinaryReaderError;
#[derive(PartialEq, Eq, Debug, derive_more::Display)]
pub enum SectionName {
#[display(fmt = "Type section")]
Type,
#[display(fmt = "Import section")]
Import,
#[display(fmt = "Function section")]
Function,
#[display(fmt = "Data section")]
Data,
#[display(fmt = "Global section")]
Global,
#[display(fmt = "Table section")]
Table,
#[display(fmt = "Element section")]
Element,
#[display(fmt = "Export section")]
Export,
#[display(fmt = "Start section")]
Start,
}
#[derive(Debug, derive_more::Display)]
pub enum SectionError {
#[display(fmt = "{_0} not found")]
NotFound(SectionName),
#[display(fmt = "{_0} not supported")]
NotSupported(SectionName),
}
#[derive(Debug, derive_more::Display)]
pub enum MemoryError {
#[display(fmt = "Memory entry not found")]
EntryNotFound,
#[display(fmt = "The WASM module has invalid count of static memory pages")]
InvalidStaticPageCount,
}
#[derive(Debug, derive_more::Display)]
pub enum StackEndError {
#[display(fmt = "Unsupported initialization of gear stack end global")]
Initialization,
#[display(fmt = "Gear stack end {_0:#x} is not aligned to wasm page size")]
NotAligned(u32),
#[display(fmt = "Gear stack end {_0:#x} is out of static memory 0x0..{_1:#x}")]
OutOfStatic(u32, u64),
}
#[derive(Debug, derive_more::Display)]
pub enum DataSectionError {
#[display(fmt = "Unsupported initialization of data segment")]
Initialization,
#[display(fmt = "Data segment {_0:#x} overlaps gear stack 0x0..{_1:#x}")]
GearStackOverlaps(u32, u32),
#[display(fmt = "Data segment {_0:#x} ends out of possible 32 bits address space")]
EndAddressOverflow(u32),
#[display(fmt = "Data segment {_0:#x}..={_1:#x} is out of static memory 0x0..{_2:#x}")]
EndAddressOutOfStaticMemory(u32, u32, u64),
#[display(fmt = "Data segment amount limit exceeded: limit={limit}, actual={actual}")]
DataSegmentsAmountLimit {
limit: u32,
actual: u32,
},
}
#[derive(Debug, derive_more::Display)]
pub enum TableSectionError {
#[display(fmt = "Number of table limit exceeded: limit={limit}, actual={actual}")]
TableNumberLimit {
limit: u32,
actual: u32,
},
}
#[derive(Debug, derive_more::Display)]
pub enum ExportError {
#[display(fmt = "Global index `{_0}` in export index `{_1}` is incorrect")]
IncorrectGlobalIndex(u32, u32),
#[display(fmt = "Global index `{_0}` in export index `{_1}` cannot be mutable")]
MutableGlobalExport(u32, u32),
#[display(fmt = "Export index `{_0}` references to imported function with index `{_1}`")]
ExportReferencesToImportFunction(u32, u32),
#[display(fmt = "Export index `{_0}` references to imported global with index `{_1}`")]
ExportReferencesToImportGlobal(u32, u32),
#[display(fmt = "Exported function with index `{_0}` must have signature `fn f() {{ ... }}`")]
InvalidExportFnSignature(u32),
#[display(fmt = "Excess export with index `{_0}` found")]
ExcessExport(u32),
#[display(fmt = "Required export function `init` or `handle` is not found")]
RequiredExportNotFound,
}
#[derive(Debug, derive_more::Display)]
pub enum ImportError {
#[display(fmt = "Unknown imported function with index `{_0}`")]
UnknownImport(u32),
#[display(fmt = "Imported function with index `{_0}` is declared multiple times")]
DuplicateImport(u32),
#[display(fmt = "Invalid function signature for imported function with index `{_0}`")]
InvalidImportFnSignature(u32),
#[display(fmt = "Unexpected import kind `{kind}` with index `{index}`")]
UnexpectedImportKind {
kind: &'static &'static str,
index: u32,
},
}
#[derive(Debug, derive_more::Display)]
pub enum CodecError {
#[display(fmt = "The wasm bytecode is failed to be decoded: {_0}")]
Decode(SerializationError),
#[display(fmt = "Failed to encode instrumented program: {_0}")]
Encode(SerializationError),
}
#[derive(Debug, derive_more::Display, derive_more::From)]
pub enum CodeError {
#[display(fmt = "Wasmer validation error: {_0}")]
Validation(BinaryReaderError),
#[display(fmt = "Codec error: {_0}")]
Codec(CodecError),
#[display(fmt = "Section error: {_0}")]
Section(SectionError),
#[display(fmt = "Memory error: {_0}")]
Memory(MemoryError),
#[display(fmt = "Stack end error: {_0}")]
StackEnd(StackEndError),
#[display(fmt = "Data section error: {_0}")]
DataSection(DataSectionError),
#[display(fmt = "Table section error: {_0}")]
TableSection(TableSectionError),
#[display(fmt = "Export error: {_0}")]
Export(ExportError),
#[display(fmt = "Import error: {_0}")]
Import(ImportError),
#[display(fmt = "Instrumentation error: {_0}")]
Instrumentation(InstrumentationError),
}