[PATCH] i386: Add kernel thread stack frame termination for properly stopping stack unwinds.
One open question: Should this added push 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:
parent
c05991ed12
commit
29fe5f3baf
|
@ -317,20 +317,14 @@ is386: movl $2,%ecx # set MP
|
||||||
movl %eax,%gs
|
movl %eax,%gs
|
||||||
lldt %ax
|
lldt %ax
|
||||||
cld # gcc2 wants the direction flag cleared at all times
|
cld # gcc2 wants the direction flag cleared at all times
|
||||||
|
pushl %eax # fake return address
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
movb ready, %cl
|
movb ready, %cl
|
||||||
movb $1, ready
|
movb $1, ready
|
||||||
cmpb $0,%cl
|
cmpb $0,%cl # the first CPU calls start_kernel
|
||||||
je 1f # the first CPU calls start_kernel
|
jne initialize_secondary # all other CPUs call initialize_secondary
|
||||||
# all other CPUs call initialize_secondary
|
|
||||||
call initialize_secondary
|
|
||||||
jmp L6
|
|
||||||
1:
|
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
call start_kernel
|
jmp start_kernel
|
||||||
L6:
|
|
||||||
jmp L6 # main should never return here, but
|
|
||||||
# just in case, we know what happens.
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We depend on ET to be correct. This checks for 287/387.
|
* We depend on ET to be correct. This checks for 287/387.
|
||||||
|
|
Loading…
Reference in New Issue