public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] openrisc: place exception table at the head of vmlinux
@ 2024-12-02  6:28 Masahiro Yamada
  2024-12-02 20:33 ` Guenter Roeck
  0 siblings, 1 reply; 4+ messages in thread
From: Masahiro Yamada @ 2024-12-02  6:28 UTC (permalink / raw)
  To: Jonas Bonn, Stefan Kristiansson, Stafford Horne, linux-openrisc
  Cc: linux-kbuild, Guenter Roeck, Rong Xu, Masahiro Yamada, Han Shen,
	Kees Cook, linux-kernel

Since commit 0043ecea2399 ("vmlinux.lds.h: Adjust symbol ordering in
text output section"), the exception table in arch/openrisc/kernel/head.S
is no longer positioned at the very beginning of the kernel image, which
causes a boot failure.

Currently, the exception table resides in the regular .text section.
Previously, it was placed at the head by relying on the linker receiving
arch/openrisc/kernel/head.o as the first object. However, this behavior
has changed because sections like .text.{asan,unknown,unlikely,hot} now
precede the regular .text section.

The .head.text section is intended for entry points requiring special
placement. However, in OpenRISC, this section has been misused: instead
of the entry points, it contains boot code meant to be discarded after
booting. This feature is typically handled by the .init.text section.

This commit addresses the issue by replacing the current __HEAD marker
with __INIT and re-annotating the entry points with __HEAD. Additionally,
it adds __REF to entry.S to suppress the following modpost warning:

  WARNING: modpost: vmlinux: section mismatch in reference: _tng_kernel_start+0x70 (section: .text) -> _start (section: .init.text)

Fixes: 0043ecea2399 ("vmlinux.lds.h: Adjust symbol ordering in text output section")
Reported-by: Guenter Roeck <linux@roeck-us.net>
Closes: https://lore.kernel.org/all/5e032233-5b65-4ad5-ac50-d2eb6c00171c@roeck-us.net/#t
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 arch/openrisc/kernel/entry.S       | 2 ++
 arch/openrisc/kernel/head.S        | 6 ++++--
 arch/openrisc/kernel/vmlinux.lds.S | 3 +--
 scripts/head-object-list.txt       | 1 -
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
index 440711d7bf40..ce6f2b08a35e 100644
--- a/arch/openrisc/kernel/entry.S
+++ b/arch/openrisc/kernel/entry.S
@@ -239,6 +239,8 @@ handler:							;\
 
 /* =====================================================[ exceptions] === */
 
+	__REF
+
 /* ---[ 0x100: RESET exception ]----------------------------------------- */
 
 EXCEPTION_ENTRY(_tng_kernel_start)
diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S
index 439e00f81e5d..ec6d2a7d5b92 100644
--- a/arch/openrisc/kernel/head.S
+++ b/arch/openrisc/kernel/head.S
@@ -357,6 +357,8 @@
 
 /* =====================================================[ exceptions] === */
 
+	__HEAD
+
 /* ---[ 0x100: RESET exception ]----------------------------------------- */
     .org 0x100
 	/* Jump to .init code at _start which lives in the .head section
@@ -506,10 +508,10 @@ _dispatch_do_ipage_fault:
 
 /*    .text*/
 
-/* This early stuff belongs in HEAD, but some of the functions below definitely
+/* This early stuff belongs in the .init.text section, but some of the functions below definitely
  * don't... */
 
-	__HEAD
+	__INIT
 	.global _start
 _start:
 	/* Init r0 to zero as per spec */
diff --git a/arch/openrisc/kernel/vmlinux.lds.S b/arch/openrisc/kernel/vmlinux.lds.S
index bc1306047837..049bff45f612 100644
--- a/arch/openrisc/kernel/vmlinux.lds.S
+++ b/arch/openrisc/kernel/vmlinux.lds.S
@@ -50,6 +50,7 @@ SECTIONS
         .text                   : AT(ADDR(.text) - LOAD_OFFSET)
 	{
           _stext = .;
+	  HEAD_TEXT
 	  TEXT_TEXT
 	  SCHED_TEXT
 	  LOCK_TEXT
@@ -83,8 +84,6 @@ SECTIONS
 	. = ALIGN(PAGE_SIZE);
 	__init_begin = .;
 
-	HEAD_TEXT_SECTION
-
 	/* Page aligned */
 	INIT_TEXT_SECTION(PAGE_SIZE)
 
diff --git a/scripts/head-object-list.txt b/scripts/head-object-list.txt
index f12b4a7b8406..7274dfc65af6 100644
--- a/scripts/head-object-list.txt
+++ b/scripts/head-object-list.txt
@@ -24,7 +24,6 @@ arch/m68k/kernel/head.o
 arch/m68k/kernel/sun3-head.o
 arch/microblaze/kernel/head.o
 arch/nios2/kernel/head.o
-arch/openrisc/kernel/head.o
 arch/parisc/kernel/head.o
 arch/powerpc/kernel/head_44x.o
 arch/powerpc/kernel/head_64.o
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] openrisc: place exception table at the head of vmlinux
  2024-12-02  6:28 [PATCH] openrisc: place exception table at the head of vmlinux Masahiro Yamada
@ 2024-12-02 20:33 ` Guenter Roeck
  2024-12-02 20:59   ` Rong Xu
  0 siblings, 1 reply; 4+ messages in thread
From: Guenter Roeck @ 2024-12-02 20:33 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Jonas Bonn, Stefan Kristiansson, Stafford Horne, linux-openrisc,
	linux-kbuild, Rong Xu, Han Shen, Kees Cook, linux-kernel

On Mon, Dec 02, 2024 at 03:28:22PM +0900, Masahiro Yamada wrote:
> Since commit 0043ecea2399 ("vmlinux.lds.h: Adjust symbol ordering in
> text output section"), the exception table in arch/openrisc/kernel/head.S
> is no longer positioned at the very beginning of the kernel image, which
> causes a boot failure.
> 
> Currently, the exception table resides in the regular .text section.
> Previously, it was placed at the head by relying on the linker receiving
> arch/openrisc/kernel/head.o as the first object. However, this behavior
> has changed because sections like .text.{asan,unknown,unlikely,hot} now
> precede the regular .text section.
> 
> The .head.text section is intended for entry points requiring special
> placement. However, in OpenRISC, this section has been misused: instead
> of the entry points, it contains boot code meant to be discarded after
> booting. This feature is typically handled by the .init.text section.
> 
> This commit addresses the issue by replacing the current __HEAD marker
> with __INIT and re-annotating the entry points with __HEAD. Additionally,
> it adds __REF to entry.S to suppress the following modpost warning:
> 
>   WARNING: modpost: vmlinux: section mismatch in reference: _tng_kernel_start+0x70 (section: .text) -> _start (section: .init.text)
> 
> Fixes: 0043ecea2399 ("vmlinux.lds.h: Adjust symbol ordering in text output section")
> Reported-by: Guenter Roeck <linux@roeck-us.net>
> Closes: https://lore.kernel.org/all/5e032233-5b65-4ad5-ac50-d2eb6c00171c@roeck-us.net/#t
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>

Tested-by: Guenter Roeck <linux@roeck-us.net>

Guenter

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] openrisc: place exception table at the head of vmlinux
  2024-12-02 20:33 ` Guenter Roeck
@ 2024-12-02 20:59   ` Rong Xu
  2024-12-05 19:05     ` Stafford Horne
  0 siblings, 1 reply; 4+ messages in thread
From: Rong Xu @ 2024-12-02 20:59 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Masahiro Yamada, Jonas Bonn, Stefan Kristiansson, Stafford Horne,
	linux-openrisc, linux-kbuild, Han Shen, Kees Cook, linux-kernel

This looks good to me.

Reviewed-by: Rong Xu <xur@google.com>

-Rong

On Mon, Dec 2, 2024 at 12:33 PM Guenter Roeck <linux@roeck-us.net> wrote:
>
> On Mon, Dec 02, 2024 at 03:28:22PM +0900, Masahiro Yamada wrote:
> > Since commit 0043ecea2399 ("vmlinux.lds.h: Adjust symbol ordering in
> > text output section"), the exception table in arch/openrisc/kernel/head.S
> > is no longer positioned at the very beginning of the kernel image, which
> > causes a boot failure.
> >
> > Currently, the exception table resides in the regular .text section.
> > Previously, it was placed at the head by relying on the linker receiving
> > arch/openrisc/kernel/head.o as the first object. However, this behavior
> > has changed because sections like .text.{asan,unknown,unlikely,hot} now
> > precede the regular .text section.
> >
> > The .head.text section is intended for entry points requiring special
> > placement. However, in OpenRISC, this section has been misused: instead
> > of the entry points, it contains boot code meant to be discarded after
> > booting. This feature is typically handled by the .init.text section.
> >
> > This commit addresses the issue by replacing the current __HEAD marker
> > with __INIT and re-annotating the entry points with __HEAD. Additionally,
> > it adds __REF to entry.S to suppress the following modpost warning:
> >
> >   WARNING: modpost: vmlinux: section mismatch in reference: _tng_kernel_start+0x70 (section: .text) -> _start (section: .init.text)
> >
> > Fixes: 0043ecea2399 ("vmlinux.lds.h: Adjust symbol ordering in text output section")
> > Reported-by: Guenter Roeck <linux@roeck-us.net>
> > Closes: https://lore.kernel.org/all/5e032233-5b65-4ad5-ac50-d2eb6c00171c@roeck-us.net/#t
> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
>
> Tested-by: Guenter Roeck <linux@roeck-us.net>
>
> Guenter

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] openrisc: place exception table at the head of vmlinux
  2024-12-02 20:59   ` Rong Xu
@ 2024-12-05 19:05     ` Stafford Horne
  0 siblings, 0 replies; 4+ messages in thread
From: Stafford Horne @ 2024-12-05 19:05 UTC (permalink / raw)
  To: Rong Xu
  Cc: Guenter Roeck, Masahiro Yamada, Jonas Bonn, Stefan Kristiansson,
	linux-openrisc, linux-kbuild, Han Shen, Kees Cook, linux-kernel

Hello,

This looks ok to me too. I also confirmed that the symbols that end up in the
.init.text of head.o are correct.

I will queue this to go in the next rc.

-Stafford

On Mon, Dec 02, 2024 at 12:59:27PM -0800, Rong Xu wrote:
> This looks good to me.
> 
> Reviewed-by: Rong Xu <xur@google.com>
> 
> -Rong
> 
> On Mon, Dec 2, 2024 at 12:33 PM Guenter Roeck <linux@roeck-us.net> wrote:
> >
> > On Mon, Dec 02, 2024 at 03:28:22PM +0900, Masahiro Yamada wrote:
> > > Since commit 0043ecea2399 ("vmlinux.lds.h: Adjust symbol ordering in
> > > text output section"), the exception table in arch/openrisc/kernel/head.S
> > > is no longer positioned at the very beginning of the kernel image, which
> > > causes a boot failure.
> > >
> > > Currently, the exception table resides in the regular .text section.
> > > Previously, it was placed at the head by relying on the linker receiving
> > > arch/openrisc/kernel/head.o as the first object. However, this behavior
> > > has changed because sections like .text.{asan,unknown,unlikely,hot} now
> > > precede the regular .text section.
> > >
> > > The .head.text section is intended for entry points requiring special
> > > placement. However, in OpenRISC, this section has been misused: instead
> > > of the entry points, it contains boot code meant to be discarded after
> > > booting. This feature is typically handled by the .init.text section.
> > >
> > > This commit addresses the issue by replacing the current __HEAD marker
> > > with __INIT and re-annotating the entry points with __HEAD. Additionally,
> > > it adds __REF to entry.S to suppress the following modpost warning:
> > >
> > >   WARNING: modpost: vmlinux: section mismatch in reference: _tng_kernel_start+0x70 (section: .text) -> _start (section: .init.text)
> > >
> > > Fixes: 0043ecea2399 ("vmlinux.lds.h: Adjust symbol ordering in text output section")
> > > Reported-by: Guenter Roeck <linux@roeck-us.net>
> > > Closes: https://lore.kernel.org/all/5e032233-5b65-4ad5-ac50-d2eb6c00171c@roeck-us.net/#t
> > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> >
> > Tested-by: Guenter Roeck <linux@roeck-us.net>
> >
> > Guenter

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-12-05 19:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-02  6:28 [PATCH] openrisc: place exception table at the head of vmlinux Masahiro Yamada
2024-12-02 20:33 ` Guenter Roeck
2024-12-02 20:59   ` Rong Xu
2024-12-05 19:05     ` Stafford Horne

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox