@@ -8,6 +8,7 @@ use std::os::raw::{c_char, c_int};
8
8
use cranelift_codegen:: binemit:: { NullStackMapSink , NullTrapSink } ;
9
9
use rustc_codegen_ssa:: CrateInfo ;
10
10
use rustc_middle:: mir:: mono:: MonoItem ;
11
+ use rustc_session:: config:: EntryFnType ;
11
12
12
13
use cranelift_jit:: { JITBuilder , JITModule } ;
13
14
@@ -138,57 +139,10 @@ pub(crate) fn run_jit(tcx: TyCtxt<'_>, backend_config: BackendConfig) -> ! {
138
139
* lazy_jit_state = Some ( JitState { backend_config, jit_module } ) ;
139
140
} ) ;
140
141
141
- let ( main_def_id, entry_ty) = tcx. entry_fn ( LOCAL_CRATE ) . unwrap ( ) ;
142
- let instance = Instance :: mono ( tcx, main_def_id) . polymorphize ( tcx) ;
143
-
144
- match entry_ty {
145
- EntryFnType :: Main => {
146
- // FIXME set program arguments somehow
147
-
148
- let main_sig = Signature {
149
- params : vec ! [ ] ,
150
- returns : vec ! [ ] ,
151
- call_conv : CallConv :: triple_default ( & crate :: target_triple ( tcx. sess ) ) ,
152
- } ;
153
- let main_func_id = jit_module
154
- . declare_function ( tcx. symbol_name ( instance) . name , Linkage :: Import , & main_sig)
155
- . unwrap ( ) ;
156
- let finalized_main: * const u8 = jit_module. get_finalized_function ( main_func_id) ;
157
-
158
- CURRENT_MODULE . with ( |current_module| {
159
- assert ! ( current_module. borrow_mut( ) . replace( jit_module) . is_none( ) )
160
- } ) ;
161
-
162
- let f: extern "C" fn ( ) = unsafe { :: std:: mem:: transmute ( finalized_main) } ;
163
- f ( ) ;
164
- std:: process:: exit ( 0 ) ;
165
- }
166
- EntryFnType :: Start => {
167
- let start_sig = Signature {
168
- params : vec ! [
169
- AbiParam :: new( jit_module. target_config( ) . pointer_type( ) ) ,
170
- AbiParam :: new( jit_module. target_config( ) . pointer_type( ) ) ,
171
- ] ,
172
- returns : vec ! [ AbiParam :: new(
173
- jit_module. target_config( ) . pointer_type( ) , /*isize*/
174
- ) ] ,
175
- call_conv : CallConv :: triple_default ( & crate :: target_triple ( tcx. sess ) ) ,
176
- } ;
177
- let start_func_id = jit_module
178
- . declare_function ( tcx. symbol_name ( instance) . name , Linkage :: Import , & start_sig)
179
- . unwrap ( ) ;
180
- let finalized_start: * const u8 = jit_module. get_finalized_function ( start_func_id) ;
181
-
182
- CURRENT_MODULE . with ( |current_module| {
183
- assert ! ( current_module. borrow_mut( ) . replace( jit_module) . is_none( ) )
184
- } ) ;
185
-
186
- let f: extern "C" fn ( c_int , * const * const c_char ) -> c_int =
187
- unsafe { :: std:: mem:: transmute ( finalized_start) } ;
188
- let ret = f ( args. len ( ) as c_int , argv. as_ptr ( ) ) ;
189
- std:: process:: exit ( ret) ;
190
- }
191
- }
142
+ let f: extern "C" fn ( c_int , * const * const c_char ) -> c_int =
143
+ unsafe { :: std:: mem:: transmute ( finalized_start) } ;
144
+ let ret = f ( args. len ( ) as c_int , argv. as_ptr ( ) ) ;
145
+ std:: process:: exit ( ret) ;
192
146
}
193
147
194
148
#[ no_mangle]
0 commit comments