From 9cb0a4b8ecfa2aa24df36eb43d3f50dde32442d1 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 7 Jun 2023 12:18:38 +0100 Subject: [PATCH] [efi] Disable static assertions in EFI headers on non-EFI platforms The EDK2 headers may be included even in builds for non-EFI platforms. Commits such as 9de6c45 ("[arm] Use -fno-short-enums for all 32-bit ARM builds") have so far ensured that the compile-time checks within the EDK2 headers will pass even when building for a non-EFI platform. As a more general solution, temporarily disable static assertions while including UefiBaseType.h if building on a non-EFI platform. This avoids the need to modify the ABI on other platforms. Signed-off-by: Michael Brown --- src/include/ipxe/efi/efi.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/include/ipxe/efi/efi.h b/src/include/ipxe/efi/efi.h index e0e2db608..29117fa35 100644 --- a/src/include/ipxe/efi/efi.h +++ b/src/include/ipxe/efi/efi.h @@ -43,10 +43,19 @@ FILE_LICENCE ( GPL2_OR_LATER ); * checking somewhat useless. Work around this bizarre sabotage * attempt by redefining EFI_HANDLE as a pointer to an anonymous * structure. + * + * EFI headers perform some ABI validation checks via _Static_assert() + * that may fail when EFI headers are included on a non-EFI platform. + * Temporarily disable static assertions to allow these headers to be + * included. */ #define EFI_HANDLE STUPID_EFI_HANDLE +#ifndef PLATFORM_efi +#define _Static_assert(expr, msg) +#endif #include #undef EFI_HANDLE +#undef _Static_assert typedef struct {} *EFI_HANDLE; /* Include the top-level EFI header files */