filter 0x49 for [b]vmlinuz; 2nd parameter for ckt32 (addvalue)
p_vmlinz.cpp stub/macros.ash stub/l_lx_elf86.asm stub/l_lx_exec86.asm stub/l_vmlinz.asm committer: jreiser <jreiser> 1058406408 +0000
This commit is contained in:
+1
-1
@@ -65,7 +65,7 @@ const int *PackVmlinuzI386::getCompressionMethods(int method, int level) const
|
|||||||
const int *PackVmlinuzI386::getFilters() const
|
const int *PackVmlinuzI386::getFilters() const
|
||||||
{
|
{
|
||||||
static const int filters[] = {
|
static const int filters[] = {
|
||||||
/*0x49,*/ /* 2003-07-16 bug in unfilter? */
|
0x49,
|
||||||
0x26, 0x24, 0x11, 0x14, 0x13, 0x16, 0x25, 0x15, 0x12,
|
0x26, 0x24, 0x11, 0x14, 0x13, 0x16, 0x25, 0x15, 0x12,
|
||||||
-1 };
|
-1 };
|
||||||
return filters;
|
return filters;
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ decompress:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
ctojr32
|
ctojr32
|
||||||
ckt32 dl
|
ckt32 edi, dl
|
||||||
;__LEXEC017__
|
;__LEXEC017__
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ decompress:
|
|||||||
;; jmpn lxunf0 ; logically belongs here
|
;; jmpn lxunf0 ; logically belongs here
|
||||||
|
|
||||||
ctojr32
|
ctojr32
|
||||||
ckt32 dl
|
ckt32 edi, dl
|
||||||
;__LEXEC017__
|
;__LEXEC017__
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ checka20:
|
|||||||
pop ecx ; MATCH05 len
|
pop ecx ; MATCH05 len
|
||||||
pop edx ; MATCH04 cto
|
pop edx ; MATCH04 cto
|
||||||
pop edi ; MATCH03 src
|
pop edi ; MATCH03 src
|
||||||
ckt32 dl
|
ckt32 0, dl
|
||||||
%endif; __LZDUMMY2__
|
%endif; __LZDUMMY2__
|
||||||
%ifdef __LZCALLT9__
|
%ifdef __LZCALLT9__
|
||||||
pop edi ; MATCH03 src
|
pop edi ; MATCH03 src
|
||||||
|
|||||||
+18
-8
@@ -171,13 +171,18 @@ ctend:
|
|||||||
;; call/jump/jcc trick; also used more than once (and/or optionally), so
|
;; call/jump/jcc trick; also used more than once (and/or optionally), so
|
||||||
;; ecx has byte count (not count of applied instances), and
|
;; ecx has byte count (not count of applied instances), and
|
||||||
;; edi points to buffer.
|
;; edi points to buffer.
|
||||||
%macro ckt32 1 ; param: where is cto8 (dl, bl, or literal)
|
%macro ckt32 2
|
||||||
|
; 1st param: effective addvalue (typically 0 or edi; any rvalue)
|
||||||
|
; 2nd param: where is cto8 (dl, bl, or literal)
|
||||||
|
|
||||||
;__CKLLTR00__
|
;__CKLLTR00__
|
||||||
mov esi, edi ; base of block
|
%ifnidn %1,0
|
||||||
|
mov esi, %1
|
||||||
|
%endif
|
||||||
jmps ckstart
|
jmps ckstart
|
||||||
ckloop3:
|
ckloop3:
|
||||||
mov al, [edi]
|
mov al, [edi]
|
||||||
inc edi
|
add edi, byte 1
|
||||||
;__CKLLTR10__ Jcc only
|
;__CKLLTR10__ Jcc only
|
||||||
cmp al, 0x80 ; lo of 6-byte Jcc
|
cmp al, 0x80 ; lo of 6-byte Jcc
|
||||||
jb ckloop2
|
jb ckloop2
|
||||||
@@ -191,27 +196,32 @@ ckloop2:
|
|||||||
cmp al, 0xE9 - 0xE8
|
cmp al, 0xE9 - 0xE8
|
||||||
ja ckcount
|
ja ckcount
|
||||||
ckmark:
|
ckmark:
|
||||||
cmp byte [edi], %1 ; cto8
|
cmp byte [edi], %2 ; cto8
|
||||||
jnz ckcount
|
jnz ckcount
|
||||||
mov eax, [edi]
|
mov eax, [edi]
|
||||||
|
|
||||||
shr ax, 8
|
shr ax, 8
|
||||||
rol eax, 16
|
rol eax, 16
|
||||||
xchg al, ah
|
xchg al, ah
|
||||||
|
; above 3 instr are equivalent to the following 2 instr:
|
||||||
|
; mov al, 0 ; clear cto8 [setup partial-write stall]
|
||||||
|
; bswap eax ; not on 386: need 486 and up
|
||||||
|
|
||||||
sub eax, edi
|
sub eax, edi
|
||||||
|
%ifnidn %1,0
|
||||||
add eax, esi
|
add eax, esi
|
||||||
|
%endif
|
||||||
mov [edi], eax
|
mov [edi], eax
|
||||||
add edi, byte 4
|
add edi, byte 4
|
||||||
ckstart:
|
ckstart:
|
||||||
sub ecx, byte 4
|
sub ecx, byte 4
|
||||||
;__CKLLTR30__ Jcc only
|
;__CKLLTR30__ Jcc only
|
||||||
mov al, [edi]
|
mov al, [edi]
|
||||||
inc edi
|
add edi, byte 1
|
||||||
loop ckloop2 ; prefix cannot overlap previous displacement
|
loop ckloop2 ; prefix cannot overlap previous displacement
|
||||||
;__CKLLTR40__
|
;__CKLLTR40__
|
||||||
ckcount:
|
ckcount:
|
||||||
dec ecx
|
sub ecx, byte 1
|
||||||
jg ckloop3
|
jg ckloop3
|
||||||
ckend:
|
ckend:
|
||||||
%endmacro
|
%endmacro
|
||||||
@@ -497,7 +507,7 @@ lxunf1: ; allocate and clear mru[]
|
|||||||
;__LXUNF030__
|
;__LXUNF030__
|
||||||
lxctloop:
|
lxctloop:
|
||||||
movzx eax, word [edi] ; 2 bytes, zero extended
|
movzx eax, word [edi] ; 2 bytes, zero extended
|
||||||
inc edi
|
add edi, byte 1
|
||||||
;__LXJCC000__
|
;__LXJCC000__
|
||||||
cmp al, 0x80 ; lo of Jcc <d32>
|
cmp al, 0x80 ; lo of Jcc <d32>
|
||||||
jb lxct1
|
jb lxct1
|
||||||
@@ -537,7 +547,7 @@ lxct3:
|
|||||||
|
|
||||||
;__LXUNF034__
|
;__LXUNF034__
|
||||||
unfcount:
|
unfcount:
|
||||||
dec ecx
|
sub ecx, byte 1
|
||||||
jg lxctloop
|
jg lxctloop
|
||||||
|
|
||||||
;__LXMRU055__
|
;__LXMRU055__
|
||||||
|
|||||||
Reference in New Issue
Block a user