Fix EFIABI test
Use revisions to run the EFIABI in multiple configurations, compiling for each supported UEFI platform, and checking the ABI generated in the LLVM IR is correct. Use no_core to make it easier to test.
This commit is contained in:
parent
093ec70b1e
commit
61732804e2
1 changed files with 21 additions and 12 deletions
|
@ -1,20 +1,29 @@
|
||||||
// Checks if the correct annotation for the efiapi ABI is passed to llvm.
|
// Checks if the correct annotation for the efiapi ABI is passed to llvm.
|
||||||
|
|
||||||
|
// revisions:x86_64 i686 aarch64 arm riscv
|
||||||
|
|
||||||
|
//[x86_64] compile-flags: --target x86_64-unknown-uefi
|
||||||
|
//[i686] compile-flags: --target i686-unknown-linux-musl
|
||||||
|
//[aarch64] compile-flags: --target aarch64-unknown-none
|
||||||
|
//[arm] compile-flags: --target armv7r-none-eabi
|
||||||
|
//[riscv] compile-flags: --target riscv64gc-unknown-none-elf
|
||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(abi_efiapi)]
|
#![feature(no_core, lang_items, abi_efiapi)]
|
||||||
|
#![no_core]
|
||||||
|
|
||||||
// CHECK: define win64 i64 @has_efiapi
|
#[lang="sized"]
|
||||||
#[no_mangle]
|
trait Sized { }
|
||||||
#[cfg(target_arch = "x86_64")]
|
#[lang="freeze"]
|
||||||
pub extern "efiapi" fn has_efiapi(a: i64) -> i64 {
|
trait Freeze { }
|
||||||
a * 2
|
#[lang="copy"]
|
||||||
}
|
trait Copy { }
|
||||||
|
|
||||||
// CHECK: define c i64 @has_efiapi
|
//x86_64: define win64cc void @has_efiapi
|
||||||
|
//i686: define void @has_efiapi
|
||||||
|
//aarch64: define void @has_efiapi
|
||||||
|
//arm: define void @has_efiapi
|
||||||
|
//riscv: define void @has_efiapi
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[cfg(not(target_arch = "x86_64"))]
|
pub extern "efiapi" fn has_efiapi() {}
|
||||||
pub extern "efiapi" fn has_efiapi(a: i64) -> i64 {
|
|
||||||
a * 2
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue