powerpc64le: lzma compression support
https://github.com/upx/upx/pull/79
Integration based on:
commit c4bde4369f
Author: Thierry Fauck <tfauck@free.fr>
Date: Fri Mar 24 17:39:30 2017 +0100
powerpc64le: lzma compression support
Signed-off-by: Thierry Fauck <tfauck@free.fr>
modified: powerpc64le-darwin.dylib-entry.h
modified: powerpc64le-darwin.macho-entry.h
modified: powerpc64le-linux.elf-entry.h
modified: powerpc64le-linux.kernel.vmlinux.h
modified: src/arch/powerpc/64le/lzma_d.S
modified: tmp/powerpc64le-darwin.dylib-entry.bin.dump
modified: tmp/powerpc64le-darwin.macho-entry.bin.dump
modified: tmp/powerpc64le-linux.elf-entry.bin.dump
modified: tmp/powerpc64le-linux.kernel.vmlinux.bin.dump
This commit is contained in:
parent
978c3eca23
commit
6f673310d2
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -28,7 +28,7 @@
|
||||
*/
|
||||
|
||||
#include "ppc_regs.h"
|
||||
retaddr = 6*8 // (sp,cr,pc, xx,yy,zz) save area per calling convention
|
||||
retaddr = 2*8 // (sp,cr,pc, xx,yy,zz) save area per calling convention
|
||||
|
||||
#define section .section
|
||||
|
||||
@ -46,6 +46,7 @@ retaddr = 6*8 // (sp,cr,pc, xx,yy,zz) save area per calling convention
|
||||
#define M_LZMA 14
|
||||
cmplwi cr0,meth,M_LZMA
|
||||
bne cr0,not_lzma
|
||||
stdu sp,-6*8(sp) // defend against callers who omit the linkage area
|
||||
mflr r0
|
||||
|
||||
//LzmaDecode( // from lzmaSDK/C/7zip/Compress/LZMA_C/LzmaDecode.h
|
||||
@ -62,55 +63,62 @@ retaddr = 6*8 // (sp,cr,pc, xx,yy,zz) save area per calling convention
|
||||
|
||||
std r0,retaddr(sp) // save return address in caller's frame
|
||||
lbz r0,0(src) // first byte, replaces LzmaDecodeProperties()
|
||||
rlwinm t1,r0,32-3,3,31 // t1= (r0>>3)==(lit_context-bits + lit_pos_bits)
|
||||
rlwinm t0,r0,0,32-3,31 // t0= (7& t0)==pos_bits
|
||||
rldicl t1,r0,64-3,3 // t1= (r0>>3)==(lit_context-bits + lit_pos_bits)
|
||||
clrldi t0,r0,64-3 // t0= (7& t0)==pos_bits
|
||||
|
||||
#define LZMA_BASE_SIZE 1846
|
||||
#define LZMA_LIT_SIZE 768
|
||||
#define szSizeT 4
|
||||
#define szSizeT 8
|
||||
|
||||
li a0,-2*LZMA_LIT_SIZE
|
||||
slw a0,a0,t1 // -2*LZMA_LIT_SIZE << (lit_context_bits + lit_pos_bits)
|
||||
addi a0,a0,-4*4 -(szSizeT +4) - 2*LZMA_BASE_SIZE
|
||||
sld a0,a0,t1 // -2*LZMA_LIT_SIZE << (lit_context_bits + lit_pos_bits)
|
||||
addi a0,a0,-4*8 -(szSizeT +8) - 2*LZMA_BASE_SIZE
|
||||
// alloca{sp,ra,orig_dst,&outSizeProcessed, inSizeProcessed,*_bits, CLzmaDecoderState}
|
||||
mr a3,sp
|
||||
add sp,sp,a0
|
||||
rlwinm sp,sp,0,0,32-6 // (1<<6) byte align
|
||||
rldicr sp,sp,0,64-6 // (1<<6) byte align
|
||||
|
||||
li r0,0
|
||||
mr a0,a3 // old sp
|
||||
stw r0,0(a6) // outSizeProcessed= 0;
|
||||
std r0,0(a6) // outSizeProcessed= 0;
|
||||
1:
|
||||
stwu r0,-4(a0) // clear CLZmaDecoderState on stack
|
||||
stdu r0,-8(a0) // clear CLZmaDecoderState on stack
|
||||
cmpld cr0,sp,a0 // compare logical ==> compare unsigned
|
||||
blt cr0,1b
|
||||
stw a3,0(sp) // frame chain
|
||||
std a3,0(sp) // frame chain
|
||||
|
||||
lbz r0,-1(a1) // second byte, replaces LzmaDecodeProperties()
|
||||
stw a4,2*4(sp) // outp
|
||||
la a3,4*4 (sp) // &inSizeProcessed
|
||||
stw a6,3*4(sp) // &outSizeProcessed
|
||||
la a0,4*4+szSizeT(sp) // &CLzmaDecoderState
|
||||
rlwinm t1,r0,32-4,4,31 // t1= (r0>>4)==lit_pos_bits
|
||||
rlwinm r0,r0,0,32-4,31 // r0= (0xf& r0)==lit_context_bits
|
||||
la a3,4*8 (sp) // &inSizeProcessed
|
||||
la a0,4*8+szSizeT(sp) // &CLzmaDecoderState
|
||||
std a4,2*8(sp) // outp
|
||||
std a6,3*8(sp) // &outSizeProcessed
|
||||
rldicl t1,r0,64-4,4 // t1= (r0>>4)==lit_pos_bits
|
||||
clrldi r0,r0,64-4 // r0= (0xf& r0)==lit_context_bits
|
||||
stb t0,2(a0) // pos_bits
|
||||
stb t1,1(a0) // lit_pos_bits
|
||||
stb r0,0(a0) // lit_context_bits
|
||||
stdu sp,-6*8(sp) // defend against callers who omit the linkage area
|
||||
|
||||
section LZMA_DEC10
|
||||
#include "lzma_d_cs.S"
|
||||
|
||||
section LZMA_DEC20
|
||||
bl lzma_dec20
|
||||
b eof_dec20
|
||||
lzma_dec20:
|
||||
#include "lzma_d_cf.S"
|
||||
eof_dec20:
|
||||
|
||||
section LZMA_DEC30 // Out: a0= retval; a2= &hi stored; a4= &lo stored; lr= retaddr
|
||||
lwz a2,3*4(sp) // &outSizeProcessed
|
||||
lwz a4,2*4(sp) // &lowest byte stored
|
||||
lwz a2,0(a2) // outSizeProcessed
|
||||
lwz sp,0(sp) // old sp
|
||||
add a2,a2,a4 // &next byte to store
|
||||
lwz r0,retaddr(sp)
|
||||
addi a2,a2,-1 // &highest byte stored
|
||||
la sp,6*8(sp) // restore sa
|
||||
ld a2,3*8(sp) // &outSizeProcessed
|
||||
ld a4,2*8(sp) // &lowest byte stored
|
||||
ld a2,0(a2) // outSizeProcessed
|
||||
ld sp,0(sp) // old sp
|
||||
add a2,a2,a4 // &next byte to store
|
||||
ld r0,retaddr(sp)
|
||||
addi a2,a2,-1 // &highest byte stored
|
||||
ld sp,0(sp) // un-defend
|
||||
mtlr r0
|
||||
|
||||
not_lzma:
|
||||
|
||||
@ -7,14 +7,14 @@ Idx Name Size VMA LMA File off Algn
|
||||
2 NRV2E 00000168 0000000000000000 0000000000000000 00000048 2**0 CONTENTS, RELOC, READONLY
|
||||
3 NRV2D 00000144 0000000000000000 0000000000000000 000001b0 2**0 CONTENTS, RELOC, READONLY
|
||||
4 NRV2B 00000118 0000000000000000 0000000000000000 000002f4 2**0 CONTENTS, RELOC, READONLY
|
||||
5 LZMA_ELF00 0000008c 0000000000000000 0000000000000000 0000040c 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 00000498 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 00000c28 0000000000000000 0000000000000000 00001050 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000020 0000000000000000 0000000000000000 00001c78 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001c98 2**0 CONTENTS, READONLY
|
||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cb4 2**0 CONTENTS, READONLY
|
||||
11 ELFMAINY 00000000 0000000000000000 0000000000000000 00001cd8 2**0 CONTENTS, READONLY
|
||||
12 ELFMAINZ 000002e8 0000000000000000 0000000000000000 00001cd8 2**0 CONTENTS, READONLY
|
||||
5 LZMA_ELF00 00000094 0000000000000000 0000000000000000 0000040c 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 000004a0 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 00000c30 0000000000000000 0000000000000000 00001058 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000028 0000000000000000 0000000000000000 00001c88 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001cb0 2**0 CONTENTS, READONLY
|
||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001ccc 2**0 CONTENTS, READONLY
|
||||
11 ELFMAINY 00000000 0000000000000000 0000000000000000 00001cf0 2**0 CONTENTS, READONLY
|
||||
12 ELFMAINZ 000002e8 0000000000000000 0000000000000000 00001cf0 2**0 CONTENTS, READONLY
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
||||
@ -49,4 +49,4 @@ OFFSET TYPE VALUE
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000020
|
||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000028
|
||||
|
||||
@ -7,14 +7,14 @@ Idx Name Size VMA LMA File off Algn
|
||||
2 NRV2E 00000168 0000000000000000 0000000000000000 00000044 2**0 CONTENTS, RELOC, READONLY
|
||||
3 NRV2D 00000144 0000000000000000 0000000000000000 000001ac 2**0 CONTENTS, RELOC, READONLY
|
||||
4 NRV2B 00000118 0000000000000000 0000000000000000 000002f0 2**0 CONTENTS, RELOC, READONLY
|
||||
5 LZMA_ELF00 0000008c 0000000000000000 0000000000000000 00000408 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 00000494 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 00000c28 0000000000000000 0000000000000000 0000104c 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000020 0000000000000000 0000000000000000 00001c74 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001c94 2**0 CONTENTS, READONLY
|
||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cb0 2**0 CONTENTS, READONLY
|
||||
11 ELFMAINY 00000000 0000000000000000 0000000000000000 00001cd4 2**0 CONTENTS, READONLY
|
||||
12 ELFMAINZ 00000054 0000000000000000 0000000000000000 00001cd4 2**0 CONTENTS, READONLY
|
||||
5 LZMA_ELF00 00000094 0000000000000000 0000000000000000 00000408 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 0000049c 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 00000c30 0000000000000000 0000000000000000 00001054 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000028 0000000000000000 0000000000000000 00001c84 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001cac 2**0 CONTENTS, READONLY
|
||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cc8 2**0 CONTENTS, READONLY
|
||||
11 ELFMAINY 00000000 0000000000000000 0000000000000000 00001cec 2**0 CONTENTS, READONLY
|
||||
12 ELFMAINZ 00000054 0000000000000000 0000000000000000 00001cec 2**0 CONTENTS, READONLY
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
||||
@ -49,4 +49,4 @@ OFFSET TYPE VALUE
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000020
|
||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000028
|
||||
|
||||
@ -7,14 +7,14 @@ Idx Name Size VMA LMA File off Algn
|
||||
2 NRV2E 00000168 0000000000000000 0000000000000000 00000044 2**0 CONTENTS, RELOC, READONLY
|
||||
3 NRV2D 00000144 0000000000000000 0000000000000000 000001ac 2**0 CONTENTS, RELOC, READONLY
|
||||
4 NRV2B 00000118 0000000000000000 0000000000000000 000002f0 2**0 CONTENTS, RELOC, READONLY
|
||||
5 LZMA_ELF00 0000008c 0000000000000000 0000000000000000 00000408 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 00000494 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 00000c28 0000000000000000 0000000000000000 0000104c 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000020 0000000000000000 0000000000000000 00001c74 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001c94 2**0 CONTENTS, READONLY
|
||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cb0 2**0 CONTENTS, READONLY
|
||||
11 ELFMAINY 00000030 0000000000000000 0000000000000000 00001ce0 2**4 CONTENTS, RELOC, READONLY
|
||||
12 ELFMAINZ 00000108 0000000000000000 0000000000000000 00001d10 2**0 CONTENTS, RELOC, READONLY
|
||||
5 LZMA_ELF00 00000094 0000000000000000 0000000000000000 00000408 2**0 CONTENTS, RELOC, READONLY
|
||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 0000049c 2**0 CONTENTS, READONLY
|
||||
7 LZMA_DEC20 00000c30 0000000000000000 0000000000000000 00001054 2**0 CONTENTS, READONLY
|
||||
8 LZMA_DEC30 00000028 0000000000000000 0000000000000000 00001c84 2**0 CONTENTS, READONLY
|
||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001cac 2**0 CONTENTS, READONLY
|
||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cc8 2**0 CONTENTS, READONLY
|
||||
11 ELFMAINY 00000030 0000000000000000 0000000000000000 00001cf0 2**4 CONTENTS, RELOC, READONLY
|
||||
12 ELFMAINZ 00000108 0000000000000000 0000000000000000 00001d20 2**0 CONTENTS, RELOC, READONLY
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
||||
@ -49,7 +49,7 @@ OFFSET TYPE VALUE
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000020
|
||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000028
|
||||
|
||||
RELOCATION RECORDS FOR [ELFMAINY]:
|
||||
OFFSET TYPE VALUE
|
||||
|
||||
@ -12,11 +12,11 @@ Idx Name Size VMA LMA File off Algn
|
||||
7 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00000478 2**0 CONTENTS, READONLY
|
||||
8 CFLUSH 00000024 0000000000000000 0000000000000000 00000494 2**0 CONTENTS, READONLY
|
||||
9 LZMA 00000000 0000000000000000 0000000000000000 000004b8 2**0 CONTENTS, READONLY
|
||||
10 LZMA_ELF00 0000008c 0000000000000000 0000000000000000 000004b8 2**0 CONTENTS, RELOC, READONLY
|
||||
11 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 00000544 2**0 CONTENTS, READONLY
|
||||
12 LZMA_DEC20 00000c28 0000000000000000 0000000000000000 000010fc 2**0 CONTENTS, READONLY
|
||||
13 LZMA_DEC30 00000020 0000000000000000 0000000000000000 00001d24 2**0 CONTENTS, READONLY
|
||||
14 UPX1HEAD 00000020 0000000000000000 0000000000000000 00001d44 2**0 CONTENTS, READONLY
|
||||
10 LZMA_ELF00 00000094 0000000000000000 0000000000000000 000004b8 2**0 CONTENTS, RELOC, READONLY
|
||||
11 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 0000054c 2**0 CONTENTS, READONLY
|
||||
12 LZMA_DEC20 00000c30 0000000000000000 0000000000000000 00001104 2**0 CONTENTS, READONLY
|
||||
13 LZMA_DEC30 00000028 0000000000000000 0000000000000000 00001d34 2**0 CONTENTS, READONLY
|
||||
14 UPX1HEAD 00000020 0000000000000000 0000000000000000 00001d5c 2**0 CONTENTS, READONLY
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d LINUX020 0000000000000000 LINUX020
|
||||
0000000000000000 l d LINUX030 0000000000000000 LINUX030
|
||||
@ -60,4 +60,4 @@ OFFSET TYPE VALUE
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000020
|
||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000028
|
||||
|
||||
Loading…
Reference in New Issue
Block a user