summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brown2007-06-28 22:56:14 +0200
committerMichael Brown2007-06-28 22:56:14 +0200
commit045fb24557f4c0a11273b28150b9a870f248197d (patch)
tree720765210b2f7e5a1544117f0551765b64923e10 /src
parentRevert "Move stack to below 0x7c00; leaving it at the default location" (diff)
downloadipxe-045fb24557f4c0a11273b28150b9a870f248197d.tar.gz
ipxe-045fb24557f4c0a11273b28150b9a870f248197d.tar.xz
ipxe-045fb24557f4c0a11273b28150b9a870f248197d.zip
Use internal real-mode stack from non-returnable prefixes
Diffstat (limited to 'src')
-rw-r--r--src/arch/i386/core/stack16.S13
-rw-r--r--src/arch/i386/prefix/dskprefix.S4
-rw-r--r--src/arch/i386/prefix/romprefix.S4
3 files changed, 21 insertions, 0 deletions
diff --git a/src/arch/i386/core/stack16.S b/src/arch/i386/core/stack16.S
new file mode 100644
index 00000000..3380a083
--- /dev/null
+++ b/src/arch/i386/core/stack16.S
@@ -0,0 +1,13 @@
+ .arch i386
+
+/****************************************************************************
+ * Internal stack
+ ****************************************************************************
+ */
+ .section ".stack16"
+ .align 8
+ .globl _stack16
+_stack16:
+ .space 4096
+ .globl _estack16
+_estack16:
diff --git a/src/arch/i386/prefix/dskprefix.S b/src/arch/i386/prefix/dskprefix.S
index 9b1ebaaf..1a48716a 100644
--- a/src/arch/i386/prefix/dskprefix.S
+++ b/src/arch/i386/prefix/dskprefix.S
@@ -350,6 +350,10 @@ msg1end:
start_runtime:
call install
+ /* Set up real-mode stack */
+ movw %bx, %ss
+ movw $_estack16, %sp
+
/* Jump to .text16 segment */
pushw %ax
pushw $1f
diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S
index ced0f49c..52001699 100644
--- a/src/arch/i386/prefix/romprefix.S
+++ b/src/arch/i386/prefix/romprefix.S
@@ -139,6 +139,10 @@ exec_vector:
call install
+ /* Set up real-mode stack */
+ movw %bx, %ss
+ movw $_estack16, %sp
+
/* Jump to .text16 segment */
pushw %ax
pushw $1f