mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-19 03:41:22 +00:00
Add personality function.
- This is part of supporting exceptions in the future.
This commit is contained in:
@ -68,6 +68,12 @@ pub fn parse_function_bodies(
|
|||||||
|
|
||||||
let intrinsics = Intrinsics::declare(&module, &context);
|
let intrinsics = Intrinsics::declare(&module, &context);
|
||||||
|
|
||||||
|
let personality_func = module.add_function(
|
||||||
|
"__gxx_personality_v0",
|
||||||
|
intrinsics.i32_ty.fn_type(&[], false),
|
||||||
|
Some(Linkage::External),
|
||||||
|
);
|
||||||
|
|
||||||
let signatures: Map<SigIndex, FunctionType> = info
|
let signatures: Map<SigIndex, FunctionType> = info
|
||||||
.signatures
|
.signatures
|
||||||
.iter()
|
.iter()
|
||||||
@ -78,11 +84,13 @@ pub fn parse_function_bodies(
|
|||||||
.iter()
|
.iter()
|
||||||
.skip(info.imported_functions.len())
|
.skip(info.imported_functions.len())
|
||||||
.map(|(func_index, &sig_index)| {
|
.map(|(func_index, &sig_index)| {
|
||||||
module.add_function(
|
let func = module.add_function(
|
||||||
&format!("fn{}", func_index.index()),
|
&format!("fn{}", func_index.index()),
|
||||||
signatures[sig_index],
|
signatures[sig_index],
|
||||||
Some(Linkage::External),
|
Some(Linkage::External),
|
||||||
)
|
);
|
||||||
|
func.set_personality_function(personality_func);
|
||||||
|
func
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
@ -110,6 +118,8 @@ pub fn parse_function_bodies(
|
|||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module.print_to_stderr();
|
||||||
|
|
||||||
generate_trampolines(info, &signatures, &module, &context, &builder, &intrinsics);
|
generate_trampolines(info, &signatures, &module, &context, &builder, &intrinsics);
|
||||||
|
|
||||||
let pass_manager = PassManager::create_for_module();
|
let pass_manager = PassManager::create_for_module();
|
||||||
|
@ -6,7 +6,7 @@ static WAT: &'static str = r#"
|
|||||||
(module
|
(module
|
||||||
(type (;0;) (func (param i32) (result i32)))
|
(type (;0;) (func (param i32) (result i32)))
|
||||||
(func (;0;) (type 0) (param i32) (result i32)
|
(func (;0;) (type 0) (param i32) (result i32)
|
||||||
unreachable)
|
i32.const 42)
|
||||||
(export "select_trap_l" (func 0))
|
(export "select_trap_l" (func 0))
|
||||||
)
|
)
|
||||||
"#;
|
"#;
|
||||||
|
Reference in New Issue
Block a user