Re: [PATCH 04/16] vmlinux.lds: Move DATA_LE32() from arm64 to the common linker script
From: Jonathan Cameron <hidden>
Date: 2026-09-24 22:53:17
Also in:
linux-arch, linux-doc, linux-efi, linux-integrity, linux-patches, linux-riscv
On Thu, 24 Sep 2026 10:53:07 -0300 Jason Gunthorpe [off-list ref] 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 (local) drops that definition as part of ripping out arm64 big endian support. +CC Will for awareness.
quoted hunk ↗ jump to hunk
Signed-off-by: Jason Gunthorpe <jgg@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