binaryPI: Fix SSE regression and align stack early
When allowing use of SSE instructions, stack must be aligned to 16 bytes. Adjust x86 entry to C accordingly, by pushing values to maintain the alignment. For some builds, new toolchain and GCC-6.3 could emit SSE instruction 'andps (%esp),%xmm0' with incorrectly aligned esp, raising exception and thus preventing boot. Change-Id: I452d40eadac2b743d0d8431809c9a81bf28c330a Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/18691 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Tested-by: build bot (Jenkins) Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
This commit is contained in:
parent
824416078e
commit
bf3091bae6
|
@ -63,6 +63,9 @@ cache_as_ram_setup:
|
|||
|
||||
AMD_ENABLE_STACK
|
||||
|
||||
/* Align the stack. */
|
||||
and $0xFFFFFFF0, %esp
|
||||
|
||||
#ifdef __x86_64__
|
||||
/* switch to 64 bit long mode */
|
||||
mov %esi, %ecx
|
||||
|
@ -111,8 +114,6 @@ cache_as_ram_setup:
|
|||
/* Pass the BIST result */
|
||||
cvtsd2si %xmm0, %edi
|
||||
|
||||
/* align the stack */
|
||||
and $0xFFFFFFF0, %esp
|
||||
|
||||
.code64
|
||||
call cache_as_ram_main
|
||||
|
@ -126,6 +127,9 @@ cache_as_ram_setup:
|
|||
/* Restore the cpu_init_detected */
|
||||
cvtsd2si %xmm1, %ebx
|
||||
|
||||
/* Must maintain 16-byte stack alignment here. */
|
||||
pushl $0x0
|
||||
pushl $0x0
|
||||
pushl %ebx /* init detected */
|
||||
pushl %edx /* bist */
|
||||
call cache_as_ram_main
|
||||
|
|
Loading…
Reference in New Issue