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 = .;