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>
This commit is contained in:
Ronald G. Minnich 2012-07-12 11:21:51 -07:00 committed by Sven Schnelle
parent 2d0d83c3dd
commit f8878845f9
1 changed files with 7 additions and 3 deletions

View File

@ -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