Raul Rangel has uploaded this change for review. ( https://review.coreboot.org/27225
Change subject: smm: Make local variables relative to ebp ......................................................................
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 --- M src/cpu/x86/smm/smm_stub.S 1 file changed, 10 insertions(+), 10 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/25/27225/1
diff --git a/src/cpu/x86/smm/smm_stub.S b/src/cpu/x86/smm/smm_stub.S index 32435a0..5162c95 100644 --- a/src/cpu/x86/smm/smm_stub.S +++ b/src/cpu/x86/smm/smm_stub.S @@ -131,10 +131,13 @@ 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 # %edx(stack_top) - %eax(offset) = %edx(stack_top) mov %edx, %esp + mov %esp, %ebp + + subl $0x4, %esp # Allocate locals (fxsave)
/* calculate fxsave location */ mov fxsave_area, %edi @@ -146,8 +149,7 @@
2: /* Save location of fxsave area. */ - push %edi - mov %esp, %ebp + mov %edi, -4(%ebp) test %edi, %edi jz 1f
@@ -165,20 +167,18 @@
/* 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 %ecx # cpu push c_handler_arg - push %esp + 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