]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[comboot] Fix stack pointer retrieval after COM32 binary returns
authorDentcho Ludmilov Bankov <dbankov@vmware.com>
Fri, 1 Feb 2019 22:20:21 +0000 (00:20 +0200)
committerMichael Brown <mcb30@ipxe.org>
Mon, 27 Jul 2020 14:41:46 +0000 (15:41 +0100)
This change fixes the offset used when retrieving the iPXE stack
pointer after a COM32 binary returns.  The iPXE stack pointer is saved
at the top of the available memory then the the top of the stack for
the COM32 binary is set just below it.  However seven more items are
pushed on the COM32 stack before the entry point is invoked so when
the COM32 binary returns the location of the iPXE stack pointer is 28
(and not 24) bytes above the current stack pointer.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/image/com32.c

index 01665287746a97ada67264d86cfd252f9958815d..6f0e660419a507b6d7381b6a9d8de7fa3248abfa 100644 (file)
@@ -110,7 +110,7 @@ static int com32_exec_loop ( struct image *image ) {
                        /* Disable interrupts */
                        "cli\n\t"
                        /* Restore stack pointer */
-                       "movl 24(%%esp), %%esp\n\t"
+                       "movl 28(%%esp), %%esp\n\t"
                        /* Restore registers */
                        "popal\n\t" )
                        :