aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2009-03-02 10:42:44 -0800
committerH. Peter Anvin <hpa@linux.intel.com>2009-03-02 10:42:44 -0800
commit2b570465a0df2070aca723559a9f309d92530e6a (patch)
treeb301ac5be1095d2c56ab2a224de45fde6478564c
parent13aa7ae1146f23322844c3531686f27f1af7d8fd (diff)
parentbb86af7a4d8a0191e3f9211a7b5e23ecaf25e3ad (diff)
downloadsyslinux-elf-2b570465a0df2070aca723559a9f309d92530e6a.tar.gz
syslinux-elf-2b570465a0df2070aca723559a9f309d92530e6a.tar.xz
syslinux-elf-2b570465a0df2070aca723559a9f309d92530e6a.zip
Merge branch 'master' into hdt
-rw-r--r--com32/libutil/Makefile2
-rw-r--r--core/config.inc5
-rw-r--r--core/extlinux.asm5
-rw-r--r--core/isolinux.asm5
-rw-r--r--core/ldlinux.asm5
-rw-r--r--core/pxelinux.asm156
-rw-r--r--doc/menu.txt4
-rw-r--r--doc/pxelinux.txt4
-rw-r--r--doc/syslinux.txt6
-rw-r--r--mbr/isohdpfx.S10
10 files changed, 86 insertions, 116 deletions
diff --git a/com32/libutil/Makefile b/com32/libutil/Makefile
index 31754a91..02789ca6 100644
--- a/com32/libutil/Makefile
+++ b/com32/libutil/Makefile
@@ -56,8 +56,6 @@ clean: tidy
spotless: clean
rm -f *.lss *.a *.c32 *.com
-
-spotless: clean
rm -f *~ \#*
install: all
diff --git a/core/config.inc b/core/config.inc
index 8dd9ca6f..8ac77758 100644
--- a/core/config.inc
+++ b/core/config.inc
@@ -48,9 +48,4 @@ MAX_FKEYS equ 12 ; Number of F-key help files
;
%include "../version.gen"
-;
-; Copyright year...
-;
-%define year '2008'
-
%endif ; _CONFIG_INC
diff --git a/core/extlinux.asm b/core/extlinux.asm
index c7a51e94..9684c8a9 100644
--- a/core/extlinux.asm
+++ b/core/extlinux.asm
@@ -1551,8 +1551,9 @@ build_curdir_str:
; -----------------------------------------------------------------------------
section .data
-copyright_str db ' Copyright (C) 1994-', year, ' H. Peter Anvin'
- db CR, LF, 0
+copyright_str db ' Copyright (C) 1994-'
+ asciidec YEAR
+ db ' H. Peter Anvin', CR, LF, 0
err_bootfailed db CR, LF, 'Boot failed: please change disks and press '
db 'a key to continue.', CR, LF, 0
config_name db 'extlinux.conf',0 ; Unmangled form
diff --git a/core/isolinux.asm b/core/isolinux.asm
index 2c6d9702..8ec74e5a 100644
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -1027,8 +1027,9 @@ writestr_early equ writestr
; -----------------------------------------------------------------------------
syslinux_banner db CR, LF, 'ISOLINUX ', VERSION_STR, ' ', DATE_STR, ' ', 0
-copyright_str db ' Copyright (C) 1994-', year, ' H. Peter Anvin'
- db CR, LF, 0
+copyright_str db ' Copyright (C) 1994-'
+ asciidec YEAR
+ db ' H. Peter Anvin', CR, LF, 0
isolinux_str db 'isolinux: ', 0
%ifdef DEBUG_MESSAGES
startup_msg: db 'Starting up, DL = ', 0
diff --git a/core/ldlinux.asm b/core/ldlinux.asm
index da1ddde2..a24f396a 100644
--- a/core/ldlinux.asm
+++ b/core/ldlinux.asm
@@ -2049,8 +2049,9 @@ getfatsector:
; -----------------------------------------------------------------------------
section .data
-copyright_str db ' Copyright (C) 1994-', year, ' H. Peter Anvin'
- db CR, LF, 0
+copyright_str db ' Copyright (C) 1994-'
+ asciidec YEAR
+ db ' H. Peter Anvin', CR, LF, 0
err_bootfailed db CR, LF, 'Boot failed: please change disks and press '
db 'a key to continue.', CR, LF, 0
syslinux_cfg1 db '/boot' ; /boot/syslinux/syslinux.cfg
diff --git a/core/pxelinux.asm b/core/pxelinux.asm
index a660bd6c..7c535af3 100644
--- a/core/pxelinux.asm
+++ b/core/pxelinux.asm
@@ -384,7 +384,7 @@ have_pxenv:
call crlf
cmp ax,0201h ; API version 2.1 or higher
- jb old_api
+ jb .old_api
cmp byte [es:bx+8],2Ch ; Space for !PXE pointer?
jb .pxescan
les bx,[es:bx+28h] ; !PXE structure pointer
@@ -398,121 +398,82 @@ have_pxenv:
je have_pxe
; Otherwise, no dice, use PXENV+ structure
+.old_api:
les bx,[StrucPtr]
+ push word [es:bx+22h] ; UNDI data len
+ push word [es:bx+20h] ; UNDI data seg
+ push word [es:bx+26h] ; UNDI code len
+ push word [es:bx+24h] ; UNDI code seg
+ push dword [es:bx+0Ah] ; PXENV+ entry point
-old_api: ; Need to use a PXENV+ structure
- mov si,using_pxenv_msg
- call writestr_early
+ mov si,pxenventry_msg
+ jmp have_entrypoint
- mov eax,[es:bx+0Ah] ; PXE RM API
- mov [PXEEntry],eax
+have_pxe:
+ mov [StrucPtr],bx
+ mov [StrucPtr+2],es
- mov si,undi_data_msg
- call writestr_early
- mov ax,[es:bx+20h]
- call writehex4
- call crlf
- mov si,undi_data_len_msg
- call writestr_early
- mov ax,[es:bx+22h]
- call writehex4
- call crlf
- mov si,undi_code_msg
- call writestr_early
- mov ax,[es:bx+24h]
- call writehex4
- call crlf
- mov si,undi_code_len_msg
- call writestr_early
- mov ax,[es:bx+26h]
- call writehex4
- call crlf
+ push word [es:bx+2Eh] ; UNDI data len
+ push word [es:bx+28h] ; UNDI data seg
+ push word [es:bx+36h] ; UNDI code len
+ push word [es:bx+30h] ; UNDI code seg
+ push dword [es:bx+10h] ; !PXE entry point
- ; Compute base memory size from PXENV+ structure
- xor esi,esi
- movzx eax,word [es:bx+20h] ; UNDI data seg
- cmp ax,[es:bx+24h] ; UNDI code seg
- ja .use_data
- mov ax,[es:bx+24h]
- mov si,[es:bx+26h]
- jmp short .combine
-.use_data:
- mov si,[es:bx+22h]
-.combine:
- shl eax,4
- add eax,esi
- shr eax,10 ; Convert to kilobytes
- mov [RealBaseMem],ax
+ mov si,pxeentry_msg
- mov si,pxenventry_msg
- call writestr_early
+have_entrypoint:
+ push cs
+ pop es ; Restore CS == DS == ES
+
+ call writestr_early ; !PXE or PXENV+ entry found
+
+ pop dword [PXEEntry]
mov ax,[PXEEntry+2]
call writehex4
mov al,':'
call writechr
mov ax,[PXEEntry]
call writehex4
+
mov si,viaplan_msg
call writestr_early
- jmp have_entrypoint
-
-have_pxe:
- mov [StrucPtr],bx
- mov [StrucPtr+2],es
-
- mov eax,[es:bx+10h]
- mov [PXEEntry],eax
- mov si,undi_data_msg
- call writestr_early
- mov eax,[es:bx+2Ah]
- call writehex8
- call crlf
- mov si,undi_data_len_msg
- call writestr_early
- mov ax,[es:bx+2Eh]
- call writehex4
- call crlf
mov si,undi_code_msg
call writestr_early
- mov eax,[es:bx+32h]
- call writehex8
- call crlf
- mov si,undi_code_len_msg
+ pop ax ; UNDI code segment
+ call writehex4
+ xchg dx,ax
+ mov si,len_msg
call writestr_early
- mov ax,[es:bx+36h]
+ pop ax ; UNDI code length
call writehex4
call crlf
+ add ax,15
+ shr ax,4
+ add dx,ax ; DX = seg of end of UNDI code
- ; Compute base memory size from !PXE structure
- xor esi,esi
- mov eax,[es:bx+2Ah]
- cmp eax,[es:bx+32h]
- ja .use_data
- mov eax,[es:bx+32h]
- mov si,[es:bx+36h]
- jmp short .combine
-.use_data:
- mov si,[es:bx+2Eh]
-.combine:
- add eax,esi
- shr eax,10
- mov [RealBaseMem],ax
-
- mov si,pxeentry_msg
+ mov si,undi_data_msg
call writestr_early
- mov ax,[PXEEntry+2]
- call writehex4
- mov al,':'
- call writechr
- mov ax,[PXEEntry]
+ pop ax ; UNDI data segment
call writehex4
- mov si,viaplan_msg
+ xchg bx,ax
+ mov si,len_msg
call writestr_early
+ pop ax ; UNDI data length
+ call writehex4
+ call crlf
+ add ax,15
+ shr ax,4
+ add ax,bx ; AX = seg of end of UNDI data
+
+ cmp ax,dx
+ ja .data_on_top
+ xchg ax,ax
+.data_on_top:
+ ; Could we safely add 63 here before the shift?
+ shr ax,6 ; Convert to kilobytes
+ mov [RealBaseMem],ax
-have_entrypoint:
- push cs
- pop es ; Restore CS == DS == ES
;
; Network-specific initialization
@@ -2694,8 +2655,9 @@ writestr_early equ writestr
section .data
-copyright_str db ' Copyright (C) 1994-', year, ' H. Peter Anvin'
- db CR, LF, 0
+copyright_str db ' Copyright (C) 1994-'
+ asciidec YEAR
+ db ' H. Peter Anvin', CR, LF, 0
err_bootfailed db CR, LF, 'Boot failed: press a key to retry, or wait for reset...', CR, LF, 0
bailmsg equ err_bootfailed
err_nopxe db "No !PXE or PXENV+ API found; we're dead...", CR, LF, 0
@@ -2704,7 +2666,6 @@ err_udpinit db 'Failed to initialize UDP stack', CR, LF, 0
err_noconfig db 'Unable to locate configuration file', CR, LF, 0
err_damage db 'TFTP server sent an incomprehesible reply', CR, LF, 0
found_pxenv db 'Found PXENV+ structure', CR, LF, 0
-using_pxenv_msg db 'Old PXE API detected, using PXENV+ structure', CR, LF, 0
apiver_str db 'PXE API version is ',0
pxeentry_msg db '!PXE entry point found (we hope) at ', 0
pxenventry_msg db 'PXENV+ entry point found (we hope) at ', 0
@@ -2712,10 +2673,9 @@ viaplan_msg db ' via plan '
plan db 'A', CR, LF, 0
trymempxe_msg db 'Scanning memory for !PXE structure... ', 0
trymempxenv_msg db 'Scanning memory for PXENV+ structure... ', 0
-undi_data_msg db 'UNDI data segment at: ',0
-undi_data_len_msg db 'UNDI data segment size: ',0
-undi_code_msg db 'UNDI code segment at: ',0
-undi_code_len_msg db 'UNDI code segment size: ',0
+undi_data_msg db 'UNDI data segment at ',0
+undi_code_msg db 'UNDI code segment at ',0
+len_msg db ' len ', 0
cant_free_msg db 'Failed to free base memory, error ', 0
notfound_msg db 'not found', CR, LF, 0
myipaddr_msg db 'My IP address seems to be ',0
diff --git a/doc/menu.txt b/doc/menu.txt
index fd5a44da..11abce07 100644
--- a/doc/menu.txt
+++ b/doc/menu.txt
@@ -451,7 +451,9 @@ F12 textfile background
The menu system honours the TIMEOUT command; if TIMEOUT is specified
it will execute the ONTIMEOUT command if one exists, otherwise it will
-pick the default menu option.
+pick the default menu option. WARNING: the timeout action will bypass
+password protection even if one is set for the specified or default
+entry!
Normally, the user can press [Tab] to edit the menu entry, and [Esc]
to return to the Syslinux command line. However, if the configuration
diff --git a/doc/pxelinux.txt b/doc/pxelinux.txt
index 8d0792f7..47aea903 100644
--- a/doc/pxelinux.txt
+++ b/doc/pxelinux.txt
@@ -89,6 +89,9 @@ default if it cannot find any configuration file at all; instead it
will reboot after the timeout interval has expired. This keeps a
machine from getting stuck indefinitely due to a boot server failure.
+Starting in release 3.50, PXELINUX displays network information at
+the boot prompt pressing <Ctrl-N>.
+
PXELINUX does not support MTFTP, and I have no plans of doing so, as
MTFTP is inherently broken for files more than 65535 packets (about
92 MB) in size. It is of course possible to use MTFTP for the initial
@@ -405,7 +408,6 @@ load PXELINUX. See:
The following problems are known with PXELINUX, so far:
-+ Requires a TFTP server which supports the "tsize" option.
+ The error recovery routine doesn't work quite right. For right now,
it just does a hard reset - seems good enough.
+ We should probably call the UDP receive function in the keyboard
diff --git a/doc/syslinux.txt b/doc/syslinux.txt
index 079183a9..4cf89ea4 100644
--- a/doc/syslinux.txt
+++ b/doc/syslinux.txt
@@ -420,7 +420,7 @@ F2 filename
F9 filename
F10 filename
F11 filename
-F11 filename
+F12 filename
Displays the indicated file on the screen when a function key is
pressed at the boot: prompt. This can be used to implement
pre-boot online help (presumably for the kernel command line
@@ -531,10 +531,12 @@ The command line prompt supports the following keystrokes:
<Ctrl-V> display the current Syslinux version
<Ctrl-W> erase one word
<Ctrl-X> force text mode
-<F1>..<F10> help screens (if configured)
+<Tab> list matching labels
+<F1>..<F12> help screens (if configured)
<Ctrl-F><digit> equivalent to F1..F10
<Ctrl-C> interrupt boot in progress
<Esc> interrupt boot in progress
+<Ctrl-N> display network information (PXELINUX only)
++++ COMBOOT IMAGES AND OTHER OPERATING SYSTEMS ++++
diff --git a/mbr/isohdpfx.S b/mbr/isohdpfx.S
index 9a97a5ee..ecb3a1a0 100644
--- a/mbr/isohdpfx.S
+++ b/mbr/isohdpfx.S
@@ -143,7 +143,15 @@ next:
cli
movw $heads, %sp
- jmp isolinux_start_hybrid
+
+ /*
+ * Use a ljmpw here to work around a bug in some unknown version
+ * of gas or ld when it comes to jumping to an absolute symbol...
+ *
+ * Look more closely into it if we ever are short on space.
+ */
+ ljmpw $0, $isolinux_start_hybrid
+ jmpw *%si
bad_signature:
call error