aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Brown <mcb30@etherboot.org>2007-06-28 21:56:14 +0100
committerMichael Brown <mcb30@etherboot.org>2007-06-28 21:56:14 +0100
commit045fb24557f4c0a11273b28150b9a870f248197d (patch)
tree720765210b2f7e5a1544117f0551765b64923e10 /src
parent00473f09520c762bb89b3a695109cd7b57406c7e (diff)
downloadipxe-045fb24557f4c0a11273b28150b9a870f248197d.zip
ipxe-045fb24557f4c0a11273b28150b9a870f248197d.tar.gz
ipxe-045fb24557f4c0a11273b28150b9a870f248197d.tar.bz2
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 0000000..3380a08
--- /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 9b1ebaa..1a48716 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 ced0f49..5200169 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