diff options
Diffstat (limited to 'libunwindstack/Elf.cpp')
| -rw-r--r-- | libunwindstack/Elf.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/libunwindstack/Elf.cpp b/libunwindstack/Elf.cpp index 4f7476d92..dc6591dec 100644 --- a/libunwindstack/Elf.cpp +++ b/libunwindstack/Elf.cpp @@ -95,11 +95,17 @@ bool Elf::GetFunctionName(uint64_t addr, std::string* name, uint64_t* func_offse gnu_debugdata_interface_->GetFunctionName(addr, name, func_offset))); } -bool Elf::Step(uint64_t rel_pc, Regs* regs, Memory* process_memory) { - return valid_ && (regs->StepIfSignalHandler(rel_pc, this, process_memory) || - interface_->Step(rel_pc, regs, process_memory) || - (gnu_debugdata_interface_ && - gnu_debugdata_interface_->Step(rel_pc, regs, process_memory))); +bool Elf::Step(uint64_t rel_pc, Regs* regs, Memory* process_memory, bool* finished) { + if (!valid_) { + return false; + } + if (regs->StepIfSignalHandler(rel_pc, this, process_memory)) { + *finished = false; + return true; + } + return interface_->Step(rel_pc, regs, process_memory, finished) || + (gnu_debugdata_interface_ && + gnu_debugdata_interface_->Step(rel_pc, regs, process_memory, finished)); } uint64_t Elf::GetLoadBias() { |
