Catch SIGSEGV during de-compression, and print state info
("auto debug") using /proc/self/maps and gdb.
This was motivated by suspicion of unreliable hardware
which triggered "Heisenbugs": a crash which cannot be reproduced.
If SIGSGV occurs without the "auto debug" info, then that
implies an error user code after de-compression, often when
user code accesses /proc/self/exe, which is not the un-compressed file.
modified: misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: src/help.cpp
modified: src/main.cpp
modified: src/options.h
modified: src/p_lx_elf.cpp
modified: src/stub/Makefile
modified: src/stub/src/amd64-linux.elf-entry.S
modified: src/stub/src/amd64-linux.elf-fold.S
modified: src/stub/src/arm.v4a-linux.elf-entry.S
modified: src/stub/src/arm.v4a-linux.elf-fold.S
modified: src/stub/src/arm64-linux.elf-entry.S
modified: src/stub/src/arm64-linux.elf-fold.S
plus generated .h .dump .map
Reset ph.method on each b_info.b_method.
Use file_image[] as ReadOnly, subsuming fi->seek()+read().
Use lowmem[0, +xct_off) for changing values.
Work on un_DT_INIT().
https://github.com/upx/upx/issues/882
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.cpp
Linux on bare metal (and explicit qemu) seems not to care,
but qemu-user-binfmt gives ENOEXEC (Exec format error)
https://github.com/upx/upx/issues/876
Also slide_sh_offset() handles so_slide.
TODO: if asl_delta, then relocate sh_offset that is above xct_off.
PT_DYNAMIC.p_offset and {.dynamic}.sh_offset must match; etc.
modified: p_lx_elf.cpp
modified: p_lx_elf.h
modified: p_unix.cpp
Compiler has a mind of its own.
modified: p_lx_elf.cpp
modified: stub/Makefile
new file: stub/src/amd64-linux.elf-help_umf.S
modified: stub/src/arm.v4a-expand.S
new file: stub/src/arm.v4a-linux.elf-help_umf.S
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/arm.v4a-linux.elf-so_fold.S
new file: stub/src/arm.v5a-linux.elf-help_umf.S
new file: stub/src/arm64-linux.elf-help_umf.S
modified: stub/src/arm64-linux.elf-so_entry.S
new file: stub/src/armeb.v4a-linux.elf-help_umf.S
new file: stub/src/i386-linux.elf-help_umf.S
modified: stub/src/i386-linux.elf-so_main.c
new file: stub/src/mips.r3000-linux.elf-help_umf.S
new file: stub/src/mipsel.r3000-linux.elf-help_umf.S
modified: stub/src/upxfd_android.c
More ENDBRxx for CALL *%RDX for 'getbit'.
amd64: LEA xxx(%rip),%reg and STRCON section,
instead of CALL; .asciz "..."; POP %reg
(Not for PE due to WINDOWS_BACK binary compatibility.)
i386 string constants still use call-.asciz-pop because no (%rip)
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_lx_elf.cpp
modified: stub/src/amd64-linux.elf-entry.S
modified: stub/src/amd64-linux.elf-main2.c
modified: stub/src/amd64-linux.elf-so_entry.S
modified: stub/src/amd64-linux.shlib-init.S
modified: stub/src/amd64-win64.pe.S
modified: stub/src/i386-linux.elf-entry.S
modified: stub/src/i386-linux.elf-so_entry.S
modified: stub/src/upxfd_android.c
plus generated *.h *.map *.dump
... including work-around if no memfd_create() on early Android 32-bit
modified: ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
modified: p_elf_enum.h
modified: p_lx_elf.cpp
modified: stub/src/arm.v4a-linux.elf-so_entry.S
modified: stub/src/arm.v4a-linux.elf-so_fold.S
modified: stub/src/i386-linux.elf-so_main.c
modified: stub/src/upxfd_android.c
plus generated *.h *.dump *.map