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:
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"
|
#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
|
#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
|
#define M_LZMA 14
|
||||||
cmplwi cr0,meth,M_LZMA
|
cmplwi cr0,meth,M_LZMA
|
||||||
bne cr0,not_lzma
|
bne cr0,not_lzma
|
||||||
|
stdu sp,-6*8(sp) // defend against callers who omit the linkage area
|
||||||
mflr r0
|
mflr r0
|
||||||
|
|
||||||
//LzmaDecode( // from lzmaSDK/C/7zip/Compress/LZMA_C/LzmaDecode.h
|
//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
|
std r0,retaddr(sp) // save return address in caller's frame
|
||||||
lbz r0,0(src) // first byte, replaces LzmaDecodeProperties()
|
lbz r0,0(src) // first byte, replaces LzmaDecodeProperties()
|
||||||
rlwinm t1,r0,32-3,3,31 // t1= (r0>>3)==(lit_context-bits + lit_pos_bits)
|
rldicl t1,r0,64-3,3 // t1= (r0>>3)==(lit_context-bits + lit_pos_bits)
|
||||||
rlwinm t0,r0,0,32-3,31 // t0= (7& t0)==pos_bits
|
clrldi t0,r0,64-3 // t0= (7& t0)==pos_bits
|
||||||
|
|
||||||
#define LZMA_BASE_SIZE 1846
|
#define LZMA_BASE_SIZE 1846
|
||||||
#define LZMA_LIT_SIZE 768
|
#define LZMA_LIT_SIZE 768
|
||||||
#define szSizeT 4
|
#define szSizeT 8
|
||||||
|
|
||||||
li a0,-2*LZMA_LIT_SIZE
|
li a0,-2*LZMA_LIT_SIZE
|
||||||
slw a0,a0,t1 // -2*LZMA_LIT_SIZE << (lit_context_bits + lit_pos_bits)
|
sld a0,a0,t1 // -2*LZMA_LIT_SIZE << (lit_context_bits + lit_pos_bits)
|
||||||
addi a0,a0,-4*4 -(szSizeT +4) - 2*LZMA_BASE_SIZE
|
addi a0,a0,-4*8 -(szSizeT +8) - 2*LZMA_BASE_SIZE
|
||||||
// alloca{sp,ra,orig_dst,&outSizeProcessed, inSizeProcessed,*_bits, CLzmaDecoderState}
|
// alloca{sp,ra,orig_dst,&outSizeProcessed, inSizeProcessed,*_bits, CLzmaDecoderState}
|
||||||
mr a3,sp
|
mr a3,sp
|
||||||
add sp,sp,a0
|
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
|
li r0,0
|
||||||
mr a0,a3 // old sp
|
mr a0,a3 // old sp
|
||||||
stw r0,0(a6) // outSizeProcessed= 0;
|
std r0,0(a6) // outSizeProcessed= 0;
|
||||||
1:
|
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
|
cmpld cr0,sp,a0 // compare logical ==> compare unsigned
|
||||||
blt cr0,1b
|
blt cr0,1b
|
||||||
stw a3,0(sp) // frame chain
|
std a3,0(sp) // frame chain
|
||||||
|
|
||||||
lbz r0,-1(a1) // second byte, replaces LzmaDecodeProperties()
|
lbz r0,-1(a1) // second byte, replaces LzmaDecodeProperties()
|
||||||
stw a4,2*4(sp) // outp
|
la a3,4*8 (sp) // &inSizeProcessed
|
||||||
la a3,4*4 (sp) // &inSizeProcessed
|
la a0,4*8+szSizeT(sp) // &CLzmaDecoderState
|
||||||
stw a6,3*4(sp) // &outSizeProcessed
|
std a4,2*8(sp) // outp
|
||||||
la a0,4*4+szSizeT(sp) // &CLzmaDecoderState
|
std a6,3*8(sp) // &outSizeProcessed
|
||||||
rlwinm t1,r0,32-4,4,31 // t1= (r0>>4)==lit_pos_bits
|
rldicl t1,r0,64-4,4 // t1= (r0>>4)==lit_pos_bits
|
||||||
rlwinm r0,r0,0,32-4,31 // r0= (0xf& r0)==lit_context_bits
|
clrldi r0,r0,64-4 // r0= (0xf& r0)==lit_context_bits
|
||||||
stb t0,2(a0) // pos_bits
|
stb t0,2(a0) // pos_bits
|
||||||
stb t1,1(a0) // lit_pos_bits
|
stb t1,1(a0) // lit_pos_bits
|
||||||
stb r0,0(a0) // lit_context_bits
|
stb r0,0(a0) // lit_context_bits
|
||||||
|
stdu sp,-6*8(sp) // defend against callers who omit the linkage area
|
||||||
|
|
||||||
section LZMA_DEC10
|
section LZMA_DEC10
|
||||||
#include "lzma_d_cs.S"
|
#include "lzma_d_cs.S"
|
||||||
|
|
||||||
section LZMA_DEC20
|
section LZMA_DEC20
|
||||||
|
bl lzma_dec20
|
||||||
|
b eof_dec20
|
||||||
|
lzma_dec20:
|
||||||
#include "lzma_d_cf.S"
|
#include "lzma_d_cf.S"
|
||||||
|
eof_dec20:
|
||||||
|
|
||||||
section LZMA_DEC30 // Out: a0= retval; a2= &hi stored; a4= &lo stored; lr= retaddr
|
section LZMA_DEC30 // Out: a0= retval; a2= &hi stored; a4= &lo stored; lr= retaddr
|
||||||
lwz a2,3*4(sp) // &outSizeProcessed
|
la sp,6*8(sp) // restore sa
|
||||||
lwz a4,2*4(sp) // &lowest byte stored
|
ld a2,3*8(sp) // &outSizeProcessed
|
||||||
lwz a2,0(a2) // outSizeProcessed
|
ld a4,2*8(sp) // &lowest byte stored
|
||||||
lwz sp,0(sp) // old sp
|
ld a2,0(a2) // outSizeProcessed
|
||||||
add a2,a2,a4 // &next byte to store
|
ld sp,0(sp) // old sp
|
||||||
lwz r0,retaddr(sp)
|
add a2,a2,a4 // &next byte to store
|
||||||
addi a2,a2,-1 // &highest byte stored
|
ld r0,retaddr(sp)
|
||||||
|
addi a2,a2,-1 // &highest byte stored
|
||||||
|
ld sp,0(sp) // un-defend
|
||||||
mtlr r0
|
mtlr r0
|
||||||
|
|
||||||
not_lzma:
|
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
|
2 NRV2E 00000168 0000000000000000 0000000000000000 00000048 2**0 CONTENTS, RELOC, READONLY
|
||||||
3 NRV2D 00000144 0000000000000000 0000000000000000 000001b0 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
|
4 NRV2B 00000118 0000000000000000 0000000000000000 000002f4 2**0 CONTENTS, RELOC, READONLY
|
||||||
5 LZMA_ELF00 0000008c 0000000000000000 0000000000000000 0000040c 2**0 CONTENTS, RELOC, READONLY
|
5 LZMA_ELF00 00000094 0000000000000000 0000000000000000 0000040c 2**0 CONTENTS, RELOC, READONLY
|
||||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 00000498 2**0 CONTENTS, READONLY
|
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 000004a0 2**0 CONTENTS, READONLY
|
||||||
7 LZMA_DEC20 00000c28 0000000000000000 0000000000000000 00001050 2**0 CONTENTS, READONLY
|
7 LZMA_DEC20 00000c30 0000000000000000 0000000000000000 00001058 2**0 CONTENTS, READONLY
|
||||||
8 LZMA_DEC30 00000020 0000000000000000 0000000000000000 00001c78 2**0 CONTENTS, READONLY
|
8 LZMA_DEC30 00000028 0000000000000000 0000000000000000 00001c88 2**0 CONTENTS, READONLY
|
||||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001c98 2**0 CONTENTS, READONLY
|
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001cb0 2**0 CONTENTS, READONLY
|
||||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cb4 2**0 CONTENTS, READONLY
|
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001ccc 2**0 CONTENTS, READONLY
|
||||||
11 ELFMAINY 00000000 0000000000000000 0000000000000000 00001cd8 2**0 CONTENTS, READONLY
|
11 ELFMAINY 00000000 0000000000000000 0000000000000000 00001cf0 2**0 CONTENTS, READONLY
|
||||||
12 ELFMAINZ 000002e8 0000000000000000 0000000000000000 00001cd8 2**0 CONTENTS, READONLY
|
12 ELFMAINZ 000002e8 0000000000000000 0000000000000000 00001cf0 2**0 CONTENTS, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||||
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
||||||
@@ -49,4 +49,4 @@ OFFSET TYPE VALUE
|
|||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||||
OFFSET TYPE VALUE
|
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
|
2 NRV2E 00000168 0000000000000000 0000000000000000 00000044 2**0 CONTENTS, RELOC, READONLY
|
||||||
3 NRV2D 00000144 0000000000000000 0000000000000000 000001ac 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
|
4 NRV2B 00000118 0000000000000000 0000000000000000 000002f0 2**0 CONTENTS, RELOC, READONLY
|
||||||
5 LZMA_ELF00 0000008c 0000000000000000 0000000000000000 00000408 2**0 CONTENTS, RELOC, READONLY
|
5 LZMA_ELF00 00000094 0000000000000000 0000000000000000 00000408 2**0 CONTENTS, RELOC, READONLY
|
||||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 00000494 2**0 CONTENTS, READONLY
|
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 0000049c 2**0 CONTENTS, READONLY
|
||||||
7 LZMA_DEC20 00000c28 0000000000000000 0000000000000000 0000104c 2**0 CONTENTS, READONLY
|
7 LZMA_DEC20 00000c30 0000000000000000 0000000000000000 00001054 2**0 CONTENTS, READONLY
|
||||||
8 LZMA_DEC30 00000020 0000000000000000 0000000000000000 00001c74 2**0 CONTENTS, READONLY
|
8 LZMA_DEC30 00000028 0000000000000000 0000000000000000 00001c84 2**0 CONTENTS, READONLY
|
||||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001c94 2**0 CONTENTS, READONLY
|
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001cac 2**0 CONTENTS, READONLY
|
||||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cb0 2**0 CONTENTS, READONLY
|
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cc8 2**0 CONTENTS, READONLY
|
||||||
11 ELFMAINY 00000000 0000000000000000 0000000000000000 00001cd4 2**0 CONTENTS, READONLY
|
11 ELFMAINY 00000000 0000000000000000 0000000000000000 00001cec 2**0 CONTENTS, READONLY
|
||||||
12 ELFMAINZ 00000054 0000000000000000 0000000000000000 00001cd4 2**0 CONTENTS, READONLY
|
12 ELFMAINZ 00000054 0000000000000000 0000000000000000 00001cec 2**0 CONTENTS, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||||
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
||||||
@@ -49,4 +49,4 @@ OFFSET TYPE VALUE
|
|||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||||
OFFSET TYPE VALUE
|
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
|
2 NRV2E 00000168 0000000000000000 0000000000000000 00000044 2**0 CONTENTS, RELOC, READONLY
|
||||||
3 NRV2D 00000144 0000000000000000 0000000000000000 000001ac 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
|
4 NRV2B 00000118 0000000000000000 0000000000000000 000002f0 2**0 CONTENTS, RELOC, READONLY
|
||||||
5 LZMA_ELF00 0000008c 0000000000000000 0000000000000000 00000408 2**0 CONTENTS, RELOC, READONLY
|
5 LZMA_ELF00 00000094 0000000000000000 0000000000000000 00000408 2**0 CONTENTS, RELOC, READONLY
|
||||||
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 00000494 2**0 CONTENTS, READONLY
|
6 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 0000049c 2**0 CONTENTS, READONLY
|
||||||
7 LZMA_DEC20 00000c28 0000000000000000 0000000000000000 0000104c 2**0 CONTENTS, READONLY
|
7 LZMA_DEC20 00000c30 0000000000000000 0000000000000000 00001054 2**0 CONTENTS, READONLY
|
||||||
8 LZMA_DEC30 00000020 0000000000000000 0000000000000000 00001c74 2**0 CONTENTS, READONLY
|
8 LZMA_DEC30 00000028 0000000000000000 0000000000000000 00001c84 2**0 CONTENTS, READONLY
|
||||||
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001c94 2**0 CONTENTS, READONLY
|
9 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00001cac 2**0 CONTENTS, READONLY
|
||||||
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cb0 2**0 CONTENTS, READONLY
|
10 CFLUSH 00000024 0000000000000000 0000000000000000 00001cc8 2**0 CONTENTS, READONLY
|
||||||
11 ELFMAINY 00000030 0000000000000000 0000000000000000 00001ce0 2**4 CONTENTS, RELOC, READONLY
|
11 ELFMAINY 00000030 0000000000000000 0000000000000000 00001cf0 2**4 CONTENTS, RELOC, READONLY
|
||||||
12 ELFMAINZ 00000108 0000000000000000 0000000000000000 00001d10 2**0 CONTENTS, RELOC, READONLY
|
12 ELFMAINZ 00000108 0000000000000000 0000000000000000 00001d20 2**0 CONTENTS, RELOC, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||||
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
|
||||||
@@ -49,7 +49,7 @@ OFFSET TYPE VALUE
|
|||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000020
|
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000028
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [ELFMAINY]:
|
RELOCATION RECORDS FOR [ELFMAINY]:
|
||||||
OFFSET TYPE VALUE
|
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
|
7 NRV_TAIL 0000001c 0000000000000000 0000000000000000 00000478 2**0 CONTENTS, READONLY
|
||||||
8 CFLUSH 00000024 0000000000000000 0000000000000000 00000494 2**0 CONTENTS, READONLY
|
8 CFLUSH 00000024 0000000000000000 0000000000000000 00000494 2**0 CONTENTS, READONLY
|
||||||
9 LZMA 00000000 0000000000000000 0000000000000000 000004b8 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
|
10 LZMA_ELF00 00000094 0000000000000000 0000000000000000 000004b8 2**0 CONTENTS, RELOC, READONLY
|
||||||
11 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 00000544 2**0 CONTENTS, READONLY
|
11 LZMA_DEC10 00000bb8 0000000000000000 0000000000000000 0000054c 2**0 CONTENTS, READONLY
|
||||||
12 LZMA_DEC20 00000c28 0000000000000000 0000000000000000 000010fc 2**0 CONTENTS, READONLY
|
12 LZMA_DEC20 00000c30 0000000000000000 0000000000000000 00001104 2**0 CONTENTS, READONLY
|
||||||
13 LZMA_DEC30 00000020 0000000000000000 0000000000000000 00001d24 2**0 CONTENTS, READONLY
|
13 LZMA_DEC30 00000028 0000000000000000 0000000000000000 00001d34 2**0 CONTENTS, READONLY
|
||||||
14 UPX1HEAD 00000020 0000000000000000 0000000000000000 00001d44 2**0 CONTENTS, READONLY
|
14 UPX1HEAD 00000020 0000000000000000 0000000000000000 00001d5c 2**0 CONTENTS, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
0000000000000000 l d LINUX020 0000000000000000 LINUX020
|
0000000000000000 l d LINUX020 0000000000000000 LINUX020
|
||||||
0000000000000000 l d LINUX030 0000000000000000 LINUX030
|
0000000000000000 l d LINUX030 0000000000000000 LINUX030
|
||||||
@@ -60,4 +60,4 @@ OFFSET TYPE VALUE
|
|||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
RELOCATION RECORDS FOR [LZMA_ELF00]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000020
|
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000028
|
||||||
|
|||||||
Reference in New Issue
Block a user