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:
Thierry Fauck
2017-03-24 17:39:30 +01:00
parent b10f1df49f
commit c4bde4369f
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
+29 -21
View File
@@ -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
ld sp,0(sp) // old sp
add a2,a2,a4 // &next byte to store add a2,a2,a4 // &next byte to store
lwz r0,retaddr(sp) ld r0,retaddr(sp)
addi a2,a2,-1 // &highest byte stored 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