diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2022-11-10 10:47:39 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-10 10:47:39 -0500 |
| commit | 8f2c1f846945c24aeaf773c9b3c76ddae98db36c (patch) | |
| tree | b2cdc518fe6b9117daa86fe123dc43dd1f94b3ca | |
| parent | 150e0ec393031ede36de981363b7b9422cfcaf3a (diff) | |
| parent | 42cbb401574b494c5da7a58cb2485be54992babd (diff) | |
| download | rust-8f2c1f846945c24aeaf773c9b3c76ddae98db36c.tar.gz rust-8f2c1f846945c24aeaf773c9b3c76ddae98db36c.zip | |
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
| -rw-r--r-- | compiler/rustc_target/src/spec/mod.rs | 1 | ||||
| -rw-r--r-- | src/test/codegen/abi-efiapi.rs | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index 1bcb02ecb30..77d9a092003 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -1911,6 +1911,7 @@ impl Target { Abi::Stdcall { 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 => Abi::C { unwind: false }, diff --git a/src/test/codegen/abi-efiapi.rs b/src/test/codegen/abi-efiapi.rs index b4fda5f8c84..9061d7432a3 100644 --- a/src/test/codegen/abi-efiapi.rs +++ b/src/test/codegen/abi-efiapi.rs @@ -27,7 +27,7 @@ trait Copy { } //x86_64: define win64cc void @has_efiapi //i686: define 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 #[no_mangle] pub extern "efiapi" fn has_efiapi() {} |
