diff options
author | Jan Janssen <medhefgo@web.de> | 2023-01-07 09:19:23 +0100 |
---|---|---|
committer | Jan Janssen <medhefgo@web.de> | 2023-02-21 21:07:04 +0100 |
commit | 3ceaa05d566f178ccfdc6ba180e0e63f96216d87 (patch) | |
tree | 5ae714366f96f841057f691a6923fec569be3d41 /src/boot/efi | |
parent | a4ab05e296a605cff9d3d42d9c80dac910530a96 (diff) | |
download | systemd-3ceaa05d566f178ccfdc6ba180e0e63f96216d87.tar.gz |
boot: Do not use errno.h/inttypes.h
These are provided by libc instead of the compiler and are not supposed
to be used in freestanding environments.
When cross-compiling with clang and the corresponding gcc
cross-toolchain is not around, clang may pick up the wrong header from
the host system.
Diffstat (limited to 'src/boot/efi')
-rw-r--r-- | src/boot/efi/boot.c | 2 | ||||
-rw-r--r-- | src/boot/efi/efi-string.h | 26 | ||||
-rw-r--r-- | src/boot/efi/util.c | 2 |
3 files changed, 26 insertions, 4 deletions
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index 79cb36c717..e409168aa4 100644 --- a/src/boot/efi/boot.c +++ b/src/boot/efi/boot.c @@ -1,7 +1,5 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include <inttypes.h> - #include "bcd.h" #include "bootspec-fundamental.h" #include "console.h" diff --git a/src/boot/efi/efi-string.h b/src/boot/efi/efi-string.h index ea9493bcbb..6b6b0d57b4 100644 --- a/src/boot/efi/efi-string.h +++ b/src/boot/efi/efi-string.h @@ -121,6 +121,32 @@ _gnu_printf_(2, 0) _warn_unused_result_ char16_t *xvasprintf_status(EFI_STATUS s # define printf(...) printf_status(EFI_SUCCESS, __VA_ARGS__) # define xasprintf(...) xasprintf_status(EFI_SUCCESS, __VA_ARGS__) +/* inttypes.h is provided by libc instead of the compiler and is not supposed to be used in freestanding + * environments. We could use clang __*_FMT*__ constants for this, bug gcc does not have them. :( */ + +# if defined(__ILP32__) +# define PRI64_PREFIX "ll" +# elif defined(__LP64__) +# define PRI64_PREFIX "l" +# elif defined(__LLP64__) || (__SIZEOF_LONG__ == 4 && __SIZEOF_POINTER__ == 8) +# define PRI64_PREFIX "ll" +# else +# error Unknown 64-bit data model +# endif + +# define PRIi32 "i" +# define PRIu32 "u" +# define PRIx32 "x" +# define PRIX32 "X" +# define PRIiPTR "zi" +# define PRIuPTR "zu" +# define PRIxPTR "zx" +# define PRIXPTR "zX" +# define PRIi64 PRI64_PREFIX "i" +# define PRIu64 PRI64_PREFIX "u" +# define PRIx64 PRI64_PREFIX "x" +# define PRIX64 PRI64_PREFIX "X" + /* The compiler normally has knowledge about standard functions such as memcmp, but this is not the case when * compiling with -ffreestanding. By referring to builtins, the compiler can check arguments and do * optimizations again. Note that we still need to provide implementations as the compiler is free to not diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c index 48b30a8f5a..3166944b03 100644 --- a/src/boot/efi/util.c +++ b/src/boot/efi/util.c @@ -1,7 +1,5 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include <inttypes.h> - #include "proto/device-path.h" #include "proto/simple-text-io.h" #include "ticks.h" |