summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2018-04-21 00:14:08 -0600
committerAaron Durbin <adurbin@chromium.org>2018-04-24 14:36:31 +0000
commit38fd6685e9da61daadc96a8d537e6966dfe3b219 (patch)
treea7db2a48b53ed2a5fd6e1703d64ccb432621d6a4
parent7a7c70b26a9744ec7acac807c98e2aaadd7f422d (diff)
arch/x86: align stack on entry to x86_exception()
Entry points from assembly to C need to have the stacks aligned to 16 bytes with the newer compilers. This entry point was missed. Correct it. BUG=b:72728953 Change-Id: Idb29daf830c05fd5543c2194690364ce31b6a22c Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/25763 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
-rw-r--r--src/arch/x86/idt.S11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/arch/x86/idt.S b/src/arch/x86/idt.S
index 1878f802ed..17ddb57fb7 100644
--- a/src/arch/x86/idt.S
+++ b/src/arch/x86/idt.S
@@ -172,9 +172,16 @@ int_hand:
pushl %ecx
pushl %eax
- pushl %esp /* Pointer to structure on the stack */
+ /* Save pointer to eregs structure */
+ movl %esp, %ebp
+ /* Align stack to 16 bytes. */
+ andl $0xfffffff0, %esp
+ /* Save original stack pointer while keeping stack alignment. This
+ value is also the eregs argument x86_exception(). */
+ sub $12, %esp
+ pushl %ebp /* Pointer to structure on the stack */
call x86_exception
- pop %eax /* Drop the pointer */
+ pop %esp /* Unwind the stack alignment and argument passing. */
popl %eax
popl %ecx