There's no need to clobber %ax in ENTRY_INTO32. Now that %eax isn't clobbered, use ENTRY_INTO32 in entry_csm.
Signed-off-by: Kevin O'Connor kevin@koconnor.net --- src/entryfuncs.S | 5 ++--- src/romlayout.S | 10 ++-------- 2 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/src/entryfuncs.S b/src/entryfuncs.S index 679b1fc..8438604 100644 --- a/src/entryfuncs.S +++ b/src/entryfuncs.S @@ -135,10 +135,9 @@ .endm
// Reset stack, transition to 32bit mode, and call a C function. - // Clobbers %ax .macro ENTRY_INTO32 cfunc - xorw %ax, %ax - movw %ax, %ss + xorw %dx, %dx + movw %dx, %ss movl $ BUILD_STACK_ADDR , %esp movl $ \cfunc , %edx jmp transition32 diff --git a/src/romlayout.S b/src/romlayout.S index cca4e43..4ebbdee 100644 --- a/src/romlayout.S +++ b/src/romlayout.S @@ -431,14 +431,8 @@ entry_csm: shll $4, %eax addl %esp, %eax
- // Change to BUILD_STACK_ADDR stack - xorl %ebx, %ebx - movw %bx, %ss - movl $BUILD_STACK_ADDR, %esp - - // Jump to 32bit mode and call handle_csm(bregs) - movl $_cfunc32flat_handle_csm, %edx - jmp transition32 + // Change to BUILD_STACK_ADDR stack and call handle_csm(bregs) + ENTRY_INTO32 _cfunc32flat_handle_csm
DECLFUNC __csm_return .code32