Thanks to all the recent x86 entry code refactoring, most tasks' kernel
stacks start at the same offset right below their saved pt_regs,
regardless of which syscall was used to enter the kernel. That creates
a nice convention which makes it straightforward to identify the end of
the stack, which can be useful [*] for the unwinder.
But there a few places where tasks don't yet follow the convention.
This patch set finishes the job.
[*] This will be useful for three upcoming proposed features:
- Detecting corrupt stacks in the unwinder (which will also be a force
for ensuring this end of stack convention continues to be followed in
- Printing all saved pt_regs on the stack during an oops/warning.
- Validating stacks in the livepatch consistency model.
Josh Poimboeuf (9):
x86/entry/head/32: use local labels
x86/entry/32: rename 'error_code' to 'common_exception'
x86/entry/32: fix the end of the stack for newly forked tasks
x86/head/32: fix the end of the stack for idle tasks
x86/smp: fix initial idle stack location on 32-bit
x86/asm/head: use a common function for starting CPUs
x86/head: put real return address on idle task stack
x86/head: fix the end of the stack for idle tasks
x86: move _stext marker to before head code
arch/x86/entry/entry_32.S | 120 ++++++++++++++++++++++++------------------
arch/x86/kernel/head_32.S | 49 ++++++++++-------
arch/x86/kernel/head_64.S | 42 +++++++--------
arch/x86/kernel/smpboot.c | 4 +-
arch/x86/kernel/vmlinux.lds.S | 2 +-
5 files changed, 122 insertions(+), 95 deletions(-)