diff options
author | Michael Brown <mcb30@ipxe.org> | 2023-01-20 00:13:04 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2023-01-20 00:17:49 +0000 |
commit | a99e435c8e24887ce80c322029ba23103e00d1c2 (patch) | |
tree | 0f5ac9d4ab66f3f8666fc80a598e24d8d3006486 | |
parent | 6b977d1250e497abd357cca863140361472a6082 (diff) | |
download | ipxe-a99e435c8e24887ce80c322029ba23103e00d1c2.zip ipxe-a99e435c8e24887ce80c322029ba23103e00d1c2.tar.gz ipxe-a99e435c8e24887ce80c322029ba23103e00d1c2.tar.bz2 |
[efi] Do not rely on ProcessorBind.h when building host binariesprocessorbind
We cannot rely on the EDK2 ProcessorBind.h headers when compiling a
binary for execution on the build host itself (e.g. elf2efi), since
the host's CPU architecture may not even be supported by EDK2.
Fix by skipping ProcessorBind.h when building a host binary, and
defining the bare minimum required to allow other EDK2 headers to
compile cleanly.
Reported-by: Michal Suchánek <msuchanek@suse.de>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/include/ipxe/efi/ProcessorBind.h | 42 | ||||
-rw-r--r-- | src/util/elf2efi.c | 2 |
2 files changed, 40 insertions, 4 deletions
diff --git a/src/include/ipxe/efi/ProcessorBind.h b/src/include/ipxe/efi/ProcessorBind.h index ff1517f..eda609b 100644 --- a/src/include/ipxe/efi/ProcessorBind.h +++ b/src/include/ipxe/efi/ProcessorBind.h @@ -10,20 +10,54 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); * - mcb30 */ -#if __i386__ +#ifdef EFI_HOSTONLY + +/* + * We cannot rely on the EDK2 ProcessorBind.h headers when compiling a + * binary for execution on the build host itself, since the host's CPU + * architecture may not even be supported by EDK2. + */ + +/* Define the basic integer types in terms of the host's <stdint.h> */ +#include <stdint.h> +typedef int8_t INT8; +typedef int16_t INT16; +typedef int32_t INT32; +typedef int64_t INT64; +typedef uint8_t UINT8; +typedef long INTN; +typedef uint16_t UINT16; +typedef uint32_t UINT32; +typedef uint64_t UINT64; +typedef unsigned long UINTN; +typedef int8_t CHAR8; +typedef int16_t CHAR16; +typedef uint8_t BOOLEAN; + +/* Define EFIAPI as whatever API the host uses by default */ +#define EFIAPI + +/* Define an architecture-neutral MDE_CPU macro to prevent build errors */ +#define MDE_CPU_EBC + +#else /* EFI_HOSTONLY */ + +#ifdef __i386__ #include <ipxe/efi/Ia32/ProcessorBind.h> #endif -#if __x86_64__ +#ifdef __x86_64__ #include <ipxe/efi/X64/ProcessorBind.h> #endif -#if __arm__ +#ifdef __arm__ #include <ipxe/efi/Arm/ProcessorBind.h> #endif -#if __aarch64__ +#ifdef __aarch64__ #include <ipxe/efi/AArch64/ProcessorBind.h> #endif +#endif /* EFI_HOSTONLY */ + #endif /* _IPXE_EFI_PROCESSOR_BIND_H */ diff --git a/src/util/elf2efi.c b/src/util/elf2efi.c index 08d790f..9523ccc 100644 --- a/src/util/elf2efi.c +++ b/src/util/elf2efi.c @@ -33,6 +33,8 @@ #include <fcntl.h> #include <elf.h> #include <libgen.h> + +#define EFI_HOSTONLY #include <ipxe/efi/Uefi.h> #include <ipxe/efi/IndustryStandard/PeImage.h> |