realloc(): better implementation allowing in-place growth
[syslinux.git] / stack.inc
blobf670dec08e597a63be6967853c0ae1a476227a8c
1 ; -----------------------------------------------------------------------
3 ;   Copyright 2005-2008 H. Peter Anvin - All Rights Reserved
5 ;   This program is free software; you can redistribute it and/or modify
6 ;   it under the terms of the GNU General Public License as published by
7 ;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
8 ;   Boston MA 02111-1307, USA; either version 2 of the License, or
9 ;   (at your option) any later version; incorporated herein by reference.
11 ; -----------------------------------------------------------------------
14 ; stack.inc
16 ; How to reset the stack pointer
19 %ifndef _STACK_INC
20 %define _STACK_INC
23 ; This macro resets the stack pointer (including SS), and sets
24 ; DS == ES == 0, interrupts on, DF = 0.
26 ; It takes a 16-bit register that can be safely clobbered as parameter.
28 %macro RESET_STACK_AND_SEGS 1
29                 xor %1,%1
30                 mov ds,%1
31                 mov es,%1
32 %if IS_SYSLINUX || IS_EXTLINUX
33                 mov ss,%1                       ; Just in case...
34                 mov sp,StackBuf-2*5             ; Reset stack
35 %elif IS_PXELINUX
36                 lss esp,[BaseStack]
37 %elif IS_ISOLINUX
38                 mov ss,%1
39                 mov sp,StackBuf-2*2
40 %else
41                 NEED TO KNOW HOW TO RESET STACK
42 %endif
43                 sti
44                 cld
45 %endmacro
47 %endif ; _STACK_INC