summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2008-09-06 04:19:03 +0200
committerMichael Brown2008-09-06 04:19:03 +0200
commitc0beec8bafea20437a8ec3cae89abfc6c53152af (patch)
treea9cb5352205adfe3bde7284bd989a4ee09992bfb
parent[multiboot] Allow for unspecified {load,bss}_end_addr for raw images (diff)
downloadipxe-c0beec8bafea20437a8ec3cae89abfc6c53152af.tar.gz
ipxe-c0beec8bafea20437a8ec3cae89abfc6c53152af.tar.xz
ipxe-c0beec8bafea20437a8ec3cae89abfc6c53152af.zip
[pxe] Add a dummy PXENV+ entry point at UNDI_CS:0000
Wyse Streaming Manager server (WLDRM13.BIN) assumes that the PXENV+ entry point is at UNDI_CS:0000; apparently, somebody at Wyse has difficulty distinguishing between the words "may" and "must"... Add a dummy entry point at UNDI_CS:0000, which just jumps to the correct entry point.
-rw-r--r--src/arch/i386/interface/pxe/pxe_entry.S10
-rw-r--r--src/arch/i386/scripts/i386.lds4
2 files changed, 13 insertions, 1 deletions
diff --git a/src/arch/i386/interface/pxe/pxe_entry.S b/src/arch/i386/interface/pxe/pxe_entry.S
index c55e581f..e5d327a5 100644
--- a/src/arch/i386/interface/pxe/pxe_entry.S
+++ b/src/arch/i386/interface/pxe/pxe_entry.S
@@ -103,6 +103,16 @@ pxenv:
* none
****************************************************************************
*/
+ /* Wyse Streaming Manager server (WLDRM13.BIN) assumes that
+ * the PXENV+ entry point is at UNDI_CS:0000; apparently,
+ * somebody at Wyse has difficulty distinguishing between the
+ * words "may" and "must"...
+ */
+ .section ".text16.null"
+ .code16
+pxenv_null_entry:
+ jmp pxenv_entry
+
.section ".text16"
.code16
pxenv_entry:
diff --git a/src/arch/i386/scripts/i386.lds b/src/arch/i386/scripts/i386.lds
index 7d63dae6..729ad30a 100644
--- a/src/arch/i386/scripts/i386.lds
+++ b/src/arch/i386/scripts/i386.lds
@@ -66,10 +66,12 @@ SECTIONS {
. = _text16_link_addr;
_text16 = .;
- . += 1; /* Prevent NULL being valid */
+ /* We need to allow code at the NULL address in .text16 */
.text16 : AT ( _text16_load_offset + __text16 ) {
__text16 = .;
+ *(.text16.null)
+ . += 1; /* Prevent NULL being valid */
*(.text16)
*(.text16.*)
_etext16_progbits = .;