1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-10 04:00:28 +00:00

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 <raj.khem@gmail.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj
2025-09-08 14:06:57 -07:00
committed by Richard Purdie
parent 0f288ce34e
commit 86970c73bf
2 changed files with 63 additions and 0 deletions
@@ -0,0 +1,62 @@
From 0d8a9e12b6509cb2a79818f5f4062a0bee33edfc Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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) }
+}
@@ -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"