x86/boot: Move the _stext marker to before the boot code
authorJosh Poimboeuf <jpoimboe@redhat.com>
Wed, 21 Sep 2016 21:04:07 +0000 (16:04 -0500)
committerIngo Molnar <mingo@kernel.org>
Thu, 20 Oct 2016 07:15:24 +0000 (09:15 +0200)
When core_kernel_text() is used to determine whether an address on a
task's stack trace is a kernel text address, it incorrectly returns
false for early text addresses for the head code between the _text and
_stext markers.  Among other things, this can cause the unwinder to
behave incorrectly when unwinding to x86 head code.

Head code is text code too, so mark it as such.  This seems to match the
intent of other users of the _stext symbol, and it also seems consistent
with what other architectures are already doing.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Nilay Vaish <nilayvaish@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/789cf978866420e72fa89df44aa2849426ac378d.1474480779.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/vmlinux.lds.S

index dbf67f64d5ecf76cee128b2c89d43a4267b57223..e79f15f108a8d43d8d5644f7fc967f32c3282b47 100644 (file)
@@ -91,10 +91,10 @@ SECTIONS
        /* Text and read-only data */
        .text :  AT(ADDR(.text) - LOAD_OFFSET) {
                _text = .;
+               _stext = .;
                /* bootstrapping code */
                HEAD_TEXT
                . = ALIGN(8);
-               _stext = .;
                TEXT_TEXT
                SCHED_TEXT
                CPUIDLE_TEXT