summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2016-01-08 02:26:03 +0000
committerJason Molenda <jmolenda@apple.com>2016-01-08 02:26:03 +0000
commit7cb9d98cf9df2d6544cad826ce9e3719c406f0cf (patch)
tree1b31911e0a54de0ae976d90bc8d11dadeebad4a0 /lldb
parentbfcff3856a5590d3187999e6c6c08057ef36e261 (diff)
downloadbcm5719-llvm-7cb9d98cf9df2d6544cad826ce9e3719c406f0cf.tar.gz
bcm5719-llvm-7cb9d98cf9df2d6544cad826ce9e3719c406f0cf.zip
Revert r257117 "Performance improvement: Change lldb so that it
puts a breakpoint" it is causing a regression in the TestStepNoDebug test case on ubuntu 14.04 with gcc 4.9.2. Thanks for the email Siva. I'll recommit when I've figured out the regression. llvm-svn: 257138
Diffstat (limited to 'lldb')
-rw-r--r--lldb/include/lldb/Target/Process.h28
-rw-r--r--lldb/include/lldb/Target/Thread.h13
-rw-r--r--lldb/include/lldb/Target/ThreadPlanStepOut.h3
-rw-r--r--lldb/source/Target/Process.cpp62
-rw-r--r--lldb/source/Target/Thread.cpp10
-rw-r--r--lldb/source/Target/ThreadPlanShouldStopHere.cpp3
-rw-r--r--lldb/source/Target/ThreadPlanStepOut.cpp37
-rw-r--r--lldb/source/Target/ThreadPlanStepOverRange.cpp3
8 files changed, 11 insertions, 148 deletions
diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h
index dfd332346e0..2e063c5bbcc 100644
--- a/lldb/include/lldb/Target/Process.h
+++ b/lldb/include/lldb/Target/Process.h
@@ -3149,34 +3149,6 @@ public:
void
ResetImageToken(size_t token);
- //------------------------------------------------------------------
- /// Find the next branch instruction to set a breakpoint on
- ///
- /// When instruction stepping through a source line, instead of
- /// stepping through each instruction, we can put a breakpoint on
- /// the next branch instruction (within the range of instructions
- /// we are stepping through) and continue the process to there,
- /// yielding significant performance benefits over instruction
- /// stepping.
- ///
- /// @param[in] default_stop_addr
- /// The address of the instruction where lldb would put a
- /// breakpoint normally.
- ///
- /// @param[in] range_bounds
- /// The range which the breakpoint must be contained within.
- /// Typically a source line.
- ///
- /// @return
- /// The address of the next branch instruction, or the end of
- /// the range provided in range_bounds. If there are any
- /// problems with the disassembly or getting the instructions,
- /// the original default_stop_addr will be returned.
- //------------------------------------------------------------------
- Address
- AdvanceAddressToNextBranchInstruction (Address default_stop_addr,
- AddressRange range_bounds);
-
protected:
void
SetState (lldb::EventSP &event_sp);
diff --git a/lldb/include/lldb/Target/Thread.h b/lldb/include/lldb/Target/Thread.h
index 56d86a5f4e1..7aff77bd16f 100644
--- a/lldb/include/lldb/Target/Thread.h
+++ b/lldb/include/lldb/Target/Thread.h
@@ -888,16 +888,6 @@ public:
/// @param[in] run_vote
/// See standard meanings for the stop & run votes in ThreadPlan.h.
///
- /// @param[in] continue_to_next_branch
- /// Normally this will enqueue a plan that will put a breakpoint on the return address and continue
- /// to there. If continue_to_next_branch is true, this is an operation not involving the user --
- /// e.g. stepping "next" in a source line and we instruction stepped into another function --
- /// so instead of putting a breakpoint on the return address, advance the breakpoint to the
- /// end of the source line that is doing the call, or until the next flow control instruction.
- /// If the return value from the function call is to be retrieved / displayed to the user, you must stop
- /// on the return address. The return value may be stored in volatile registers which are overwritten
- /// before the next branch instruction.
- ///
/// @return
/// A shared pointer to the newly queued thread plan, or nullptr if the plan could not be queued.
//------------------------------------------------------------------
@@ -908,8 +898,7 @@ public:
bool stop_other_threads,
Vote stop_vote, // = eVoteYes,
Vote run_vote, // = eVoteNoOpinion);
- uint32_t frame_idx,
- bool continue_to_next_branch = false);
+ uint32_t frame_idx);
//------------------------------------------------------------------
/// Gets the plan used to step through the code that steps from a function
diff --git a/lldb/include/lldb/Target/ThreadPlanStepOut.h b/lldb/include/lldb/Target/ThreadPlanStepOut.h
index ccf829f636d..ac5696357e9 100644
--- a/lldb/include/lldb/Target/ThreadPlanStepOut.h
+++ b/lldb/include/lldb/Target/ThreadPlanStepOut.h
@@ -31,8 +31,7 @@ public:
Vote stop_vote,
Vote run_vote,
uint32_t frame_idx,
- LazyBool step_out_avoids_code_without_debug_info,
- bool continue_to_next_branch = false);
+ LazyBool step_out_avoids_code_without_debug_info);
~ThreadPlanStepOut() override;
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index e4fe419660e..311c695860f 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -6515,65 +6515,3 @@ Process::ResetImageToken(size_t token)
if (token < m_image_tokens.size())
m_image_tokens[token] = LLDB_INVALID_IMAGE_TOKEN;
}
-
-Address
-Process::AdvanceAddressToNextBranchInstruction (Address default_stop_addr, AddressRange range_bounds)
-{
- Target &target = GetTarget();
- DisassemblerSP disassembler_sp;
- InstructionList *insn_list = NULL;
-
- Address retval = default_stop_addr;
-
- if (target.GetUseFastStepping() == false)
- return retval;
- if (default_stop_addr.IsValid() == false)
- return retval;
-
- ExecutionContext exe_ctx (this);
- const char *plugin_name = nullptr;
- const char *flavor = nullptr;
- const bool prefer_file_cache = true;
- disassembler_sp = Disassembler::DisassembleRange(target.GetArchitecture(),
- plugin_name,
- flavor,
- exe_ctx,
- range_bounds,
- prefer_file_cache);
- if (disassembler_sp.get())
- insn_list = &disassembler_sp->GetInstructionList();
-
- if (insn_list == NULL)
- {
- return retval;
- }
-
- size_t insn_offset = insn_list->GetIndexOfInstructionAtAddress (default_stop_addr);
- if (insn_offset == UINT32_MAX)
- {
- return retval;
- }
-
- uint32_t branch_index = insn_list->GetIndexOfNextBranchInstruction (insn_offset, target);
- if (branch_index == UINT32_MAX)
- {
- return retval;
- }
-
- if (branch_index > insn_offset)
- {
- Address next_branch_insn_address = insn_list->GetInstructionAtIndex (branch_index)->GetAddress();
- if (next_branch_insn_address.IsValid() && range_bounds.ContainsFileAddress (next_branch_insn_address))
- {
- retval = next_branch_insn_address;
- }
- }
-
- if (disassembler_sp.get())
- {
- // FIXME: The DisassemblerLLVMC has a reference cycle and won't go away if it has any active instructions.
- disassembler_sp->GetInstructionList().Clear();
- }
-
- return retval;
-}
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp
index 551e4800093..9f9da972660 100644
--- a/lldb/source/Target/Thread.cpp
+++ b/lldb/source/Target/Thread.cpp
@@ -1591,7 +1591,7 @@ Thread::QueueThreadPlanForStepOut(bool abort_other_plans,
Vote stop_vote,
Vote run_vote,
uint32_t frame_idx,
- LazyBool step_out_avoids_code_without_debug_info)
+ LazyBool step_out_avoids_code_withoug_debug_info)
{
ThreadPlanSP thread_plan_sp (new ThreadPlanStepOut (*this,
addr_context,
@@ -1600,7 +1600,7 @@ Thread::QueueThreadPlanForStepOut(bool abort_other_plans,
stop_vote,
run_vote,
frame_idx,
- step_out_avoids_code_without_debug_info));
+ step_out_avoids_code_withoug_debug_info));
if (thread_plan_sp->ValidatePlan(nullptr))
{
@@ -1620,8 +1620,7 @@ Thread::QueueThreadPlanForStepOutNoShouldStop(bool abort_other_plans,
bool stop_other_threads,
Vote stop_vote,
Vote run_vote,
- uint32_t frame_idx,
- bool continue_to_next_branch)
+ uint32_t frame_idx)
{
ThreadPlanSP thread_plan_sp(new ThreadPlanStepOut (*this,
addr_context,
@@ -1630,8 +1629,7 @@ Thread::QueueThreadPlanForStepOutNoShouldStop(bool abort_other_plans,
stop_vote,
run_vote,
frame_idx,
- eLazyBoolNo,
- continue_to_next_branch));
+ eLazyBoolNo));
ThreadPlanStepOut *new_plan = static_cast<ThreadPlanStepOut *>(thread_plan_sp.get());
new_plan->ClearShouldStopHereCallbacks();
diff --git a/lldb/source/Target/ThreadPlanShouldStopHere.cpp b/lldb/source/Target/ThreadPlanShouldStopHere.cpp
index 55aaaf00b56..88f8db2bd7e 100644
--- a/lldb/source/Target/ThreadPlanShouldStopHere.cpp
+++ b/lldb/source/Target/ThreadPlanShouldStopHere.cpp
@@ -135,8 +135,7 @@ ThreadPlanShouldStopHere::DefaultStepFromHereCallback (ThreadPlan *current_plan,
stop_others,
eVoteNo,
eVoteNoOpinion,
- frame_index,
- true);
+ frame_index);
return return_plan_sp;
}
diff --git a/lldb/source/Target/ThreadPlanStepOut.cpp b/lldb/source/Target/ThreadPlanStepOut.cpp
index 8a3bdd8146c..92403cb92ed 100644
--- a/lldb/source/Target/ThreadPlanStepOut.cpp
+++ b/lldb/source/Target/ThreadPlanStepOut.cpp
@@ -18,7 +18,6 @@
#include "lldb/Core/ValueObjectConstResult.h"
#include "lldb/Symbol/Block.h"
#include "lldb/Symbol/Function.h"
-#include "lldb/Symbol/Symbol.h"
#include "lldb/Symbol/Type.h"
#include "lldb/Target/ABI.h"
#include "lldb/Target/Process.h"
@@ -45,8 +44,7 @@ ThreadPlanStepOut::ThreadPlanStepOut
Vote stop_vote,
Vote run_vote,
uint32_t frame_idx,
- LazyBool step_out_avoids_code_without_debug_info,
- bool continue_to_next_branch
+ LazyBool step_out_avoids_code_without_debug_info
) :
ThreadPlan (ThreadPlan::eKindStepOut, "Step out", thread, stop_vote, run_vote),
ThreadPlanShouldStopHere (this),
@@ -88,8 +86,7 @@ ThreadPlanStepOut::ThreadPlanStepOut
eVoteNoOpinion,
eVoteNoOpinion,
frame_idx - 1,
- eLazyBoolNo,
- continue_to_next_branch));
+ eLazyBoolNo));
static_cast<ThreadPlanStepOut *>(m_step_out_to_inline_plan_sp.get())->SetShouldStopHereCallbacks(nullptr, nullptr);
m_step_out_to_inline_plan_sp->SetPrivate(true);
}
@@ -104,35 +101,7 @@ ThreadPlanStepOut::ThreadPlanStepOut
// Find the return address and set a breakpoint there:
// FIXME - can we do this more securely if we know first_insn?
- Address return_address (return_frame_sp->GetFrameCodeAddress());
- if (continue_to_next_branch)
- {
- SymbolContext return_address_sc;
- AddressRange range;
- Address return_address_decr_pc = return_address;
- if (return_address_decr_pc.GetOffset() > 0)
- return_address_decr_pc.Slide (-1);
-
- return_address_decr_pc.CalculateSymbolContext (&return_address_sc, lldb::eSymbolContextLineEntry | lldb::eSymbolContextFunction | lldb::eSymbolContextSymbol);
- if (return_address_sc.line_entry.IsValid())
- {
- range = return_address_sc.line_entry.GetSameLineContiguousAddressRange();
- }
- else if (return_address_sc.function)
- {
- range = return_address_sc.function->GetAddressRange();
- }
- else if (return_address_sc.symbol && return_address_sc.symbol->GetByteSizeIsValid())
- {
- range.GetBaseAddress() = return_address_sc.symbol->GetAddress();
- range.SetByteSize (return_address_sc.symbol->GetByteSize());
- }
- if (range.GetByteSize() > 0)
- {
- return_address = m_thread.GetProcess()->AdvanceAddressToNextBranchInstruction (return_address, range);
- }
- }
- m_return_addr = return_address.GetLoadAddress(&m_thread.GetProcess()->GetTarget());
+ m_return_addr = return_frame_sp->GetFrameCodeAddress().GetLoadAddress(&m_thread.GetProcess()->GetTarget());
if (m_return_addr == LLDB_INVALID_ADDRESS)
return;
diff --git a/lldb/source/Target/ThreadPlanStepOverRange.cpp b/lldb/source/Target/ThreadPlanStepOverRange.cpp
index 2e731a84578..08655be2439 100644
--- a/lldb/source/Target/ThreadPlanStepOverRange.cpp
+++ b/lldb/source/Target/ThreadPlanStepOverRange.cpp
@@ -185,8 +185,7 @@ ThreadPlanStepOverRange::ShouldStop (Event *event_ptr)
stop_others,
eVoteNo,
eVoteNoOpinion,
- 0,
- true);
+ 0);
break;
}
else
OpenPOWER on IntegriCloud