Rollup merge of #104077 - nicholasbishop:bishop-uefi-aapcs, r=nagisa
Use aapcs for efiapi calling convention on arm On arm, [llvm treats the C calling convention as `aapcs` on soft-float targets and `aapcs-vfp` on hard-float targets](https://github.com/rust-lang/compiler-builtins/issues/116#issuecomment-261057422). UEFI specifies in the arm calling convention that [floating point extensions aren't used](https://uefi.org/specs/UEFI/2.10/02_Overview.html#detailed-calling-convention), so always translate `efiapi` to `aapcs` on arm. https://github.com/rust-lang/rust/issues/65815
This commit is contained in:
commit
8f2c1f8469
@ -1911,6 +1911,7 @@ pub fn adjust_abi(&self, abi: Abi) -> Abi {
|
|||||||
Abi::Stdcall { unwind }
|
Abi::Stdcall { unwind }
|
||||||
}
|
}
|
||||||
Abi::System { unwind } => Abi::C { unwind },
|
Abi::System { unwind } => Abi::C { unwind },
|
||||||
|
Abi::EfiApi if self.arch == "arm" => Abi::Aapcs { unwind: false },
|
||||||
Abi::EfiApi if self.arch == "x86_64" => Abi::Win64 { unwind: false },
|
Abi::EfiApi if self.arch == "x86_64" => Abi::Win64 { unwind: false },
|
||||||
Abi::EfiApi => Abi::C { unwind: false },
|
Abi::EfiApi => Abi::C { unwind: false },
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ trait Copy { }
|
|||||||
//x86_64: define win64cc void @has_efiapi
|
//x86_64: define win64cc void @has_efiapi
|
||||||
//i686: define void @has_efiapi
|
//i686: define void @has_efiapi
|
||||||
//aarch64: define dso_local void @has_efiapi
|
//aarch64: define dso_local void @has_efiapi
|
||||||
//arm: define dso_local void @has_efiapi
|
//arm: define dso_local arm_aapcscc void @has_efiapi
|
||||||
//riscv: define dso_local void @has_efiapi
|
//riscv: define dso_local void @has_efiapi
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "efiapi" fn has_efiapi() {}
|
pub extern "efiapi" fn has_efiapi() {}
|
||||||
|
Loading…
Reference in New Issue
Block a user