powerpc64le --nrv2d register conflict

modified:   stub/powerpc64-darwin.dylib-entry.h
	modified:   stub/powerpc64-darwin.macho-entry.h
	modified:   stub/powerpc64-linux.elf-entry.h
	modified:   stub/powerpc64le-linux.elf-entry.h
	modified:   stub/powerpc64le-linux.kernel.vmlinux.h
	modified:   stub/src/arch/powerpc/64le/nrv2d_d.S
	modified:   stub/src/arch/powerpc/64le/nrv2e_d.S

https://github.com/upx/upx/issues/806
This commit is contained in:
John Reiser 2024-04-06 13:35:55 -07:00
parent 97cf29ffbb
commit 93abe97ea5
7 changed files with 27 additions and 27 deletions

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_POWERPC64_DARWIN_DYLIB_ENTRY_SIZE 10225
#define STUB_POWERPC64_DARWIN_DYLIB_ENTRY_ADLER32 0xac2304d7
#define STUB_POWERPC64_DARWIN_DYLIB_ENTRY_CRC32 0x09bab5ff
#define STUB_POWERPC64_DARWIN_DYLIB_ENTRY_ADLER32 0xd6d90590
#define STUB_POWERPC64_DARWIN_DYLIB_ENTRY_CRC32 0x04524ed8
unsigned char stub_powerpc64_darwin_dylib_entry[10225] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -74,7 +74,7 @@ unsigned char stub_powerpc64_darwin_dylib_entry[10225] = {
/* 0x0220 */ 125, 41, 72, 21, 65,194,255,177,124,231, 57, 21,125, 41, 72, 21,
/* 0x0230 */ 65,194,255,165,124,231, 57, 21,124, 41, 0, 64,125, 41, 74, 20,
/* 0x0240 */ 65,194,255,149, 65,192,255,216, 57, 0, 0, 0, 52,231,255,253,
/* 0x0250 */ 84,231, 64, 46, 65,192, 0, 28,140, 3, 0, 1,124,234, 0,249,
/* 0x0250 */ 84,231, 64, 46, 65,192, 0, 28,141, 99, 0, 1,124,234, 88,249,
/* 0x0260 */ 125, 74, 14,112, 44, 42, 0, 0, 65,194, 0, 0, 72, 0, 0, 12,
/* 0x0270 */ 125, 41, 72, 21, 65,194,255, 97,125, 8, 65, 21,125, 41, 72, 21,
/* 0x0280 */ 65,194,255, 85,125, 8, 65, 21, 64,130, 0, 40, 57, 0, 0, 1,

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_POWERPC64_DARWIN_MACHO_ENTRY_SIZE 9564
#define STUB_POWERPC64_DARWIN_MACHO_ENTRY_ADLER32 0xe057f4cd
#define STUB_POWERPC64_DARWIN_MACHO_ENTRY_CRC32 0x985279e9
#define STUB_POWERPC64_DARWIN_MACHO_ENTRY_ADLER32 0x3035f586
#define STUB_POWERPC64_DARWIN_MACHO_ENTRY_CRC32 0x919cd81f
unsigned char stub_powerpc64_darwin_macho_entry[9564] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -74,7 +74,7 @@ unsigned char stub_powerpc64_darwin_macho_entry[9564] = {
/* 0x0220 */ 65,194,255,177,124,231, 57, 21,125, 41, 72, 21, 65,194,255,165,
/* 0x0230 */ 124,231, 57, 21,124, 41, 0, 64,125, 41, 74, 20, 65,194,255,149,
/* 0x0240 */ 65,192,255,216, 57, 0, 0, 0, 52,231,255,253, 84,231, 64, 46,
/* 0x0250 */ 65,192, 0, 28,140, 3, 0, 1,124,234, 0,249,125, 74, 14,112,
/* 0x0250 */ 65,192, 0, 28,141, 99, 0, 1,124,234, 88,249,125, 74, 14,112,
/* 0x0260 */ 44, 42, 0, 0, 65,194, 0, 0, 72, 0, 0, 12,125, 41, 72, 21,
/* 0x0270 */ 65,194,255, 97,125, 8, 65, 21,125, 41, 72, 21, 65,194,255, 85,
/* 0x0280 */ 125, 8, 65, 21, 64,130, 0, 40, 57, 0, 0, 1,125, 41, 72, 21,

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_POWERPC64_LINUX_ELF_ENTRY_SIZE 10480
#define STUB_POWERPC64_LINUX_ELF_ENTRY_ADLER32 0x17dce92d
#define STUB_POWERPC64_LINUX_ELF_ENTRY_CRC32 0x4d8ca754
#define STUB_POWERPC64_LINUX_ELF_ENTRY_ADLER32 0xfdbde9e6
#define STUB_POWERPC64_LINUX_ELF_ENTRY_CRC32 0x622e2628
unsigned char stub_powerpc64_linux_elf_entry[10480] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -74,7 +74,7 @@ unsigned char stub_powerpc64_linux_elf_entry[10480] = {
/* 0x0220 */ 65,194,255,177,124,231, 57, 21,125, 41, 72, 21, 65,194,255,165,
/* 0x0230 */ 124,231, 57, 21,124, 41, 0, 64,125, 41, 74, 20, 65,194,255,149,
/* 0x0240 */ 65,192,255,216, 57, 0, 0, 0, 52,231,255,253, 84,231, 64, 46,
/* 0x0250 */ 65,192, 0, 28,140, 3, 0, 1,124,234, 0,249,125, 74, 14,112,
/* 0x0250 */ 65,192, 0, 28,141, 99, 0, 1,124,234, 88,249,125, 74, 14,112,
/* 0x0260 */ 44, 42, 0, 0, 65,194, 0, 0, 72, 0, 0, 12,125, 41, 72, 21,
/* 0x0270 */ 65,194,255, 97,125, 8, 65, 21,125, 41, 72, 21, 65,194,255, 85,
/* 0x0280 */ 125, 8, 65, 21, 64,130, 0, 40, 57, 0, 0, 1,125, 41, 72, 21,

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_SIZE 10183
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_ADLER32 0x9a03ac5f
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_CRC32 0x0b4eb11a
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_ADLER32 0xa938ad18
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_CRC32 0x88b1165d
unsigned char stub_powerpc64le_linux_elf_entry[10183] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -74,7 +74,7 @@ unsigned char stub_powerpc64le_linux_elf_entry[10183] = {
/* 0x0220 */ 177,255,194, 65, 21, 57,231,124, 21, 72, 41,125,165,255,194, 65,
/* 0x0230 */ 21, 57,231,124, 64, 0, 41,124, 20, 74, 41,125,149,255,194, 65,
/* 0x0240 */ 216,255,192, 65, 0, 0, 0, 57,253,255,231, 52, 46, 64,231, 84,
/* 0x0250 */ 28, 0,192, 65, 1, 0, 3,140,249, 0,234,124,112, 14, 74,125,
/* 0x0250 */ 28, 0,192, 65, 1, 0, 99,141,249, 88,234,124,112, 14, 74,125,
/* 0x0260 */ 0, 0, 42, 44, 0, 0,194, 65, 12, 0, 0, 72, 21, 72, 41,125,
/* 0x0270 */ 97,255,194, 65, 21, 65, 8,125, 21, 72, 41,125, 85,255,194, 65,
/* 0x0280 */ 21, 65, 8,125, 40, 0,130, 64, 1, 0, 0, 57, 21, 72, 41,125,

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_POWERPC64LE_LINUX_KERNEL_VMLINUX_SIZE 10035
#define STUB_POWERPC64LE_LINUX_KERNEL_VMLINUX_ADLER32 0xd2824cf1
#define STUB_POWERPC64LE_LINUX_KERNEL_VMLINUX_CRC32 0x38edae70
#define STUB_POWERPC64LE_LINUX_KERNEL_VMLINUX_ADLER32 0x684f4daa
#define STUB_POWERPC64LE_LINUX_KERNEL_VMLINUX_CRC32 0xf64aa7ab
unsigned char stub_powerpc64le_linux_kernel_vmlinux[10035] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -75,7 +75,7 @@ unsigned char stub_powerpc64le_linux_kernel_vmlinux[10035] = {
/* 0x0230 */ 21, 72, 41,125,177,255,194, 65, 21, 57,231,124, 21, 72, 41,125,
/* 0x0240 */ 165,255,194, 65, 21, 57,231,124, 64, 0, 41,124, 20, 74, 41,125,
/* 0x0250 */ 149,255,194, 65,216,255,192, 65, 0, 0, 0, 57,253,255,231, 52,
/* 0x0260 */ 46, 64,231, 84, 28, 0,192, 65, 1, 0, 3,140,249, 0,234,124,
/* 0x0260 */ 46, 64,231, 84, 28, 0,192, 65, 1, 0, 99,141,249, 88,234,124,
/* 0x0270 */ 112, 14, 74,125, 0, 0, 42, 44, 0, 0,194, 65, 12, 0, 0, 72,
/* 0x0280 */ 21, 72, 41,125, 97,255,194, 65, 21, 65, 8,125, 21, 72, 41,125,
/* 0x0290 */ 85,255,194, 65, 21, 65, 8,125, 40, 0,130, 64, 1, 0, 0, 57,

View File

@ -40,9 +40,9 @@
add lsrc,lsrc,src // input eof
lis hibit,0x8000 // 0x80000000 for detecting next bit
rldicr hibit,hibit,32,31 // upper bits
sldi hibit,hibit,32 // upper bits
lis bits,0x8000 // prepare for first load
rldicr bits,bits,32,31 // upper bits
sldi bits,bits,32 // upper bits
addi src,src,-1 // prepare for 'lbzu'
addi dst,dst,-1 // prepare for 'stbu'
li disp,-1 // initial displacement
@ -73,9 +73,9 @@ get32d:
// fetch 4 bytes unaligned and LITTLE ENDIAN
#if 0 /*{ clean; but 4 instr larger, and 3 cycles longer */
lbz bits,1(src) // lo8
lbz r0,2(src); rlwimi bits,r0, 8,16,23
lbz r0,3(src); rlwimi bits,r0,16, 8,15
lbzu r0,4(src); rlwimi bits,r0,24, 0, 7
lbz t1,2(src); rlwimi bits,t1, 8,16,23
lbz t1,3(src); rlwimi bits,t1,16, 8,15
lbzu t1,4(src); rlwimi bits,t1,24, 0, 7
#else /*}{ pray for no unalignment trap or slowdown */
li bits,1 // compensate for 'lbzu'
#if BIG_ENDIAN //{
@ -86,11 +86,11 @@ get32d:
addi src,src,4
#endif /*}*/
rldicr bits,bits,32,31 // upper bits
sldi bits,bits,32 // upper bits
cmpld bits,hibit // cr0 for jnextb
addc bits,bits,bits // Carry for getnextb
li t2,1 // flag bit on upper bit pos
rldicr t2,t2,32,31
sldi t2,t2,32
or bits,bits,t2 // the flag bit
ret
@ -115,8 +115,8 @@ getoff_n2d:
addic. off,off,-3 // Carry set [and ignored], but no 'addi.'
rlwinm off,off,8,0,31-8 // off<<=8;
blt- offprev_n2d
lbzu r0,1(src)
nor. disp,off,r0 // disp = -(1+ (off|r0));
lbzu t1,1(src)
nor. disp,off,t1 // disp = -(1+ (off|t1));
srawi disp,disp,1 // shift off low bit (sets Carry)
cmpdi disp,0 // test result of srawi instead of nor.
beq- eof_nrv //

View File

@ -72,9 +72,9 @@ get32: // IN: Carry set
// fetch 4 bytes unaligned and LITTLE ENDIAN
#if 0 /*{ clean; but 4 instr larger, and 3 cycles longer */
lbz bits,1(src) // lo8
lbz r0,2(src); rlwimi bits,r0, 8,16,23
lbz r0,3(src); rlwimi bits,r0,16, 8,15
lbzu r0,4(src); rlwimi bits,r0,24, 0, 7
lbz t1,2(src); rlwimi bits,t1, 8,16,23
lbz t1,3(src); rlwimi bits,t1,16, 8,15
lbzu t1,4(src); rlwimi bits,t1,24, 0, 7
#else /*}{ pray for no unalignment trap or slowdown */
li bits,1 // compensate for 'lbzu'
#if BIG_ENDIAN //{