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:
John Reiser 2017-03-31 13:42:43 -07:00
parent 978c3eca23
commit 6f673310d2
9 changed files with 2534 additions and 2521 deletions

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

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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