stub for 64-bit little-endian PowerPC also uses TOC

modified:   stub/src/arch/powerpc/64le/ppc_regs.h
	modified:   stub/src/powerpc64le-linux.elf-fold.S
This commit is contained in:
John Reiser 2017-10-14 13:54:43 -07:00
parent ad3f63b5c4
commit ff1d5fb794
6 changed files with 234 additions and 232 deletions

View File

@ -32,8 +32,8 @@
#define STUB_POWERPC64LE_DARWIN_MACHO_FOLD_SIZE 6512 #define STUB_POWERPC64LE_DARWIN_MACHO_FOLD_SIZE 6512
#define STUB_POWERPC64LE_DARWIN_MACHO_FOLD_ADLER32 0xddf7c367 #define STUB_POWERPC64LE_DARWIN_MACHO_FOLD_ADLER32 0xe4f7c367
#define STUB_POWERPC64LE_DARWIN_MACHO_FOLD_CRC32 0x5f6b909e #define STUB_POWERPC64LE_DARWIN_MACHO_FOLD_CRC32 0xd9c156f2
unsigned char stub_powerpc64le_darwin_macho_fold[6512] = { unsigned char stub_powerpc64le_darwin_macho_fold[6512] = {
/* 0x0000 */ 8, 0,128,124,105, 0, 0, 72,208, 0, 6, 40, 32, 0,194, 76, /* 0x0000 */ 8, 0,128,124,105, 0, 0, 72,208, 0, 6, 40, 32, 0,194, 76,
@ -42,11 +42,11 @@ unsigned char stub_powerpc64le_darwin_macho_fold[6512] = {
/* 0x0030 */ 252,255, 99, 56,166, 3,137,124, 28, 0, 0, 72,186, 2, 96, 85, /* 0x0030 */ 252,255, 99, 56,166, 3,137,124, 28, 0, 0, 72,186, 2, 96, 85,
/* 0x0040 */ 80, 0, 3,124, 20, 58, 0,124,186, 1, 11, 80, 0, 0, 99,145, /* 0x0040 */ 80, 0, 3,124, 20, 58, 0,124,186, 1, 11, 80, 0, 0, 99,145,
/* 0x0050 */ 32, 0, 64, 79, 4, 0, 99,133,190, 85, 96, 85, 64, 40, 0,124, /* 0x0050 */ 32, 0, 64, 79, 4, 0, 99,133,190, 85, 96, 85, 64, 40, 0,124,
/* 0x0060 */ 220,255,194, 65,240,255, 32, 67, 32, 0,128, 78,112, 0, 33, 56, /* 0x0060 */ 220,255,194, 65,240,255, 32, 67, 32, 0,128, 78,144, 0, 33, 56,
/* 0x0070 */ 0, 0, 32, 57,252,255, 33,149,120, 11, 41,124,166, 2, 8,125, /* 0x0070 */ 0, 0, 32, 57,252,255, 33,149,120, 11, 41,124,166, 2, 8,125,
/* 0x0080 */ 248,255,159,128, 80,248,100,124, 24, 0,195,128, 0, 8, 6, 40, /* 0x0080 */ 248,255,159,128, 80,248,100,124, 24, 0,195,128, 0, 8, 6, 40,
/* 0x0090 */ 8, 0,129, 65, 0, 8,192, 56,120, 11, 61,124, 80, 8, 38,124, /* 0x0090 */ 8, 0,129, 65, 0, 8,192, 56,120, 11, 61,124, 80, 8, 38,124,
/* 0x00a0 */ 120, 11, 37,124,145,255, 33,248,120,251,231,127,105, 6, 0, 72, /* 0x00a0 */ 120, 11, 37,124,113,255, 33,248,120,251,231,127,105, 6, 0, 72,
/* 0x00b0 */ 120,235,161,127, 0, 0, 3,128,166, 3, 9,124,136, 0, 3,128, /* 0x00b0 */ 120,235,161,127, 0, 0, 3,128,166, 3, 9,124,136, 0, 3,128,
/* 0x00c0 */ 32,241, 15,124,140, 0, 3,128,166, 3, 1,124,144, 0, 3,128, /* 0x00c0 */ 32,241, 15,124,140, 0, 3,128,166, 3, 1,124,144, 0, 3,128,
/* 0x00d0 */ 166, 3, 8,124, 24, 0,131,184, 8, 0, 3,128, 16, 0, 67,128, /* 0x00d0 */ 166, 3, 8,124, 24, 0,131,184, 8, 0, 3,128, 16, 0, 67,128,

View File

@ -32,8 +32,8 @@
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_SIZE 11186 #define STUB_POWERPC64LE_LINUX_ELF_ENTRY_SIZE 11186
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_ADLER32 0x961282c1 #define STUB_POWERPC64LE_LINUX_ELF_ENTRY_ADLER32 0xe9ae82c5
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_CRC32 0x08758063 #define STUB_POWERPC64LE_LINUX_ELF_ENTRY_CRC32 0x1c0624dc
unsigned char stub_powerpc64le_linux_elf_entry[11186] = { unsigned char stub_powerpc64le_linux_elf_entry[11186] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -512,23 +512,23 @@ unsigned char stub_powerpc64le_linux_elf_entry[11186] = {
/* 0x1d90 */ 80,224,149,124,120,219,103,127, 18, 0,192, 56, 20, 2,132,124, /* 0x1d90 */ 80,224,149,124,120,219,103,127, 18, 0,192, 56, 20, 2,132,124,
/* 0x1da0 */ 125, 0, 0, 72, 80, 24,153,126,166, 3,233,127, 20,162,255,127, /* 0x1da0 */ 125, 0, 0, 72, 80, 24,153,126,166, 3,233,127, 20,162,255,127,
/* 0x1db0 */ 0, 0,118,130, 16, 0,118, 56, 20,162,214,126, 20,170,246,126, /* 0x1db0 */ 0, 0,118,130, 16, 0,118, 56, 20,162,214,126, 20,170,246,126,
/* 0x1dc0 */ 56,240,248,127, 80,184,248,126, 12, 0,246,136,104, 1,161,250, /* 0x1dc0 */ 56,240,248,127, 80,184,248,126, 12, 0,246,136,136, 1,161,250,
/* 0x1dd0 */ 104, 1,193, 56,120,179,197,126, 8, 0,150,128, 33, 4,128, 78, /* 0x1dd0 */ 136, 1,193, 56,120,179,197,126, 8, 0,150,128, 33, 4,128, 78,
/* 0x1de0 */ 0, 0, 22,128, 66,186,195,123, 44, 4, 96,120, 0, 0, 22,144, /* 0x1de0 */ 0, 0, 22,128, 66,186,195,123, 44, 4, 96,120, 0, 0, 22,144,
/* 0x1df0 */ 5, 0,160, 56,120,187,228,126,120,195, 3,127,125, 0, 0, 56, /* 0x1df0 */ 5, 0,160, 56,120,187,228,126,120,195, 3,127,125, 0, 0, 56,
/* 0x1e00 */ 2, 0, 0, 68,248,255,255,130, 20,154, 25,127, 20,162, 24,127, /* 0x1e00 */ 2, 0, 0, 68,248,255,255,130, 20,154, 25,127, 20,162, 24,127,
/* 0x1e10 */ 16, 0, 22, 56,166, 3, 9,124, 32, 4,128, 78, 0, 0, 0, 57, /* 0x1e10 */ 16, 0, 22, 56,166, 3, 9,124, 32, 4,128, 78, 0, 0, 0, 57,
/* 0x1e20 */ 3, 0,160, 56, 90, 0, 0, 56, 2, 0, 0, 68, 8, 0,131, 64, /* 0x1e20 */ 3, 0,160, 56, 90, 0, 0, 56, 2, 0, 0, 68, 8, 0,131, 64,
/* 0x1e30 */ 8, 0,128,124, 32, 0,128, 78, 0, 0, 3,232, 8, 0, 99, 56, /* 0x1e30 */ 8, 0,128,124, 32, 0,128, 78, 0, 0, 3,232, 8, 0, 99, 56,
/* 0x1e40 */ 0, 0,160, 47,244,255,254, 64, 32, 0,128, 78,145,254, 33,248, /* 0x1e40 */ 0, 0,160, 47,244,255,254, 64, 32, 0,128, 78,113,254, 33,248,
/* 0x1e50 */ 120, 0, 65,248,128, 0, 97,248,136, 0,129,248,144, 0,161,248, /* 0x1e50 */ 152, 0, 65,248,160, 0, 97,248,168, 0,129,248,176, 0,161,248,
/* 0x1e60 */ 152, 0,193,248,160, 0,225,248,168, 0, 1,249,176, 0, 33,249, /* 0x1e60 */ 184, 0,193,248,192, 0,225,248,200, 0, 1,249,208, 0, 33,249,
/* 0x1e70 */ 184, 0, 65,249,192, 0, 97,249,200, 0,129,249,208, 0,161,249, /* 0x1e70 */ 216, 0, 65,249,224, 0, 97,249,232, 0,129,249,240, 0,161,249,
/* 0x1e80 */ 216, 0,193,249,224, 0,225,249,232, 0, 1,250,240, 0, 33,250, /* 0x1e80 */ 248, 0,193,249, 0, 1,225,249, 8, 1, 1,250, 16, 1, 33,250,
/* 0x1e90 */ 248, 0, 65,250, 0, 1, 97,250, 8, 1,129,250, 16, 1,161,250, /* 0x1e90 */ 24, 1, 65,250, 32, 1, 97,250, 40, 1,129,250, 48, 1,161,250,
/* 0x1ea0 */ 24, 1,193,250, 32, 1,225,250, 40, 1, 1,251, 48, 1, 33,251, /* 0x1ea0 */ 56, 1,193,250, 64, 1,225,250, 72, 1, 1,251, 80, 1, 33,251,
/* 0x1eb0 */ 56, 1, 65,251, 64, 1, 97,251, 72, 1,129,251, 80, 1,161,251, /* 0x1eb0 */ 88, 1, 65,251, 96, 1, 97,251,104, 1,129,251,112, 1,161,251,
/* 0x1ec0 */ 88, 1,193,251, 96, 1,225,251,166, 2,232,127,112, 1, 97, 56, /* 0x1ec0 */ 120, 1,193,251,128, 1,225,251,166, 2,232,127,144, 1, 97, 56,
/* 0x1ed0 */ 105,255,255, 75,101,255,255, 75,120, 27,122,124, 0, 0, 3,232, /* 0x1ed0 */ 105,255,255, 75,101,255,255, 75,120, 27,122,124, 0, 0, 3,232,
/* 0x1ee0 */ 8, 0,131,232, 16, 0, 99, 56, 6, 0,160, 47, 16, 0,222, 65, /* 0x1ee0 */ 8, 0,131,232, 16, 0, 99, 56, 6, 0,160, 47, 16, 0,222, 65,
/* 0x1ef0 */ 0, 0, 32, 44,232,255,226, 64, 1, 0,128, 60,208, 0,196,127, /* 0x1ef0 */ 0, 0, 32, 44,232,255,226, 64, 1, 0,128, 60,208, 0,196,127,

View File

@ -1,5 +1,5 @@
/* powerpc64le-linux.elf-fold.h /* powerpc64le-linux.elf-fold.h
created from powerpc64le-linux.elf-fold.bin, 3051 (0xbeb) bytes created from powerpc64le-linux.elf-fold.bin, 3115 (0xc2b) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@ -31,21 +31,21 @@
*/ */
#define STUB_POWERPC64LE_LINUX_ELF_FOLD_SIZE 3051 #define STUB_POWERPC64LE_LINUX_ELF_FOLD_SIZE 3115
#define STUB_POWERPC64LE_LINUX_ELF_FOLD_ADLER32 0x4f3d2985 #define STUB_POWERPC64LE_LINUX_ELF_FOLD_ADLER32 0x0c663dfe
#define STUB_POWERPC64LE_LINUX_ELF_FOLD_CRC32 0xcdc21925 #define STUB_POWERPC64LE_LINUX_ELF_FOLD_CRC32 0x10e9a1b9
unsigned char stub_powerpc64le_linux_elf_fold[3051] = { unsigned char stub_powerpc64le_linux_elf_fold[3115] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 2, 0, 21, 0, 1, 0, 0, 0,160, 11, 16, 0, 0, 0, 0, 0, /* 0x0010 */ 2, 0, 21, 0, 1, 0, 0, 0,224, 11, 16, 0, 0, 0, 0, 0,
/* 0x0020 */ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 1, 0, 0, 0, 64, 0, 56, 0, 2, 0, 0, 0, 0, 0, 0, 0, /* 0x0030 */ 1, 0, 0, 0, 64, 0, 56, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x0040 */ 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0040 */ 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0050 */ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, /* 0x0050 */ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
/* 0x0060 */ 156, 11, 0, 0, 0, 0, 0, 0,156, 11, 0, 0, 0, 0, 0, 0, /* 0x0060 */ 224, 11, 0, 0, 0, 0, 0, 0,224, 11, 0, 0, 0, 0, 0, 0,
/* 0x0070 */ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, /* 0x0070 */ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0,
/* 0x0080 */ 160, 11, 0, 0, 0, 0, 0, 0,160, 11, 16, 0, 0, 0, 0, 0, /* 0x0080 */ 224, 11, 0, 0, 0, 0, 0, 0,224, 11, 16, 0, 0, 0, 0, 0,
/* 0x0090 */ 160, 11, 16, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, /* 0x0090 */ 224, 11, 16, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0,
/* 0x00a0 */ 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* 0x00a0 */ 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
/* 0x00b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,255, 96, 56, /* 0x00b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,255, 96, 56,
/* 0x00c0 */ 164, 77, 99,120, 32, 0,128, 78, 0, 0, 0, 96,125, 0, 0, 72, /* 0x00c0 */ 164, 77, 99,120, 32, 0,128, 78, 0, 0, 0, 96,125, 0, 0, 72,
@ -63,168 +63,172 @@ unsigned char stub_powerpc64le_linux_elf_fold[3051] = {
/* 0x0180 */ 17, 0, 4,232, 17, 0, 3,248,236,255,158, 64, 8, 0,163, 58, /* 0x0180 */ 17, 0, 4,232, 17, 0, 3,248,236,255,158, 64, 8, 0,163, 58,
/* 0x0190 */ 80,168,154,126,100, 0, 22,128, 8, 0,100, 58, 8, 0, 3,148, /* 0x0190 */ 80,168,154,126,100, 0, 22,128, 8, 0,100, 58, 8, 0, 3,148,
/* 0x01a0 */ 4, 0, 67, 58,255, 15,160, 56,120,147, 68,126,104, 0,118, 56, /* 0x01a0 */ 4, 0, 67, 58,255, 15,160, 56,120,147, 68,126,104, 0,118, 56,
/* 0x01b0 */ 145, 1, 0, 72,252,255,178, 56, 0, 0, 35, 44, 12, 0,129, 65, /* 0x01b0 */ 213, 1, 0, 72,252,255,178, 56, 0, 0, 35, 44, 12, 0,129, 65,
/* 0x01c0 */ 100, 0,182, 56, 12, 0, 96, 56, 4, 0, 99, 56, 20, 26,133,124, /* 0x01c0 */ 100, 0,182, 56, 12, 0, 96, 56, 4, 0, 99, 56, 20, 26,133,124,
/* 0x01d0 */ 166, 3,105,124,120,155, 99,126, 0, 0,160, 56,255,255,163,156, /* 0x01d0 */ 166, 3,105,124,120,155, 99,126, 0, 0,160, 56,255,255,163,156,
/* 0x01e0 */ 255,255, 4,140,255,255, 3,156,248,255, 0, 66,240,255,122,248, /* 0x01e0 */ 255,255, 4,140,255,255, 3,156,248,255, 0, 66,240,255,122,248,
/* 0x01f0 */ 36, 7, 99,120,120, 34, 32,124,120, 26, 0,124, 32, 7, 0,120, /* 0x01f0 */ 36, 7, 99,120,120, 34, 32,124,120, 26, 0,124, 32, 7, 0,120,
/* 0x0200 */ 80, 24, 96,124,120,171,164,126, 80, 24, 84,127,249,255, 4,232, /* 0x0200 */ 80, 24, 96,124,120,171,164,126, 80, 24, 84,127,249,255, 4,232,
/* 0x0210 */ 64, 8,164,127,249,255, 3,248,244,255,253, 65,120, 27, 97,124, /* 0x0210 */ 64, 8,164,127,249,255, 3,248,244,255,253, 65,120, 27, 97,124,
/* 0x0220 */ 104, 1, 33, 57, 0, 0, 41,251,145,247, 33,248,120,195, 3,127, /* 0x0220 */ 136, 1, 33, 57, 0, 0, 41,251,113,247, 33,248,120,195, 3,127,
/* 0x0230 */ 120,187,228,126,112, 0,161, 56,120,211, 70,127,120,251,231,127, /* 0x0230 */ 120,187,228,126,144, 0,161, 56,120,211, 70,127,120,251,231,127,
/* 0x0240 */ 120,179,200,126,120,243,202,127, 61, 7, 0, 72,112, 8, 33, 56, /* 0x0240 */ 120,179,200,126, 0, 0, 0, 56,112, 0,225,248,112, 0,225, 56,
/* 0x0250 */ 120, 27,127,124, 0, 0, 0, 57,120,219,103,127, 2, 0,192, 56, /* 0x0250 */ 120, 0, 1,248,128, 0, 1,249,128, 0, 1, 57,136, 0, 1,248,
/* 0x0260 */ 1, 0,160, 56,208, 0,158,124, 0, 0, 96, 56,173, 0, 0, 72, /* 0x0260 */ 120,243,202,127,101, 7, 0, 72,144, 8, 33, 56, 7, 0, 96,112,
/* 0x0270 */ 120,219, 99,127,229, 0, 0, 72,120,211, 67,127, 0, 0, 3,232, /* 0x0270 */ 36, 0,130, 64, 0, 0, 3,128, 0, 0, 0, 40, 24, 0,130, 64,
/* 0x0280 */ 8, 0,131,232, 16, 0, 99, 56, 0, 0,160, 43,240,255,254, 64, /* 0x0280 */ 136, 1, 1,232, 8, 0, 67,232, 20, 2, 66,124, 0, 0, 99,232,
/* 0x0290 */ 166, 3,137,124,120,235,163,127,120,227,132,127, 91, 0, 0, 56, /* 0x0290 */ 20, 2, 99,124,120, 27,127,124, 0, 0, 0, 57,120,219,103,127,
/* 0x02a0 */ 166, 3,232,127,144, 0,161,232,152, 0,193,232,160, 0,225,232, /* 0x02a0 */ 2, 0,192, 56, 1, 0,160, 56,208, 0,158,124, 0, 0, 96, 56,
/* 0x02b0 */ 168, 0, 1,233,176, 0, 33,233,184, 0, 65,233,192, 0, 97,233, /* 0x02b0 */ 173, 0, 0, 72,120,219, 99,127,229, 0, 0, 72,120,211, 67,127,
/* 0x02c0 */ 200, 0,129,233,208, 0,161,233,216, 0,193,233,224, 0,225,233, /* 0x02c0 */ 0, 0, 3,232, 8, 0,131,232, 16, 0, 99, 56, 0, 0,160, 43,
/* 0x02d0 */ 232, 0, 1,234,240, 0, 33,234,248, 0, 65,234, 0, 1, 97,234, /* 0x02d0 */ 240,255,254, 64,166, 3,137,124,120,235,163,127,120,227,132,127,
/* 0x02e0 */ 8, 1,129,234, 16, 1,161,234, 24, 1,193,234, 32, 1,225,234, /* 0x02e0 */ 91, 0, 0, 56,166, 3,232,127,176, 0,161,232,184, 0,193,232,
/* 0x02f0 */ 40, 1, 1,235, 48, 1, 33,235, 56, 1, 65,235, 64, 1, 97,235, /* 0x02f0 */ 192, 0,225,232,200, 0, 1,233,208, 0, 33,233,216, 0, 65,233,
/* 0x0300 */ 72, 1,129,235, 80, 1,161,235, 88, 1,193,235, 96, 1,225,235, /* 0x0300 */ 224, 0, 97,233,232, 0,129,233,240, 0,161,233,248, 0,193,233,
/* 0x0310 */ 112, 1, 33, 56, 32, 4,128, 78, 32, 0,231,120, 90, 0, 0, 56, /* 0x0310 */ 0, 1,225,233, 8, 1, 1,234, 16, 1, 33,234, 24, 1, 65,234,
/* 0x0320 */ 2, 0, 0, 68, 8, 0,227, 64,255,255, 96, 56, 32, 0,128, 78, /* 0x0320 */ 32, 1, 97,234, 40, 1,129,234, 48, 1,161,234, 56, 1,193,234,
/* 0x0330 */ 1, 0, 0, 56, 8, 0, 0, 72, 45, 0, 0, 56, 8, 0, 0, 72, /* 0x0330 */ 64, 1,225,234, 72, 1, 1,235, 80, 1, 33,235, 88, 1, 65,235,
/* 0x0340 */ 85, 0, 0, 56, 8, 0, 0, 72, 3, 0, 0, 56, 8, 0, 0, 72, /* 0x0340 */ 96, 1, 97,235,104, 1,129,235,112, 1,161,235,120, 1,193,235,
/* 0x0350 */ 5, 0, 0, 56, 8, 0, 0, 72, 6, 0, 0, 56, 8, 0, 0, 72, /* 0x0350 */ 128, 1,225,235,144, 1, 33, 56, 32, 4,128, 78, 32, 0,231,120,
/* 0x0360 */ 125, 0, 0, 56, 8, 0, 0, 72, 91, 0, 0, 56,180,255,255, 75, /* 0x0360 */ 90, 0, 0, 56, 2, 0, 0, 68, 8, 0,227, 64,255,255, 96, 56,
/* 0x0370 */ 8, 0,128,124, 32, 0,128, 78, 0, 0, 35, 44, 32, 0,130, 77, /* 0x0370 */ 32, 0,128, 78, 1, 0, 0, 56, 8, 0, 0, 72, 45, 0, 0, 56,
/* 0x0380 */ 0, 0, 36, 47, 0, 0, 67,233, 64, 32,170,127, 16, 0,158, 64, /* 0x0380 */ 8, 0, 0, 72, 85, 0, 0, 56, 8, 0, 0, 72, 3, 0, 0, 56,
/* 0x0390 */ 0, 0,131,248, 8, 0,163,248, 32, 0,128, 78, 1, 0,170, 43, /* 0x0390 */ 8, 0, 0, 72, 5, 0, 0, 56, 8, 0, 0, 72, 6, 0, 0, 56,
/* 0x03a0 */ 8, 0,158, 64,236,255,154, 64, 16, 0, 99, 56,216,255,255, 75, /* 0x03a0 */ 8, 0, 0, 72,125, 0, 0, 56, 8, 0, 0, 72, 91, 0, 0, 56,
/* 0x03b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,233, /* 0x03b0 */ 180,255,255, 75, 8, 0,128,124, 32, 0,128, 78, 0, 0, 35, 44,
/* 0x03c0 */ 8, 0, 3,233, 1, 0,229, 56, 0, 0, 32, 57,166, 3,233,124, /* 0x03c0 */ 32, 0,130, 77, 0, 0, 36, 47, 0, 0, 67,233, 64, 32,170,127,
/* 0x03d0 */ 64, 40,170,127, 28, 0,252, 64,166, 2, 8,124,127, 0, 96, 56, /* 0x03d0 */ 16, 0,158, 64, 0, 0,131,248, 8, 0,163,248, 32, 0,128, 78,
/* 0x03e0 */ 16, 0, 1,248,145,255, 33,248, 73,255,255, 75, 0, 0, 0, 96, /* 0x03e0 */ 1, 0,170, 43, 8, 0,158, 64,236,255,154, 64, 16, 0, 99, 56,
/* 0x03f0 */ 20, 0, 64, 66,174, 72, 72,125,174, 73, 68,125, 1, 0, 41, 57, /* 0x03f0 */ 216,255,255, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0400 */ 240,255,255, 75, 8, 0, 67,233, 20, 74, 74,125, 8, 0, 67,249, /* 0x0400 */ 0, 0, 67,233, 8, 0, 3,233, 1, 0,229, 56, 0, 0, 32, 57,
/* 0x0410 */ 0, 0, 67,233, 80, 80, 41,125, 0, 0, 35,249, 32, 0,128, 78, /* 0x0410 */ 166, 3,233,124, 64, 40,170,127, 28, 0,252, 64,166, 2, 8,124,
/* 0x0420 */ 0, 0, 0, 0, 0, 0, 0, 1,128, 0, 0, 0, 38, 0,128,125, /* 0x0420 */ 127, 0, 96, 56, 16, 0, 1,248,145,255, 33,248, 73,255,255, 75,
/* 0x0430 */ 166, 2, 8,124, 8, 0,129,145,249, 6, 0, 72, 81,255, 33,248, /* 0x0430 */ 0, 0, 0, 96, 20, 0, 64, 66,174, 72, 72,125,174, 73, 68,125,
/* 0x0440 */ 120, 27,126,124,120, 35,159,124,120, 43,189,124,120, 51,220,124, /* 0x0440 */ 1, 0, 41, 57,240,255,255, 75, 8, 0, 67,233, 20, 74, 74,125,
/* 0x0450 */ 0, 0, 38, 46, 0, 0, 63,233, 0, 0,169, 47, 84, 1,158, 65, /* 0x0450 */ 8, 0, 67,249, 0, 0, 67,233, 80, 80, 41,125, 0, 0, 35,249,
/* 0x0460 */ 120,243,195,127,112, 0,129, 56, 12, 0,160, 56, 81,255,255, 75, /* 0x0460 */ 32, 0,128, 78, 0, 0, 0, 0, 0, 0, 0, 1,128, 0, 0, 0,
/* 0x0470 */ 112, 0, 65,129,116, 0, 33,129, 0, 0,170, 47, 32, 0,158, 64, /* 0x0470 */ 38, 0,128,125,166, 2, 8,124, 8, 0,129,145,249, 6, 0, 72,
/* 0x0480 */ 88, 33, 37,109, 85, 80,133, 47, 28, 0,158, 64, 0, 0, 62,233, /* 0x0480 */ 81,255, 33,248,120, 27,126,124,120, 35,159,124,120, 43,189,124,
/* 0x0490 */ 0, 0,169, 47, 28, 1,254, 65, 12, 0, 0, 72, 33, 0, 41,121, /* 0x0490 */ 120, 51,220,124, 0, 0, 38, 46, 0, 0, 63,233, 0, 0,169, 47,
/* 0x04a0 */ 16, 0,226, 64,127, 0, 96, 56,137,254,255, 75, 0, 0, 0, 96, /* 0x04a0 */ 84, 1,158, 65,120,243,195,127,112, 0,129, 56, 12, 0,160, 56,
/* 0x04b0 */ 64, 80, 9,127,240,255,217, 65, 0, 0, 31,233, 64, 64,170,127, /* 0x04b0 */ 81,255,255, 75,112, 0, 65,129,116, 0, 33,129, 0, 0,170, 47,
/* 0x04c0 */ 228,255,221, 65, 8, 0,191,232,184, 0,152, 64,120, 75, 36,125, /* 0x04c0 */ 32, 0,158, 64, 88, 33, 37,109, 85, 80,133, 47, 28, 0,158, 64,
/* 0x04d0 */ 0, 0, 61,233, 8, 0,126,232,128, 0,193, 56,128, 0, 65,249, /* 0x04d0 */ 0, 0, 62,233, 0, 0,169, 47, 28, 1,254, 65, 12, 0, 0, 72,
/* 0x04e0 */ 40, 0, 65,248,120, 0,225,136, 16, 0,125,233,166, 3, 41,125, /* 0x04e0 */ 33, 0, 41,121, 16, 0,226, 64,127, 0, 96, 56,137,254,255, 75,
/* 0x04f0 */ 8, 0, 93,232, 33, 4,128, 78, 40, 0, 65,232, 0, 0,163, 47, /* 0x04f0 */ 0, 0, 0, 96, 64, 80, 9,127,240,255,217, 65, 0, 0, 31,233,
/* 0x0500 */ 164,255,222, 64,128, 0,129,232,112, 0, 33,129, 64, 72,164,127, /* 0x0500 */ 64, 64,170,127,228,255,221, 65, 8, 0,191,232,184, 0,152, 64,
/* 0x0510 */ 148,255,222, 64,121, 0,193,136, 0, 0,166, 47, 68, 0,158, 65, /* 0x0510 */ 120, 75, 36,125, 0, 0, 61,233, 8, 0,126,232,128, 0,193, 56,
/* 0x0520 */ 64, 0,146, 65, 0, 2,164, 43, 16, 0,157, 65, 0, 0, 63,233, /* 0x0520 */ 128, 0, 65,249, 40, 0, 65,248,120, 0,225,136, 16, 0,125,233,
/* 0x0530 */ 0, 32,169,127, 44, 0,158, 64, 8, 0,127,232,122, 0,161,136, /* 0x0530 */ 166, 3, 41,125, 8, 0, 93,232, 33, 4,128, 78, 40, 0, 65,232,
/* 0x0540 */ 32, 0,132,120, 40, 0, 65,248, 0, 0, 60,233, 16, 0,124,233, /* 0x0540 */ 0, 0,163, 47,164,255,222, 64,128, 0,129,232,112, 0, 33,129,
/* 0x0550 */ 166, 3, 41,125, 8, 0, 92,232, 33, 4,128, 78, 40, 0, 65,232, /* 0x0550 */ 64, 72,164,127,148,255,222, 64,121, 0,193,136, 0, 0,166, 47,
/* 0x0560 */ 116, 0, 1,129, 8, 0, 94,233, 0, 0, 62,233, 20, 66, 74,125, /* 0x0560 */ 68, 0,158, 65, 64, 0,146, 65, 0, 2,164, 43, 16, 0,157, 65,
/* 0x0570 */ 80, 72, 40,125, 8, 0, 94,249, 0, 0, 62,249, 20, 0, 0, 72, /* 0x0570 */ 0, 0, 63,233, 0, 32,169,127, 44, 0,158, 64, 8, 0,127,232,
/* 0x0580 */ 120, 43,164,124,120,243,195,127,120, 75, 37,125, 49,254,255, 75, /* 0x0580 */ 122, 0,161,136, 32, 0,132,120, 40, 0, 65,248, 0, 0, 60,233,
/* 0x0590 */ 112, 0, 1,129, 8, 0, 95,233, 0, 0, 63,233, 20, 66, 74,125, /* 0x0590 */ 16, 0,124,233,166, 3, 41,125, 8, 0, 92,232, 33, 4,128, 78,
/* 0x05a0 */ 80, 72, 40,125, 8, 0, 95,249, 0, 0, 63,249,168,254,255, 75, /* 0x05a0 */ 40, 0, 65,232,116, 0, 1,129, 8, 0, 94,233, 0, 0, 62,233,
/* 0x05b0 */ 176, 0, 33, 56, 8, 0,129,129, 32,129,144,125,196, 5, 0, 72, /* 0x05b0 */ 20, 66, 74,125, 80, 72, 40,125, 8, 0, 94,249, 0, 0, 62,249,
/* 0x05c0 */ 0, 0, 0, 0, 0, 0, 0, 3,128, 4, 0, 0, 38, 0,128,125, /* 0x05c0 */ 20, 0, 0, 72,120, 43,164,124,120,243,195,127,120, 75, 37,125,
/* 0x05d0 */ 166, 2, 8,124, 8, 0,129,145, 33, 5, 0, 72,225,254, 33,248, /* 0x05d0 */ 49,254,255, 75,112, 0, 1,129, 8, 0, 95,233, 0, 0, 63,233,
/* 0x05e0 */ 120, 67, 15,125, 16, 0, 3,161,120, 75, 50,125, 32, 0, 35,233, /* 0x05e0 */ 20, 66, 74,125, 80, 72, 40,125, 8, 0, 95,249, 0, 0, 63,249,
/* 0x05f0 */ 120, 83, 90,125,120, 27,125,124,120, 35,147,124, 3, 0,136, 47, /* 0x05f0 */ 168,254,255, 75,176, 0, 33, 56, 8, 0,129,129, 32,129,144,125,
/* 0x0600 */ 96, 1,161,248,120, 51,216,124,120, 59,240,124, 20, 74, 35,126, /* 0x0600 */ 196, 5, 0, 72, 0, 0, 0, 0, 0, 0, 0, 3,128, 4, 0, 0,
/* 0x0610 */ 16, 0, 64, 57, 8, 0,158, 64, 0, 0, 64, 57, 56, 0, 29,161, /* 0x0610 */ 38, 0,128,125,166, 2, 8,124, 8, 0,129,145, 33, 5, 0, 72,
/* 0x0620 */ 0, 0,114,232, 34, 0, 74, 57,120,139, 39,126, 32, 0, 70,121, /* 0x0620 */ 225,254, 33,248,120, 67, 15,125, 16, 0, 3,161,120, 75, 50,125,
/* 0x0630 */ 0, 0,128, 56, 1, 0, 8, 57,255,255,224, 59,166, 3, 9,125, /* 0x0630 */ 32, 0, 35,233,120, 83, 90,125,120, 27,125,124,120, 35,147,124,
/* 0x0640 */ 60, 0, 64, 66, 0, 0, 7,129, 1, 0,136, 47, 40, 0,158, 64, /* 0x0640 */ 3, 0,136, 47, 96, 1,161,248,120, 51,216,124,120, 59,240,124,
/* 0x0650 */ 16, 0,167,232, 64, 40,191,127, 8, 0,157, 64,120, 43,191,124, /* 0x0650 */ 20, 74, 35,126, 16, 0, 64, 57, 8, 0,158, 64, 0, 0, 64, 57,
/* 0x0660 */ 40, 0, 7,233, 20, 66, 5,125, 64, 64,164,127, 8, 0,156, 64, /* 0x0660 */ 56, 0, 29,161, 0, 0,114,232, 34, 0, 74, 57,120,139, 39,126,
/* 0x0670 */ 120, 67, 4,125, 56, 0,231, 56,200,255,255, 75,248,208, 85,127, /* 0x0670 */ 32, 0, 70,121, 0, 0,128, 56, 1, 0, 8, 57,255,255,224, 59,
/* 0x0680 */ 56,208,255,127, 20, 34,149,124,227,231, 73,121, 80, 32,159,124, /* 0x0680 */ 166, 3, 9,125, 60, 0, 64, 66, 0, 0, 7,129, 1, 0,136, 47,
/* 0x0690 */ 56,208,132,124, 28, 0,130, 64, 0, 0,191, 47, 28, 0,158, 64, /* 0x0690 */ 40, 0,158, 64, 16, 0,167,232, 64, 40,191,127, 8, 0,157, 64,
/* 0x06a0 */ 0, 0,163, 47, 24, 0,158, 65, 50, 0,192, 56, 16, 0, 0, 72, /* 0x06a0 */ 120, 43,191,124, 40, 0, 7,233, 20, 66, 5,125, 64, 64,164,127,
/* 0x06b0 */ 120,251,227,127, 8, 0, 0, 72, 0, 0, 96, 56, 0, 0,160, 56, /* 0x06b0 */ 8, 0,156, 64,120, 67, 4,125, 56, 0,231, 56,200,255,255, 75,
/* 0x06c0 */ 180, 7,198,124,255,255,224, 56, 0, 0, 0, 57, 77,252,255, 75, /* 0x06c0 */ 248,208, 85,127, 56,208,255,127, 20, 34,149,124,227,231, 73,121,
/* 0x06d0 */ 0, 0, 0, 96,248,208, 90,127, 1, 0,224, 62,136, 0, 65,147, /* 0x06d0 */ 80, 32,159,124, 56,208,132,124, 28, 0,130, 64, 0, 0,191, 47,
/* 0x06e0 */ 228,131,247,122, 80, 24,255,127,128, 78,192, 61,100, 54,233,123, /* 0x06e0 */ 28, 0,158, 64, 0, 0,163, 47, 24, 0,158, 65, 50, 0,192, 56,
/* 0x06f0 */ 128, 0, 33,249, 0, 0, 32, 59, 0, 0, 51, 46, 1, 0,247, 98, /* 0x06f0 */ 16, 0, 0, 72,120,251,227,127, 8, 0, 0, 72, 0, 0, 96, 56,
/* 0x0700 */ 32, 0,206, 97, 56, 0, 93,161, 0,200,138,127, 52, 2,157, 64, /* 0x0700 */ 0, 0,160, 56,180, 7,198,124,255,255,224, 56, 0, 0, 0, 57,
/* 0x0710 */ 0, 0, 81,129, 36, 0,146, 65, 6, 0,138, 47, 28, 0,158, 64, /* 0x0710 */ 77,252,255, 75, 0, 0, 0, 96,248,208, 90,127, 1, 0,224, 62,
/* 0x0720 */ 16, 0,177,232,120,195, 3,127, 3, 0,128, 56, 20, 42,191,124, /* 0x0720 */ 136, 0, 65,147,228,131,247,122, 80, 24,255,127,128, 78,192, 61,
/* 0x0730 */ 73,252,255, 75,252, 1, 0, 72, 1, 0,138, 47,244, 1,158, 64, /* 0x0730 */ 100, 54,233,123,128, 0, 33,249, 0, 0, 32, 59, 0, 0, 51, 46,
/* 0x0740 */ 76, 0,146, 65, 8, 0, 81,233, 0, 0,170, 47, 64, 0,158, 64, /* 0x0740 */ 1, 0,247, 98, 32, 0,206, 97, 56, 0, 93,161, 0,200,138,127,
/* 0x0750 */ 32, 0, 93,233, 16, 0,177,232,120,195, 3,127, 3, 0,128, 56, /* 0x0750 */ 52, 2,157, 64, 0, 0, 81,129, 36, 0,146, 65, 6, 0,138, 47,
/* 0x0760 */ 20, 82, 95,125, 20, 42,170,124, 17,252,255, 75, 56, 0,189,160, /* 0x0760 */ 28, 0,158, 64, 16, 0,177,232,120,195, 3,127, 3, 0,128, 56,
/* 0x0770 */ 120,195, 3,127, 5, 0,128, 56, 1,252,255, 75, 54, 0,189,160, /* 0x0770 */ 20, 42,191,124, 73,252,255, 75,252, 1, 0, 72, 1, 0,138, 47,
/* 0x0780 */ 120,195, 3,127, 4, 0,128, 56,241,251,255, 75, 4, 0,113,131, /* 0x0780 */ 244, 1,158, 64, 76, 0,146, 65, 8, 0, 81,233, 0, 0,170, 47,
/* 0x0790 */ 16, 0,209,235, 81,115, 32, 61, 64, 98, 41, 97, 32, 0,145,235, /* 0x0790 */ 64, 0,158, 64, 32, 0, 93,233, 16, 0,177,232,120,195, 3,127,
/* 0x07a0 */ 40, 0,209,234,250, 22,123, 87, 20,242,223,127,112, 0,129,251, /* 0x07a0 */ 3, 0,128, 56, 20, 82, 95,125, 20, 42,170,124, 17,252,255, 75,
/* 0x07b0 */ 48,220, 59,125, 56,168,202,127,120, 0,193,251, 20,178,222,126, /* 0x07b0 */ 56, 0,189,160,120,195, 3,127, 5, 0,128, 56, 1,252,255, 75,
/* 0x07c0 */ 20,226,138,127, 80,240,202,127,126, 7,116, 87, 12, 0,146, 64, /* 0x07c0 */ 54, 0,189,160,120,195, 3,127, 4, 0,128, 56,241,251,255, 75,
/* 0x07d0 */ 0, 0,160, 56, 8, 0, 0, 72, 2, 0,160, 56,120,163,165,124, /* 0x07d0 */ 4, 0,113,131, 16, 0,209,235, 81,115, 32, 61, 64, 98, 41, 97,
/* 0x07e0 */ 180, 7,165,124, 16, 0,146, 64, 96, 1,225,232, 18, 0,192, 56, /* 0x07e0 */ 32, 0,145,235, 40, 0,209,234,250, 22,123, 87, 20,242,223,127,
/* 0x07f0 */ 12, 0, 0, 72, 50, 0,192, 56,255,255,224, 56, 8, 0, 17,233, /* 0x07f0 */ 112, 0,129,251, 48,220, 59,125, 56,168,202,127,120, 0,193,251,
/* 0x0800 */ 120,243,195,127,120,227,132,127, 80, 64, 10,125, 13,251,255, 75, /* 0x0800 */ 20,178,222,126, 20,226,138,127, 80,240,202,127,126, 7,116, 87,
/* 0x0810 */ 0, 0, 0, 96, 0, 24,190,127, 16, 0,254, 65,127, 0, 96, 56, /* 0x0810 */ 12, 0,146, 64, 0, 0,160, 56, 8, 0, 0, 72, 2, 0,160, 56,
/* 0x0820 */ 17,251,255, 75, 0, 0, 0, 96, 24, 0,146, 65,120,155, 99,126, /* 0x0820 */ 120,163,165,124,180, 7,165,124, 16, 0,146, 64, 96, 1,225,232,
/* 0x0830 */ 112, 0,129, 56,120,131, 5,126,120,123,230,125,241,251,255, 75, /* 0x0830 */ 18, 0,192, 56, 12, 0, 0, 72, 50, 0,192, 56,255,255,224, 56,
/* 0x0840 */ 208, 0, 92,125,227,255,105,123, 56,168, 90,125, 12, 0,130, 64, /* 0x0840 */ 8, 0, 17,233,120,243,195,127,120,227,132,127, 80, 64, 10,125,
/* 0x0850 */ 48, 0,146, 64,164, 0, 0, 72, 0, 0,186, 47,244,255,158, 65, /* 0x0850 */ 13,251,255, 75, 0, 0, 0, 96, 0, 24,190,127, 16, 0,254, 65,
/* 0x0860 */ 166, 3, 73,127, 20,226,254,124, 0, 0, 0, 57, 0, 0, 32, 57, /* 0x0860 */ 127, 0, 96, 56, 17,251,255, 75, 0, 0, 0, 96, 24, 0,146, 65,
/* 0x0870 */ 174, 65, 39,125, 1, 0, 8, 57,244,255, 0, 66,212,255,255, 75, /* 0x0870 */ 120,155, 99,126,112, 0,129, 56,120,131, 5,126,120,123,230,125,
/* 0x0880 */ 0, 0, 17,233,192, 7, 8,121, 0,184,168,127, 80, 0,158, 64, /* 0x0880 */ 241,251,255, 75,208, 0, 92,125,227,255,105,123, 56,168, 90,125,
/* 0x0890 */ 40, 0,177,232, 32, 0, 17,233, 16, 0,241,232, 0, 64,165,127, /* 0x0890 */ 12, 0,130, 64, 48, 0,146, 64,164, 0, 0, 72, 0, 0,186, 47,
/* 0x08a0 */ 188, 0,158, 64, 20, 58,165,124,136, 0, 33,129, 20,250,165,124, /* 0x08a0 */ 244,255,158, 65,166, 3, 73,127, 20,226,254,124, 0, 0, 0, 57,
/* 0x08b0 */ 208, 0, 5,125, 56, 72, 8,125, 7, 0,136, 43,160, 0,157, 64, /* 0x08b0 */ 0, 0, 32, 57,174, 65, 39,125, 1, 0, 8, 57,244,255, 0, 66,
/* 0x08c0 */ 0, 68, 32, 61, 4, 0,197,145,120,195, 3,127, 2, 0, 41, 97, /* 0x08c0 */ 212,255,255, 75, 0, 0, 17,233,192, 7, 8,121, 0,184,168,127,
/* 0x08d0 */ 0, 0,128, 56, 0, 0, 37,145,161,250,255, 75,120,243,195,127, /* 0x08d0 */ 80, 0,158, 64, 40, 0,177,232, 32, 0, 17,233, 16, 0,241,232,
/* 0x08e0 */ 120,227,132,127,180, 7,133,126,121,250,255, 75, 0, 0, 0, 96, /* 0x08e0 */ 0, 64,165,127,188, 0,158, 64, 20, 58,165,124,136, 0, 33,129,
/* 0x08f0 */ 0, 0,163, 47, 40,255,222, 64, 20,226,154,127, 20,226,222,127, /* 0x08f0 */ 20,250,165,124,208, 0, 5,125, 56, 72, 8,125, 7, 0,136, 43,
/* 0x0900 */ 64,176,190,127, 44, 0,156, 64,120,243,195,127, 80,176,158,124, /* 0x0900 */ 160, 0,157, 64, 0, 68, 32, 61, 4, 0,197,145,120,195, 3,127,
/* 0x0910 */ 180, 7,133,126, 50, 0,192, 56,255,255,224, 56, 0, 0, 0, 57, /* 0x0910 */ 2, 0, 41, 97, 0, 0,128, 56, 0, 0, 37,145,161,250,255, 75,
/* 0x0920 */ 249,249,255, 75, 0, 0, 0, 96, 0, 24,190,127,240,254,222, 64, /* 0x0920 */ 120,243,195,127,120,227,132,127,180, 7,133,126,121,250,255, 75,
/* 0x0930 */ 1, 0, 57, 59, 56, 0, 49, 58,180, 7, 57,127,200,253,255, 75, /* 0x0930 */ 0, 0, 0, 96, 0, 0,163, 47, 40,255,222, 64, 20,226,154,127,
/* 0x0940 */ 0, 0,242,251, 32, 1, 33, 56, 8, 0,129,129, 32,129,144,125, /* 0x0940 */ 20,226,222,127, 64,176,190,127, 44, 0,156, 64,120,243,195,127,
/* 0x0950 */ 24, 0,125,232, 20, 26,127,124,240, 1, 0, 72,128, 0, 33,233, /* 0x0950 */ 80,176,158,124,180, 7,133,126, 50, 0,192, 56,255,255,224, 56,
/* 0x0960 */ 8, 0, 17,233, 20, 74,167,124, 0, 0,168, 47, 8, 0,165, 56, /* 0x0960 */ 0, 0, 0, 57,249,249,255, 75, 0, 0, 0, 96, 0, 24,190,127,
/* 0x0970 */ 80,255,158, 65,104,255,255, 75, 0, 0, 0, 0, 0, 0, 0, 3, /* 0x0970 */ 240,254,222, 64, 1, 0, 57, 59, 56, 0, 49, 58,180, 7, 57,127,
/* 0x0980 */ 128, 18, 0, 0,166, 2, 8,124,153, 1, 0, 72, 17,255, 33,248, /* 0x0980 */ 200,253,255, 75, 0, 0,242,251, 32, 1, 33, 56, 8, 0,129,129,
/* 0x0990 */ 120, 75, 61,125, 0, 0, 35,129,120, 43,191,124,120, 51,218,124, /* 0x0990 */ 32,129,144,125, 24, 0,125,232, 20, 26,127,124,240, 1, 0, 72,
/* 0x09a0 */ 0, 0,192, 56,120, 83, 88,125,144, 0, 33,249,152, 0,161,248, /* 0x09a0 */ 128, 0, 33,233, 8, 0, 17,233, 20, 74,167,124, 0, 0,168, 47,
/* 0x09b0 */ 120, 59,229,124, 64, 0,159, 59, 4, 0, 35,129,120, 0, 97,248, /* 0x09b0 */ 8, 0,165, 56, 80,255,158, 65,104,255,255, 75, 0, 0, 0, 0,
/* 0x09c0 */ 0, 0,192, 59,136, 0, 97,248,128, 0,129,248, 12, 0, 41, 57, /* 0x09c0 */ 0, 0, 0, 3,128, 18, 0, 0,166, 2, 8,124,153, 1, 0, 72,
/* 0x09d0 */ 160, 0,225,248,168, 0, 1,249,112, 0, 33,249,112, 0, 97, 56, /* 0x09d0 */ 17,255, 33,248,120, 75, 61,125, 0, 0, 35,129,120, 43,191,124,
/* 0x09e0 */ 144, 0,129, 56, 73,250,255, 75,160, 0,225,232,168, 0, 1,233, /* 0x09e0 */ 120, 51,218,124, 0, 0,192, 56,120, 83, 88,125,144, 0, 33,249,
/* 0x09f0 */ 128, 0,129, 56, 0, 0,160, 56,120,211, 70,127,120,235,169,127, /* 0x09f0 */ 152, 0,161,248,120, 59,229,124, 64, 0,159, 59, 4, 0, 35,129,
/* 0x0a00 */ 120,195, 10,127,120,251,227,127,197,251,255, 75, 9, 0,128, 56, /* 0x0a00 */ 120, 0, 97,248, 0, 0,192, 59,136, 0, 97,248,128, 0,129,248,
/* 0x0a10 */ 120, 27,123,124,120,211, 67,127,120,219,101,127, 93,249,255, 75, /* 0x0a10 */ 12, 0, 41, 57,160, 0,225,248,168, 0, 1,249,112, 0, 33,249,
/* 0x0a20 */ 56, 0, 63,161, 64,240,137,127,184, 0,157, 64, 0, 0, 60,129, /* 0x0a20 */ 112, 0, 97, 56,144, 0,129, 56, 73,250,255, 75,160, 0,225,232,
/* 0x0a30 */ 3, 0,137, 47,156, 0,158, 64, 16, 0,124,232, 0, 0, 61,233, /* 0x0a30 */ 168, 0, 1,233,128, 0,129, 56, 0, 0,160, 56,120,211, 70,127,
/* 0x0a40 */ 0, 0,128, 56, 0, 0,160, 56, 20, 74, 99,124, 5,249,255, 75, /* 0x0a40 */ 120,235,169,127,120,195, 10,127,120,251,227,127,197,251,255, 75,
/* 0x0a50 */ 0, 0, 0, 96, 0, 0,131, 47,120, 27,121,124, 16, 0,252, 64, /* 0x0a50 */ 9, 0,128, 56,120, 27,123,124,120,211, 67,127,120,219,101,127,
/* 0x0a60 */ 127, 0, 96, 56,205,248,255, 75, 0, 0, 0, 96,120,251,228,127, /* 0x0a60 */ 93,249,255, 75, 56, 0, 63,161, 64,240,137,127,184, 0,157, 64,
/* 0x0a70 */ 0, 4,160, 56,213,248,255, 75, 0, 0, 0, 96, 0, 4,163, 47, /* 0x0a70 */ 0, 0, 60,129, 3, 0,137, 47,156, 0,158, 64, 16, 0,124,232,
/* 0x0a80 */ 224,255,222, 64, 0, 0, 32, 57, 0, 0,128, 56, 0, 0, 61,249, /* 0x0a80 */ 0, 0, 61,233, 0, 0,128, 56, 0, 0,160, 56, 20, 74, 99,124,
/* 0x0a90 */ 120,203, 37,127, 0, 0,192, 56, 0, 0,224, 56, 0, 0, 0, 57, /* 0x0a90 */ 5,249,255, 75, 0, 0, 0, 96, 0, 0,131, 47,120, 27,121,124,
/* 0x0aa0 */ 120,235,169,127,120,195, 10,127,120,251,227,127, 33,251,255, 75, /* 0x0aa0 */ 16, 0,252, 64,127, 0, 96, 56,205,248,255, 75, 0, 0, 0, 96,
/* 0x0ab0 */ 0, 0,189,232, 7, 0,128, 56,120, 27,123,124,120,211, 67,127, /* 0x0ab0 */ 120,251,228,127, 0, 4,160, 56,213,248,255, 75, 0, 0, 0, 96,
/* 0x0ac0 */ 185,248,255, 75,120,203, 35,127,145,248,255, 75, 0, 0, 0, 96, /* 0x0ac0 */ 0, 4,163, 47,224,255,222, 64, 0, 0, 32, 57, 0, 0,128, 56,
/* 0x0ad0 */ 1, 0,222, 59, 56, 0,156, 59, 32, 0,222,123, 68,255,255, 75, /* 0x0ad0 */ 0, 0, 61,249,120,203, 37,127, 0, 0,192, 56, 0, 0,224, 56,
/* 0x0ae0 */ 240, 0, 33, 56,120,219, 99,127,136, 0, 0, 72, 0, 0, 0, 0, /* 0x0ae0 */ 0, 0, 0, 57,120,235,169,127,120,195, 10,127,120,251,227,127,
/* 0x0af0 */ 0, 0, 0, 1,128, 8, 0, 0,112,255,193,249,120,255,225,249, /* 0x0af0 */ 33,251,255, 75, 0, 0,189,232, 7, 0,128, 56,120, 27,123,124,
/* 0x0b00 */ 128,255, 1,250,136,255, 33,250,144,255, 65,250,152,255, 97,250, /* 0x0b00 */ 120,211, 67,127,185,248,255, 75,120,203, 35,127,145,248,255, 75,
/* 0x0b10 */ 160,255,129,250,168,255,161,250,176,255,193,250,184,255,225,250, /* 0x0b10 */ 0, 0, 0, 96, 1, 0,222, 59, 56, 0,156, 59, 32, 0,222,123,
/* 0x0b20 */ 192,255, 1,251,200,255, 33,251,208,255, 65,251,216,255, 97,251, /* 0x0b20 */ 68,255,255, 75,240, 0, 33, 56,120,219, 99,127,136, 0, 0, 72,
/* 0x0b30 */ 224,255,129,251,232,255,161,251,240,255,193,251,248,255,225,251, /* 0x0b30 */ 0, 0, 0, 0, 0, 0, 0, 1,128, 8, 0, 0,112,255,193,249,
/* 0x0b40 */ 16, 0, 1,248, 32, 0,128, 78,112,255,193,233,120,255,225,233, /* 0x0b40 */ 120,255,225,249,128,255, 1,250,136,255, 33,250,144,255, 65,250,
/* 0x0b50 */ 128,255, 1,234,136,255, 33,234,144,255, 65,234,152,255, 97,234, /* 0x0b50 */ 152,255, 97,250,160,255,129,250,168,255,161,250,176,255,193,250,
/* 0x0b60 */ 160,255,129,234,168,255,161,234,176,255,193,234,184,255,225,234, /* 0x0b60 */ 184,255,225,250,192,255, 1,251,200,255, 33,251,208,255, 65,251,
/* 0x0b70 */ 192,255, 1,235,200,255, 33,235,208,255, 65,235,216,255, 97,235, /* 0x0b70 */ 216,255, 97,251,224,255,129,251,232,255,161,251,240,255,193,251,
/* 0x0b80 */ 224,255,129,235, 16, 0, 1,232,232,255,161,235,166, 3, 8,124, /* 0x0b80 */ 248,255,225,251, 16, 0, 1,248, 32, 0,128, 78,112,255,193,233,
/* 0x0b90 */ 240,255,193,235,248,255,225,235, 32, 0,128, 78, 0, 0, 0, 0, /* 0x0b90 */ 120,255,225,233,128,255, 1,234,136,255, 33,234,144,255, 65,234,
/* 0x0ba0 */ 120, 3, 16, 0, 0, 0, 0, 0,160,139, 16, 0, 0, 0, 0, 0, /* 0x0ba0 */ 152,255, 97,234,160,255,129,234,168,255,161,234,176,255,193,234,
/* 0x0bb0 */ 188, 3, 16, 0, 0, 0, 0, 0,160,139, 16, 0, 0, 0, 0, 0, /* 0x0bb0 */ 184,255,225,234,192,255, 1,235,200,255, 33,235,208,255, 65,235,
/* 0x0bc0 */ 44, 4, 16, 0, 0, 0, 0, 0,160,139, 16, 0, 0, 0, 0, 0, /* 0x0bc0 */ 216,255, 97,235,224,255,129,235, 16, 0, 1,232,232,255,161,235,
/* 0x0bd0 */ 204, 5, 16, 0, 0, 0, 0, 0,160,139, 16, 0, 0, 0, 0, 0, /* 0x0bd0 */ 166, 3, 8,124,240,255,193,235,248,255,225,235, 32, 0,128, 78,
/* 0x0be0 */ 132, 9, 16, 0, 0, 0, 0, 0,160,139, 16 /* 0x0be0 */ 188, 3, 16, 0, 0, 0, 0, 0,224,139, 16, 0, 0, 0, 0, 0,
/* 0x0bf0 */ 0, 4, 16, 0, 0, 0, 0, 0,224,139, 16, 0, 0, 0, 0, 0,
/* 0x0c00 */ 112, 4, 16, 0, 0, 0, 0, 0,224,139, 16, 0, 0, 0, 0, 0,
/* 0x0c10 */ 16, 6, 16, 0, 0, 0, 0, 0,224,139, 16, 0, 0, 0, 0, 0,
/* 0x0c20 */ 200, 9, 16, 0, 0, 0, 0, 0,224,139, 16
}; };

View File

@ -36,11 +36,9 @@
/* Stack pointer */ /* Stack pointer */
#define sp 1 #define sp 1
SZ_FRAME= 6*8 + 8*8 // (sp,cr,lr, xx,yy,zz) + spill area for a0-a7 SZ_FRAME= 6*8 + 8*8 // (sp,cr,lr, tmp.xlc,tmp.ld,save.toc) + spill area for a0-a7
#if BIG_ENDIAN && (8 == 8) //{ F_TOC= SZ_FRAME // where is the fake TOC
F_TOC= SZ_FRAME // where is the fake TOC
SZ_FRAME= SZ_FRAME + 2*2*8 // space for 2 [short] TOC entries SZ_FRAME= SZ_FRAME + 2*2*8 // space for 2 [short] TOC entries
#endif //}
// http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#REG // http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#REG
// r0 Volatile register used in function prologs // r0 Volatile register used in function prologs

View File

@ -34,6 +34,7 @@
#endif #endif
NBPW= 8 //Number of Bytes Per Word NBPW= 8 //Number of Bytes Per Word
#define USE_TOC 1
#include "arch/powerpc/64le/macros.S" #include "arch/powerpc/64le/macros.S"
#include "arch/powerpc/64le/ppc_regs.h" #include "arch/powerpc/64le/ppc_regs.h"
@ -81,7 +82,6 @@ OVERHEAD= 2048
//SZ_PSAV= 8*8 // for arg9, arg10, ...; and for spilling a0-a7 if necessary //SZ_PSAV= 8*8 // for arg9, arg10, ...; and for spilling a0-a7 if necessary
// The parameter save area shall be allocated by the caller. // The parameter save area shall be allocated by the caller.
// It shall be doubleword aligned, and shall be at least 8 doublewords in length. // It shall be doubleword aligned, and shall be at least 8 doublewords in length.
//SZ_FRAME= SZ_LINK + SZ_PSAV // in ppc_regs.h
// In: // In:
r_exp= 31 // f_exp == &decompress r_exp= 31 // f_exp == &decompress
@ -184,7 +184,7 @@ r_reloc= 32 - 1 # used slot in register save area
mr a3,r_auxv // &Elf64_auxv_t mr a3,r_auxv // &Elf64_auxv_t
mr a4,r_exp // &decompress: f_expand mr a4,r_exp // &decompress: f_expand
mr a5,r_unf // &f_unf mr a5,r_unf // &f_unf
#if BIG_ENDIAN //{ annoying TOC #if USE_TOC //{
li r0,0 li r0,0
std a4,F_TOC + 0 + 0*2*NBPW(sp) std a4,F_TOC + 0 + 0*2*NBPW(sp)
@ -200,7 +200,7 @@ r_reloc= 32 - 1 # used slot in register save area
// entry= upx_main(b_info *a0, total_size a1, Elf64_Ehdr *a2, ELf32_auxv_t *a3, // entry= upx_main(b_info *a0, total_size a1, Elf64_Ehdr *a2, ELf32_auxv_t *a3,
// f_exp a4, f_unf a5, elfaddr &a6, page_mask a7) // f_exp a4, f_unf a5, elfaddr &a6, page_mask a7)
la sp,SZ_FRAME+OVERHEAD(sp) // FR_01 deallocate this frame la sp,SZ_FRAME+OVERHEAD(sp) // FR_01 deallocate this frame
#if BIG_ENDIAN //{ annoying TOC #if USE_TOC //{
// Sometimes the "entry TOC" is not a TOC, particularly with musl. // Sometimes the "entry TOC" is not a TOC, particularly with musl.
andi. r0,a0,7; bne cr0,noTOC // align(TOC) < 8; [heuristic] andi. r0,a0,7; bne cr0,noTOC // align(TOC) < 8; [heuristic]
lwz r0,0(a0); cmplwi r0,0; bne noTOC // 4GiB <= .func; an instruction? lwz r0,0(a0); cmplwi r0,0; bne noTOC // 4GiB <= .func; an instruction?

View File

@ -9,61 +9,61 @@ Linker script and memory map
TARGET(elf64-powerpcle) TARGET(elf64-powerpcle)
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc) 0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0xa3c .text 0x00000000001000bc 0xa80
*(.text) *(.text)
.text 0x00000000001000bc 0x2bc tmp/powerpc64le-linux.elf-fold.o .text 0x00000000001000bc 0x300 tmp/powerpc64le-linux.elf-fold.o
0x00000000001000bc get_page_mask 0x00000000001000bc get_page_mask
0x0000000000100318 mmap 0x000000000010035c mmap
0x0000000000100330 exit 0x0000000000100374 exit
0x0000000000100338 brk 0x000000000010037c brk
0x0000000000100340 readlink 0x0000000000100384 readlink
0x0000000000100348 read 0x000000000010038c read
0x0000000000100350 open 0x0000000000100394 open
0x0000000000100358 close 0x000000000010039c close
0x0000000000100360 mprotect 0x00000000001003a4 mprotect
0x0000000000100368 munmap 0x00000000001003ac munmap
0x0000000000100370 my_bkpt 0x00000000001003b4 my_bkpt
.text 0x0000000000100378 0x780 tmp/powerpc64le-linux.elf-main.o .text 0x00000000001003bc 0x780 tmp/powerpc64le-linux.elf-main.o
*(.data) *(.data)
.data 0x0000000000100af8 0x0 tmp/powerpc64le-linux.elf-fold.o .data 0x0000000000100b3c 0x0 tmp/powerpc64le-linux.elf-fold.o
.data 0x0000000000100af8 0x0 tmp/powerpc64le-linux.elf-main.o .data 0x0000000000100b3c 0x0 tmp/powerpc64le-linux.elf-main.o
.sfpr 0x0000000000100af8 0xa4 .sfpr 0x0000000000100b3c 0xa4
.sfpr 0x0000000000100af8 0xa4 linker stubs .sfpr 0x0000000000100b3c 0xa4 linker stubs
0x0000000000100af8 _savegpr0_14 0x0000000000100b3c _savegpr0_14
0x0000000000100b20 _savegpr0_24 0x0000000000100b64 _savegpr0_24
0x0000000000100b30 _savegpr0_28 0x0000000000100b74 _savegpr0_28
0x0000000000100b48 _restgpr0_14 0x0000000000100b8c _restgpr0_14
0x0000000000100b70 _restgpr0_24 0x0000000000100bb4 _restgpr0_24
0x0000000000100b80 _restgpr0_28 0x0000000000100bc4 _restgpr0_28
.glink 0x0000000000100ba0 0x0 .glink 0x0000000000100be0 0x0
.glink 0x0000000000100ba0 0x0 linker stubs .glink 0x0000000000100be0 0x0 linker stubs
.eh_frame 0x0000000000100b9c 0x0 .eh_frame 0x0000000000100be0 0x0
.eh_frame 0x0000000000100b9c 0x0 linker stubs .eh_frame 0x0000000000100be0 0x0 linker stubs
.rela.dyn 0x0000000000100ba0 0x0 .rela.dyn 0x0000000000100be0 0x0
.rela.iplt 0x0000000000100ba0 0x0 linker stubs .rela.iplt 0x0000000000100be0 0x0 linker stubs
.data .data
LOAD tmp/powerpc64le-linux.elf-fold.o LOAD tmp/powerpc64le-linux.elf-fold.o
LOAD tmp/powerpc64le-linux.elf-main.o LOAD tmp/powerpc64le-linux.elf-main.o
OUTPUT(tmp/powerpc64le-linux.elf-fold.bin elf64-powerpcle) OUTPUT(tmp/powerpc64le-linux.elf-fold.bin elf64-powerpcle)
.branch_lt 0x0000000000100ba0 0x0 .branch_lt 0x0000000000100be0 0x0
.branch_lt 0x0000000000100ba0 0x0 linker stubs .branch_lt 0x0000000000100be0 0x0 linker stubs
.toc 0x0000000000100ba0 0x0 .toc 0x0000000000100be0 0x0
.toc 0x0000000000100ba0 0x0 tmp/powerpc64le-linux.elf-main.o .toc 0x0000000000100be0 0x0 tmp/powerpc64le-linux.elf-main.o
.opd 0x0000000000100ba0 0x58 .opd 0x0000000000100be0 0x58
.opd 0x0000000000100ba0 0x58 tmp/powerpc64le-linux.elf-main.o .opd 0x0000000000100be0 0x58 tmp/powerpc64le-linux.elf-main.o
0x0000000000100be0 upx_main 0x0000000000100c20 upx_main
.iplt 0x0000000000100bf8 0x0 .iplt 0x0000000000100c38 0x0
.iplt 0x0000000000100bf8 0x0 linker stubs .iplt 0x0000000000100c38 0x0 linker stubs
.bss 0x0000000000100bf8 0x0 .bss 0x0000000000100c38 0x0
.bss 0x0000000000100bf8 0x0 tmp/powerpc64le-linux.elf-fold.o .bss 0x0000000000100c38 0x0 tmp/powerpc64le-linux.elf-fold.o
.bss 0x0000000000100bf8 0x0 tmp/powerpc64le-linux.elf-main.o .bss 0x0000000000100c38 0x0 tmp/powerpc64le-linux.elf-main.o