ExceptionCode and ExceptionTable.

This commit is contained in:
losfair
2020-01-09 01:42:21 +08:00
parent 61cde95698
commit 5c15ff9673

View File

@ -183,6 +183,26 @@ pub struct CompilerConfig {
pub backend_specific_config: Option<BackendCompilerConfig>,
}
/// An exception table for a `RunnableModule`.
#[derive(Clone, Debug, Default)]
pub struct ExceptionTable {
/// Mappings from offsets in generated machine code to the corresponding exception code.
pub offset_to_code: HashMap<usize, ExceptionCode>,
}
/// The code of an exception.
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
pub enum ExceptionCode {
/// An `unreachable` opcode was executed.
Unreachable,
/// An arithmetic exception, e.g. divided by zero.
Arithmetic,
/// Memory access exception, e.g. misaligned/out-of-bound read/write.
Memory,
}
pub trait Compiler {
/// Compiles a `Module` from WebAssembly binary format.
/// The `CompileToken` parameter ensures that this can only
@ -214,6 +234,10 @@ pub trait RunnableModule: Send + Sync {
None
}
fn get_exception_table(&self) -> Option<&ExceptionTable> {
None
}
unsafe fn patch_local_function(&self, _idx: usize, _target_address: usize) -> bool {
false
}