summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhpa <hpa>2004-12-28 07:00:01 +0000
committerhpa <hpa>2004-12-28 07:00:01 +0000
commit1be764df9ef969c8f86dd838c26c3dbe6002be61 (patch)
tree4648de359a03fe8d73f1c862f9298b796e460a9a
parentd12102fd89a05157672a4e4bb6e32dacd30ce27f (diff)
downloadsyslinux-1be764df9ef969c8f86dd838c26c3dbe6002be61.tar.gz
Fix pxelinux relocation; work around infinite loop in pxelinux mangle_name
-rw-r--r--bcopy32.inc10
-rw-r--r--comboot.inc3
-rw-r--r--extlinux.asm2
-rw-r--r--isolinux.asm2
-rw-r--r--ldlinux.asm3
-rw-r--r--pxelinux.asm26
6 files changed, 24 insertions, 22 deletions
diff --git a/bcopy32.inc b/bcopy32.inc
index 9931f101..7d049b73 100644
--- a/bcopy32.inc
+++ b/bcopy32.inc
@@ -407,10 +407,16 @@ A20DList dw a20d_dunno, a20d_none, a20d_bios, a20d_kbc, a20d_fast
a20_adjust_cnt equ ($-A20List)/2
A20Type dw A20_NONE ; A20 type
-A20Test dw 0 ; Counter for testing status of A20
-A20Tries db 0 ; Times until giving up on A20
; Total size of .bcopy32 section
alignb 4, db 0 ; Even number of dwords
__bcopy_size equ $-__bcopy_start
+ section .earlybss
+ alignb 2
+SavedSSSP resd 1 ; Saved real mode SS:SP
+A20Test resw 1 ; Counter for testing status of A20
+A20Tries resb 1 ; Times until giving up on A20
+
+
+
diff --git a/comboot.inc b/comboot.inc
index 6e11a2aa..45233a84 100644
--- a/comboot.inc
+++ b/comboot.inc
@@ -580,9 +580,6 @@ numIPAppends equ ($-IPAppends)/2
comapi_ipappend equ comapi_err
%endif
- section .bss
-SavedSSSP resd 1 ; Our SS:SP while running a COMBOOT image
-
section .data
%macro int21 2
db %1
diff --git a/extlinux.asm b/extlinux.asm
index dac3393f..9577d310 100644
--- a/extlinux.asm
+++ b/extlinux.asm
@@ -1449,5 +1449,3 @@ EndOfGetCBuf dw getcbuf+trackbufsize ; = getcbuf+BufSafeBytes
%error trackbufsize must be a multiple of SECTOR_SIZE
%endif
%endif
- align 4, db 0 ; Pad out any unfinished dword
-ldlinux_end equ $
diff --git a/isolinux.asm b/isolinux.asm
index 4a3af1de..c1d50f3b 100644
--- a/isolinux.asm
+++ b/isolinux.asm
@@ -1630,5 +1630,3 @@ EndOfGetCBuf dw getcbuf+trackbufsize ; = getcbuf+BufSafeBytes
%error trackbufsize must be a multiple of SECTOR_SIZE
%endif
%endif
-
-ldlinux_end equ $
diff --git a/ldlinux.asm b/ldlinux.asm
index e528adb4..71428fb9 100644
--- a/ldlinux.asm
+++ b/ldlinux.asm
@@ -1533,6 +1533,3 @@ EndOfGetCBuf dw getcbuf+trackbufsize ; = getcbuf+BufSafeBytes
%error trackbufsize must be a multiple of SECTOR_SIZE
%endif
%endif
-
- align 4, db 0 ; Pad out any unfinished dword
-ldlinux_end equ $
diff --git a/pxelinux.asm b/pxelinux.asm
index 5dde97b0..038680c4 100644
--- a/pxelinux.asm
+++ b/pxelinux.asm
@@ -273,9 +273,12 @@ _start:
mov ds,ax
mov es,ax
- mov si,ldlinux_end-(TEXT_START-7C00h)-4
- mov di,ldlinux_end-4
- mov cx,ldlinux_end-TEXT_START
+ ; This is uglier than it should be, but works around
+ ; some NASM 0.98.38 bugs.
+ mov di,section..bcopy32.start
+ add di,__bcopy_size-4
+ lea si,[di-(TEXT_START-7C00h)]
+ lea cx,[di-(TEXT_START-4)]
shr cx,2
std ; Overlapping areas, copy backwards
rep movsd
@@ -1482,15 +1485,17 @@ parse_dotquad:
mangle_name:
push si
mov eax,[ServerIP]
+ cmp byte [si],0
+ je .noip ; Null filename?!?!
cmp word [si],'::' ; Leading ::?
je .gotprefix
.more:
- cmp word [si],'::'
- je .here
+ inc si
cmp byte [si],0
+ je .noip
+ cmp word [si],'::'
jne .more
- jmp .noip
; We have a :: prefix of some sort, it could be either
; a DNS name or a dot-quad IP address. Try the dot-quad
@@ -1503,9 +1508,13 @@ mangle_name:
cmp word [si],'::'
je .gotprefix
.notdq:
+ pop si
+ push si
call dns_resolv
cmp word [si],'::'
- je .gotprefix
+ jne .noip
+ and eax,eax
+ jnz .gotprefix
.noip:
pop si
@@ -1531,7 +1540,6 @@ mangle_name:
inc cx ; At least one null byte
xor ax,ax ; Zero-fill name
rep stosb ; Doesn't do anything if CX=0
- pop bx
ret ; Done
;
@@ -2568,5 +2576,3 @@ EndOfGetCBuf dw getcbuf+trackbufsize ; = getcbuf+BufSafeBytes
%endif
IPAppend db 0 ; Default IPAPPEND option
DHCPMagic db 0 ; DHCP site-specific option info
-
-ldlinux_end equ $