From 87ddf4f8550225a68a04dc20b7ada85cc7d82baf Mon Sep 17 00:00:00 2001 From: Lachlan Sneff Date: Sat, 2 Mar 2019 10:20:18 -0800 Subject: [PATCH] Add personality function. - This is part of supporting exceptions in the future. --- lib/llvm-backend/src/code.rs | 14 ++++++++++++-- lib/runtime/examples/call.rs | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/llvm-backend/src/code.rs b/lib/llvm-backend/src/code.rs index 2504d3977..a9170082b 100644 --- a/lib/llvm-backend/src/code.rs +++ b/lib/llvm-backend/src/code.rs @@ -68,6 +68,12 @@ pub fn parse_function_bodies( 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 = info .signatures .iter() @@ -78,11 +84,13 @@ pub fn parse_function_bodies( .iter() .skip(info.imported_functions.len()) .map(|(func_index, &sig_index)| { - module.add_function( + let func = module.add_function( &format!("fn{}", func_index.index()), signatures[sig_index], Some(Linkage::External), - ) + ); + func.set_personality_function(personality_func); + func }) .collect(); @@ -110,6 +118,8 @@ pub fn parse_function_bodies( })?; } + module.print_to_stderr(); + generate_trampolines(info, &signatures, &module, &context, &builder, &intrinsics); let pass_manager = PassManager::create_for_module(); diff --git a/lib/runtime/examples/call.rs b/lib/runtime/examples/call.rs index 0684c1bb7..ac38b8d46 100644 --- a/lib/runtime/examples/call.rs +++ b/lib/runtime/examples/call.rs @@ -6,7 +6,7 @@ static WAT: &'static str = r#" (module (type (;0;) (func (param i32) (result i32))) (func (;0;) (type 0) (param i32) (result i32) - unreachable) + i32.const 42) (export "select_trap_l" (func 0)) ) "#;