From eb06a4259b48128faed94b4ca3f8c64d3cd5a4c3 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Wed, 20 Mar 2013 13:49:27 -0500 Subject: [PATCH] x86: don't clear bss in ramstage entry The cbfs stage loading routine already zeros out the full memory region that a stage will be loaded. Therefore, it is unnecessary to to clear the bss again after once ramstage starts. Change-Id: Icc7021329dbf59bef948a41606f56746f21b507f Signed-off-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/2865 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi Reviewed-by: Ronald G. Minnich --- src/arch/x86/lib/c_start.S | 11 ----------- src/lib/cbfs.c | 1 + 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/arch/x86/lib/c_start.S b/src/arch/x86/lib/c_start.S index 295283b24a..35bc26b789 100644 --- a/src/arch/x86/lib/c_start.S +++ b/src/arch/x86/lib/c_start.S @@ -29,17 +29,6 @@ _start: cld - /** clear bss, which unlike the stack is zero by definition */ - leal _bss, %edi - movl $_ebss, %ecx - subl %edi, %ecx - jz .Lnobss - shrl $2, %ecx /* it is 32 bit aligned, right? */ - xorl %eax, %eax - rep - stosl -.Lnobss: - /** 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 diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c index abb95abc3f..c56f550e17 100644 --- a/src/lib/cbfs.c +++ b/src/lib/cbfs.c @@ -129,6 +129,7 @@ void * cbfs_load_stage(struct cbfs_media *media, const char *name) name, (uint32_t) stage->load, stage->memlen, stage->entry); + /* Stages rely the below clearing so that the bss is initialized. */ memset((void *) (uint32_t) stage->load, 0, stage->memlen); if (cbfs_decompress(stage->compression,