[PATCH 04/16] vmlinux.lds: Move DATA_LE32() from arm64 to the common linker script
Jonathan Cameron
jonathan.cameron at oss.qualcomm.com
Thu Sep 24 15:53:07 PDT 2026
On Thu, 24 Sep 2026 10:53:07 -0300
Jason Gunthorpe <jgg at nvidia.com> wrote:
> Other arches may want to use this to get consistent fixed endian output.
You will have to grab it quickly!
https://lore.kernel.org/all/20260918145217.1669-10-will@kernel.org/#Z31arch:arm64:kernel:image.h
drops that definition as part of ripping out arm64 big endian support.
+CC Will for awareness.
>
> Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
> ---
> arch/arm64/kernel/image.h | 14 --------------
> include/asm-generic/vmlinux.lds.h | 15 +++++++++++++++
> 2 files changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
> index 7bc3ba89790191..1bff6b061b6cab 100644
> --- a/arch/arm64/kernel/image.h
> +++ b/arch/arm64/kernel/image.h
> @@ -14,26 +14,12 @@
> #include <asm/image.h>
>
> /*
> - * There aren't any ELF relocations we can use to endian-swap values known only
> - * at link time (e.g. the subtraction of two symbol addresses), so we must get
> - * the linker to endian-swap certain values before emitting them.
> - *
> * Note that, in order for this to work when building the ELF64 PIE executable
> * (for KASLR), these values should not be referenced via R_AARCH64_ABS64
> * relocations, since these are fixed up at runtime rather than at build time
> * when PIE is in effect. So we need to split them up in 32-bit high and low
> * words.
> */
> -#ifdef CONFIG_CPU_BIG_ENDIAN
> -#define DATA_LE32(data) \
> - ((((data) & 0x000000ff) << 24) | \
> - (((data) & 0x0000ff00) << 8) | \
> - (((data) & 0x00ff0000) >> 8) | \
> - (((data) & 0xff000000) >> 24))
> -#else
> -#define DATA_LE32(data) ((data) & 0xffffffff)
> -#endif
> -
> #define DEFINE_IMAGE_LE64(sym, data) \
> sym##_lo32 = DATA_LE32((data) & 0xffffffff); \
> sym##_hi32 = DATA_LE32((data) >> 32)
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index b2988aa12f6645..1786a8e4323b9f 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -56,6 +56,21 @@
> #define LOAD_OFFSET 0
> #endif
>
> +/*
> + * There aren't any ELF relocations we can use to endian-swap values known only
> + * at link time (e.g. the subtraction of two symbol addresses), so we must get
> + * the linker to endian-swap certain values before emitting them.
> + */
> +#ifdef CONFIG_CPU_BIG_ENDIAN
> +#define DATA_LE32(data) \
> + ((((data) & 0x000000ff) << 24) | \
> + (((data) & 0x0000ff00) << 8) | \
> + (((data) & 0x00ff0000) >> 8) | \
> + (((data) & 0xff000000) >> 24))
> +#else
> +#define DATA_LE32(data) ((data) & 0xffffffff)
> +#endif
> +
> /*
> * Only some architectures want to have the .notes segment visible in
> * a separate PT_NOTE ELF Program Header. When this happens, it needs
More information about the linux-riscv
mailing list