mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
mipsel stub for mmap on Linux (not NetBSD); and subroutine arg[4..6]
in t0..t2 instead of on stack, to match LMZA_DEC20
This commit is contained in:
parent
10a6370738
commit
9141a78c29
File diff suppressed because it is too large
Load Diff
|
@ -126,34 +126,33 @@ lxlzma_sv_sp = 10*4
|
||||||
lxlzma_dstdone = 8*4
|
lxlzma_dstdone = 8*4
|
||||||
lxlzma_srcdone = 7*4
|
lxlzma_srcdone = 7*4
|
||||||
|
|
||||||
lxlzma_pdstdone = 6*4
|
#define a4 t0
|
||||||
lxlzma_dstlen = 5*4
|
#define a5 t1
|
||||||
lxlzma_dst = 4*4
|
#define a6 t2
|
||||||
|
|
||||||
lbu t0,0(lxsrc) # ((lit_context_bits + lit_pos_bits)<<3) | pos_bits
|
lbu t9,0(lxsrc) # ((lit_context_bits + lit_pos_bits)<<3) | pos_bits
|
||||||
li tmp,-2*LZMA_LIT_NUM
|
li tmp,-2*LZMA_LIT_NUM
|
||||||
lbu t1,1(lxsrc) # (lit_pos_bits<<4) | lit_context_bits
|
lbu t8,1(lxsrc) # (lit_pos_bits<<4) | lit_context_bits
|
||||||
andi v0,t0,7 # pos_bits
|
andi v0,t9,7 # pos_bits
|
||||||
srl t0,t0,3 # (lit_context_bits + lit_pos_bits)
|
srl t9,t9,3 # (lit_context_bits + lit_pos_bits)
|
||||||
sllv tmp,tmp,t0
|
sllv tmp,tmp,t9
|
||||||
addiu tmp,tmp,-4 - 2*LZMA_BASE_NUM - lxlzma_szframe
|
addiu tmp,tmp,-4 - 2*LZMA_BASE_NUM - lxlzma_szframe
|
||||||
addu sp,sp,tmp # alloca
|
addu sp,sp,tmp # alloca
|
||||||
sw tmp, lxlzma_sv_sp(sp) # dynamic frame size
|
sw tmp,lxlzma_sv_sp(sp) # dynamic frame size
|
||||||
addiu tmp,sp,lxlzma_dstdone
|
addiu a6,sp,lxlzma_dstdone
|
||||||
sw lxdstlen,lxlzma_dstlen(sp)
|
sw ra, lxlzma_sv_pc(sp)
|
||||||
sw lxdst, lxlzma_dst(sp)
|
move a5,lxdstlen
|
||||||
|
move a4,lxdst
|
||||||
addiu a3,sp,lxlzma_srcdone
|
addiu a3,sp,lxlzma_srcdone
|
||||||
sw ra,lxlzma_sv_pc(sp)
|
|
||||||
addiu a2,lxsrclen,-2 # 2 header bytes
|
addiu a2,lxsrclen,-2 # 2 header bytes
|
||||||
sw tmp, lxlzma_pdstdone(sp)
|
|
||||||
addiu a1,lxsrc,2 # 2 header bytes
|
addiu a1,lxsrc,2 # 2 header bytes
|
||||||
addiu a0,sp,lxlzma_szframe # &CLzamDecoderState
|
addiu a0,sp,lxlzma_szframe # &CLzamDecoderState
|
||||||
sb v0,2(a0) # pos_bits
|
sb v0,2(a0) # pos_bits
|
||||||
andi tmp,t1,0xf
|
andi tmp,t8,0xf
|
||||||
sb tmp,0(a0) # lit_context_bits
|
sb tmp, 0(a0) # lit_context_bits
|
||||||
srl t1,t1,4
|
srl t8,t8,4
|
||||||
bal lzma_decode
|
bal lzma_decode
|
||||||
sb t1,1(a0) # lit_pos_bits
|
sb t8,1(a0) # lit_pos_bits
|
||||||
lw ra,lxlzma_sv_pc(sp)
|
lw ra,lxlzma_sv_pc(sp)
|
||||||
lw tmp,lxlzma_sv_sp(sp)
|
lw tmp,lxlzma_sv_sp(sp)
|
||||||
jr ra
|
jr ra
|
||||||
|
@ -225,8 +224,8 @@ unfold: // s7= &decompress; s6= &b_info(fold); s5= sz_pack2
|
||||||
the brk() of the _un_compressed program. The address and length are pre-
|
the brk() of the _un_compressed program. The address and length are pre-
|
||||||
calculated by PackLinuxElf64amd::defineSymbols().
|
calculated by PackLinuxElf64amd::defineSymbols().
|
||||||
*/
|
*/
|
||||||
#define a4 0x10
|
#define a4_sys 0x10
|
||||||
#define a5 0x14
|
#define a5_sys 0x14
|
||||||
#define sp_frame 0x20
|
#define sp_frame 0x20
|
||||||
|
|
||||||
addiu sp,sp,-sp_frame
|
addiu sp,sp,-sp_frame
|
||||||
|
@ -234,7 +233,7 @@ unfold: // s7= &decompress; s6= &b_info(fold); s5= sz_pack2
|
||||||
li a2, PROT_READ | PROT_WRITE | PROT_EXEC
|
li a2, PROT_READ | PROT_WRITE | PROT_EXEC
|
||||||
lw a1,lenm - decompressor(s7)
|
lw a1,lenm - decompressor(s7)
|
||||||
li a3, MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS
|
li a3, MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS
|
||||||
sw zero,a4(sp) //; sw zero,a5_mmap(sp) // MAP_ANON ==> ignore offset
|
sw zero,a4_sys(sp) //; sw zero,a5_sys(sp) // MAP_ANON ==> ignore offset
|
||||||
li v0,__NR_mmap; syscall; bnez a3,err_syscall
|
li v0,__NR_mmap; syscall; bnez a3,err_syscall
|
||||||
move a0,v0 // &new page(s)
|
move a0,v0 // &new page(s)
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,13 @@ Idx Name Size VMA LMA File off Algn Flags
|
||||||
1 NRV2E 00000218 00000000 00000000 00000060 2**0 CONTENTS, RELOC, READONLY
|
1 NRV2E 00000218 00000000 00000000 00000060 2**0 CONTENTS, RELOC, READONLY
|
||||||
2 NRV2D 000001f0 00000000 00000000 00000278 2**0 CONTENTS, RELOC, READONLY
|
2 NRV2D 000001f0 00000000 00000000 00000278 2**0 CONTENTS, RELOC, READONLY
|
||||||
3 NRV2B 000001b4 00000000 00000000 00000468 2**0 CONTENTS, RELOC, READONLY
|
3 NRV2B 000001b4 00000000 00000000 00000468 2**0 CONTENTS, RELOC, READONLY
|
||||||
4 LZMA_ELF00 00000070 00000000 00000000 0000061c 2**0 CONTENTS, READONLY
|
4 LZMA_ELF00 0000006c 00000000 00000000 0000061c 2**0 CONTENTS, READONLY
|
||||||
5 LZMA_DEC10 00000ad8 00000000 00000000 0000068c 2**0 CONTENTS, READONLY
|
5 LZMA_DEC10 00000ad8 00000000 00000000 00000688 2**0 CONTENTS, READONLY
|
||||||
6 LZMA_DEC20 00000ad8 00000000 00000000 00001164 2**0 CONTENTS, READONLY
|
6 LZMA_DEC20 00000ad8 00000000 00000000 00001160 2**0 CONTENTS, READONLY
|
||||||
7 LZMA_DEC30 00000004 00000000 00000000 00001c3c 2**0 CONTENTS, READONLY
|
7 LZMA_DEC30 00000004 00000000 00000000 00001c38 2**0 CONTENTS, READONLY
|
||||||
8 NRV_TAIL 00000000 00000000 00000000 00001c40 2**0 CONTENTS, READONLY
|
8 NRV_TAIL 00000000 00000000 00000000 00001c3c 2**0 CONTENTS, READONLY
|
||||||
9 ELFMAINY 0000005e 00000000 00000000 00001c40 2**0 CONTENTS, RELOC, READONLY
|
9 ELFMAINY 0000005e 00000000 00000000 00001c3c 2**0 CONTENTS, RELOC, READONLY
|
||||||
10 ELFMAINZ 000000bc 00000000 00000000 00001c9e 2**0 CONTENTS, READONLY
|
10 ELFMAINZ 000000bc 00000000 00000000 00001c9a 2**0 CONTENTS, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
00000000 l d ELFMAINY 00000000 ELFMAINY
|
00000000 l d ELFMAINY 00000000 ELFMAINY
|
||||||
00000000 l d ELFMAINZ 00000000 ELFMAINZ
|
00000000 l d ELFMAINZ 00000000 ELFMAINZ
|
||||||
|
|
Loading…
Reference in New Issue
Block a user