arm64 --nrv2d instruction confusion

https://github.com/upx/upx/issues/806

ARM Architecture Reference Manual
    ARMv8, for ARMv8-A architecture profile
Section C6.2.47, page C6-595 (note the 'invert'!)
    CINC <Wd>, <Wn>, <cond>
    is equivalent to
    CSINC <Wd>, <Wn>, <Wn>, invert(<cond>)

	modified:   src/stub/src/arch/arm64/v8/nrv2d_d32.S
	modified:   misc/testsuite/upx_testsuite_1-expected_sha256sums.sh

	modified:   src/stub/arm64-darwin.macho-entry.h
	modified:   src/stub/arm64-linux.elf-entry.h
	modified:   src/stub/arm64-linux.elf-so_fold.h
	modified:   src/stub/arm64-linux.shlib-init.h
	modified:   src/stub/arm64-win64.pe.h
This commit is contained in:
John Reiser 2024-04-07 14:01:19 -07:00
parent d48a7d303d
commit 91f5fe1c0e
7 changed files with 17 additions and 17 deletions

View File

@ -74,7 +74,7 @@ f1ecf2d3ccb1738b54d8abad053cc2055cb37dc75dfbf40d0a0d90ff3f7999a7 *amd64-linux.el
0314c6974f29d180e46e41a1004d46a3993fe96f03de7f78d45ad89ad3b2177e *amd64-win64.pe/upx-3.95.exe
01d2d7ed5173bf4241977a7987000c9b41c9ec99631f9b800311194bc986df71 *arm-linux.elf/upx-3.95
d7839b7dee866794e4ca3df32e2b1084b35aa22dee5f060fa14b5ca09c612ba3 *arm-wince.pe/upx-3.91.exe
b535ebb234fc5948c6905eb3407b745bd14168a5d57d07dd72eda5a9a58ceeb4 *arm64-linux.elf/upx-3.95
cb2c76f8399ed174a3042fbaf4c0a17777d52a35747a4e5514589b7734c8b166 *arm64-linux.elf/upx-3.95
1fb7f4523bb64348252e379860687d9fae9dae4ef0f91c6c7b43af5ae3f6eede *armeb-linux.elf/upx-3.91
975471f7f85a3044fefca41550b46ef83cf8db4b74cb1134286be31a9b1a0dfc *armeb-linux.elf/upx-3.95
4a434c3a14686786369c8bede8736d15e307ed7dd8c40cccb8f22003b05db968 *i386-dos32.djgpp2.coff/upx-3.91.exe

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_ARM64_DARWIN_MACHO_ENTRY_SIZE 7365
#define STUB_ARM64_DARWIN_MACHO_ENTRY_ADLER32 0xb6c76f2b
#define STUB_ARM64_DARWIN_MACHO_ENTRY_CRC32 0x34c5965d
#define STUB_ARM64_DARWIN_MACHO_ENTRY_ADLER32 0x1bf86f1b
#define STUB_ARM64_DARWIN_MACHO_ENTRY_CRC32 0xb61e8421
unsigned char stub_arm64_darwin_macho_entry[7365] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -86,7 +86,7 @@ unsigned char stub_arm64_darwin_macho_entry[7365] = {
/* 0x02e0 */ 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58,224,255,255,151,
/* 0x02f0 */ 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82,220,255,255,151,
/* 0x0300 */ 33, 0, 1, 58,218,255,255,151,163,255,255, 84, 33, 8, 0, 17,
/* 0x0310 */ 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26, 67, 0, 64, 57,
/* 0x0310 */ 33, 4, 0, 17,191, 0, 20, 49, 33, 36,129, 26, 67, 0, 64, 57,
/* 0x0320 */ 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,
/* 0x0330 */ 215,255,255, 23, 1, 64, 33,139,225, 11,190,169,227,123, 1,169,
/* 0x0340 */ 5, 0,128, 18, 4, 0,176, 82, 52, 0, 0, 20,228,123, 65,169,

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_ARM64_LINUX_ELF_ENTRY_SIZE 7437
#define STUB_ARM64_LINUX_ELF_ENTRY_ADLER32 0x90057585
#define STUB_ARM64_LINUX_ELF_ENTRY_CRC32 0x2ca610ba
#define STUB_ARM64_LINUX_ELF_ENTRY_ADLER32 0xf1277575
#define STUB_ARM64_LINUX_ELF_ENTRY_CRC32 0x3732046d
unsigned char stub_arm64_linux_elf_entry[7437] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -87,7 +87,7 @@ unsigned char stub_arm64_linux_elf_entry[7437] = {
/* 0x02f0 */ 33, 0, 1, 58,224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84,
/* 0x0300 */ 33, 0,128, 82,220,255,255,151, 33, 0, 1, 58,218,255,255,151,
/* 0x0310 */ 163,255,255, 84, 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49,
/* 0x0320 */ 33, 52,129, 26, 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56,
/* 0x0320 */ 33, 36,129, 26, 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56,
/* 0x0330 */ 33, 4, 0,113,161,255,255, 84,215,255,255, 23, 1, 64, 33,139,
/* 0x0340 */ 225, 11,190,169,227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82,
/* 0x0350 */ 52, 0, 0, 20,228,123, 65,169,225, 15,194,168, 0, 0, 1,203,

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_ARM64_LINUX_ELF_SO_FOLD_SIZE 16470
#define STUB_ARM64_LINUX_ELF_SO_FOLD_ADLER32 0xa5255ed2
#define STUB_ARM64_LINUX_ELF_SO_FOLD_CRC32 0x6f40b8e7
#define STUB_ARM64_LINUX_ELF_SO_FOLD_ADLER32 0x7b285ec2
#define STUB_ARM64_LINUX_ELF_SO_FOLD_CRC32 0x0dde2064
unsigned char stub_arm64_linux_elf_so_fold[16470] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -256,7 +256,7 @@ unsigned char stub_arm64_linux_elf_so_fold[16470] = {
/* 0x0d80 */ 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58,224,255,255,151,
/* 0x0d90 */ 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82,220,255,255,151,
/* 0x0da0 */ 33, 0, 1, 58,218,255,255,151,163,255,255, 84, 33, 8, 0, 17,
/* 0x0db0 */ 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26, 67, 0, 64, 57,
/* 0x0db0 */ 33, 4, 0, 17,191, 0, 20, 49, 33, 36,129, 26, 67, 0, 64, 57,
/* 0x0dc0 */ 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,
/* 0x0dd0 */ 215,255,255, 23, 1, 64, 33,139,225, 11,190,169,227,123, 1,169,
/* 0x0de0 */ 5, 0,128, 18, 4, 0,176, 82, 52, 0, 0, 20,228,123, 65,169,

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 7923
#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0x70502fb3
#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0x41670c6c
#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0xb3122fa3
#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0xb5f30aee
unsigned char stub_arm64_linux_shlib_init[7923] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -87,7 +87,7 @@ unsigned char stub_arm64_linux_shlib_init[7923] = {
/* 0x02f0 */ 33, 0, 1, 58,224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84,
/* 0x0300 */ 33, 0,128, 82,220,255,255,151, 33, 0, 1, 58,218,255,255,151,
/* 0x0310 */ 163,255,255, 84, 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49,
/* 0x0320 */ 33, 52,129, 26, 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56,
/* 0x0320 */ 33, 36,129, 26, 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56,
/* 0x0330 */ 33, 4, 0,113,161,255,255, 84,215,255,255, 23, 1, 64, 33,139,
/* 0x0340 */ 225, 11,190,169,227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82,
/* 0x0350 */ 52, 0, 0, 20,228,123, 65,169,225, 15,194,168, 0, 0, 1,203,

View File

@ -33,8 +33,8 @@
/* clang-format off */
#define STUB_ARM64_WIN64_PE_SIZE 6445
#define STUB_ARM64_WIN64_PE_ADLER32 0x85ff67f0
#define STUB_ARM64_WIN64_PE_CRC32 0xea750c60
#define STUB_ARM64_WIN64_PE_ADLER32 0x20b067e0
#define STUB_ARM64_WIN64_PE_CRC32 0x6272f953
unsigned char stub_arm64_win64_pe[6445] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -82,7 +82,7 @@ unsigned char stub_arm64_win64_pe[6445] = {
/* 0x02a0 */ 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58,224,255,255,151,
/* 0x02b0 */ 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82,220,255,255,151,
/* 0x02c0 */ 33, 0, 1, 58,218,255,255,151,163,255,255, 84, 33, 8, 0, 17,
/* 0x02d0 */ 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26, 67, 0, 64, 57,
/* 0x02d0 */ 33, 4, 0, 17,191, 0, 20, 49, 33, 36,129, 26, 67, 0, 64, 57,
/* 0x02e0 */ 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,
/* 0x02f0 */ 215,255,255, 23,254, 15, 31,248,226, 15,191,169, 7, 64, 33,139,
/* 0x0300 */ 5, 0,128, 18, 4, 0,176, 82, 45, 0, 0, 20,227, 19,193,168,

View File

@ -172,7 +172,7 @@ lenmore_n2d:
gotlen_n2d: // 'cmn': add the inputs, set condition codes, discard the sum
ADD2(len,#1) // 1..3 ==> 2..4; 4.. ==> 5..
cmn off,#5<<8 // displ<=M2_MAX_OFFSET ==> no increment
csinc len,len,len,cc // too far away, so minimum match length is 3
cinc len,len,cc // too far away, so minimum match length is 3
#if 1==SAFE /*{*/
ldr tmp,[sp,#sp_DST0]
SUB2( tmp,dst)