Fix two places in RegisterContextLLDB::InitializeNonZerothFrame where
I'm not running the saved pc through FixCodeAddress as soon as I should. <rdar://problem/30686307> llvm-svn: 306634
This commit is contained in:
parent
43294c9f48
commit
7f5bd34b18
|
|
@ -297,6 +297,14 @@ void RegisterContextLLDB::InitializeNonZerothFrame() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ExecutionContext exe_ctx(m_thread.shared_from_this());
|
||||||
|
Process *process = exe_ctx.GetProcessPtr();
|
||||||
|
// Let ABIs fixup code addresses to make sure they are valid. In ARM ABIs
|
||||||
|
// this will strip bit zero in case we read a PC from memory or from the LR.
|
||||||
|
ABI *abi = process->GetABI().get();
|
||||||
|
if (abi)
|
||||||
|
pc = abi->FixCodeAddress(pc);
|
||||||
|
|
||||||
if (log) {
|
if (log) {
|
||||||
UnwindLogMsg("pc = 0x%" PRIx64, pc);
|
UnwindLogMsg("pc = 0x%" PRIx64, pc);
|
||||||
addr_t reg_val;
|
addr_t reg_val;
|
||||||
|
|
@ -321,14 +329,6 @@ void RegisterContextLLDB::InitializeNonZerothFrame() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ExecutionContext exe_ctx(m_thread.shared_from_this());
|
|
||||||
Process *process = exe_ctx.GetProcessPtr();
|
|
||||||
// Let ABIs fixup code addresses to make sure they are valid. In ARM ABIs
|
|
||||||
// this will strip bit zero in case we read a PC from memory or from the LR.
|
|
||||||
ABI *abi = process->GetABI().get();
|
|
||||||
if (abi)
|
|
||||||
pc = abi->FixCodeAddress(pc);
|
|
||||||
|
|
||||||
const bool allow_section_end = true;
|
const bool allow_section_end = true;
|
||||||
m_current_pc.SetLoadAddress(pc, &process->GetTarget(), allow_section_end);
|
m_current_pc.SetLoadAddress(pc, &process->GetTarget(), allow_section_end);
|
||||||
|
|
||||||
|
|
@ -2054,11 +2054,6 @@ bool RegisterContextLLDB::ReadPC(addr_t &pc) {
|
||||||
// unwind past that frame to help
|
// unwind past that frame to help
|
||||||
// find the bug.
|
// find the bug.
|
||||||
|
|
||||||
if (m_all_registers_available == false && above_trap_handler == false &&
|
|
||||||
(pc == 0 || pc == 1)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProcessSP process_sp (m_thread.GetProcess());
|
ProcessSP process_sp (m_thread.GetProcess());
|
||||||
if (process_sp)
|
if (process_sp)
|
||||||
{
|
{
|
||||||
|
|
@ -2066,6 +2061,12 @@ bool RegisterContextLLDB::ReadPC(addr_t &pc) {
|
||||||
if (abi)
|
if (abi)
|
||||||
pc = abi->FixCodeAddress(pc);
|
pc = abi->FixCodeAddress(pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_all_registers_available == false && above_trap_handler == false &&
|
||||||
|
(pc == 0 || pc == 1)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue