If the pmm entry point was called with a non-zero stack segment, the pointer to the arguments on the stack would not be valid once the code transitioned to 32bit mode. Fix by adding the stack segment offset into the args pointer.
Signed-off-by: Kevin O'Connor kevin@koconnor.net --- src/romlayout.S | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/romlayout.S b/src/romlayout.S index a3ba965..028d1e8 100644 --- a/src/romlayout.S +++ b/src/romlayout.S @@ -321,10 +321,11 @@ entry_pmm: pushl %edx pushw %es pushw %ds - movw %ss, %cx // Move %ss to %ds + movl %ss, %ecx // Move %ss to %ds movw %cx, %ds + shll $4, %ecx movl $_cfunc32flat_handle_pmm, %eax // Setup: call32(handle_pmm, args, -1) - leal 28(%esp), %edx // %edx points to start of args + leal 28(%esp, %ecx), %edx // %edx points to start of args movl $-1, %ecx calll call32 movw %ax, 12(%esp) // Modify %ax:%dx to return %eax