1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-09 12:58:26 +03:00

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.
This commit is contained in:
Jan Janssen 2023-01-07 09:19:23 +01:00
parent a4ab05e296
commit 3ceaa05d56
4 changed files with 31 additions and 5 deletions

View File

@ -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"

View File

@ -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

View File

@ -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"

View File

@ -1,7 +1,11 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include <errno.h>
#ifdef SD_BOOT
# define EINVAL 22
#else
# include <errno.h>
#endif
#include "string-util-fundamental.h"
/* Features of the loader, i.e. systemd-boot */