From 86970c73bf99789b114a78702b9a0629a4583b1d Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Mon, 8 Sep 2025 14:06:57 -0700 Subject: [PATCH] kexec-tools: Fix build with LLD linker With hardcoded -Ttext,0x10000 and newer toolchains emitting .note.gnu.property before .text, the link can fail with an overlap. Provide a minimal linker script that: - sets the image base to 0x10000, - places .text first at exactly 0x10000, - moves .note.gnu.property after .text, - optionally fixes .bss at 0x12000. Works with both ld.bfd and LLD 21+. (From OE-Core rev: 049ce8ad241bae31c22b83788e732080f7d04526) Signed-off-by: Khem Raj Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- ...nt-base-match-pinned-section-address.patch | 62 +++++++++++++++++++ .../kexec/kexec-tools_2.0.31.bb | 1 + 2 files changed, 63 insertions(+) create mode 100644 meta/recipes-kernel/kexec/kexec-tools/0001-Make-the-segment-base-match-pinned-section-address.patch diff --git a/meta/recipes-kernel/kexec/kexec-tools/0001-Make-the-segment-base-match-pinned-section-address.patch b/meta/recipes-kernel/kexec/kexec-tools/0001-Make-the-segment-base-match-pinned-section-address.patch new file mode 100644 index 0000000000..6babf16e6e --- /dev/null +++ b/meta/recipes-kernel/kexec/kexec-tools/0001-Make-the-segment-base-match-pinned-section-address.patch @@ -0,0 +1,62 @@ +From 0d8a9e12b6509cb2a79818f5f4062a0bee33edfc Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 3 Sep 2025 13:28:32 -0700 +Subject: [PATCH] Make the segment base match pinned section address + +ET_EXEC uses image base of 0x400000, but the build forces +section VMAs like .text = 0x10000. LLD now errors when any +section address is below the image base unless you explicitly +set the base. (Older LLD tolerated it.) + +To fix this, set the image base to match forced section addresses + +Fixes +| x86_64-yoe-linux-ld.lld: error: section '.text' address (0x10000) is smaller than image base (0x400000); specify --image-base +| x86_64-yoe-linux-ld.lld: error: section '.bss' address (0x12000) is smaller than image base (0x400000); specify --image-base + +Upstream-Status: Submitted [https://lists.infradead.org/pipermail/kexec/2025-September/033493.html] + +Signed-off-by: Khem Raj +--- + kexec_test/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kexec_test/Makefile ++++ b/kexec_test/Makefile +@@ -5,7 +5,7 @@ RELOC:=0x10000 + KEXEC_TEST_SRCS:= kexec_test/kexec_test16.S kexec_test/kexec_test.S + + dist += kexec_test/Makefile $(KEXEC_TEST_SRCS) \ +- kexec_test/x86-setup-legacy-pic.S ++ kexec_test/x86-setup-legacy-pic.S kexec_test/kexec_test.ld + + BUILD_KEXEC_TEST = no + ifeq ($(ARCH),i386) +@@ -31,7 +31,7 @@ $(KEXEC_TEST): CPPFLAGS+=-DRELOC=$(RELOC + $(KEXEC_TEST): ASFLAGS+=-m32 + #$(KEXEC_TEST): LDFLAGS=-m32 -Wl,-e -Wl,_start -Wl,-Ttext -Wl,$(RELOC) \ + # -nostartfiles +-$(KEXEC_TEST): LDFLAGS=-melf_i386 -e _start -Ttext $(RELOC) ++$(KEXEC_TEST): LDFLAGS=-melf_i386 -e _start -T $(srcdir)/kexec_test/kexec_test.ld + + $(KEXEC_TEST): $(KEXEC_TEST_OBJS) + mkdir -p $(@D) +--- /dev/null ++++ b/kexec_test/kexec_test.ld +@@ -0,0 +1,16 @@ ++ENTRY(_start) ++SECTIONS ++{ ++ . = 0x10000; ++ .text : { *(.text .text.*) } ++ ++ /* Place the note after .text to avoid overlap */ ++ . = ALIGN(16); ++ .note.gnu.property : { *(.note.gnu.property) } ++ ++ .rodata : { *(.rodata .rodata.*) } ++ ++ /* If you need bss fixed: */ ++ . = 0x12000; ++ .bss : { *(.bss .bss.* COMMON) } ++} diff --git a/meta/recipes-kernel/kexec/kexec-tools_2.0.31.bb b/meta/recipes-kernel/kexec/kexec-tools_2.0.31.bb index 7333aa73c1..b12f76a0bf 100644 --- a/meta/recipes-kernel/kexec/kexec-tools_2.0.31.bb +++ b/meta/recipes-kernel/kexec/kexec-tools_2.0.31.bb @@ -19,6 +19,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz file://0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch \ file://0001-kexec.c-add-MFD_NOEXEC_SEAL-flag-explicitly.patch \ file://0001-ppc-fs2dt-Match-function-signatures.patch \ + file://0001-Make-the-segment-base-match-pinned-section-address.patch \ " SRC_URI[sha256sum] = "ddaaa65b02b4f8aa9222586b1f26565b93a4baeffd35bcbd523f15fae7aa4897"