From cb5f590e10533cafe2a4d3a64c30a406599c391a Mon Sep 17 00:00:00 2001 From: John Reiser Date: Thu, 12 Dec 2019 20:23:33 -0800 Subject: [PATCH] More hacking Android shlib. https://github.com/upx/upx/issues/318 modified: p_elf_enum.h modified: p_lx_elf.cpp --- src/p_elf_enum.h | 5 +++++ src/p_lx_elf.cpp | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/p_elf_enum.h b/src/p_elf_enum.h index 18ec96b2..cde62606 100644 --- a/src/p_elf_enum.h +++ b/src/p_elf_enum.h @@ -243,7 +243,12 @@ R_PPC64_JMP_SLOT = R_PPC_JMP_SLOT, R_X86_64_JUMP_SLOT = 7 + , R_ARM_ABS32 = 2 + , R_ARM_GLOB_DAT = 21 + , R_AARCH64_ABS64 = 257 + , R_AARCH64_GLOB_DAT = 1025 + }; #endif //} diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index 5e828e3b..1525a0f1 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -3269,6 +3269,8 @@ void PackLinuxElf32::pack1(OutputFile *fo, Filter & /*ft*/) r_type, -1 + (sh_size / sh_entsize) - k); throwCantPack(msg); } break; + case R_ARM_ABS32: // FALL THROUGH + case R_ARM_GLOB_DAT: // FALL THROUGH case R_ARM_RELATIVE: { if (xct_off <= w) { set_te32(&file_image[d], asl_delta + w); @@ -3642,6 +3644,8 @@ void PackLinuxElf64::pack1(OutputFile *fo, Filter & /*ft*/) r_type, -1 + (unsigned)(sh_size / sh_entsize) - k); throwCantPack(msg); } break; + case R_AARCH64_ABS64: // FALL THROUGH + case R_AARCH64_GLOB_DAT: // FALL THROUGH case R_AARCH64_RELATIVE: { if (xct_off <= r_addend) { set_te64(&rela->r_addend, asl_delta + r_addend);