From 5054d110fbc05141e0c2287ba19676e7c1e0286e Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 13 Dec 2025 12:14:54 -0800 Subject: [PATCH 3/5] kexec/riscv: Add endian conversion macros for klibc builds klibc doesn't provide the standard endian conversion functions (le16toh, le32toh, le64toh, htole*, be*toh, htobe*) that are normally available in glibc's endian.h. Add macro implementations for these functions when building with klibc, using the existing bswap_* functions from byteswap.h for byte swapping when needed based on the host byte order. This fixes build errors when using RISC-V image headers with klibc. Upstream-Status: Pending Signed-off-by: Khem Raj --- kexec/arch/riscv/image-header.h | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/kexec/arch/riscv/image-header.h b/kexec/arch/riscv/image-header.h index a677546..892f77f 100644 --- a/kexec/arch/riscv/image-header.h +++ b/kexec/arch/riscv/image-header.h @@ -9,6 +9,42 @@ #include #include +#ifdef __KLIBC__ +#include + +/* klibc doesn't provide endian conversion functions, define them */ +#ifndef le64toh +# if __BYTE_ORDER == __LITTLE_ENDIAN +# define le16toh(x) ((uint16_t)(x)) +# define le32toh(x) ((uint32_t)(x)) +# define le64toh(x) ((uint64_t)(x)) +# define htole16(x) ((uint16_t)(x)) +# define htole32(x) ((uint32_t)(x)) +# define htole64(x) ((uint64_t)(x)) +# define be16toh(x) bswap_16(x) +# define be32toh(x) bswap_32(x) +# define be64toh(x) bswap_64(x) +# define htobe16(x) bswap_16(x) +# define htobe32(x) bswap_32(x) +# define htobe64(x) bswap_64(x) +# elif __BYTE_ORDER == __BIG_ENDIAN +# define le16toh(x) bswap_16(x) +# define le32toh(x) bswap_32(x) +# define le64toh(x) bswap_64(x) +# define htole16(x) bswap_16(x) +# define htole32(x) bswap_32(x) +# define htole64(x) bswap_64(x) +# define be16toh(x) ((uint16_t)(x)) +# define be32toh(x) ((uint32_t)(x)) +# define be64toh(x) ((uint64_t)(x)) +# define htobe16(x) ((uint16_t)(x)) +# define htobe32(x) ((uint32_t)(x)) +# define htobe64(x) ((uint64_t)(x)) +# else +# error "Unknown byte order" +# endif +#endif /* le64toh */ +#endif /* __KLIBC__ */ /** * struct riscv_image_header - riscv kernel image header. *