Browse Source

[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>
Andi Kleen 18 years ago
parent
commit
29fe5f3baf
1 changed files with 4 additions and 10 deletions
  1. 4 10
      arch/i386/kernel/head.S

+ 4 - 10
arch/i386/kernel/head.S

@@ -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
-	je 1f			# the first CPU calls start_kernel
-				# all other CPUs call initialize_secondary
-	call initialize_secondary
-	jmp L6
-1:
+	cmpb $0,%cl		# the first CPU calls start_kernel
+	jne initialize_secondary # all other CPUs call initialize_secondary
 #endif /* CONFIG_SMP */
 #endif /* CONFIG_SMP */
-	call start_kernel
-L6:
-	jmp L6			# main should never return here, but
-				# just in case, we know what happens.
+	jmp start_kernel
 
 
 /*
 /*
  * We depend on ET to be correct. This checks for 287/387.
  * We depend on ET to be correct. This checks for 287/387.