Loading libunwindstack/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -251,6 +251,7 @@ cc_defaults { "tests/files/offline/shared_lib_in_apk_arm64/*", "tests/files/offline/shared_lib_in_apk_memory_only_arm64/*", "tests/files/offline/shared_lib_in_apk_single_map_arm64/*", "tests/files/offline/signal_load_bias_arm/*", "tests/files/offline/straddle_arm/*", "tests/files/offline/straddle_arm64/*", ], Loading libunwindstack/Elf.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -173,7 +173,12 @@ bool Elf::StepIfSignalHandler(uint64_t rel_pc, Regs* regs, Memory* process_memor if (!valid_) { return false; } return regs->StepIfSignalHandler(rel_pc, this, process_memory); // Convert the rel_pc to an elf_offset. if (rel_pc < static_cast<uint64_t>(load_bias_)) { return false; } return regs->StepIfSignalHandler(rel_pc - load_bias_, this, process_memory); } // The relative pc is always relative to the start of the map from which it comes. Loading libunwindstack/RegsArm.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -127,12 +127,12 @@ Regs* RegsArm::CreateFromUcontext(void* ucontext) { return regs; } bool RegsArm::StepIfSignalHandler(uint64_t rel_pc, Elf* elf, Memory* process_memory) { bool RegsArm::StepIfSignalHandler(uint64_t elf_offset, Elf* elf, Memory* process_memory) { uint32_t data; Memory* elf_memory = elf->memory(); // Read from elf memory since it is usually more expensive to read from // process memory. if (!elf_memory->ReadFully(rel_pc, &data, sizeof(data))) { if (!elf_memory->ReadFully(elf_offset, &data, sizeof(data))) { return false; } Loading libunwindstack/RegsArm64.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -126,12 +126,12 @@ Regs* RegsArm64::CreateFromUcontext(void* ucontext) { return regs; } bool RegsArm64::StepIfSignalHandler(uint64_t rel_pc, Elf* elf, Memory* process_memory) { bool RegsArm64::StepIfSignalHandler(uint64_t elf_offset, Elf* elf, Memory* process_memory) { uint64_t data; Memory* elf_memory = elf->memory(); // Read from elf memory since it is usually more expensive to read from // process memory. if (!elf_memory->ReadFully(rel_pc, &data, sizeof(data))) { if (!elf_memory->ReadFully(elf_offset, &data, sizeof(data))) { return false; } Loading libunwindstack/RegsMips.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -129,13 +129,13 @@ Regs* RegsMips::CreateFromUcontext(void* ucontext) { return regs; } bool RegsMips::StepIfSignalHandler(uint64_t rel_pc, Elf* elf, Memory* process_memory) { bool RegsMips::StepIfSignalHandler(uint64_t elf_offset, Elf* elf, Memory* process_memory) { uint64_t data; uint64_t offset = 0; Memory* elf_memory = elf->memory(); // Read from elf memory since it is usually more expensive to read from // process memory. if (!elf_memory->ReadFully(rel_pc, &data, sizeof(data))) { if (!elf_memory->ReadFully(elf_offset, &data, sizeof(data))) { return false; } Loading Loading
libunwindstack/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -251,6 +251,7 @@ cc_defaults { "tests/files/offline/shared_lib_in_apk_arm64/*", "tests/files/offline/shared_lib_in_apk_memory_only_arm64/*", "tests/files/offline/shared_lib_in_apk_single_map_arm64/*", "tests/files/offline/signal_load_bias_arm/*", "tests/files/offline/straddle_arm/*", "tests/files/offline/straddle_arm64/*", ], Loading
libunwindstack/Elf.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -173,7 +173,12 @@ bool Elf::StepIfSignalHandler(uint64_t rel_pc, Regs* regs, Memory* process_memor if (!valid_) { return false; } return regs->StepIfSignalHandler(rel_pc, this, process_memory); // Convert the rel_pc to an elf_offset. if (rel_pc < static_cast<uint64_t>(load_bias_)) { return false; } return regs->StepIfSignalHandler(rel_pc - load_bias_, this, process_memory); } // The relative pc is always relative to the start of the map from which it comes. Loading
libunwindstack/RegsArm.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -127,12 +127,12 @@ Regs* RegsArm::CreateFromUcontext(void* ucontext) { return regs; } bool RegsArm::StepIfSignalHandler(uint64_t rel_pc, Elf* elf, Memory* process_memory) { bool RegsArm::StepIfSignalHandler(uint64_t elf_offset, Elf* elf, Memory* process_memory) { uint32_t data; Memory* elf_memory = elf->memory(); // Read from elf memory since it is usually more expensive to read from // process memory. if (!elf_memory->ReadFully(rel_pc, &data, sizeof(data))) { if (!elf_memory->ReadFully(elf_offset, &data, sizeof(data))) { return false; } Loading
libunwindstack/RegsArm64.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -126,12 +126,12 @@ Regs* RegsArm64::CreateFromUcontext(void* ucontext) { return regs; } bool RegsArm64::StepIfSignalHandler(uint64_t rel_pc, Elf* elf, Memory* process_memory) { bool RegsArm64::StepIfSignalHandler(uint64_t elf_offset, Elf* elf, Memory* process_memory) { uint64_t data; Memory* elf_memory = elf->memory(); // Read from elf memory since it is usually more expensive to read from // process memory. if (!elf_memory->ReadFully(rel_pc, &data, sizeof(data))) { if (!elf_memory->ReadFully(elf_offset, &data, sizeof(data))) { return false; } Loading
libunwindstack/RegsMips.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -129,13 +129,13 @@ Regs* RegsMips::CreateFromUcontext(void* ucontext) { return regs; } bool RegsMips::StepIfSignalHandler(uint64_t rel_pc, Elf* elf, Memory* process_memory) { bool RegsMips::StepIfSignalHandler(uint64_t elf_offset, Elf* elf, Memory* process_memory) { uint64_t data; uint64_t offset = 0; Memory* elf_memory = elf->memory(); // Read from elf memory since it is usually more expensive to read from // process memory. if (!elf_memory->ReadFully(rel_pc, &data, sizeof(data))) { if (!elf_memory->ReadFully(elf_offset, &data, sizeof(data))) { return false; } Loading