Author: jingham Date: Fri Feb 22 17:08:17 2019 New Revision: 354711 URL: http://llvm.org/viewvc/llvm-project?rev=354711&view=rev Log: Revert r354706 - lit touched my thigh
Modified: lldb/trunk/include/lldb/Target/Process.h lldb/trunk/include/lldb/Target/Target.h lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads.cpp lldb/trunk/lit/ExecControl/StopHook/stop-hook-threads.test lldb/trunk/lit/ExecControl/StopHook/stop-hook.test lldb/trunk/source/Commands/CommandObjectTarget.cpp lldb/trunk/source/Target/Process.cpp lldb/trunk/source/Target/Target.cpp Modified: lldb/trunk/include/lldb/Target/Process.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Process.h?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/include/lldb/Target/Process.h (original) +++ lldb/trunk/include/lldb/Target/Process.h Fri Feb 22 17:08:17 2019 @@ -2519,8 +2519,6 @@ public: /// //------------------------------------------------------------------ void RestoreProcessEvents(); - - bool IsHijackedForSynchronousResume(); const lldb::ABISP &GetABI(); Modified: lldb/trunk/include/lldb/Target/Target.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/include/lldb/Target/Target.h (original) +++ lldb/trunk/include/lldb/Target/Target.h Fri Feb 22 17:08:17 2019 @@ -1153,10 +1153,6 @@ public: void SetIsActive(bool is_active) { m_active = is_active; } - void SetAutoContinue(bool auto_continue) {m_auto_continue = auto_continue;} - - bool GetAutoContinue() const { return m_auto_continue; } - void GetDescription(Stream *s, lldb::DescriptionLevel level) const; private: @@ -1164,8 +1160,7 @@ public: StringList m_commands; lldb::SymbolContextSpecifierSP m_specifier_sp; std::unique_ptr<ThreadSpec> m_thread_spec_up; - bool m_active = true; - bool m_auto_continue = false; + bool m_active; // Use CreateStopHook to make a new empty stop hook. The GetCommandPointer // and fill it with commands, and SetSpecifier to set the specifier shared Modified: lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit (original) +++ lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit Fri Feb 22 17:08:17 2019 @@ -1 +1 @@ -target stop-hook add -f stop-hook.c -l 29 -e 34 -o "expr ptr" +target stop-hook add -f stop-hook.c -l 29 -e 34 -o "expr ptr" \ No newline at end of file Modified: lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit (original) +++ lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit Fri Feb 22 17:08:17 2019 @@ -1,3 +1,3 @@ target stop-hook add -f stop-hook.c -l 29 -e 34 expr ptr -DONE +DONE \ No newline at end of file Modified: lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit (original) +++ lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit Fri Feb 22 17:08:17 2019 @@ -1,7 +1,7 @@ -break set -f stop-hook-threads.cpp -p "Break here to set up the stop hook" break set -f stop-hook-threads.cpp -p "Break here to test that the stop-hook" run -target stop-hook add -G true -expr lldb_val += 1 +target stop-hook add +frame variable --show-globals g_val thread list +continue DONE Modified: lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit (original) +++ lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit Fri Feb 22 17:08:17 2019 @@ -1,5 +1,4 @@ -break set -f stop-hook-threads.cpp -p "Break here to set up the stop hook" break set -f stop-hook-threads.cpp -p "Break here to test that the stop-hook" run -target stop-hook add -x 2 -o "expr lldb_val += 1" -o "thread list" -target stop-hook add -G true -o "script print('Hit stop hook') +target stop-hook add -x 2 -o "frame variable thread_index" +target stop-hook add -o continue Modified: lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads.cpp?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads.cpp (original) +++ lldb/trunk/lit/ExecControl/StopHook/Inputs/stop-hook-threads.cpp Fri Feb 22 17:08:17 2019 @@ -16,7 +16,6 @@ std::default_random_engine g_random_engi std::uniform_int_distribution<> g_distribution{0, 3000}; uint32_t g_val = 0; -uint32_t lldb_val = 0; uint32_t access_pool (bool flag = false) @@ -63,8 +62,7 @@ thread_func (uint32_t thread_index) int main (int argc, char const *argv[]) { std::thread threads[3]; - // Break here to set up the stop hook - printf("Stop hooks engaged.\n"); + // Create 3 threads for (auto &thread : threads) thread = std::thread{thread_func, std::distance(threads, &thread)}; @@ -73,7 +71,5 @@ int main (int argc, char const *argv[]) for (auto &thread : threads) thread.join(); - // print lldb_val so we can check it here. - printf ("lldb_val was set to: %d.\n", lldb_val); return 0; } Modified: lldb/trunk/lit/ExecControl/StopHook/stop-hook-threads.test URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/ExecControl/StopHook/stop-hook-threads.test?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/lit/ExecControl/StopHook/stop-hook-threads.test (original) +++ lldb/trunk/lit/ExecControl/StopHook/stop-hook-threads.test Fri Feb 22 17:08:17 2019 @@ -4,6 +4,7 @@ # RUN: %lldb -b -s %p/Inputs/stop-hook-threads-2.lldbinit -s %s -f %t \ # RUN: | FileCheck --check-prefix=CHECK --check-prefix=CHECK-FILTER %s # XFAIL: system-windows +# UNSUPPORTED: linux thread list break set -f stop-hook-threads.cpp -p "Set break point at this line" @@ -11,22 +12,23 @@ target stop-hook list # CHECK: Hook: 1 # CHECK-NEXT: State: enabled -# CHECK-NO-FILTER-NEXT: AutoContinue on # CHECK-FILTER-NEXT: Thread # CHECK-FILTER-NEXT: index: 2 # CHECK-NEXT: Commands: -# CHECK-NEXT: expr lldb_val += 1 -# CHECK-NEXT: thread list +# CHECK-NEXT: frame variable # CHECK-FILTER: Hook: 2 # CHECK-FILTER-NEXT: State: enabled -# CHECK-FILTER-NEXT: AutoContinue on # CHECK-FILTER-NEXT: Commands: -# CHECK-FILTER-NEXT: script print('Hit stop hook') +# CHECK-FILTER-NEXT: continue # Get the threads going continue -# Now make sure we hit the command the right number of times: -# CHECK-NO-FILTER: lldb_val was set to: 15. -# CHECK-FILTER: lldb_val was set to: 5. +# When we filter per thread, we expect exactly 4 identical "frame var" results +# CHECK-FILTER: (uint32_t) thread_index = [[THREAD_INDEX:[0-9]*]] +# CHECK-FILTER-COUNT-3: (uint32_t) thread_index = [[THREAD_INDEX]] +# CHECK-FILTER-NOT: thread_index + +# When we don't filter, we expect to count 12 stopped threads in the thread list output +# CHECK-NO-FILTER-COUNT-12: at stop-hook-threads.cpp{{.*}} stop reason = breakpoint \ No newline at end of file Modified: lldb/trunk/lit/ExecControl/StopHook/stop-hook.test URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/ExecControl/StopHook/stop-hook.test?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/lit/ExecControl/StopHook/stop-hook.test (original) +++ lldb/trunk/lit/ExecControl/StopHook/stop-hook.test Fri Feb 22 17:08:17 2019 @@ -11,7 +11,6 @@ # string, so the test "passes" despite the fact that the commands failed # llvm.org/pr40119 # UNSUPPORTED: system-windows -# XFAIL: system-linux break set -f stop-hook.c -p "// Set breakpoint here to test target stop-hook" break set -f stop-hook.c -p "// Another breakpoint which is outside of the stop-hook range" @@ -47,7 +46,9 @@ target stop-hook list run # Stopping inside of the stop hook range # CHECK: (lldb) run +# CHECK-NEXT: Process {{.*}} launched: # CHECK-NEXT: (void *) $0 = 0x +# CHECK-NEXT: Process {{.*}} stopped thread step-over # Stepping inside of the stop hook range Modified: lldb/trunk/source/Commands/CommandObjectTarget.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectTarget.cpp?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectTarget.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectTarget.cpp Fri Feb 22 17:08:17 2019 @@ -4555,7 +4555,7 @@ private: static constexpr OptionDefinition g_target_stop_hook_add_options[] = { // clang-format off - { LLDB_OPT_SET_ALL, false, "one-liner", 'o', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeOneLiner, "Add a command for the stop hook. Can be specified more than once, and commands will be run in the order they appear." }, + { LLDB_OPT_SET_ALL, false, "one-liner", 'o', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeOneLiner, "Specify a one-line breakpoint command inline. Be sure to surround it with quotes." }, { LLDB_OPT_SET_ALL, false, "shlib", 's', OptionParser::eRequiredArgument, nullptr, {}, CommandCompletions::eModuleCompletion, eArgTypeShlibName, "Set the module within which the stop-hook is to be run." }, { LLDB_OPT_SET_ALL, false, "thread-index", 'x', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeThreadIndex, "The stop hook is run only for the thread whose index matches this argument." }, { LLDB_OPT_SET_ALL, false, "thread-id", 't', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeThreadID, "The stop hook is run only for the thread whose TID matches this argument." }, @@ -4566,7 +4566,6 @@ static constexpr OptionDefinition g_targ { LLDB_OPT_SET_1, false, "end-line", 'e', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeLineNum, "Set the end of the line range for which the stop-hook is to be run." }, { LLDB_OPT_SET_2, false, "classname", 'c', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeClassName, "Specify the class within which the stop-hook is to be run." }, { LLDB_OPT_SET_3, false, "name", 'n', OptionParser::eRequiredArgument, nullptr, {}, CommandCompletions::eSymbolCompletion, eArgTypeFunctionName, "Set the function name within which the stop hook will be run." }, - { LLDB_OPT_SET_ALL, false, "auto-continue",'G', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeBoolean, "The breakpoint will auto-continue after running its commands." }, // clang-format on }; @@ -4607,17 +4606,6 @@ public: m_sym_ctx_specified = true; break; - case 'G': { - bool value, success; - value = OptionArgParser::ToBoolean(option_arg, false, &success); - if (success) { - m_auto_continue = value; - } else - error.SetErrorStringWithFormat( - "invalid boolean value '%s' passed for -G option", - option_arg.str().c_str()); - } - break; case 'l': if (option_arg.getAsInteger(0, m_line_start)) { error.SetErrorStringWithFormat("invalid start line number: \"%s\"", @@ -4673,7 +4661,7 @@ public: case 'o': m_use_one_liner = true; - m_one_liner.push_back(option_arg); + m_one_liner = option_arg; break; default: @@ -4702,7 +4690,6 @@ public: m_use_one_liner = false; m_one_liner.clear(); - m_auto_continue = false; } std::string m_class_name; @@ -4721,8 +4708,7 @@ public: bool m_thread_specified; // Instance variables to hold the values for one_liner options. bool m_use_one_liner; - std::vector<std::string> m_one_liner; - bool m_auto_continue; + std::string m_one_liner; }; CommandObjectTargetStopHookAdd(CommandInterpreter &interpreter) @@ -4847,13 +4833,10 @@ protected: new_hook_sp->SetThreadSpecifier(thread_spec); } - - new_hook_sp->SetAutoContinue(m_options.m_auto_continue); if (m_options.m_use_one_liner) { - // Use one-liners. - for (auto cmd : m_options.m_one_liner) - new_hook_sp->GetCommandPointer()->AppendString( - cmd.c_str()); + // Use one-liner. + new_hook_sp->GetCommandPointer()->AppendString( + m_options.m_one_liner.c_str()); result.AppendMessageWithFormat("Stop hook #%" PRIu64 " added.\n", new_hook_sp->GetID()); } else { Modified: lldb/trunk/source/Target/Process.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/source/Target/Process.cpp (original) +++ lldb/trunk/source/Target/Process.cpp Fri Feb 22 17:08:17 2019 @@ -1615,8 +1615,6 @@ Status Process::Resume() { return error; } -static const char *g_resume_sync_name = "lldb.Process.ResumeSynchronous.hijack"; - Status Process::ResumeSynchronous(Stream *stream) { Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_STATE | LIBLLDB_LOG_PROCESS)); @@ -1630,7 +1628,7 @@ Status Process::ResumeSynchronous(Stream } ListenerSP listener_sp( - Listener::MakeListener(g_resume_sync_name)); + Listener::MakeListener("lldb.Process.ResumeSynchronous.hijack")); HijackProcessEvents(listener_sp); Status error = PrivateResume(); @@ -1654,11 +1652,6 @@ Status Process::ResumeSynchronous(Stream return error; } -bool Process::IsHijackedForSynchronousResume() { - const char *hijacker_name = GetHijackingListenerName(); - return strcmp(hijacker_name, g_resume_sync_name) == 0; -} - StateType Process::GetPrivateState() { return m_private_state.GetValue(); } void Process::SetPrivateState(StateType new_state) { @@ -4267,20 +4260,11 @@ void Process::ProcessEventData::DoOnRemo // public resume. process_sp->PrivateResume(); } else { - bool hijacked = - process_sp->IsHijackedForEvent(eBroadcastBitStateChanged) - && !process_sp->IsHijackedForSynchronousResume(); - - if (!hijacked) { - // If we didn't restart, run the Stop Hooks here. - // Don't do that if state changed events aren't hooked up to the - // public (or SyncResume) broadcasters. StopHooks are just for - // real public stops. They might also restart the target, - // so watch for that. - process_sp->GetTarget().RunStopHooks(); - if (process_sp->GetPrivateState() == eStateRunning) - SetRestarted(true); - } + // If we didn't restart, run the Stop Hooks here: They might also + // restart the target, so watch for that. + process_sp->GetTarget().RunStopHooks(); + if (process_sp->GetPrivateState() == eStateRunning) + SetRestarted(true); } } } Modified: lldb/trunk/source/Target/Target.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=354711&r1=354710&r2=354711&view=diff ============================================================================== --- lldb/trunk/source/Target/Target.cpp (original) +++ lldb/trunk/source/Target/Target.cpp Fri Feb 22 17:08:17 2019 @@ -2554,14 +2554,12 @@ void Target::RunStopHooks() { StopHookCollection::iterator pos, end = m_stop_hooks.end(); - // If there aren't any active stop hooks, don't bother either. - // Also see if any of the active hooks want to auto-continue. + // If there aren't any active stop hooks, don't bother either: bool any_active_hooks = false; - bool auto_continue = false; - for (auto hook : m_stop_hooks) { - if (hook.second->IsActive()) { + for (pos = m_stop_hooks.begin(); pos != end; pos++) { + if ((*pos).second->IsActive()) { any_active_hooks = true; - auto_continue |= hook.second->GetAutoContinue(); + break; } } if (!any_active_hooks) @@ -2597,7 +2595,6 @@ void Target::RunStopHooks() { bool hooks_ran = false; bool print_hook_header = (m_stop_hooks.size() != 1); bool print_thread_header = (num_exe_ctx != 1); - bool did_restart = false; for (pos = m_stop_hooks.begin(); keep_going && pos != end; pos++) { // result.Clear(); @@ -2642,13 +2639,10 @@ void Target::RunStopHooks() { options.SetPrintResults(true); options.SetAddToHistory(false); - // Force Async: - bool old_async = GetDebugger().GetAsyncExecution(); - GetDebugger().SetAsyncExecution(true); GetDebugger().GetCommandInterpreter().HandleCommands( cur_hook_sp->GetCommands(), &exc_ctx_with_reasons[i], options, result); - GetDebugger().SetAsyncExecution(old_async); + // If the command started the target going again, we should bag out of // running the stop hooks. if ((result.GetStatus() == eReturnStatusSuccessContinuingNoResult) || @@ -2657,19 +2651,13 @@ void Target::RunStopHooks() { StopHookCollection::iterator tmp = pos; if (++tmp != end) result.AppendMessageWithFormat("\nAborting stop hooks, hook %" PRIu64 - " set the program running.\n" - " Consider using '-G true' to make " - "stop hooks auto-continue.\n", + " set the program running.\n", cur_hook_sp->GetID()); keep_going = false; - did_restart = true; } } } } - // Finally, if auto-continue was requested, do it now: - if (!did_restart && auto_continue) - m_process_sp->PrivateResume(); result.GetImmediateOutputStream()->Flush(); result.GetImmediateErrorStream()->Flush(); @@ -3155,13 +3143,12 @@ void Target::FinalizeFileActions(Process //-------------------------------------------------------------- Target::StopHook::StopHook(lldb::TargetSP target_sp, lldb::user_id_t uid) : UserID(uid), m_target_sp(target_sp), m_commands(), m_specifier_sp(), - m_thread_spec_up() {} + m_thread_spec_up(), m_active(true) {} Target::StopHook::StopHook(const StopHook &rhs) : UserID(rhs.GetID()), m_target_sp(rhs.m_target_sp), m_commands(rhs.m_commands), m_specifier_sp(rhs.m_specifier_sp), - m_thread_spec_up(), m_active(rhs.m_active), - m_auto_continue(rhs.m_auto_continue) { + m_thread_spec_up(), m_active(rhs.m_active) { if (rhs.m_thread_spec_up) m_thread_spec_up.reset(new ThreadSpec(*rhs.m_thread_spec_up)); } @@ -3188,9 +3175,6 @@ void Target::StopHook::GetDescription(St else s->Indent("State: disabled\n"); - if (m_auto_continue) - s->Indent("AutoContinue on\n"); - if (m_specifier_sp) { s->Indent(); s->PutCString("Specifier:\n"); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits