From 0140541f5003e173baac08f4719c285936795e76 Mon Sep 17 00:00:00 2001 From: Raul E Rangel Date: Mon, 25 Jun 2018 14:22:27 -0600 Subject: smm: Make local variables relative to ebp This reduces the cognitive overhead of referencing locals via esp since it changes with every push. BUG=b:80539294 TEST=built and booted on grunt. Change-Id: Ib7eb98ce3483d4fc803696c1b2496d8384317536 Signed-off-by: Raul E Rangel Reviewed-on: https://review.coreboot.org/27225 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth --- src/cpu/x86/smm/smm_stub.S | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src/cpu/x86/smm/smm_stub.S') diff --git a/src/cpu/x86/smm/smm_stub.S b/src/cpu/x86/smm/smm_stub.S index 32435a04b5..ad15c6c72a 100644 --- a/src/cpu/x86/smm/smm_stub.S +++ b/src/cpu/x86/smm/smm_stub.S @@ -131,10 +131,14 @@ smm_trampoline32: jmp 2f 1: movl stack_size, %eax - mul %ecx + mul %ecx /* %eax(stack_size) * %ecx(cpu) = %eax(offset) */ movl stack_top, %edx - subl %eax, %edx + subl %eax, %edx /* global_stack_top - offset = stack_top */ mov %edx, %esp + mov %esp, %ebp + + /* Allocate locals (fxsave) */ + subl $0x4, %esp /* calculate fxsave location */ mov fxsave_area, %edi @@ -146,8 +150,7 @@ smm_trampoline32: 2: /* Save location of fxsave area. */ - push %edi - mov %esp, %ebp + mov %edi, -4(%ebp) test %edi, %edi jz 1f @@ -165,20 +168,18 @@ smm_trampoline32: /* Call into the c-based SMM relocation function with the platform * parameters. Equivalent to: - * struct arg = { c_handler_params, cpu_num, smm_runtime {; + * struct arg = { c_handler_params, cpu_num, smm_runtime }; * c_handler(&arg) */ push $(smm_runtime) - push %ecx - push c_handler_arg - push %esp + push %ecx /* int cpu */ + push c_handler_arg /* void *arg */ + push %esp /* smm_module_params *arg (allocated on stack). */ mov c_handler, %eax call *%eax - /* Restore stack from call frame */ - mov %ebp, %esp /* Retrieve fxsave location. */ - pop %edi + mov -4(%ebp), %edi test %edi, %edi jz 1f -- cgit v1.2.3