summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRonald G. Minnich <rminnich@gmail.com>2012-07-12 11:21:51 -0700
committerSven Schnelle <svens@stackframe.org>2012-07-15 11:01:01 +0200
commitf8878845f9cb9d30663a8bb3a3edeb1413a42388 (patch)
tree97ba821c0a5cd1551a407e3cc9eac6ce14b8623f /src
parent2d0d83c3dd41a95f5c27a2c7ecf0a3a8cdd5d0be (diff)
Poison the stack to uncover programming errors
Code can easily make the mistake of using uninitialized values or, in assembly, mistakenly dereferencing stack pointers when an address is desired. Set the stack to a non-zero value which is also (by testing) a pointer which will crash coreboot if used. This poisoning has uncovered at least one bug. Change-Id: I4affb9a14b96611e8bf83cb82636e47913025a5d Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Reviewed-on: http://review.coreboot.org/1221 Reviewed-by: Marc Jones <marcj303@gmail.com> Tested-by: build bot (Jenkins) Reviewed-by: Sven Schnelle <svens@stackframe.org>
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86/lib/c_start.S10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/arch/x86/lib/c_start.S b/src/arch/x86/lib/c_start.S
index fd9dce78c5..9c1fdb106f 100644
--- a/src/arch/x86/lib/c_start.S
+++ b/src/arch/x86/lib/c_start.S
@@ -16,17 +16,21 @@ _start:
post_code(POST_ENTRY_C_START) /* post 13 */
- /** clear stack */
+ /** poison the stack. Code should not count on the
+ * stack being full of zeros. This stack poisoning
+ * recently uncovered a bug in the broadcast SIPI
+ * code.
+ */
cld
leal _stack, %edi
movl $_estack, %ecx
subl %edi, %ecx
shrl $2, %ecx /* it is 32 bit aligned, right? */
- xorl %eax, %eax
+ movl $0xDEADBEEF, %eax
rep
stosl
- /** clear bss */
+ /** clear bss, which unlike the stack is zero by definition */
leal _bss, %edi
movl $_ebss, %ecx
subl %edi, %ecx