1 use crate::functions::FunctionSpec;
2 use crate::module_data::ModuleData;
3 use crate::tables::TableElement;
4 use crate::version_info::VersionInfo;
5 
6 pub const LUCET_MODULE_SYM: &str = "lucet_module";
7 
8 /// Module is the exposed structure that contains all the data backing a Lucet-compiled object.
9 #[derive(Debug)]
10 pub struct Module<'a> {
11     pub version: VersionInfo,
12     pub module_data: ModuleData<'a>,
13     pub tables: &'a [&'a [TableElement]],
14     pub function_manifest: &'a [FunctionSpec],
15 }
16 
17 /// SerializedModule is a serialization-friendly form of Module, in that the `module_data_*` fields
18 /// here refer to a serialized `ModuleData`, while `tables_*` and `function_manifest_*` refer to
19 /// the actual tables and function manifest written in the binary.
20 #[repr(C)]
21 #[derive(Debug)]
22 pub struct SerializedModule {
23     pub version: VersionInfo,
24     pub module_data_ptr: u64,
25     pub module_data_len: u64,
26     pub tables_ptr: u64,
27     pub tables_len: u64,
28     pub function_manifest_ptr: u64,
29     pub function_manifest_len: u64,
30 }
31