@@ -8,7 +8,6 @@ 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 ;
12
11
13
12
use cranelift_jit:: { JITBuilder , JITModule } ;
14
13
@@ -81,6 +80,7 @@ pub(crate) fn run_jit(tcx: TyCtxt<'_>, backend_config: BackendConfig) -> ! {
81
80
}
82
81
83
82
crate :: allocator:: codegen ( tcx, & mut jit_module, & mut cx. unwind_context ) ;
83
+ crate :: main_shim:: maybe_create_entry_wrapper ( tcx, & mut jit_module, & mut cx. unwind_context , true ) ;
84
84
85
85
tcx. sess . abort_if_errors ( ) ;
86
86
@@ -105,57 +105,24 @@ pub(crate) fn run_jit(tcx: TyCtxt<'_>, backend_config: BackendConfig) -> ! {
105
105
assert ! ( tls_backend_config. borrow_mut( ) . replace( backend_config) . is_none( ) )
106
106
} ) ;
107
107
108
- let ( main_def_id, entry_ty) = tcx. entry_fn ( LOCAL_CRATE ) . unwrap ( ) ;
109
- let instance = Instance :: mono ( tcx, main_def_id. to_def_id ( ) ) . polymorphize ( tcx) ;
110
-
111
- match entry_ty {
112
- EntryFnType :: Main => {
113
- // FIXME set program arguments somehow
114
-
115
- let main_sig = Signature {
116
- params : vec ! [ ] ,
117
- returns : vec ! [ ] ,
118
- call_conv : CallConv :: triple_default ( & crate :: target_triple ( tcx. sess ) ) ,
119
- } ;
120
- let main_func_id = jit_module
121
- . declare_function ( tcx. symbol_name ( instance) . name , Linkage :: Import , & main_sig)
122
- . unwrap ( ) ;
123
- let finalized_main: * const u8 = jit_module. get_finalized_function ( main_func_id) ;
124
-
125
- CURRENT_MODULE . with ( |current_module| {
126
- assert ! ( current_module. borrow_mut( ) . replace( jit_module) . is_none( ) )
127
- } ) ;
128
-
129
- let f: extern "C" fn ( ) = unsafe { :: std:: mem:: transmute ( finalized_main) } ;
130
- f ( ) ;
131
- std:: process:: exit ( 0 ) ;
132
- }
133
- EntryFnType :: Start => {
134
- let start_sig = Signature {
135
- params : vec ! [
136
- AbiParam :: new( jit_module. target_config( ) . pointer_type( ) ) ,
137
- AbiParam :: new( jit_module. target_config( ) . pointer_type( ) ) ,
138
- ] ,
139
- returns : vec ! [ AbiParam :: new(
140
- jit_module. target_config( ) . pointer_type( ) , /*isize*/
141
- ) ] ,
142
- call_conv : CallConv :: triple_default ( & crate :: target_triple ( tcx. sess ) ) ,
143
- } ;
144
- let start_func_id = jit_module
145
- . declare_function ( tcx. symbol_name ( instance) . name , Linkage :: Import , & start_sig)
146
- . unwrap ( ) ;
147
- let finalized_start: * const u8 = jit_module. get_finalized_function ( start_func_id) ;
148
-
149
- CURRENT_MODULE . with ( |current_module| {
150
- assert ! ( current_module. borrow_mut( ) . replace( jit_module) . is_none( ) )
151
- } ) ;
152
-
153
- let f: extern "C" fn ( c_int , * const * const c_char ) -> c_int =
154
- unsafe { :: std:: mem:: transmute ( finalized_start) } ;
155
- let ret = f ( args. len ( ) as c_int , argv. as_ptr ( ) ) ;
156
- std:: process:: exit ( ret) ;
157
- }
158
- }
108
+ let start_sig = Signature {
109
+ params : vec ! [
110
+ AbiParam :: new( jit_module. target_config( ) . pointer_type( ) ) ,
111
+ AbiParam :: new( jit_module. target_config( ) . pointer_type( ) ) ,
112
+ ] ,
113
+ returns : vec ! [ AbiParam :: new( jit_module. target_config( ) . pointer_type( ) /*isize*/ ) ] ,
114
+ call_conv : CallConv :: triple_default ( & crate :: target_triple ( tcx. sess ) ) ,
115
+ } ;
116
+ let start_func_id = jit_module. declare_function ( "main" , Linkage :: Import , & start_sig) . unwrap ( ) ;
117
+ let finalized_start: * const u8 = jit_module. get_finalized_function ( start_func_id) ;
118
+
119
+ CURRENT_MODULE
120
+ . with ( |current_module| assert ! ( current_module. borrow_mut( ) . replace( jit_module) . is_none( ) ) ) ;
121
+
122
+ let f: extern "C" fn ( c_int , * const * const c_char ) -> c_int =
123
+ unsafe { :: std:: mem:: transmute ( finalized_start) } ;
124
+ let ret = f ( args. len ( ) as c_int , argv. as_ptr ( ) ) ;
125
+ std:: process:: exit ( ret) ;
159
126
}
160
127
161
128
#[ no_mangle]
0 commit comments