arm64-expand code for nrv* EOF at de-compress is not quite uniform
WINDOWS_BACK requirement also interferes.
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: stub/src/arch/arm64/v8/nrv2d_d32.S
modified: stub/src/arch/arm64/v8/nrv2e_d32.S
modified: stub/src/arm64-expand.S
plus generated *.h, *.map
This commit is contained in:
parent
e561da33bd
commit
2c4e5c7a47
@ -51,7 +51,7 @@ b2be85af5a5bf4dd81637d18bbffb920e98054ec712ff87d4bda289ae4193b33 *amd64-linux.el
|
||||
1bd70a3cd3b34e635a3c947cacd46c4d66bf07e0fd350cc6d1f3cf60483f75b9 *amd64-win64.pe/upx-3.95.exe
|
||||
c9d8d916100e1dd972a2a9a060e4213505b14c62e9705ab6c8b544a8f18e083d *arm-linux.elf/upx-3.95
|
||||
94422a91473a467dfb534afa3f20247bc38691aeb386a42fb3e0fd18d3d0ae08 *arm-wince.pe/upx-3.91.exe
|
||||
402fcc9533e5eb07a16eb4e5bd9df67816b0298ff38fff589a5458df05159eb3 *arm64-linux.elf/upx-3.95
|
||||
b528662bd27cbaff5be8adc39272a4ecb849a3fd6ebbf7d1f546aa16028c751d *arm64-linux.elf/upx-3.95
|
||||
0a9d0d95822a7d645d67b61ebd5b86d8be07b8a36e0f29dbc9b55a8666ed67af *armeb-linux.elf/upx-3.91
|
||||
6e4ff31a80809fc5058ae714ab10ad7810c310bd7d116fad8b198009b9872312 *armeb-linux.elf/upx-3.95
|
||||
e17a126cebc32977991a292b7434d1435a7c95862ccece0e4acbf6e810bd3443 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -74,7 +74,7 @@ expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\
|
||||
0314c6974f29d180e46e41a1004d46a3993fe96f03de7f78d45ad89ad3b2177e *amd64-win64.pe/upx-3.95.exe
|
||||
0f781a70828dc3b939988b96e70c0734cef3f4a7693624e61f7a678b0c8667a6 *arm-linux.elf/upx-3.95
|
||||
d7839b7dee866794e4ca3df32e2b1084b35aa22dee5f060fa14b5ca09c612ba3 *arm-wince.pe/upx-3.91.exe
|
||||
db8aa50bf2b27ae3b4d9179c308d1fc174e788af61ddc5a46ede11af04ec69bb *arm64-linux.elf/upx-3.95
|
||||
f62794a48493306c91e9dd3f73f4e3677dfe24b768aae532a1b517637a9caa7a *arm64-linux.elf/upx-3.95
|
||||
7ebffb7cd7a0f95e82738cb58728334fe51b5174f54f807303d281e4594037cf *armeb-linux.elf/upx-3.91
|
||||
4a9d498ec0df4923ebb475f634c25f9b47eea115998adfd9c46b7dc4a561cf47 *armeb-linux.elf/upx-3.95
|
||||
4a434c3a14686786369c8bede8736d15e307ed7dd8c40cccb8f22003b05db968 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -97,7 +97,7 @@ expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\
|
||||
97bb5953405f3413d9ff9bdc272caf2858697168b3e85dab54213da356b5ea0f *amd64-win64.pe/upx-3.95.exe
|
||||
0bf33b6b3f246093a7e15c4a51b0a15f40c7ec9c16fcd38613b8b66004a3b3cb *arm-linux.elf/upx-3.95
|
||||
8c73f5acfc70e3c518be09978af87b9bec4906240cb457a166da0eba05bea4db *arm-wince.pe/upx-3.91.exe
|
||||
99af85dd3d7fbf8a2b46f4c6d1dd1953dd9edf5816f9f2007361fd915a2321a2 *arm64-linux.elf/upx-3.95
|
||||
454b9c64b3a4737d3ba00fcc9cbcb7bde7875b3dedbfebd77173c012b6e49f92 *arm64-linux.elf/upx-3.95
|
||||
4be1831f03092f1c594115d95663f3d180c0066e10b9d8389f25a350a3976529 *armeb-linux.elf/upx-3.91
|
||||
c3ec4a5148e25f74f6c8dca92b608f65dc5539f9c5a0f839f801612b13505bd1 *armeb-linux.elf/upx-3.95
|
||||
d454dd376db342e7650a93bd4859546711c94f5da55336e5b969dbea996465d9 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -120,7 +120,7 @@ ce7a33574f54c79a6c774d390f51cefe3fa5628e7b50794e9235dcf5af3ab7de *amd64-linux.el
|
||||
b8815f95e92d6853a04a86069e9054115be2d9aa657fa2c8912d0f37e56c894f *amd64-win64.pe/upx-3.95.exe
|
||||
7a832eb6c3c33a04053786334c9e1953796ba2debacc754b5a18632ec987aa40 *arm-linux.elf/upx-3.95
|
||||
018242f330e19dd7ca2fb78687c0070ad88f1aa2e113be865c30ad3ff94a4ada *arm-wince.pe/upx-3.91.exe
|
||||
5b98de43bde4295c6231417b88b356c3e97cf4d34908fee8037ca20c0943b37d *arm64-linux.elf/upx-3.95
|
||||
3830c5dbf7b67b54210c681ed2e1b2954b2818dfe76e7e4a4fb56a83fd3f4df4 *arm64-linux.elf/upx-3.95
|
||||
0a64b334793d1d6056241d0072afe8aa34d92ca5680192d05e1df90ca2f3c893 *armeb-linux.elf/upx-3.91
|
||||
895a9facf830fbcf2953adc0d7cf364fc5ab716f03940fc6165b49343c5253de *armeb-linux.elf/upx-3.95
|
||||
4e16bdab8b74ea5c7de4f255eec035189c24ac6374afef883c17696642c4fe16 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -143,7 +143,7 @@ b120b86e3fcbcd3aae7f09a50018e811d9020f98f9726bff69bc74b03ea89d07 *amd64-linux.el
|
||||
434732efb16b89114162a1787a28c128e2c11edb9835411f2b707cac5cd475ae *amd64-win64.pe/upx-3.95.exe
|
||||
acbb1628a4631ec5ded40ec286c55544839f57a671ef925c89f81a7fff937954 *arm-linux.elf/upx-3.95
|
||||
93e2ead9e54732a1731896681d415e3ce60b7420ad7f3c57822ad7dbd061cdd3 *arm-wince.pe/upx-3.91.exe
|
||||
dce835023a600f7a6760c38dc536d1f43f0df6f97aac9945d99cc8c29bc97e22 *arm64-linux.elf/upx-3.95
|
||||
0705c634485139419a7d84098cb15cfebf2a7d00954f1fa7ad4bfbce159f0ed3 *arm64-linux.elf/upx-3.95
|
||||
9d6b8ef721a9af947f8439c5e6805da9ecadf8e5e41f1e5ef54c40f3c8395db2 *armeb-linux.elf/upx-3.91
|
||||
591f023a8c6506cf8113fcb8a8672d0044890d60c6b9372a7eeeb40c9f5af464 *armeb-linux.elf/upx-3.95
|
||||
2957b481e67689a5ad43dcfdfde207b9eb16142c161f3e43fd0eeff5917fefbd *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -166,7 +166,7 @@ fb0f758cca710724004f3e5fcc33bbf3403e54ee4c9470c665724acbb6b1b3cc *amd64-linux.el
|
||||
f38ff7edc916c1a3e82020035667de858c89d52c98d960dad0e21b4da444ed6c *amd64-win64.pe/upx-3.95.exe
|
||||
2481a933d3f1bcaed047e9cbc81ae227351e86e7c6c761c4756faea0c525aeb6 *arm-linux.elf/upx-3.95
|
||||
bb475839ec547696aaccf4da202b99be927c872e5de298a5eb1f0be0edc06d1d *arm-wince.pe/upx-3.91.exe
|
||||
d7495b7dc13ba9cb7893bd585009b1c89174068de77c01e356ac9069dd8d3a11 *arm64-linux.elf/upx-3.95
|
||||
f36db2c53ff32bbe152148ed8e77d46021bdcaff92f6874ab9a30a6ca3f703ca *arm64-linux.elf/upx-3.95
|
||||
d33a702da5d0c46e744056c24e8323360223ed8e1be07660eecc28ade7b5fc75 *armeb-linux.elf/upx-3.91
|
||||
57790e4d030d32d19ae6ba2a485a5bc6f7244c7e65d3ec4c8b0afe395927dd83 *armeb-linux.elf/upx-3.95
|
||||
8673a20ba4b83e25daab30431ed215dcb35f595fa0cabf67ff57368a07ba4c14 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
@ -189,7 +189,7 @@ expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\
|
||||
5fccb0f5044baaa74d176efb25eefa3b5810dc737ed0f9d38084d275f7ebe7b8 *amd64-win64.pe/upx-3.95.exe
|
||||
90e56eefcce87542dbbc65e54c83c7e921a747877cbe489089c6043165b4f334 *arm-linux.elf/upx-3.95
|
||||
56be0b4046accdfadbe534ecb6e6452b9e3a18bb9eac39da0ee8893c31d24416 *arm-wince.pe/upx-3.91.exe
|
||||
77dde1deababe02b6504a54bb90b083e20485816bbe65fba98df8890142eea64 *arm64-linux.elf/upx-3.95
|
||||
529bab12a0a548fb4a1e649ed0742557a9f5730fd8155732e21f304766ec06c8 *arm64-linux.elf/upx-3.95
|
||||
0925e9f13460111685bcf3e695a0e191a083f43149cb0a2e6f93ca68f414614b *armeb-linux.elf/upx-3.91
|
||||
03e9bb54264382f17dc15e451b9aff634e41d0b3e14585350479bf143b612c09 *armeb-linux.elf/upx-3.95
|
||||
6f9fbac216cd42aa370cb90965e74669daf33fd403bf0a250aaec06dd3439009 *i386-dos32.djgpp2.coff/upx-3.91.exe
|
||||
|
||||
1645
src/stub/arm64-linux.elf-fold.h
generated
1645
src/stub/arm64-linux.elf-fold.h
generated
File diff suppressed because it is too large
Load Diff
1736
src/stub/arm64-linux.elf-so_fold.h
generated
1736
src/stub/arm64-linux.elf-so_fold.h
generated
File diff suppressed because it is too large
Load Diff
@ -82,7 +82,7 @@ ucl_nrv2d_decompress_32: .globl ucl_nrv2d_decompress_32 // ARM mode
|
||||
Actual decompressed length is stored through plen_dst.
|
||||
For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
|
||||
*/
|
||||
PUSH3(x2,x3, lr)
|
||||
PUSH3(x2,x3, lr) // MATCH_93
|
||||
#define sp_DST0 0 /* stack offset of original dst */
|
||||
add srclim,src,len,uxtw // srclim= eof_src;
|
||||
#if 1==SAFE /*{*/
|
||||
@ -95,7 +95,7 @@ ucl_nrv2d_decompress_32: .globl ucl_nrv2d_decompress_32 // ARM mode
|
||||
|
||||
#if defined(WINDOWS_BACK) || !defined(DAISY_CHAIN) //{
|
||||
eof_n2d:
|
||||
POP2(x3,x4) // r3= orig_dst; r4= plen_dst
|
||||
POP2(x3,x4) // MATCH_93 r3= orig_dst; r4= plen_dst
|
||||
SUB2(src,srclim) // 0 if actual src length equals expected length
|
||||
SUB2(dst,x3) // actual dst length
|
||||
str dstw,[x4]
|
||||
@ -108,7 +108,7 @@ eof_n2d:
|
||||
#endif
|
||||
|
||||
mov x0,x5 // result value
|
||||
POP1(lr)
|
||||
POP1(lr) // MATCH_93
|
||||
ret
|
||||
#endif // WINDOWS_BACK || ! DAISY_CHAIN }
|
||||
|
||||
|
||||
@ -83,8 +83,8 @@ ucl_nrv2e_decompress_32: .globl ucl_nrv2e_decompress_32 // ARM mode
|
||||
Actual decompressed length is stored through plen_dst.
|
||||
For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
|
||||
*/
|
||||
PUSH1(lr)
|
||||
PUSH2(x2,x3)
|
||||
PUSH1(lr) // MATCH_91
|
||||
PUSH2(x2,x3) // MATCH_92
|
||||
#define sp_DST0 0 /* stack offset of original dst */
|
||||
add srclim,src,len,uxtw // srclim= eof_src;
|
||||
#if 1==SAFE /*{*/
|
||||
@ -104,7 +104,7 @@ bad_src_n2e: # return value will be 1
|
||||
|
||||
#if defined(WINDOWS_BACK) || !defined(DAISY_CHAIN) //{
|
||||
eof_n2e:
|
||||
POP2(x3,x4) // r3= orig_dst; r4= plen_dst
|
||||
POP2(x3,x4) // MATCH_92 r3= orig_dst; r4= plen_dst
|
||||
SUB2(src,srclim) // 0 if actual src length equals expected length
|
||||
SUB2(dst,x3) // actual dst length
|
||||
str dstw,[x4]
|
||||
@ -118,7 +118,7 @@ cache_n2e: // unused label
|
||||
#endif
|
||||
|
||||
mov x0,x5 // result value
|
||||
POP1(lr)
|
||||
POP1(lr) // MATCH_91
|
||||
ret
|
||||
#endif // WINDOS_BACK || ! DAISY_CHAIN }
|
||||
|
||||
|
||||
@ -97,10 +97,11 @@ decompress: // (src *, cpr_len, dst *, &dstlen);
|
||||
src .req x0
|
||||
dst .req x2
|
||||
dstw .req w2
|
||||
|
||||
.globl eof
|
||||
eof_nrv: // .globl eof_nrv .type eof_nrv,%function
|
||||
eof_n2e: // .globl eof_n2e .type eof_n2e,%function
|
||||
eof_n2d: // .globl eof_n2d .type eof_n2d,%function
|
||||
|
||||
// sync_cache is done in tail of f_expand, after possible unfilter
|
||||
// NYI: eof_n2b, eof_n2d, eof_n2e should be unified.
|
||||
eof_n2b: // .globl eof_n2b .type eof_n2b,%function
|
||||
eof: // MATCH_90 end of a compressed extent; need sync_cache after unfilter
|
||||
ldr x3,[sp],#NBPW // &input_eof
|
||||
@ -112,6 +113,24 @@ eof: // MATCH_90 end of a compressed extent; need sync_cache after unfilter
|
||||
ldr lr,[sp],#NBPW
|
||||
ret
|
||||
|
||||
|
||||
// WINDOWS_BACK compatibility seems to be broken
|
||||
// if POP3 replaces POP2+POP1 (MATCH_92, MATCH_91)
|
||||
srclim .req x7
|
||||
eof_n2d: // .globl eof_n2d
|
||||
eof_n2e: // .globl eof_n2e
|
||||
POP2(x3,x4) // MATCH_92 r3= orig_dst; r4= plen_dst
|
||||
SUB2(src,srclim) // 0 if actual src length equals expected length
|
||||
SUB2(dst,x3) // actual dst length
|
||||
str dstw,[x4]
|
||||
POP1(lr) // MATCH_91
|
||||
ret
|
||||
|
||||
.unreq src
|
||||
.unreq dst
|
||||
.unreq dstw
|
||||
.unreq srclim
|
||||
|
||||
eof_lzma: .globl elf_lzma
|
||||
mov sp,fp
|
||||
mov x5,x0 // save result value
|
||||
@ -124,9 +143,6 @@ eof_lzma: .globl elf_lzma
|
||||
mov x0,x5 // result value
|
||||
ret
|
||||
|
||||
.unreq src
|
||||
.unreq dst
|
||||
|
||||
#define M_NRV2B_LE32 2
|
||||
#define M_NRV2B_8 3
|
||||
#define M_NRV2D_LE32 5
|
||||
|
||||
4
src/stub/tmp/arm64-linux.elf-fold.map
generated
vendored
4
src/stub/tmp/arm64-linux.elf-fold.map
generated
vendored
@ -57,8 +57,8 @@ EXP_HEAD 0x0000000000000000 0x104
|
||||
EXP_HEAD 0x0000000000000000 0x104 tmp/arm64-expand.o
|
||||
0x0000000000000000 f_expand
|
||||
|
||||
EXP_TAIL 0x0000000000000000 0xa8
|
||||
EXP_TAIL 0x0000000000000000 0xa8 tmp/arm64-expand.o
|
||||
EXP_TAIL 0x0000000000000000 0xc0
|
||||
EXP_TAIL 0x0000000000000000 0xc0 tmp/arm64-expand.o
|
||||
0x0000000000000000 eof
|
||||
|
||||
NRV2E 0x0000000000000000 0xf4
|
||||
|
||||
Loading…
Reference in New Issue
Block a user