Commit a412f040 authored by Masahiro Yamada's avatar Masahiro Yamada Committed by Stafford Horne
Browse files

openrisc: place exception table at the head of vmlinux



Since commit 0043ecea ("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: 0043ecea ("vmlinux.lds.h: Adjust symbol ordering in text output section")
Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
Closes: https://lore.kernel.org/all/5e032233-5b65-4ad5-ac50-d2eb6c00171c@roeck-us.net/#t


Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
Reviewed-by: default avatarRong Xu <xur@google.com>
Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
parent fac04efc
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -239,6 +239,8 @@ handler: ;\

/* =====================================================[ exceptions] === */

	__REF

/* ---[ 0x100: RESET exception ]----------------------------------------- */

EXCEPTION_ENTRY(_tng_kernel_start)
+4 −2
Original line number Diff line number Diff line
@@ -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 */
+1 −2
Original line number Diff line number Diff line
@@ -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)

+0 −1
Original line number Diff line number Diff line
@@ -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