linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Christian Eggers <ceggers@arri.de>
To: Russell King <linux@armlinux.org.uk>,
	Yuntao Liu <liuyuntao12@huawei.com>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Arnd Bergmann <arnd@arndb.de>,
	Linus Walleij <linus.walleij@linaro.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Nathan Chancellor <nathan@kernel.org>,
	<linux-arm-kernel@lists.infradead.org>
Cc: <linux-kernel@vger.kernel.org>,
	Christian Eggers <ceggers@arri.de>,
	"kernel test robot" <lkp@intel.com>
Subject: [PATCH v2 1/2] ARM: substitute OVERLAY description in linker script
Date: Mon, 24 Feb 2025 13:54:13 +0100	[thread overview]
Message-ID: <20250224125414.2184-1-ceggers@arri.de> (raw)

If linker garbage collection is active, we must ensure that the vectors
are not removed during linking (by using the KEEP keyword).  But it
seems that the LLD linker doesn't support using the KEEP() keyword
within an overlay description.

The GNU linker manual shows an alternative way to accomplish the same
result without using the overlay statement:

https://sourceware.org/binutils/docs/ld/Overlay-Description.html

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202502222158.UhwuvDZv-lkp@intel.com/
Signed-off-by: Christian Eggers <ceggers@arri.de>
---
v2:
- added this patch as the kernel test robot complained when
  using the LLD linker:
  https://lore.kernel.org/all/202502222158.UhwuvDZv-lkp@intel.com/

 arch/arm/include/asm/vmlinux.lds.h | 21 +++++++++++++--------
 arch/arm/kernel/vmlinux-xip.lds.S  |  2 ++
 arch/arm/kernel/vmlinux.lds.S      |  2 ++
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/arch/arm/include/asm/vmlinux.lds.h b/arch/arm/include/asm/vmlinux.lds.h
index d60f6e83a9f7..7ba309f826f9 100644
--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -31,7 +31,7 @@
  * https://github.com/ClangBuiltLinux/linux/issues/1609
  */
 #ifdef CONFIG_LD_IS_LLD
-#define NOCROSSREFS
+#define NOCROSSREFS(...)
 #endif
 
 /* Set start/end symbol names to the LMA for the section */
@@ -123,16 +123,19 @@
  */
 #define ARM_VECTORS							\
 	__vectors_lma = .;						\
-	OVERLAY 0xffff0000 : NOCROSSREFS AT(__vectors_lma) {		\
-		.vectors {						\
+	/* Note: The LLD linker seems not to support marking input */	\
+	/* sections with KEEP() inside a OVERLAY statement */		\
+	.vectors 0xffff0000 : AT (__vectors_lma) {			\
 			*(.vectors)					\
-		}							\
-		.vectors.bhb.loop8 {					\
+	}								\
+	.vectors.bhb.loop8 0xffff0000 : AT (__vectors_lma +		\
+		SIZEOF(.vectors)) {					\
 			*(.vectors.bhb.loop8)				\
-		}							\
-		.vectors.bhb.bpiall {					\
+	}								\
+	.vectors.bhb.bpiall 0xffff0000 : AT (__vectors_lma +		\
+		SIZEOF(.vectors) +					\
+		SIZEOF(.vectors.bhb.loop8)) {				\
 			*(.vectors.bhb.bpiall)				\
-		}							\
 	}								\
 	ARM_LMA(__vectors, .vectors);					\
 	ARM_LMA(__vectors_bhb_loop8, .vectors.bhb.loop8);		\
@@ -150,6 +153,8 @@
 									\
 	PROVIDE(vector_fiq_offset = vector_fiq - ADDR(.vectors));
 
+#define ARM_NOCROSSREFS NOCROSSREFS(.vectors .vectors.bhb.loop8 .vectors.bhb.bpiall)
+
 #define ARM_TCM								\
 	__itcm_start = ALIGN(4);					\
 	.text_itcm ITCM_OFFSET : AT(__itcm_start - LOAD_OFFSET) {	\
diff --git a/arch/arm/kernel/vmlinux-xip.lds.S b/arch/arm/kernel/vmlinux-xip.lds.S
index 5eddb75a7174..496d609c24c8 100644
--- a/arch/arm/kernel/vmlinux-xip.lds.S
+++ b/arch/arm/kernel/vmlinux-xip.lds.S
@@ -159,6 +159,8 @@ SECTIONS
 	ARM_ASSERTS
 }
 
+ARM_NOCROSSREFS
+
 /*
  * These must never be empty
  * If you have to comment these two assert statements out, your
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index de373c6c2ae8..514a030b7d5f 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -158,6 +158,8 @@ SECTIONS
 	ARM_ASSERTS
 }
 
+ARM_NOCROSSREFS
+
 #ifdef CONFIG_STRICT_KERNEL_RWX
 /*
  * Without CONFIG_DEBUG_ALIGN_RODATA, __start_rodata_section_aligned will
-- 
2.43.0



             reply	other threads:[~2025-02-24 13:14 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-24 12:54 Christian Eggers [this message]
2025-02-24 12:54 ` [PATCH v2 2/2] ARM: avoid that vectors are removed during linker garbage collection Christian Eggers
2025-02-27 23:22   ` Linus Walleij
2025-02-27 23:22 ` [PATCH v2 1/2] ARM: substitute OVERLAY description in linker script Linus Walleij
2025-03-04 18:49 ` kernel test robot
2025-03-10 20:37   ` Nathan Chancellor
2025-03-11  8:18     ` Christian Eggers
2025-03-11 19:17       ` Nathan Chancellor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250224125414.2184-1-ceggers@arri.de \
    --to=ceggers@arri.de \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=liuyuntao12@huawei.com \
    --cc=lkp@intel.com \
    --cc=nathan@kernel.org \
    --cc=rmk+kernel@armlinux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).