mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-29 09:12:07 +00:00
openrisc: place exception table at the head of vmlinux
Since commit0043ecea23
("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:0043ecea23
("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> Reviewed-by: Rong Xu <xur@google.com> Signed-off-by: Stafford Horne <shorne@gmail.com>
This commit is contained in:
parent
fac04efc5c
commit
a412f04070
@ -239,6 +239,8 @@ handler: ;\
|
|||||||
|
|
||||||
/* =====================================================[ exceptions] === */
|
/* =====================================================[ exceptions] === */
|
||||||
|
|
||||||
|
__REF
|
||||||
|
|
||||||
/* ---[ 0x100: RESET exception ]----------------------------------------- */
|
/* ---[ 0x100: RESET exception ]----------------------------------------- */
|
||||||
|
|
||||||
EXCEPTION_ENTRY(_tng_kernel_start)
|
EXCEPTION_ENTRY(_tng_kernel_start)
|
||||||
|
@ -357,6 +357,8 @@
|
|||||||
|
|
||||||
/* =====================================================[ exceptions] === */
|
/* =====================================================[ exceptions] === */
|
||||||
|
|
||||||
|
__HEAD
|
||||||
|
|
||||||
/* ---[ 0x100: RESET exception ]----------------------------------------- */
|
/* ---[ 0x100: RESET exception ]----------------------------------------- */
|
||||||
.org 0x100
|
.org 0x100
|
||||||
/* Jump to .init code at _start which lives in the .head section
|
/* Jump to .init code at _start which lives in the .head section
|
||||||
@ -506,10 +508,10 @@ _dispatch_do_ipage_fault:
|
|||||||
|
|
||||||
/* .text*/
|
/* .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... */
|
* don't... */
|
||||||
|
|
||||||
__HEAD
|
__INIT
|
||||||
.global _start
|
.global _start
|
||||||
_start:
|
_start:
|
||||||
/* Init r0 to zero as per spec */
|
/* Init r0 to zero as per spec */
|
||||||
|
@ -50,6 +50,7 @@ SECTIONS
|
|||||||
.text : AT(ADDR(.text) - LOAD_OFFSET)
|
.text : AT(ADDR(.text) - LOAD_OFFSET)
|
||||||
{
|
{
|
||||||
_stext = .;
|
_stext = .;
|
||||||
|
HEAD_TEXT
|
||||||
TEXT_TEXT
|
TEXT_TEXT
|
||||||
SCHED_TEXT
|
SCHED_TEXT
|
||||||
LOCK_TEXT
|
LOCK_TEXT
|
||||||
@ -83,8 +84,6 @@ SECTIONS
|
|||||||
. = ALIGN(PAGE_SIZE);
|
. = ALIGN(PAGE_SIZE);
|
||||||
__init_begin = .;
|
__init_begin = .;
|
||||||
|
|
||||||
HEAD_TEXT_SECTION
|
|
||||||
|
|
||||||
/* Page aligned */
|
/* Page aligned */
|
||||||
INIT_TEXT_SECTION(PAGE_SIZE)
|
INIT_TEXT_SECTION(PAGE_SIZE)
|
||||||
|
|
||||||
|
@ -24,7 +24,6 @@ arch/m68k/kernel/head.o
|
|||||||
arch/m68k/kernel/sun3-head.o
|
arch/m68k/kernel/sun3-head.o
|
||||||
arch/microblaze/kernel/head.o
|
arch/microblaze/kernel/head.o
|
||||||
arch/nios2/kernel/head.o
|
arch/nios2/kernel/head.o
|
||||||
arch/openrisc/kernel/head.o
|
|
||||||
arch/parisc/kernel/head.o
|
arch/parisc/kernel/head.o
|
||||||
arch/powerpc/kernel/head_44x.o
|
arch/powerpc/kernel/head_44x.o
|
||||||
arch/powerpc/kernel/head_64.o
|
arch/powerpc/kernel/head_64.o
|
||||||
|
Loading…
Reference in New Issue
Block a user