@@ -70,74 +70,27 @@ fn codegen_inner(
70
70
params : arg_tys. iter ( ) . cloned ( ) . map ( AbiParam :: new) . collect ( ) ,
71
71
returns : output. into_iter ( ) . map ( AbiParam :: new) . collect ( ) ,
72
72
} ;
73
-
74
- let caller_name = format ! ( "__rust_{}" , method. name) ;
75
- let callee_name = kind. fn_name ( method. name ) ;
76
-
77
- let func_id = module. declare_function ( & caller_name, Linkage :: Export , & sig) . unwrap ( ) ;
78
-
79
- let callee_func_id = module. declare_function ( & callee_name, Linkage :: Import , & sig) . unwrap ( ) ;
80
-
81
- let mut ctx = Context :: new ( ) ;
82
- ctx. func . signature = sig. clone ( ) ;
83
- {
84
- let mut func_ctx = FunctionBuilderContext :: new ( ) ;
85
- let mut bcx = FunctionBuilder :: new ( & mut ctx. func , & mut func_ctx) ;
86
-
87
- let block = bcx. create_block ( ) ;
88
- bcx. switch_to_block ( block) ;
89
- let args = arg_tys
90
- . into_iter ( )
91
- . map ( |ty| bcx. append_block_param ( block, ty) )
92
- . collect :: < Vec < Value > > ( ) ;
93
-
94
- let callee_func_ref = module. declare_func_in_func ( callee_func_id, & mut bcx. func ) ;
95
- let call_inst = bcx. ins ( ) . call ( callee_func_ref, & args) ;
96
- let results = bcx. inst_results ( call_inst) . to_vec ( ) ; // Clone to prevent borrow error
97
-
98
- bcx. ins ( ) . return_ ( & results) ;
99
- bcx. seal_all_blocks ( ) ;
100
- bcx. finalize ( ) ;
101
- }
102
- module. define_function ( func_id, & mut ctx) . unwrap ( ) ;
103
- unwind_context. add_function ( func_id, & ctx, module. isa ( ) ) ;
73
+ crate :: common:: create_wrapper_function (
74
+ module,
75
+ unwind_context,
76
+ sig,
77
+ & format ! ( "__rust_{}" , method. name) ,
78
+ & kind. fn_name ( method. name ) ,
79
+ ) ;
104
80
}
105
81
106
82
let sig = Signature {
107
83
call_conv : module. target_config ( ) . default_call_conv ,
108
84
params : vec ! [ AbiParam :: new( usize_ty) , AbiParam :: new( usize_ty) ] ,
109
85
returns : vec ! [ ] ,
110
86
} ;
111
-
112
- let callee_name = alloc_error_handler_kind. fn_name ( sym:: oom) ;
113
-
114
- let func_id =
115
- module. declare_function ( "__rust_alloc_error_handler" , Linkage :: Export , & sig) . unwrap ( ) ;
116
-
117
- let callee_func_id = module. declare_function ( & callee_name, Linkage :: Import , & sig) . unwrap ( ) ;
118
-
119
- let mut ctx = Context :: new ( ) ;
120
- ctx. func . signature = sig;
121
- {
122
- let mut func_ctx = FunctionBuilderContext :: new ( ) ;
123
- let mut bcx = FunctionBuilder :: new ( & mut ctx. func , & mut func_ctx) ;
124
-
125
- let block = bcx. create_block ( ) ;
126
- bcx. switch_to_block ( block) ;
127
- let args = ( & [ usize_ty, usize_ty] )
128
- . iter ( )
129
- . map ( |& ty| bcx. append_block_param ( block, ty) )
130
- . collect :: < Vec < Value > > ( ) ;
131
-
132
- let callee_func_ref = module. declare_func_in_func ( callee_func_id, & mut bcx. func ) ;
133
- bcx. ins ( ) . call ( callee_func_ref, & args) ;
134
-
135
- bcx. ins ( ) . trap ( TrapCode :: UnreachableCodeReached ) ;
136
- bcx. seal_all_blocks ( ) ;
137
- bcx. finalize ( ) ;
138
- }
139
- module. define_function ( func_id, & mut ctx) . unwrap ( ) ;
140
- unwind_context. add_function ( func_id, & ctx, module. isa ( ) ) ;
87
+ crate :: common:: create_wrapper_function (
88
+ module,
89
+ unwind_context,
90
+ sig,
91
+ "__rust_alloc_error_handler" ,
92
+ & alloc_error_handler_kind. fn_name ( sym:: oom) ,
93
+ ) ;
141
94
142
95
let data_id = module. declare_data ( OomStrategy :: SYMBOL , Linkage :: Export , false , false ) . unwrap ( ) ;
143
96
let mut data_ctx = DataContext :: new ( ) ;
0 commit comments