[PATCH] x86_64: Add kernel thread stack frame termination for properly stopping stack unwinds.
One open question: Should these added pushes perhaps be made conditional upon CONFIG_STACK_UNWIND or CONFIG_UNWIND_INFO? [AK: Not needed -- these are all very slow paths] Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
11012d419c
commit
c05991ed12
@@ -973,6 +973,8 @@ ENTRY(kernel_thread)
|
|||||||
ENDPROC(kernel_thread)
|
ENDPROC(kernel_thread)
|
||||||
|
|
||||||
child_rip:
|
child_rip:
|
||||||
|
pushq $0 # fake return address
|
||||||
|
CFI_STARTPROC
|
||||||
/*
|
/*
|
||||||
* Here we are in the child and the registers are set as they were
|
* Here we are in the child and the registers are set as they were
|
||||||
* at kernel_thread() invocation in the parent.
|
* at kernel_thread() invocation in the parent.
|
||||||
@@ -983,6 +985,7 @@ child_rip:
|
|||||||
# exit
|
# exit
|
||||||
xorl %edi, %edi
|
xorl %edi, %edi
|
||||||
call do_exit
|
call do_exit
|
||||||
|
CFI_ENDPROC
|
||||||
ENDPROC(child_rip)
|
ENDPROC(child_rip)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -191,6 +191,7 @@ startup_64:
|
|||||||
* jump
|
* jump
|
||||||
*/
|
*/
|
||||||
movq initial_code(%rip),%rax
|
movq initial_code(%rip),%rax
|
||||||
|
pushq $0 # fake return address
|
||||||
jmp *%rax
|
jmp *%rax
|
||||||
|
|
||||||
/* SMP bootup changes these two */
|
/* SMP bootup changes these two */
|
||||||
|
Reference in New Issue
Block a user