提交 c05991ed 编写于 作者: A Andi Kleen 提交者: Linus Torvalds

[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: NJan Beulich <jbeulich@novell.com>
Signed-off-by: NAndi Kleen <ak@suse.de>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 11012d41
...@@ -973,6 +973,8 @@ ENTRY(kernel_thread) ...@@ -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: ...@@ -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: ...@@ -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 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册