Use custom entry name in cranelift
This is a continuation of 9f0a8620bd
for
cranelift.
Signed-off-by: Ayush Singh <ayushsingh1325@gmail.com>
This commit is contained in:
parent
6dfe2395c9
commit
2436dff772
@ -22,7 +22,19 @@ fn clif_sig_from_fn_abi<'tcx>(
|
||||
default_call_conv: CallConv,
|
||||
fn_abi: &FnAbi<'tcx, Ty<'tcx>>,
|
||||
) -> Signature {
|
||||
let call_conv = match fn_abi.conv {
|
||||
let call_conv = conv_to_call_conv(fn_abi.conv, default_call_conv);
|
||||
|
||||
let inputs = fn_abi.args.iter().map(|arg_abi| arg_abi.get_abi_param(tcx).into_iter()).flatten();
|
||||
|
||||
let (return_ptr, returns) = fn_abi.ret.get_abi_return(tcx);
|
||||
// Sometimes the first param is an pointer to the place where the return value needs to be stored.
|
||||
let params: Vec<_> = return_ptr.into_iter().chain(inputs).collect();
|
||||
|
||||
Signature { params, returns, call_conv }
|
||||
}
|
||||
|
||||
pub(crate) fn conv_to_call_conv(c: Conv, default_call_conv: CallConv) -> CallConv {
|
||||
match c {
|
||||
Conv::Rust | Conv::C => default_call_conv,
|
||||
Conv::RustCold => CallConv::Cold,
|
||||
Conv::X86_64SysV => CallConv::SystemV,
|
||||
@ -38,15 +50,8 @@ fn clif_sig_from_fn_abi<'tcx>(
|
||||
| Conv::X86VectorCall
|
||||
| Conv::AmdGpuKernel
|
||||
| Conv::AvrInterrupt
|
||||
| Conv::AvrNonBlockingInterrupt => todo!("{:?}", fn_abi.conv),
|
||||
};
|
||||
let inputs = fn_abi.args.iter().map(|arg_abi| arg_abi.get_abi_param(tcx).into_iter()).flatten();
|
||||
|
||||
let (return_ptr, returns) = fn_abi.ret.get_abi_return(tcx);
|
||||
// Sometimes the first param is an pointer to the place where the return value needs to be stored.
|
||||
let params: Vec<_> = return_ptr.into_iter().chain(inputs).collect();
|
||||
|
||||
Signature { params, returns, call_conv }
|
||||
| Conv::AvrNonBlockingInterrupt => todo!("{:?}", c),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn get_function_sig<'tcx>(
|
||||
|
@ -63,10 +63,14 @@ fn create_entry_fn(
|
||||
AbiParam::new(m.target_config().pointer_type()),
|
||||
],
|
||||
returns: vec![AbiParam::new(m.target_config().pointer_type() /*isize*/)],
|
||||
call_conv: CallConv::triple_default(m.isa().triple()),
|
||||
call_conv: crate::conv_to_call_conv(
|
||||
tcx.sess.target.options.entry_abi,
|
||||
CallConv::triple_default(m.isa().triple()),
|
||||
),
|
||||
};
|
||||
|
||||
let cmain_func_id = m.declare_function("main", Linkage::Export, &cmain_sig).unwrap();
|
||||
let entry_name = tcx.sess.target.options.entry_name.as_ref();
|
||||
let cmain_func_id = m.declare_function(entry_name, Linkage::Export, &cmain_sig).unwrap();
|
||||
|
||||
let instance = Instance::mono(tcx, rust_main_def_id).polymorphize(tcx);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user