diff options
author | H. Peter Anvin <hpa@zytor.com> | 2006-08-17 15:19:44 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2006-08-17 15:19:44 -0700 |
commit | 243a8f70d28ac922df7855301496727a743ab469 (patch) | |
tree | 64384ffc6129bcb534f0b1ceeb5833d25c72cdf6 | |
parent | fce3daf690aac2e42b067f8d3eba9285bf4b4dc9 (diff) | |
download | syslinux-243a8f70d28ac922df7855301496727a743ab469.tar.gz |
Clean up the reset stack macro further; incorporate segment reset
as well as enable interrupts.
-rw-r--r-- | abort.inc | 6 | ||||
-rw-r--r-- | comboot.inc | 7 | ||||
-rw-r--r-- | stack.inc | 14 |
3 files changed, 13 insertions, 14 deletions
@@ -46,11 +46,7 @@ abort_check: ; SI = offset (in _text) of error message to print ; abort_load: - mov ax,cs ; Restore CS = DS = ES - mov ds,ax - mov es,ax - RESET_STACK ; AX must = 0 - sti + RESET_STACK_AND_SEGS AX call cwritestr ; Expects SI -> error msg ; Return to the command prompt diff --git a/comboot.inc b/comboot.inc index 3e18b9d3..9a96326d 100644 --- a/comboot.inc +++ b/comboot.inc @@ -204,12 +204,7 @@ comboot_bogus: cli ; Don't trust anyone comboot_exit: mov bx,enter_command ; Normal return to command prompt comboot_exit_special: - xor ax,ax - mov ds,ax - mov es,ax - RESET_STACK ; AX must = 0 - sti - cld + RESET_STACK_AND_SEGS AX call adjust_screen ; The COMBOOT program might have changed the screen jmp bx @@ -20,11 +20,17 @@ %define _STACK_INC ; -; This macro resets the stack pointer. It assumes CS == DS and AX == 0. +; This macro resets the stack pointer, and sets CS == DS == ES == 0, +; interrupts on, DF = 0. ; -%macro RESET_STACK 0 +; It takes a 16-bit register that can be safely clobbered as parameter. +; +%macro RESET_STACK_AND_SEGS 1 + xor %1,%1 + mov ds,%1 + mov es,%1 %if IS_SYSLINUX || IS_EXTLINUX - mov ss,ax ; Just in case... + mov ss,%1 ; Just in case... mov sp,StackBuf-2*3 ; Reset stack %elif IS_PXELINUX lss esp,[BaseStack] @@ -33,6 +39,8 @@ %else NEED TO KNOW HOW TO RESET STACK %endif + sti + cld %endmacro %endif ; _STACK_INC |