diff options
author | Raul E Rangel <rrangel@chromium.org> | 2018-06-25 14:22:27 -0600 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2018-06-27 22:11:20 +0000 |
commit | 0140541f5003e173baac08f4719c285936795e76 (patch) | |
tree | 9e33e78dc15132b46af8a737a42b0cc223b5f3c8 /src/cpu | |
parent | dd549e117588472d11b10e0b1287a0e19377b844 (diff) | |
download | coreboot-0140541f5003e173baac08f4719c285936795e76.tar.xz |
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 <rrangel@chromium.org>
Reviewed-on: https://review.coreboot.org/27225
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin Roth <martinroth@google.com>
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/x86/smm/smm_stub.S | 23 |
1 files changed, 12 insertions, 11 deletions
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 |