summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/ThreadPlanStepInstruction.cpp
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2013-07-26 00:27:57 +0000
committerJim Ingham <jingham@apple.com>2013-07-26 00:27:57 +0000
commita7d4822c7585a9d9d0435fcfcb6067370b9d00b3 (patch)
treebe9610884d023e531fd734473e61b83018c97e2e /lldb/source/Target/ThreadPlanStepInstruction.cpp
parentab09187553f22f42c528bd4d24c73318246a7947 (diff)
downloadbcm5719-llvm-a7d4822c7585a9d9d0435fcfcb6067370b9d00b3.tar.gz
bcm5719-llvm-a7d4822c7585a9d9d0435fcfcb6067370b9d00b3.zip
Refine the fix in r187094 to only distrust the StackID comparision when we are starting from an address with no symbols.
If we don't do that "nexti" will stop too soon when stepping past a tail call jump. rdar://problem/14516227 llvm-svn: 187173
Diffstat (limited to 'lldb/source/Target/ThreadPlanStepInstruction.cpp')
-rw-r--r--lldb/source/Target/ThreadPlanStepInstruction.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/lldb/source/Target/ThreadPlanStepInstruction.cpp b/lldb/source/Target/ThreadPlanStepInstruction.cpp
index b07b374e38a..f644ee88f70 100644
--- a/lldb/source/Target/ThreadPlanStepInstruction.cpp
+++ b/lldb/source/Target/ThreadPlanStepInstruction.cpp
@@ -44,7 +44,11 @@ ThreadPlanStepInstruction::ThreadPlanStepInstruction
m_step_over (step_over)
{
m_instruction_addr = m_thread.GetRegisterContext()->GetPC(0);
- m_stack_id = m_thread.GetStackFrameAtIndex(0)->GetStackID();
+ StackFrameSP m_start_frame_sp(m_thread.GetStackFrameAtIndex(0));
+ m_stack_id = m_start_frame_sp->GetStackID();
+
+ m_start_has_symbol = m_start_frame_sp->GetSymbolContext(eSymbolContextSymbol).symbol != NULL;
+
StackFrameSP parent_frame_sp = m_thread.GetStackFrameAtIndex(1);
if (parent_frame_sp)
m_parent_frame_id = parent_frame_sp->GetStackID();
@@ -68,6 +72,9 @@ ThreadPlanStepInstruction::GetDescription (Stream *s, lldb::DescriptionLevel lev
{
s->Printf ("Stepping one instruction past ");
s->Address(m_instruction_addr, sizeof (addr_t));
+ if (!m_start_has_symbol)
+ s->Printf(" which has no symbol");
+
if (m_step_over)
s->Printf(" stepping over calls");
else
@@ -123,7 +130,7 @@ ThreadPlanStepInstruction::ShouldStop (Event *event_ptr)
StackFrame *return_frame = m_thread.GetStackFrameAtIndex(1).get();
if (return_frame)
{
- if (return_frame->GetStackID() != m_parent_frame_id)
+ if (return_frame->GetStackID() != m_parent_frame_id || m_start_has_symbol)
{
if (log)
{
@@ -153,7 +160,7 @@ ThreadPlanStepInstruction::ShouldStop (Event *event_ptr)
{
if (log)
{
- log->PutCString("The stack id we are stepping in changed, but our parent frame did not. "
+ log->PutCString("The stack id we are stepping in changed, but our parent frame did not when stepping from code with no symbols. "
"We are probably just confused about where we are, stopping.");
}
SetPlanComplete();
OpenPOWER on IntegriCloud