LLDB mainline
Process.cpp
Go to the documentation of this file.
1//===-- Process.cpp -------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include <atomic>
10#include <memory>
11#include <mutex>
12#include <optional>
13
14#include "llvm/ADT/ScopeExit.h"
15#include "llvm/Support/ScopedPrinter.h"
16#include "llvm/Support/Threading.h"
17
20#include "lldb/Core/Debugger.h"
21#include "lldb/Core/Module.h"
24#include "lldb/Core/Progress.h"
31#include "lldb/Host/Host.h"
32#include "lldb/Host/HostInfo.h"
34#include "lldb/Host/Pipe.h"
35#include "lldb/Host/Terminal.h"
41#include "lldb/Symbol/Symbol.h"
42#include "lldb/Target/ABI.h"
54#include "lldb/Target/Process.h"
59#include "lldb/Target/Target.h"
61#include "lldb/Target/Thread.h"
69#include "lldb/Utility/Event.h"
71#include "lldb/Utility/Log.h"
75#include "lldb/Utility/State.h"
76#include "lldb/Utility/Timer.h"
77
78using namespace lldb;
79using namespace lldb_private;
80using namespace std::chrono;
81
82// Comment out line below to disable memory caching, overriding the process
83// setting target.process.disable-memory-cache
84#define ENABLE_MEMORY_CACHING
85
86#ifdef ENABLE_MEMORY_CACHING
87#define DISABLE_MEM_CACHE_DEFAULT false
88#else
89#define DISABLE_MEM_CACHE_DEFAULT true
90#endif
91
93 : public Cloneable<ProcessOptionValueProperties, OptionValueProperties> {
94public:
95 ProcessOptionValueProperties(llvm::StringRef name) : Cloneable(name) {}
96
97 const Property *
99 const ExecutionContext *exe_ctx) const override {
100 // When getting the value for a key from the process options, we will
101 // always try and grab the setting from the current process if there is
102 // one. Else we just use the one from this instance.
103 if (exe_ctx) {
104 Process *process = exe_ctx->GetProcessPtr();
105 if (process) {
106 ProcessOptionValueProperties *instance_properties =
107 static_cast<ProcessOptionValueProperties *>(
108 process->GetValueProperties().get());
109 if (this != instance_properties)
110 return instance_properties->ProtectedGetPropertyAtIndex(idx);
111 }
112 }
113 return ProtectedGetPropertyAtIndex(idx);
114 }
115};
116
118public:
120 : m_process(process), m_base_addr(base) {}
121
122 bool IsValid() { return m_is_valid; }
123
124 uint8_t operator[](lldb::addr_t offset) {
125 if (!IsValid())
126 return 0;
127
128 uint8_t retval = 0;
130 if (0 == m_process.ReadMemory(m_base_addr + offset, &retval, 1, error)) {
131 m_is_valid = false;
132 return 0;
133 }
134
135 return retval;
136 }
137
138private:
141 bool m_is_valid = true;
142};
143
145 {
147 "parent",
148 "Continue tracing the parent process and detach the child.",
149 },
150 {
152 "child",
153 "Trace the child process and detach the parent.",
154 },
155};
156
157#define LLDB_PROPERTIES_process
158#include "TargetProperties.inc"
159
160enum {
161#define LLDB_PROPERTIES_process
162#include "TargetPropertiesEnum.inc"
164};
165
166#define LLDB_PROPERTIES_process_experimental
167#include "TargetProperties.inc"
168
169enum {
170#define LLDB_PROPERTIES_process_experimental
171#include "TargetPropertiesEnum.inc"
172};
173
175 : public Cloneable<ProcessExperimentalOptionValueProperties,
176 OptionValueProperties> {
177public:
179 : Cloneable(Properties::GetExperimentalSettingsName()) {}
180};
181
185 m_collection_sp->Initialize(g_process_experimental_properties);
186}
187
189 : Properties(),
190 m_process(process) // Can be nullptr for global ProcessProperties
191{
192 if (process == nullptr) {
193 // Global process properties, set them up one time
194 m_collection_sp = std::make_shared<ProcessOptionValueProperties>("process");
195 m_collection_sp->Initialize(g_process_properties);
196 m_collection_sp->AppendProperty(
197 "thread", "Settings specific to threads.", true,
199 } else {
202 m_collection_sp->SetValueChangedCallback(
203 ePropertyPythonOSPluginPath,
204 [this] { m_process->LoadOperatingSystemPlugin(true); });
205 }
206
208 std::make_unique<ProcessExperimentalProperties>();
209 m_collection_sp->AppendProperty(
211 "Experimental settings - setting these won't produce "
212 "errors if the setting is not present.",
213 true, m_experimental_properties_up->GetValueProperties());
214}
215
217
219 const uint32_t idx = ePropertyDisableMemCache;
220 return GetPropertyAtIndexAs<bool>(
221 idx, g_process_properties[idx].default_uint_value != 0);
222}
223
225 const uint32_t idx = ePropertyMemCacheLineSize;
226 return GetPropertyAtIndexAs<uint64_t>(
227 idx, g_process_properties[idx].default_uint_value);
228}
229
231 Args args;
232 const uint32_t idx = ePropertyExtraStartCommand;
233 m_collection_sp->GetPropertyAtIndexAsArgs(idx, args);
234 return args;
235}
236
238 const uint32_t idx = ePropertyExtraStartCommand;
239 m_collection_sp->SetPropertyAtIndexFromArgs(idx, args);
240}
241
243 const uint32_t idx = ePropertyPythonOSPluginPath;
244 return GetPropertyAtIndexAs<FileSpec>(idx, {});
245}
246
248 const uint32_t idx = ePropertyVirtualAddressableBits;
249 return GetPropertyAtIndexAs<uint64_t>(
250 idx, g_process_properties[idx].default_uint_value);
251}
252
254 const uint32_t idx = ePropertyVirtualAddressableBits;
255 SetPropertyAtIndex(idx, static_cast<uint64_t>(bits));
256}
257
259 const uint32_t idx = ePropertyHighmemVirtualAddressableBits;
260 return GetPropertyAtIndexAs<uint64_t>(
261 idx, g_process_properties[idx].default_uint_value);
262}
263
265 const uint32_t idx = ePropertyHighmemVirtualAddressableBits;
266 SetPropertyAtIndex(idx, static_cast<uint64_t>(bits));
267}
268
270 const uint32_t idx = ePropertyPythonOSPluginPath;
271 SetPropertyAtIndex(idx, file);
272}
273
275 const uint32_t idx = ePropertyIgnoreBreakpointsInExpressions;
276 return GetPropertyAtIndexAs<bool>(
277 idx, g_process_properties[idx].default_uint_value != 0);
278}
279
281 const uint32_t idx = ePropertyIgnoreBreakpointsInExpressions;
282 SetPropertyAtIndex(idx, ignore);
283}
284
286 const uint32_t idx = ePropertyUnwindOnErrorInExpressions;
287 return GetPropertyAtIndexAs<bool>(
288 idx, g_process_properties[idx].default_uint_value != 0);
289}
290
292 const uint32_t idx = ePropertyUnwindOnErrorInExpressions;
293 SetPropertyAtIndex(idx, ignore);
294}
295
297 const uint32_t idx = ePropertyStopOnSharedLibraryEvents;
298 return GetPropertyAtIndexAs<bool>(
299 idx, g_process_properties[idx].default_uint_value != 0);
300}
301
303 const uint32_t idx = ePropertyStopOnSharedLibraryEvents;
304 SetPropertyAtIndex(idx, stop);
305}
306
308 const uint32_t idx = ePropertyDisableLangRuntimeUnwindPlans;
309 return GetPropertyAtIndexAs<bool>(
310 idx, g_process_properties[idx].default_uint_value != 0);
311}
312
314 const uint32_t idx = ePropertyDisableLangRuntimeUnwindPlans;
315 SetPropertyAtIndex(idx, disable);
316 m_process->Flush();
317}
318
320 const uint32_t idx = ePropertyDetachKeepsStopped;
321 return GetPropertyAtIndexAs<bool>(
322 idx, g_process_properties[idx].default_uint_value != 0);
323}
324
326 const uint32_t idx = ePropertyDetachKeepsStopped;
327 SetPropertyAtIndex(idx, stop);
328}
329
331 const uint32_t idx = ePropertyWarningOptimization;
332 return GetPropertyAtIndexAs<bool>(
333 idx, g_process_properties[idx].default_uint_value != 0);
334}
335
337 const uint32_t idx = ePropertyWarningUnsupportedLanguage;
338 return GetPropertyAtIndexAs<bool>(
339 idx, g_process_properties[idx].default_uint_value != 0);
340}
341
343 const uint32_t idx = ePropertyStopOnExec;
344 return GetPropertyAtIndexAs<bool>(
345 idx, g_process_properties[idx].default_uint_value != 0);
346}
347
349 const uint32_t idx = ePropertyUtilityExpressionTimeout;
350 uint64_t value = GetPropertyAtIndexAs<uint64_t>(
351 idx, g_process_properties[idx].default_uint_value);
352 return std::chrono::seconds(value);
353}
354
355std::chrono::seconds ProcessProperties::GetInterruptTimeout() const {
356 const uint32_t idx = ePropertyInterruptTimeout;
357 uint64_t value = GetPropertyAtIndexAs<uint64_t>(
358 idx, g_process_properties[idx].default_uint_value);
359 return std::chrono::seconds(value);
360}
361
363 const uint32_t idx = ePropertySteppingRunsAllThreads;
364 return GetPropertyAtIndexAs<bool>(
365 idx, g_process_properties[idx].default_uint_value != 0);
366}
367
369 const bool fail_value = true;
370 const Property *exp_property =
371 m_collection_sp->GetPropertyAtIndex(ePropertyExperimental);
372 OptionValueProperties *exp_values =
373 exp_property->GetValue()->GetAsProperties();
374 if (!exp_values)
375 return fail_value;
376
377 return exp_values
378 ->GetPropertyAtIndexAs<bool>(ePropertyOSPluginReportsAllThreads)
379 .value_or(fail_value);
380}
381
383 const Property *exp_property =
384 m_collection_sp->GetPropertyAtIndex(ePropertyExperimental);
385 OptionValueProperties *exp_values =
386 exp_property->GetValue()->GetAsProperties();
387 if (exp_values)
388 exp_values->SetPropertyAtIndex(ePropertyOSPluginReportsAllThreads,
389 does_report);
390}
391
393 const uint32_t idx = ePropertyFollowForkMode;
394 return GetPropertyAtIndexAs<FollowForkMode>(
395 idx, static_cast<FollowForkMode>(
396 g_process_properties[idx].default_uint_value));
397}
398
400 llvm::StringRef plugin_name,
401 ListenerSP listener_sp,
402 const FileSpec *crash_file_path,
403 bool can_connect) {
404 static uint32_t g_process_unique_id = 0;
405
406 ProcessSP process_sp;
407 ProcessCreateInstance create_callback = nullptr;
408 if (!plugin_name.empty()) {
409 create_callback =
411 if (create_callback) {
412 process_sp = create_callback(target_sp, listener_sp, crash_file_path,
413 can_connect);
414 if (process_sp) {
415 if (process_sp->CanDebug(target_sp, true)) {
416 process_sp->m_process_unique_id = ++g_process_unique_id;
417 } else
418 process_sp.reset();
419 }
420 }
421 } else {
422 for (uint32_t idx = 0;
423 (create_callback =
425 ++idx) {
426 process_sp = create_callback(target_sp, listener_sp, crash_file_path,
427 can_connect);
428 if (process_sp) {
429 if (process_sp->CanDebug(target_sp, false)) {
430 process_sp->m_process_unique_id = ++g_process_unique_id;
431 break;
432 } else
433 process_sp.reset();
434 }
435 }
436 }
437 return process_sp;
438}
439
441 static constexpr llvm::StringLiteral class_name("lldb.process");
442 return class_name;
443}
444
446 : Process(target_sp, listener_sp, UnixSignals::CreateForHost()) {
447 // This constructor just delegates to the full Process constructor,
448 // defaulting to using the Host's UnixSignals.
449}
450
452 const UnixSignalsSP &unix_signals_sp)
453 : ProcessProperties(this),
454 Broadcaster((target_sp->GetDebugger().GetBroadcasterManager()),
455 Process::GetStaticBroadcasterClass().str()),
456 m_target_wp(target_sp), m_public_state(eStateUnloaded),
457 m_private_state(eStateUnloaded),
458 m_private_state_broadcaster(nullptr,
459 "lldb.process.internal_state_broadcaster"),
460 m_private_state_control_broadcaster(
461 nullptr, "lldb.process.internal_state_control_broadcaster"),
462 m_private_state_listener_sp(
463 Listener::MakeListener("lldb.process.internal_state_listener")),
464 m_mod_id(), m_process_unique_id(0), m_thread_index_id(0),
465 m_thread_id_to_index_id_map(), m_exit_status(-1),
466 m_thread_list_real(*this), m_thread_list(*this), m_thread_plans(*this),
467 m_extended_thread_list(*this), m_extended_thread_stop_id(0),
468 m_queue_list(this), m_queue_list_stop_id(0),
469 m_unix_signals_sp(unix_signals_sp), m_abi_sp(), m_process_input_reader(),
470 m_stdio_communication("process.stdio"), m_stdio_communication_mutex(),
471 m_stdin_forward(false), m_stdout_data(), m_stderr_data(),
472 m_profile_data_comm_mutex(), m_profile_data(), m_iohandler_sync(0),
473 m_memory_cache(*this), m_allocated_memory_cache(*this),
474 m_should_detach(false), m_next_event_action_up(), m_public_run_lock(),
475 m_private_run_lock(), m_currently_handling_do_on_removals(false),
476 m_resume_requested(false), m_interrupt_tid(LLDB_INVALID_THREAD_ID),
477 m_finalizing(false), m_destructing(false),
478 m_clear_thread_plans_on_stop(false), m_force_next_event_delivery(false),
479 m_last_broadcast_state(eStateInvalid), m_destroy_in_process(false),
480 m_can_interpret_function_calls(false), m_run_thread_plan_lock(),
481 m_can_jit(eCanJITDontKnow),
482 m_crash_info_dict_sp(new StructuredData::Dictionary()) {
484
485 Log *log = GetLog(LLDBLog::Object);
486 LLDB_LOGF(log, "%p Process::Process()", static_cast<void *>(this));
487
489 m_unix_signals_sp = std::make_shared<UnixSignals>();
490
491 SetEventName(eBroadcastBitStateChanged, "state-changed");
493 SetEventName(eBroadcastBitSTDOUT, "stdout-available");
494 SetEventName(eBroadcastBitSTDERR, "stderr-available");
495 SetEventName(eBroadcastBitProfileData, "profile-data-available");
496 SetEventName(eBroadcastBitStructuredData, "structured-data-available");
497
499 eBroadcastInternalStateControlStop, "control-stop");
501 eBroadcastInternalStateControlPause, "control-pause");
503 eBroadcastInternalStateControlResume, "control-resume");
504
505 // The listener passed into process creation is the primary listener:
506 // It always listens for all the event bits for Process:
507 SetPrimaryListener(listener_sp);
508
509 m_private_state_listener_sp->StartListeningForEvents(
512
513 m_private_state_listener_sp->StartListeningForEvents(
517 // We need something valid here, even if just the default UnixSignalsSP.
518 assert(m_unix_signals_sp && "null m_unix_signals_sp after initialization");
519
520 // Allow the platform to override the default cache line size
521 OptionValueSP value_sp =
522 m_collection_sp->GetPropertyAtIndex(ePropertyMemCacheLineSize)
523 ->GetValue();
524 uint64_t platform_cache_line_size =
525 target_sp->GetPlatform()->GetDefaultMemoryCacheLineSize();
526 if (!value_sp->OptionWasSet() && platform_cache_line_size != 0)
527 value_sp->SetValueAs(platform_cache_line_size);
528
529 // FIXME: Frame recognizer registration should not be done in Target.
530 // We should have a plugin do the registration instead, for example, a
531 // common C LanguageRuntime plugin.
534}
535
537 Log *log = GetLog(LLDBLog::Object);
538 LLDB_LOGF(log, "%p Process::~Process()", static_cast<void *>(this));
540
541 // ThreadList::Clear() will try to acquire this process's mutex, so
542 // explicitly clear the thread list here to ensure that the mutex is not
543 // destroyed before the thread list.
545}
546
548 // NOTE: intentional leak so we don't crash if global destructor chain gets
549 // called as other threads still use the result of this function
550 static ProcessProperties *g_settings_ptr =
551 new ProcessProperties(nullptr);
552 return *g_settings_ptr;
553}
554
555void Process::Finalize(bool destructing) {
556 if (m_finalizing.exchange(true))
557 return;
558 if (destructing)
559 m_destructing.exchange(true);
560
561 // Destroy the process. This will call the virtual function DoDestroy under
562 // the hood, giving our derived class a chance to do the ncessary tear down.
563 DestroyImpl(false);
564
565 // Clear our broadcaster before we proceed with destroying
567
568 // Do any cleanup needed prior to being destructed... Subclasses that
569 // override this method should call this superclass method as well.
570
571 // We need to destroy the loader before the derived Process class gets
572 // destroyed since it is very likely that undoing the loader will require
573 // access to the real process.
574 m_dynamic_checkers_up.reset();
575 m_abi_sp.reset();
576 m_os_up.reset();
577 m_system_runtime_up.reset();
578 m_dyld_up.reset();
579 m_jit_loaders_up.reset();
587 std::vector<Notifications> empty_notifications;
588 m_notifications.swap(empty_notifications);
589 m_image_tokens.clear();
591 m_allocated_memory_cache.Clear(/*deallocate_memory=*/true);
592 {
593 std::lock_guard<std::recursive_mutex> guard(m_language_runtimes_mutex);
594 m_language_runtimes.clear();
595 }
598 // Clear the last natural stop ID since it has a strong reference to this
599 // process
601 // We have to be very careful here as the m_private_state_listener might
602 // contain events that have ProcessSP values in them which can keep this
603 // process around forever. These events need to be cleared out.
605 m_public_run_lock.TrySetRunning(); // This will do nothing if already locked
607 m_private_run_lock.TrySetRunning(); // This will do nothing if already locked
610}
611
613 m_notifications.push_back(callbacks);
614 if (callbacks.initialize != nullptr)
615 callbacks.initialize(callbacks.baton, this);
616}
617
619 std::vector<Notifications>::iterator pos, end = m_notifications.end();
620 for (pos = m_notifications.begin(); pos != end; ++pos) {
621 if (pos->baton == callbacks.baton &&
622 pos->initialize == callbacks.initialize &&
623 pos->process_state_changed == callbacks.process_state_changed) {
624 m_notifications.erase(pos);
625 return true;
626 }
627 }
628 return false;
629}
630
632 std::vector<Notifications>::iterator notification_pos,
633 notification_end = m_notifications.end();
634 for (notification_pos = m_notifications.begin();
635 notification_pos != notification_end; ++notification_pos) {
636 if (notification_pos->process_state_changed)
637 notification_pos->process_state_changed(notification_pos->baton, this,
638 state);
639 }
640}
641
642// FIXME: We need to do some work on events before the general Listener sees
643// them.
644// For instance if we are continuing from a breakpoint, we need to ensure that
645// we do the little "insert real insn, step & stop" trick. But we can't do
646// that when the event is delivered by the broadcaster - since that is done on
647// the thread that is waiting for new events, so if we needed more than one
648// event for our handling, we would stall. So instead we do it when we fetch
649// the event off of the queue.
650//
651
653 StateType state = eStateInvalid;
654
655 if (GetPrimaryListener()->GetEventForBroadcaster(this, event_sp,
656 std::chrono::seconds(0)) &&
657 event_sp)
658 state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
659
660 return state;
661}
662
663void Process::SyncIOHandler(uint32_t iohandler_id,
664 const Timeout<std::micro> &timeout) {
665 // don't sync (potentially context switch) in case where there is no process
666 // IO
668 return;
669
670 auto Result = m_iohandler_sync.WaitForValueNotEqualTo(iohandler_id, timeout);
671
673 if (Result) {
674 LLDB_LOG(
675 log,
676 "waited from m_iohandler_sync to change from {0}. New value is {1}.",
677 iohandler_id, *Result);
678 } else {
679 LLDB_LOG(log, "timed out waiting for m_iohandler_sync to change from {0}.",
680 iohandler_id);
681 }
682}
683
685 const Timeout<std::micro> &timeout, EventSP *event_sp_ptr, bool wait_always,
686 ListenerSP hijack_listener_sp, Stream *stream, bool use_run_lock,
687 SelectMostRelevant select_most_relevant) {
688 // We can't just wait for a "stopped" event, because the stopped event may
689 // have restarted the target. We have to actually check each event, and in
690 // the case of a stopped event check the restarted flag on the event.
691 if (event_sp_ptr)
692 event_sp_ptr->reset();
693 StateType state = GetState();
694 // If we are exited or detached, we won't ever get back to any other valid
695 // state...
696 if (state == eStateDetached || state == eStateExited)
697 return state;
698
700 LLDB_LOG(log, "timeout = {0}", timeout);
701
702 if (!wait_always && StateIsStoppedState(state, true) &&
704 LLDB_LOGF(log,
705 "Process::%s returning without waiting for events; process "
706 "private and public states are already 'stopped'.",
707 __FUNCTION__);
708 // We need to toggle the run lock as this won't get done in
709 // SetPublicState() if the process is hijacked.
710 if (hijack_listener_sp && use_run_lock)
712 return state;
713 }
714
715 while (state != eStateInvalid) {
716 EventSP event_sp;
717 state = GetStateChangedEvents(event_sp, timeout, hijack_listener_sp);
718 if (event_sp_ptr && event_sp)
719 *event_sp_ptr = event_sp;
720
721 bool pop_process_io_handler = (hijack_listener_sp.get() != nullptr);
723 event_sp, stream, select_most_relevant, pop_process_io_handler);
724
725 switch (state) {
726 case eStateCrashed:
727 case eStateDetached:
728 case eStateExited:
729 case eStateUnloaded:
730 // We need to toggle the run lock as this won't get done in
731 // SetPublicState() if the process is hijacked.
732 if (hijack_listener_sp && use_run_lock)
734 return state;
735 case eStateStopped:
737 continue;
738 else {
739 // We need to toggle the run lock as this won't get done in
740 // SetPublicState() if the process is hijacked.
741 if (hijack_listener_sp && use_run_lock)
743 return state;
744 }
745 default:
746 continue;
747 }
748 }
749 return state;
750}
751
753 const EventSP &event_sp, Stream *stream,
754 SelectMostRelevant select_most_relevant,
755 bool &pop_process_io_handler) {
756 const bool handle_pop = pop_process_io_handler;
757
758 pop_process_io_handler = false;
759 ProcessSP process_sp =
761
762 if (!process_sp)
763 return false;
764
765 StateType event_state =
767 if (event_state == eStateInvalid)
768 return false;
769
770 switch (event_state) {
771 case eStateInvalid:
772 case eStateUnloaded:
773 case eStateAttaching:
774 case eStateLaunching:
775 case eStateStepping:
776 case eStateDetached:
777 if (stream)
778 stream->Printf("Process %" PRIu64 " %s\n", process_sp->GetID(),
779 StateAsCString(event_state));
780 if (event_state == eStateDetached)
781 pop_process_io_handler = true;
782 break;
783
784 case eStateConnected:
785 case eStateRunning:
786 // Don't be chatty when we run...
787 break;
788
789 case eStateExited:
790 if (stream)
791 process_sp->GetStatus(*stream);
792 pop_process_io_handler = true;
793 break;
794
795 case eStateStopped:
796 case eStateCrashed:
797 case eStateSuspended:
798 // Make sure the program hasn't been auto-restarted:
800 if (stream) {
801 size_t num_reasons =
803 if (num_reasons > 0) {
804 // FIXME: Do we want to report this, or would that just be annoyingly
805 // chatty?
806 if (num_reasons == 1) {
807 const char *reason =
809 event_sp.get(), 0);
810 stream->Printf("Process %" PRIu64 " stopped and restarted: %s\n",
811 process_sp->GetID(),
812 reason ? reason : "<UNKNOWN REASON>");
813 } else {
814 stream->Printf("Process %" PRIu64
815 " stopped and restarted, reasons:\n",
816 process_sp->GetID());
817
818 for (size_t i = 0; i < num_reasons; i++) {
819 const char *reason =
821 event_sp.get(), i);
822 stream->Printf("\t%s\n", reason ? reason : "<UNKNOWN REASON>");
823 }
824 }
825 }
826 }
827 } else {
828 StopInfoSP curr_thread_stop_info_sp;
829 // Lock the thread list so it doesn't change on us, this is the scope for
830 // the locker:
831 {
832 ThreadList &thread_list = process_sp->GetThreadList();
833 std::lock_guard<std::recursive_mutex> guard(thread_list.GetMutex());
834
835 ThreadSP curr_thread(thread_list.GetSelectedThread());
836 ThreadSP thread;
837 StopReason curr_thread_stop_reason = eStopReasonInvalid;
838 bool prefer_curr_thread = false;
839 if (curr_thread && curr_thread->IsValid()) {
840 curr_thread_stop_reason = curr_thread->GetStopReason();
841 switch (curr_thread_stop_reason) {
842 case eStopReasonNone:
844 // Don't prefer the current thread if it didn't stop for a reason.
845 break;
846 case eStopReasonSignal: {
847 // We need to do the same computation we do for other threads
848 // below in case the current thread happens to be the one that
849 // stopped for the no-stop signal.
850 uint64_t signo = curr_thread->GetStopInfo()->GetValue();
851 if (process_sp->GetUnixSignals()->GetShouldStop(signo))
852 prefer_curr_thread = true;
853 } break;
854 default:
855 prefer_curr_thread = true;
856 break;
857 }
858 curr_thread_stop_info_sp = curr_thread->GetStopInfo();
859 }
860
861 if (!prefer_curr_thread) {
862 // Prefer a thread that has just completed its plan over another
863 // thread as current thread.
864 ThreadSP plan_thread;
865 ThreadSP other_thread;
866
867 const size_t num_threads = thread_list.GetSize();
868 size_t i;
869 for (i = 0; i < num_threads; ++i) {
870 thread = thread_list.GetThreadAtIndex(i);
871 StopReason thread_stop_reason = thread->GetStopReason();
872 switch (thread_stop_reason) {
874 case eStopReasonNone:
875 break;
876
877 case eStopReasonSignal: {
878 // Don't select a signal thread if we weren't going to stop at
879 // that signal. We have to have had another reason for stopping
880 // here, and the user doesn't want to see this thread.
881 uint64_t signo = thread->GetStopInfo()->GetValue();
882 if (process_sp->GetUnixSignals()->GetShouldStop(signo)) {
883 if (!other_thread)
884 other_thread = thread;
885 }
886 break;
887 }
888 case eStopReasonTrace:
892 case eStopReasonExec:
893 case eStopReasonFork:
894 case eStopReasonVFork:
900 if (!other_thread)
901 other_thread = thread;
902 break;
904 if (!plan_thread)
905 plan_thread = thread;
906 break;
907 }
908 }
909 if (plan_thread)
910 thread_list.SetSelectedThreadByID(plan_thread->GetID());
911 else if (other_thread)
912 thread_list.SetSelectedThreadByID(other_thread->GetID());
913 else {
914 if (curr_thread && curr_thread->IsValid())
915 thread = curr_thread;
916 else
917 thread = thread_list.GetThreadAtIndex(0);
918
919 if (thread)
920 thread_list.SetSelectedThreadByID(thread->GetID());
921 }
922 }
923 }
924 // Drop the ThreadList mutex by here, since GetThreadStatus below might
925 // have to run code, e.g. for Data formatters, and if we hold the
926 // ThreadList mutex, then the process is going to have a hard time
927 // restarting the process.
928 if (stream) {
929 Debugger &debugger = process_sp->GetTarget().GetDebugger();
930 if (debugger.GetTargetList().GetSelectedTarget().get() ==
931 &process_sp->GetTarget()) {
932 ThreadSP thread_sp = process_sp->GetThreadList().GetSelectedThread();
933
934 if (!thread_sp || !thread_sp->IsValid())
935 return false;
936
937 const bool only_threads_with_stop_reason = true;
938 const uint32_t start_frame =
939 thread_sp->GetSelectedFrameIndex(select_most_relevant);
940 const uint32_t num_frames = 1;
941 const uint32_t num_frames_with_source = 1;
942 const bool stop_format = true;
943
944 process_sp->GetStatus(*stream);
945 process_sp->GetThreadStatus(*stream, only_threads_with_stop_reason,
946 start_frame, num_frames,
947 num_frames_with_source,
948 stop_format);
949 if (curr_thread_stop_info_sp) {
950 lldb::addr_t crashing_address;
952 curr_thread_stop_info_sp, &crashing_address);
953 if (valobj_sp) {
957 stream->PutCString("Likely cause: ");
958 valobj_sp->GetExpressionPath(*stream, format);
959 stream->Printf(" accessed 0x%" PRIx64 "\n", crashing_address);
960 }
961 }
962 } else {
963 uint32_t target_idx = debugger.GetTargetList().GetIndexOfTarget(
964 process_sp->GetTarget().shared_from_this());
965 if (target_idx != UINT32_MAX)
966 stream->Printf("Target %d: (", target_idx);
967 else
968 stream->Printf("Target <unknown index>: (");
969 process_sp->GetTarget().Dump(stream, eDescriptionLevelBrief);
970 stream->Printf(") stopped.\n");
971 }
972 }
973
974 // Pop the process IO handler
975 pop_process_io_handler = true;
976 }
977 break;
978 }
979
980 if (handle_pop && pop_process_io_handler)
981 process_sp->PopProcessIOHandler();
982
983 return true;
984}
985
987 if (listener_sp) {
988 return HijackBroadcaster(listener_sp, eBroadcastBitStateChanged |
990 } else
991 return false;
992}
993
995
997 const Timeout<std::micro> &timeout,
998 ListenerSP hijack_listener_sp) {
1000 LLDB_LOG(log, "timeout = {0}, event_sp)...", timeout);
1001
1002 ListenerSP listener_sp = hijack_listener_sp;
1003 if (!listener_sp)
1004 listener_sp = GetPrimaryListener();
1005
1006 StateType state = eStateInvalid;
1007 if (listener_sp->GetEventForBroadcasterWithType(
1009 timeout)) {
1010 if (event_sp && event_sp->GetType() == eBroadcastBitStateChanged)
1011 state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
1012 else
1013 LLDB_LOG(log, "got no event or was interrupted.");
1014 }
1015
1016 LLDB_LOG(log, "timeout = {0}, event_sp) => {1}", timeout, state);
1017 return state;
1018}
1019
1021 Log *log = GetLog(LLDBLog::Process);
1022
1023 LLDB_LOGF(log, "Process::%s...", __FUNCTION__);
1024
1025 Event *event_ptr;
1026 event_ptr = GetPrimaryListener()->PeekAtNextEventForBroadcasterWithType(
1028 if (log) {
1029 if (event_ptr) {
1030 LLDB_LOGF(log, "Process::%s (event_ptr) => %s", __FUNCTION__,
1032 } else {
1033 LLDB_LOGF(log, "Process::%s no events found", __FUNCTION__);
1034 }
1035 }
1036 return event_ptr;
1037}
1038
1041 const Timeout<std::micro> &timeout) {
1042 Log *log = GetLog(LLDBLog::Process);
1043 LLDB_LOG(log, "timeout = {0}, event_sp)...", timeout);
1044
1045 StateType state = eStateInvalid;
1046 if (m_private_state_listener_sp->GetEventForBroadcasterWithType(
1049 timeout))
1050 if (event_sp && event_sp->GetType() == eBroadcastBitStateChanged)
1051 state = Process::ProcessEventData::GetStateFromEvent(event_sp.get());
1052
1053 LLDB_LOG(log, "timeout = {0}, event_sp) => {1}", timeout,
1054 state == eStateInvalid ? "TIMEOUT" : StateAsCString(state));
1055 return state;
1056}
1057
1059 const Timeout<std::micro> &timeout,
1060 bool control_only) {
1061 Log *log = GetLog(LLDBLog::Process);
1062 LLDB_LOG(log, "timeout = {0}, event_sp)...", timeout);
1063
1064 if (control_only)
1065 return m_private_state_listener_sp->GetEventForBroadcaster(
1066 &m_private_state_control_broadcaster, event_sp, timeout);
1067 else
1068 return m_private_state_listener_sp->GetEvent(event_sp, timeout);
1069}
1070
1073}
1074
1076 std::lock_guard<std::mutex> guard(m_exit_status_mutex);
1077
1079 return m_exit_status;
1080 return -1;
1081}
1082
1084 std::lock_guard<std::mutex> guard(m_exit_status_mutex);
1085
1087 return m_exit_string.c_str();
1088 return nullptr;
1089}
1090
1091bool Process::SetExitStatus(int status, llvm::StringRef exit_string) {
1092 // Use a mutex to protect setting the exit status.
1093 std::lock_guard<std::mutex> guard(m_exit_status_mutex);
1094
1096 LLDB_LOG(log, "(plugin = {0} status = {1} ({1:x8}), description=\"{2}\")",
1097 GetPluginName(), status, exit_string);
1098
1099 // We were already in the exited state
1101 LLDB_LOG(
1102 log,
1103 "(plugin = {0}) ignoring exit status because state was already set "
1104 "to eStateExited",
1105 GetPluginName());
1106 return false;
1107 }
1108
1109 m_exit_status = status;
1110 if (!exit_string.empty())
1111 m_exit_string = exit_string.str();
1112 else
1113 m_exit_string.clear();
1114
1115 // Clear the last natural stop ID since it has a strong reference to this
1116 // process
1118
1120
1121 // Allow subclasses to do some cleanup
1122 DidExit();
1123
1124 return true;
1125}
1126
1128 switch (m_private_state.GetValue()) {
1129 case eStateConnected:
1130 case eStateAttaching:
1131 case eStateLaunching:
1132 case eStateStopped:
1133 case eStateRunning:
1134 case eStateStepping:
1135 case eStateCrashed:
1136 case eStateSuspended:
1137 return true;
1138 default:
1139 return false;
1140 }
1141}
1142
1143// This static callback can be used to watch for local child processes on the
1144// current host. The child process exits, the process will be found in the
1145// global target list (we want to be completely sure that the
1146// lldb_private::Process doesn't go away before we can deliver the signal.
1148 lldb::pid_t pid, bool exited,
1149 int signo, // Zero for no signal
1150 int exit_status // Exit value of process if signal is zero
1151 ) {
1152 Log *log = GetLog(LLDBLog::Process);
1153 LLDB_LOGF(log,
1154 "Process::SetProcessExitStatus (pid=%" PRIu64
1155 ", exited=%i, signal=%i, exit_status=%i)\n",
1156 pid, exited, signo, exit_status);
1157
1158 if (exited) {
1160 if (target_sp) {
1161 ProcessSP process_sp(target_sp->GetProcessSP());
1162 if (process_sp) {
1163 llvm::StringRef signal_str =
1164 process_sp->GetUnixSignals()->GetSignalAsStringRef(signo);
1165 process_sp->SetExitStatus(exit_status, signal_str);
1166 }
1167 }
1168 return true;
1169 }
1170 return false;
1171}
1172
1174 ThreadList &new_thread_list) {
1176 return DoUpdateThreadList(old_thread_list, new_thread_list);
1177}
1178
1180 const uint32_t stop_id = GetStopID();
1181 if (m_thread_list.GetSize(false) == 0 ||
1182 stop_id != m_thread_list.GetStopID()) {
1183 bool clear_unused_threads = true;
1184 const StateType state = GetPrivateState();
1185 if (StateIsStoppedState(state, true)) {
1186 std::lock_guard<std::recursive_mutex> guard(m_thread_list.GetMutex());
1187 m_thread_list.SetStopID(stop_id);
1188
1189 // m_thread_list does have its own mutex, but we need to hold onto the
1190 // mutex between the call to UpdateThreadList(...) and the
1191 // os->UpdateThreadList(...) so it doesn't change on us
1192 ThreadList &old_thread_list = m_thread_list;
1193 ThreadList real_thread_list(*this);
1194 ThreadList new_thread_list(*this);
1195 // Always update the thread list with the protocol specific thread list,
1196 // but only update if "true" is returned
1197 if (UpdateThreadList(m_thread_list_real, real_thread_list)) {
1198 // Don't call into the OperatingSystem to update the thread list if we
1199 // are shutting down, since that may call back into the SBAPI's,
1200 // requiring the API lock which is already held by whoever is shutting
1201 // us down, causing a deadlock.
1203 if (os && !m_destroy_in_process) {
1204 // Clear any old backing threads where memory threads might have been
1205 // backed by actual threads from the lldb_private::Process subclass
1206 size_t num_old_threads = old_thread_list.GetSize(false);
1207 for (size_t i = 0; i < num_old_threads; ++i)
1208 old_thread_list.GetThreadAtIndex(i, false)->ClearBackingThread();
1209 // See if the OS plugin reports all threads. If it does, then
1210 // it is safe to clear unseen thread's plans here. Otherwise we
1211 // should preserve them in case they show up again:
1212 clear_unused_threads = GetOSPluginReportsAllThreads();
1213
1214 // Turn off dynamic types to ensure we don't run any expressions.
1215 // Objective-C can run an expression to determine if a SBValue is a
1216 // dynamic type or not and we need to avoid this. OperatingSystem
1217 // plug-ins can't run expressions that require running code...
1218
1219 Target &target = GetTarget();
1220 const lldb::DynamicValueType saved_prefer_dynamic =
1221 target.GetPreferDynamicValue();
1222 if (saved_prefer_dynamic != lldb::eNoDynamicValues)
1224
1225 // Now let the OperatingSystem plug-in update the thread list
1226
1227 os->UpdateThreadList(
1228 old_thread_list, // Old list full of threads created by OS plug-in
1229 real_thread_list, // The actual thread list full of threads
1230 // created by each lldb_private::Process
1231 // subclass
1232 new_thread_list); // The new thread list that we will show to the
1233 // user that gets filled in
1234
1235 if (saved_prefer_dynamic != lldb::eNoDynamicValues)
1236 target.SetPreferDynamicValue(saved_prefer_dynamic);
1237 } else {
1238 // No OS plug-in, the new thread list is the same as the real thread
1239 // list.
1240 new_thread_list = real_thread_list;
1241 }
1242
1243 m_thread_list_real.Update(real_thread_list);
1244 m_thread_list.Update(new_thread_list);
1245 m_thread_list.SetStopID(stop_id);
1246
1248 // Clear any extended threads that we may have accumulated previously
1251
1254 }
1255 }
1256 // Now update the plan stack map.
1257 // If we do have an OS plugin, any absent real threads in the
1258 // m_thread_list have already been removed from the ThreadPlanStackMap.
1259 // So any remaining threads are OS Plugin threads, and those we want to
1260 // preserve in case they show up again.
1261 m_thread_plans.Update(m_thread_list, clear_unused_threads);
1262 }
1263 }
1264}
1265
1267 return m_thread_plans.Find(tid);
1268}
1269
1271 return m_thread_plans.PrunePlansForTID(tid);
1272}
1273
1275 m_thread_plans.Update(GetThreadList(), true, false);
1276}
1277
1279 lldb::DescriptionLevel desc_level,
1280 bool internal, bool condense_trivial,
1281 bool skip_unreported_plans) {
1283 strm, tid, desc_level, internal, condense_trivial, skip_unreported_plans);
1284}
1286 bool internal, bool condense_trivial,
1287 bool skip_unreported_plans) {
1288 m_thread_plans.DumpPlans(strm, desc_level, internal, condense_trivial,
1289 skip_unreported_plans);
1290}
1291
1293 if (m_system_runtime_up) {
1294 if (m_queue_list.GetSize() == 0 ||
1296 const StateType state = GetPrivateState();
1297 if (StateIsStoppedState(state, true)) {
1298 m_system_runtime_up->PopulateQueueList(m_queue_list);
1300 }
1301 }
1302 }
1303}
1304
1307 if (os)
1308 return os->CreateThread(tid, context);
1309 return ThreadSP();
1310}
1311
1312uint32_t Process::GetNextThreadIndexID(uint64_t thread_id) {
1313 return AssignIndexIDToThread(thread_id);
1314}
1315
1316bool Process::HasAssignedIndexIDToThread(uint64_t thread_id) {
1317 return (m_thread_id_to_index_id_map.find(thread_id) !=
1319}
1320
1321uint32_t Process::AssignIndexIDToThread(uint64_t thread_id) {
1322 uint32_t result = 0;
1323 std::map<uint64_t, uint32_t>::iterator iterator =
1324 m_thread_id_to_index_id_map.find(thread_id);
1325 if (iterator == m_thread_id_to_index_id_map.end()) {
1326 result = ++m_thread_index_id;
1327 m_thread_id_to_index_id_map[thread_id] = result;
1328 } else {
1329 result = iterator->second;
1330 }
1331
1332 return result;
1333}
1334
1337 return m_private_state.GetValue();
1338 else
1339 return m_public_state.GetValue();
1340}
1341
1342void Process::SetPublicState(StateType new_state, bool restarted) {
1343 const bool new_state_is_stopped = StateIsStoppedState(new_state, false);
1344 if (new_state_is_stopped) {
1345 // This will only set the time if the public stop time has no value, so
1346 // it is ok to call this multiple times. With a public stop we can't look
1347 // at the stop ID because many private stops might have happened, so we
1348 // can't check for a stop ID of zero. This allows the "statistics" command
1349 // to dump the time it takes to reach somewhere in your code, like a
1350 // breakpoint you set.
1352 }
1353
1355 LLDB_LOGF(log, "(plugin = %s, state = %s, restarted = %i)",
1356 GetPluginName().data(), StateAsCString(new_state), restarted);
1357 const StateType old_state = m_public_state.GetValue();
1358 m_public_state.SetValue(new_state);
1359
1360 // On the transition from Run to Stopped, we unlock the writer end of the run
1361 // lock. The lock gets locked in Resume, which is the public API to tell the
1362 // program to run.
1364 if (new_state == eStateDetached) {
1365 LLDB_LOGF(log,
1366 "(plugin = %s, state = %s) -- unlocking run lock for detach",
1367 GetPluginName().data(), StateAsCString(new_state));
1369 } else {
1370 const bool old_state_is_stopped = StateIsStoppedState(old_state, false);
1371 if ((old_state_is_stopped != new_state_is_stopped)) {
1372 if (new_state_is_stopped && !restarted) {
1373 LLDB_LOGF(log, "(plugin = %s, state = %s) -- unlocking run lock",
1374 GetPluginName().data(), StateAsCString(new_state));
1376 }
1377 }
1378 }
1379 }
1380}
1381
1384 LLDB_LOGF(log, "(plugin = %s) -- locking run lock", GetPluginName().data());
1386 Status error("Resume request failed - process still running.");
1387 LLDB_LOGF(log, "(plugin = %s) -- TrySetRunning failed, not resuming.",
1388 GetPluginName().data());
1389 return error;
1390 }
1392 if (!error.Success()) {
1393 // Undo running state change
1395 }
1396 return error;
1397}
1398
1401 LLDB_LOGF(log, "Process::ResumeSynchronous -- locking run lock");
1403 Status error("Resume request failed - process still running.");
1404 LLDB_LOGF(log, "Process::Resume: -- TrySetRunning failed, not resuming.");
1405 return error;
1406 }
1407
1408 ListenerSP listener_sp(
1410 HijackProcessEvents(listener_sp);
1411
1413 if (error.Success()) {
1414 StateType state =
1415 WaitForProcessToStop(std::nullopt, nullptr, true, listener_sp, stream,
1416 true /* use_run_lock */, SelectMostRelevantFrame);
1417 const bool must_be_alive =
1418 false; // eStateExited is ok, so this must be false
1419 if (!StateIsStoppedState(state, must_be_alive))
1420 error.SetErrorStringWithFormat(
1421 "process not in stopped state after synchronous resume: %s",
1422 StateAsCString(state));
1423 } else {
1424 // Undo running state change
1426 }
1427
1428 // Undo the hijacking of process events...
1430
1431 return error;
1432}
1433
1436 llvm::StringRef hijacking_name = GetHijackingListenerName();
1437 if (!hijacking_name.starts_with("lldb.internal"))
1438 return true;
1439 }
1440 return false;
1441}
1442
1445 llvm::StringRef hijacking_name = GetHijackingListenerName();
1446 if (hijacking_name == ResumeSynchronousHijackListenerName)
1447 return true;
1448 }
1449 return false;
1450}
1451
1453
1455 // Use m_destructing not m_finalizing here. If we are finalizing a process
1456 // that we haven't started tearing down, we'd like to be able to nicely
1457 // detach if asked, but that requires the event system be live. That will
1458 // not be true for an in-the-middle-of-being-destructed Process, since the
1459 // event system relies on Process::shared_from_this, which may have already
1460 // been destroyed.
1461 if (m_destructing)
1462 return;
1463
1465 bool state_changed = false;
1466
1467 LLDB_LOGF(log, "(plugin = %s, state = %s)", GetPluginName().data(),
1468 StateAsCString(new_state));
1469
1470 std::lock_guard<std::recursive_mutex> thread_guard(m_thread_list.GetMutex());
1471 std::lock_guard<std::recursive_mutex> guard(m_private_state.GetMutex());
1472
1473 const StateType old_state = m_private_state.GetValueNoLock();
1474 state_changed = old_state != new_state;
1475
1476 const bool old_state_is_stopped = StateIsStoppedState(old_state, false);
1477 const bool new_state_is_stopped = StateIsStoppedState(new_state, false);
1478 if (old_state_is_stopped != new_state_is_stopped) {
1479 if (new_state_is_stopped)
1481 else
1483 }
1484
1485 if (state_changed) {
1487 EventSP event_sp(
1489 new ProcessEventData(shared_from_this(), new_state)));
1490 if (StateIsStoppedState(new_state, false)) {
1491 // Note, this currently assumes that all threads in the list stop when
1492 // the process stops. In the future we will want to support a debugging
1493 // model where some threads continue to run while others are stopped.
1494 // When that happens we will either need a way for the thread list to
1495 // identify which threads are stopping or create a special thread list
1496 // containing only threads which actually stopped.
1497 //
1498 // The process plugin is responsible for managing the actual behavior of
1499 // the threads and should have stopped any threads that are going to stop
1500 // before we get here.
1502
1503 if (m_mod_id.BumpStopID() == 0)
1505
1509 LLDB_LOGF(log, "(plugin = %s, state = %s, stop_id = %u",
1510 GetPluginName().data(), StateAsCString(new_state),
1512 }
1513
1515 } else {
1516 LLDB_LOGF(log, "(plugin = %s, state = %s) state didn't change. Ignoring...",
1517 GetPluginName().data(), StateAsCString(new_state));
1518 }
1519}
1520
1523}
1524
1527}
1528
1530
1532 if (!m_abi_sp)
1533 m_abi_sp = ABI::FindPlugin(shared_from_this(), GetTarget().GetArchitecture());
1534 return m_abi_sp;
1535}
1536
1537std::vector<LanguageRuntime *> Process::GetLanguageRuntimes() {
1538 std::vector<LanguageRuntime *> language_runtimes;
1539
1540 if (m_finalizing)
1541 return language_runtimes;
1542
1543 std::lock_guard<std::recursive_mutex> guard(m_language_runtimes_mutex);
1544 // Before we pass off a copy of the language runtimes, we must make sure that
1545 // our collection is properly populated. It's possible that some of the
1546 // language runtimes were not loaded yet, either because nobody requested it
1547 // yet or the proper condition for loading wasn't yet met (e.g. libc++.so
1548 // hadn't been loaded).
1549 for (const lldb::LanguageType lang_type : Language::GetSupportedLanguages()) {
1550 if (LanguageRuntime *runtime = GetLanguageRuntime(lang_type))
1551 language_runtimes.emplace_back(runtime);
1552 }
1553
1554 return language_runtimes;
1555}
1556
1558 if (m_finalizing)
1559 return nullptr;
1560
1561 LanguageRuntime *runtime = nullptr;
1562
1563 std::lock_guard<std::recursive_mutex> guard(m_language_runtimes_mutex);
1564 LanguageRuntimeCollection::iterator pos;
1565 pos = m_language_runtimes.find(language);
1566 if (pos == m_language_runtimes.end() || !pos->second) {
1567 lldb::LanguageRuntimeSP runtime_sp(
1568 LanguageRuntime::FindPlugin(this, language));
1569
1570 m_language_runtimes[language] = runtime_sp;
1571 runtime = runtime_sp.get();
1572 } else
1573 runtime = pos->second.get();
1574
1575 if (runtime)
1576 // It's possible that a language runtime can support multiple LanguageTypes,
1577 // for example, CPPLanguageRuntime will support eLanguageTypeC_plus_plus,
1578 // eLanguageTypeC_plus_plus_03, etc. Because of this, we should get the
1579 // primary language type and make sure that our runtime supports it.
1580 assert(runtime->GetLanguageType() == Language::GetPrimaryLanguage(language));
1581
1582 return runtime;
1583}
1584
1586 if (m_finalizing)
1587 return false;
1588
1589 if (in_value.IsDynamic())
1590 return false;
1591 LanguageType known_type = in_value.GetObjectRuntimeLanguage();
1592
1593 if (known_type != eLanguageTypeUnknown && known_type != eLanguageTypeC) {
1594 LanguageRuntime *runtime = GetLanguageRuntime(known_type);
1595 return runtime ? runtime->CouldHaveDynamicValue(in_value) : false;
1596 }
1597
1598 for (LanguageRuntime *runtime : GetLanguageRuntimes()) {
1599 if (runtime->CouldHaveDynamicValue(in_value))
1600 return true;
1601 }
1602
1603 return false;
1604}
1605
1607 m_dynamic_checkers_up.reset(dynamic_checkers);
1608}
1609
1612}
1613
1617}
1618
1620 m_breakpoint_site_list.ForEach([this](BreakpointSite *bp_site) -> void {
1621 // bp_site->SetEnabled(true);
1622 DisableBreakpointSite(bp_site);
1623 });
1624}
1625
1628
1629 if (error.Success())
1631
1632 return error;
1633}
1634
1636 Status error;
1637 BreakpointSiteSP bp_site_sp = m_breakpoint_site_list.FindByID(break_id);
1638 if (bp_site_sp) {
1639 if (bp_site_sp->IsEnabled())
1640 error = DisableBreakpointSite(bp_site_sp.get());
1641 } else {
1642 error.SetErrorStringWithFormat("invalid breakpoint site ID: %" PRIu64,
1643 break_id);
1644 }
1645
1646 return error;
1647}
1648
1650 Status error;
1651 BreakpointSiteSP bp_site_sp = m_breakpoint_site_list.FindByID(break_id);
1652 if (bp_site_sp) {
1653 if (!bp_site_sp->IsEnabled())
1654 error = EnableBreakpointSite(bp_site_sp.get());
1655 } else {
1656 error.SetErrorStringWithFormat("invalid breakpoint site ID: %" PRIu64,
1657 break_id);
1658 }
1659 return error;
1660}
1661
1664 bool use_hardware) {
1665 addr_t load_addr = LLDB_INVALID_ADDRESS;
1666
1667 bool show_error = true;
1668 switch (GetState()) {
1669 case eStateInvalid:
1670 case eStateUnloaded:
1671 case eStateConnected:
1672 case eStateAttaching:
1673 case eStateLaunching:
1674 case eStateDetached:
1675 case eStateExited:
1676 show_error = false;
1677 break;
1678
1679 case eStateStopped:
1680 case eStateRunning:
1681 case eStateStepping:
1682 case eStateCrashed:
1683 case eStateSuspended:
1684 show_error = IsAlive();
1685 break;
1686 }
1687
1688 // Reset the IsIndirect flag here, in case the location changes from pointing
1689 // to a indirect symbol to a regular symbol.
1690 constituent->SetIsIndirect(false);
1691
1692 if (constituent->ShouldResolveIndirectFunctions()) {
1693 Symbol *symbol = constituent->GetAddress().CalculateSymbolContextSymbol();
1694 if (symbol && symbol->IsIndirect()) {
1695 Status error;
1696 Address symbol_address = symbol->GetAddress();
1697 load_addr = ResolveIndirectFunction(&symbol_address, error);
1698 if (!error.Success() && show_error) {
1700 "warning: failed to resolve indirect function at 0x%" PRIx64
1701 " for breakpoint %i.%i: %s\n",
1702 symbol->GetLoadAddress(&GetTarget()),
1703 constituent->GetBreakpoint().GetID(), constituent->GetID(),
1704 error.AsCString() ? error.AsCString() : "unknown error");
1705 return LLDB_INVALID_BREAK_ID;
1706 }
1707 Address resolved_address(load_addr);
1708 load_addr = resolved_address.GetOpcodeLoadAddress(&GetTarget());
1709 constituent->SetIsIndirect(true);
1710 } else
1711 load_addr = constituent->GetAddress().GetOpcodeLoadAddress(&GetTarget());
1712 } else
1713 load_addr = constituent->GetAddress().GetOpcodeLoadAddress(&GetTarget());
1714
1715 if (load_addr != LLDB_INVALID_ADDRESS) {
1716 BreakpointSiteSP bp_site_sp;
1717
1718 // Look up this breakpoint site. If it exists, then add this new
1719 // constituent, otherwise create a new breakpoint site and add it.
1720
1721 bp_site_sp = m_breakpoint_site_list.FindByAddress(load_addr);
1722
1723 if (bp_site_sp) {
1724 bp_site_sp->AddConstituent(constituent);
1725 constituent->SetBreakpointSite(bp_site_sp);
1726 return bp_site_sp->GetID();
1727 } else {
1728 bp_site_sp.reset(
1729 new BreakpointSite(constituent, load_addr, use_hardware));
1730 if (bp_site_sp) {
1731 Status error = EnableBreakpointSite(bp_site_sp.get());
1732 if (error.Success()) {
1733 constituent->SetBreakpointSite(bp_site_sp);
1734 return m_breakpoint_site_list.Add(bp_site_sp);
1735 } else {
1736 if (show_error || use_hardware) {
1737 // Report error for setting breakpoint...
1739 "warning: failed to set breakpoint site at 0x%" PRIx64
1740 " for breakpoint %i.%i: %s\n",
1741 load_addr, constituent->GetBreakpoint().GetID(),
1742 constituent->GetID(),
1743 error.AsCString() ? error.AsCString() : "unknown error");
1744 }
1745 }
1746 }
1747 }
1748 }
1749 // We failed to enable the breakpoint
1750 return LLDB_INVALID_BREAK_ID;
1751}
1752
1754 lldb::user_id_t constituent_id, lldb::user_id_t constituent_loc_id,
1755 BreakpointSiteSP &bp_site_sp) {
1756 uint32_t num_constituents =
1757 bp_site_sp->RemoveConstituent(constituent_id, constituent_loc_id);
1758 if (num_constituents == 0) {
1759 // Don't try to disable the site if we don't have a live process anymore.
1760 if (IsAlive())
1761 DisableBreakpointSite(bp_site_sp.get());
1762 m_breakpoint_site_list.RemoveByAddress(bp_site_sp->GetLoadAddress());
1763 }
1764}
1765
1767 uint8_t *buf) const {
1768 size_t bytes_removed = 0;
1769 StopPointSiteList<BreakpointSite> bp_sites_in_range;
1770
1771 if (m_breakpoint_site_list.FindInRange(bp_addr, bp_addr + size,
1772 bp_sites_in_range)) {
1773 bp_sites_in_range.ForEach([bp_addr, size,
1774 buf](BreakpointSite *bp_site) -> void {
1775 if (bp_site->GetType() == BreakpointSite::eSoftware) {
1776 addr_t intersect_addr;
1777 size_t intersect_size;
1778 size_t opcode_offset;
1779 if (bp_site->IntersectsRange(bp_addr, size, &intersect_addr,
1780 &intersect_size, &opcode_offset)) {
1781 assert(bp_addr <= intersect_addr && intersect_addr < bp_addr + size);
1782 assert(bp_addr < intersect_addr + intersect_size &&
1783 intersect_addr + intersect_size <= bp_addr + size);
1784 assert(opcode_offset + intersect_size <= bp_site->GetByteSize());
1785 size_t buf_offset = intersect_addr - bp_addr;
1786 ::memcpy(buf + buf_offset,
1787 bp_site->GetSavedOpcodeBytes() + opcode_offset,
1788 intersect_size);
1789 }
1790 }
1791 });
1792 }
1793 return bytes_removed;
1794}
1795
1797 PlatformSP platform_sp(GetTarget().GetPlatform());
1798 if (platform_sp)
1799 return platform_sp->GetSoftwareBreakpointTrapOpcode(GetTarget(), bp_site);
1800 return 0;
1801}
1802
1804 Status error;
1805 assert(bp_site != nullptr);
1807 const addr_t bp_addr = bp_site->GetLoadAddress();
1808 LLDB_LOGF(
1809 log, "Process::EnableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64,
1810 bp_site->GetID(), (uint64_t)bp_addr);
1811 if (bp_site->IsEnabled()) {
1812 LLDB_LOGF(
1813 log,
1814 "Process::EnableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64
1815 " -- already enabled",
1816 bp_site->GetID(), (uint64_t)bp_addr);
1817 return error;
1818 }
1819
1820 if (bp_addr == LLDB_INVALID_ADDRESS) {
1821 error.SetErrorString("BreakpointSite contains an invalid load address.");
1822 return error;
1823 }
1824 // Ask the lldb::Process subclass to fill in the correct software breakpoint
1825 // trap for the breakpoint site
1826 const size_t bp_opcode_size = GetSoftwareBreakpointTrapOpcode(bp_site);
1827
1828 if (bp_opcode_size == 0) {
1829 error.SetErrorStringWithFormat("Process::GetSoftwareBreakpointTrapOpcode() "
1830 "returned zero, unable to get breakpoint "
1831 "trap for address 0x%" PRIx64,
1832 bp_addr);
1833 } else {
1834 const uint8_t *const bp_opcode_bytes = bp_site->GetTrapOpcodeBytes();
1835
1836 if (bp_opcode_bytes == nullptr) {
1837 error.SetErrorString(
1838 "BreakpointSite doesn't contain a valid breakpoint trap opcode.");
1839 return error;
1840 }
1841
1842 // Save the original opcode by reading it
1843 if (DoReadMemory(bp_addr, bp_site->GetSavedOpcodeBytes(), bp_opcode_size,
1844 error) == bp_opcode_size) {
1845 // Write a software breakpoint in place of the original opcode
1846 if (DoWriteMemory(bp_addr, bp_opcode_bytes, bp_opcode_size, error) ==
1847 bp_opcode_size) {
1848 uint8_t verify_bp_opcode_bytes[64];
1849 if (DoReadMemory(bp_addr, verify_bp_opcode_bytes, bp_opcode_size,
1850 error) == bp_opcode_size) {
1851 if (::memcmp(bp_opcode_bytes, verify_bp_opcode_bytes,
1852 bp_opcode_size) == 0) {
1853 bp_site->SetEnabled(true);
1855 LLDB_LOGF(log,
1856 "Process::EnableSoftwareBreakpoint (site_id = %d) "
1857 "addr = 0x%" PRIx64 " -- SUCCESS",
1858 bp_site->GetID(), (uint64_t)bp_addr);
1859 } else
1860 error.SetErrorString(
1861 "failed to verify the breakpoint trap in memory.");
1862 } else
1863 error.SetErrorString(
1864 "Unable to read memory to verify breakpoint trap.");
1865 } else
1866 error.SetErrorString("Unable to write breakpoint trap to memory.");
1867 } else
1868 error.SetErrorString("Unable to read memory at breakpoint address.");
1869 }
1870 if (log && error.Fail())
1871 LLDB_LOGF(
1872 log,
1873 "Process::EnableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64
1874 " -- FAILED: %s",
1875 bp_site->GetID(), (uint64_t)bp_addr, error.AsCString());
1876 return error;
1877}
1878
1880 Status error;
1881 assert(bp_site != nullptr);
1883 addr_t bp_addr = bp_site->GetLoadAddress();
1884 lldb::user_id_t breakID = bp_site->GetID();
1885 LLDB_LOGF(log,
1886 "Process::DisableSoftwareBreakpoint (breakID = %" PRIu64
1887 ") addr = 0x%" PRIx64,
1888 breakID, (uint64_t)bp_addr);
1889
1890 if (bp_site->IsHardware()) {
1891 error.SetErrorString("Breakpoint site is a hardware breakpoint.");
1892 } else if (bp_site->IsEnabled()) {
1893 const size_t break_op_size = bp_site->GetByteSize();
1894 const uint8_t *const break_op = bp_site->GetTrapOpcodeBytes();
1895 if (break_op_size > 0) {
1896 // Clear a software breakpoint instruction
1897 uint8_t curr_break_op[8];
1898 assert(break_op_size <= sizeof(curr_break_op));
1899 bool break_op_found = false;
1900
1901 // Read the breakpoint opcode
1902 if (DoReadMemory(bp_addr, curr_break_op, break_op_size, error) ==
1903 break_op_size) {
1904 bool verify = false;
1905 // Make sure the breakpoint opcode exists at this address
1906 if (::memcmp(curr_break_op, break_op, break_op_size) == 0) {
1907 break_op_found = true;
1908 // We found a valid breakpoint opcode at this address, now restore
1909 // the saved opcode.
1910 if (DoWriteMemory(bp_addr, bp_site->GetSavedOpcodeBytes(),
1911 break_op_size, error) == break_op_size) {
1912 verify = true;
1913 } else
1914 error.SetErrorString(
1915 "Memory write failed when restoring original opcode.");
1916 } else {
1917 error.SetErrorString(
1918 "Original breakpoint trap is no longer in memory.");
1919 // Set verify to true and so we can check if the original opcode has
1920 // already been restored
1921 verify = true;
1922 }
1923
1924 if (verify) {
1925 uint8_t verify_opcode[8];
1926 assert(break_op_size < sizeof(verify_opcode));
1927 // Verify that our original opcode made it back to the inferior
1928 if (DoReadMemory(bp_addr, verify_opcode, break_op_size, error) ==
1929 break_op_size) {
1930 // compare the memory we just read with the original opcode
1931 if (::memcmp(bp_site->GetSavedOpcodeBytes(), verify_opcode,
1932 break_op_size) == 0) {
1933 // SUCCESS
1934 bp_site->SetEnabled(false);
1935 LLDB_LOGF(log,
1936 "Process::DisableSoftwareBreakpoint (site_id = %d) "
1937 "addr = 0x%" PRIx64 " -- SUCCESS",
1938 bp_site->GetID(), (uint64_t)bp_addr);
1939 return error;
1940 } else {
1941 if (break_op_found)
1942 error.SetErrorString("Failed to restore original opcode.");
1943 }
1944 } else
1945 error.SetErrorString("Failed to read memory to verify that "
1946 "breakpoint trap was restored.");
1947 }
1948 } else
1949 error.SetErrorString(
1950 "Unable to read memory that should contain the breakpoint trap.");
1951 }
1952 } else {
1953 LLDB_LOGF(
1954 log,
1955 "Process::DisableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64
1956 " -- already disabled",
1957 bp_site->GetID(), (uint64_t)bp_addr);
1958 return error;
1959 }
1960
1961 LLDB_LOGF(
1962 log,
1963 "Process::DisableSoftwareBreakpoint (site_id = %d) addr = 0x%" PRIx64
1964 " -- FAILED: %s",
1965 bp_site->GetID(), (uint64_t)bp_addr, error.AsCString());
1966 return error;
1967}
1968
1969// Uncomment to verify memory caching works after making changes to caching
1970// code
1971//#define VERIFY_MEMORY_READS
1972
1973size_t Process::ReadMemory(addr_t addr, void *buf, size_t size, Status &error) {
1974 if (ABISP abi_sp = GetABI())
1975 addr = abi_sp->FixAnyAddress(addr);
1976
1977 error.Clear();
1978 if (!GetDisableMemoryCache()) {
1979#if defined(VERIFY_MEMORY_READS)
1980 // Memory caching is enabled, with debug verification
1981
1982 if (buf && size) {
1983 // Uncomment the line below to make sure memory caching is working.
1984 // I ran this through the test suite and got no assertions, so I am
1985 // pretty confident this is working well. If any changes are made to
1986 // memory caching, uncomment the line below and test your changes!
1987
1988 // Verify all memory reads by using the cache first, then redundantly
1989 // reading the same memory from the inferior and comparing to make sure
1990 // everything is exactly the same.
1991 std::string verify_buf(size, '\0');
1992 assert(verify_buf.size() == size);
1993 const size_t cache_bytes_read =
1994 m_memory_cache.Read(this, addr, buf, size, error);
1995 Status verify_error;
1996 const size_t verify_bytes_read =
1997 ReadMemoryFromInferior(addr, const_cast<char *>(verify_buf.data()),
1998 verify_buf.size(), verify_error);
1999 assert(cache_bytes_read == verify_bytes_read);
2000 assert(memcmp(buf, verify_buf.data(), verify_buf.size()) == 0);
2001 assert(verify_error.Success() == error.Success());
2002 return cache_bytes_read;
2003 }
2004 return 0;
2005#else // !defined(VERIFY_MEMORY_READS)
2006 // Memory caching is enabled, without debug verification
2007
2008 return m_memory_cache.Read(addr, buf, size, error);
2009#endif // defined (VERIFY_MEMORY_READS)
2010 } else {
2011 // Memory caching is disabled
2012
2013 return ReadMemoryFromInferior(addr, buf, size, error);
2014 }
2015}
2016
2018 const uint8_t *buf, size_t size,
2019 AddressRanges &matches, size_t alignment,
2020 size_t max_matches) {
2021 // Inputs are already validated in FindInMemory() functions.
2022 assert(buf != nullptr);
2023 assert(size > 0);
2024 assert(alignment > 0);
2025 assert(max_matches > 0);
2026 assert(start_addr != LLDB_INVALID_ADDRESS);
2027 assert(end_addr != LLDB_INVALID_ADDRESS);
2028 assert(start_addr < end_addr);
2029
2030 lldb::addr_t start = llvm::alignTo(start_addr, alignment);
2031 while (matches.size() < max_matches && (start + size) < end_addr) {
2032 const lldb::addr_t found_addr = FindInMemory(start, end_addr, buf, size);
2033 if (found_addr == LLDB_INVALID_ADDRESS)
2034 break;
2035
2036 if (found_addr % alignment) {
2037 // We need to check the alignment because the FindInMemory uses a special
2038 // algorithm to efficiently search mememory but doesn't support alignment.
2039 start = llvm::alignTo(start + 1, alignment);
2040 continue;
2041 }
2042
2043 matches.emplace_back(found_addr, size);
2044 start = found_addr + alignment;
2045 }
2046}
2047
2048AddressRanges Process::FindRangesInMemory(const uint8_t *buf, uint64_t size,
2049 const AddressRanges &ranges,
2050 size_t alignment, size_t max_matches,
2051 Status &error) {
2052 AddressRanges matches;
2053 if (buf == nullptr) {
2054 error.SetErrorString("buffer is null");
2055 return matches;
2056 }
2057 if (size == 0) {
2058 error.SetErrorString("buffer size is zero");
2059 return matches;
2060 }
2061 if (ranges.empty()) {
2062 error.SetErrorString("empty ranges");
2063 return matches;
2064 }
2065 if (alignment == 0) {
2066 error.SetErrorString("alignment must be greater than zero");
2067 return matches;
2068 }
2069 if (max_matches == 0) {
2070 error.SetErrorString("max_matches must be greater than zero");
2071 return matches;
2072 }
2073
2074 int resolved_ranges = 0;
2075 Target &target = GetTarget();
2076 for (size_t i = 0; i < ranges.size(); ++i) {
2077 if (matches.size() >= max_matches)
2078 break;
2079 const AddressRange &range = ranges[i];
2080 if (range.IsValid() == false)
2081 continue;
2082
2083 const lldb::addr_t start_addr =
2084 range.GetBaseAddress().GetLoadAddress(&target);
2085 if (start_addr == LLDB_INVALID_ADDRESS)
2086 continue;
2087
2088 ++resolved_ranges;
2089 const lldb::addr_t end_addr = start_addr + range.GetByteSize();
2090 DoFindInMemory(start_addr, end_addr, buf, size, matches, alignment,
2091 max_matches);
2092 }
2093
2094 if (resolved_ranges > 0)
2095 error.Clear();
2096 else
2097 error.SetErrorString("unable to resolve any ranges");
2098
2099 return matches;
2100}
2101
2102lldb::addr_t Process::FindInMemory(const uint8_t *buf, uint64_t size,
2103 const AddressRange &range, size_t alignment,
2104 Status &error) {
2105 if (buf == nullptr) {
2106 error.SetErrorString("buffer is null");
2107 return LLDB_INVALID_ADDRESS;
2108 }
2109 if (size == 0) {
2110 error.SetErrorString("buffer size is zero");
2111 return LLDB_INVALID_ADDRESS;
2112 }
2113 if (!range.IsValid()) {
2114 error.SetErrorString("range is invalid");
2115 return LLDB_INVALID_ADDRESS;
2116 }
2117 if (alignment == 0) {
2118 error.SetErrorString("alignment must be greater than zero");
2119 return LLDB_INVALID_ADDRESS;
2120 }
2121
2122 Target &target = GetTarget();
2123 const lldb::addr_t start_addr =
2124 range.GetBaseAddress().GetLoadAddress(&target);
2125 if (start_addr == LLDB_INVALID_ADDRESS) {
2126 error.SetErrorString("range load address is invalid");
2127 return LLDB_INVALID_ADDRESS;
2128 }
2129 const lldb::addr_t end_addr = start_addr + range.GetByteSize();
2130
2131 AddressRanges matches;
2132 DoFindInMemory(start_addr, end_addr, buf, size, matches, alignment, 1);
2133 if (matches.empty())
2134 return LLDB_INVALID_ADDRESS;
2135
2136 error.Clear();
2137 return matches[0].GetBaseAddress().GetLoadAddress(&target);
2138}
2139
2140size_t Process::ReadCStringFromMemory(addr_t addr, std::string &out_str,
2141 Status &error) {
2142 char buf[256];
2143 out_str.clear();
2144 addr_t curr_addr = addr;
2145 while (true) {
2146 size_t length = ReadCStringFromMemory(curr_addr, buf, sizeof(buf), error);
2147 if (length == 0)
2148 break;
2149 out_str.append(buf, length);
2150 // If we got "length - 1" bytes, we didn't get the whole C string, we need
2151 // to read some more characters
2152 if (length == sizeof(buf) - 1)
2153 curr_addr += length;
2154 else
2155 break;
2156 }
2157 return out_str.size();
2158}
2159
2160// Deprecated in favor of ReadStringFromMemory which has wchar support and
2161// correct code to find null terminators.
2163 size_t dst_max_len,
2164 Status &result_error) {
2165 size_t total_cstr_len = 0;
2166 if (dst && dst_max_len) {
2167 result_error.Clear();
2168 // NULL out everything just to be safe
2169 memset(dst, 0, dst_max_len);
2170 Status error;
2171 addr_t curr_addr = addr;
2172 const size_t cache_line_size = m_memory_cache.GetMemoryCacheLineSize();
2173 size_t bytes_left = dst_max_len - 1;
2174 char *curr_dst = dst;
2175
2176 while (bytes_left > 0) {
2177 addr_t cache_line_bytes_left =
2178 cache_line_size - (curr_addr % cache_line_size);
2179 addr_t bytes_to_read =
2180 std::min<addr_t>(bytes_left, cache_line_bytes_left);
2181 size_t bytes_read = ReadMemory(curr_addr, curr_dst, bytes_to_read, error);
2182
2183 if (bytes_read == 0) {
2184 result_error = error;
2185 dst[total_cstr_len] = '\0';
2186 break;
2187 }
2188 const size_t len = strlen(curr_dst);
2189
2190 total_cstr_len += len;
2191
2192 if (len < bytes_to_read)
2193 break;
2194
2195 curr_dst += bytes_read;
2196 curr_addr += bytes_read;
2197 bytes_left -= bytes_read;
2198 }
2199 } else {
2200 if (dst == nullptr)
2201 result_error.SetErrorString("invalid arguments");
2202 else
2203 result_error.Clear();
2204 }
2205 return total_cstr_len;
2206}
2207
2208size_t Process::ReadMemoryFromInferior(addr_t addr, void *buf, size_t size,
2209 Status &error) {
2211
2212 if (ABISP abi_sp = GetABI())
2213 addr = abi_sp->FixAnyAddress(addr);
2214
2215 if (buf == nullptr || size == 0)
2216 return 0;
2217
2218 size_t bytes_read = 0;
2219 uint8_t *bytes = (uint8_t *)buf;
2220
2221 while (bytes_read < size) {
2222 const size_t curr_size = size - bytes_read;
2223 const size_t curr_bytes_read =
2224 DoReadMemory(addr + bytes_read, bytes + bytes_read, curr_size, error);
2225 bytes_read += curr_bytes_read;
2226 if (curr_bytes_read == curr_size || curr_bytes_read == 0)
2227 break;
2228 }
2229
2230 // Replace any software breakpoint opcodes that fall into this range back
2231 // into "buf" before we return
2232 if (bytes_read > 0)
2233 RemoveBreakpointOpcodesFromBuffer(addr, bytes_read, (uint8_t *)buf);
2234 return bytes_read;
2235}
2236
2238 size_t integer_byte_size,
2239 uint64_t fail_value,
2240 Status &error) {
2241 Scalar scalar;
2242 if (ReadScalarIntegerFromMemory(vm_addr, integer_byte_size, false, scalar,
2243 error))
2244 return scalar.ULongLong(fail_value);
2245 return fail_value;
2246}
2247
2249 size_t integer_byte_size,
2250 int64_t fail_value,
2251 Status &error) {
2252 Scalar scalar;
2253 if (ReadScalarIntegerFromMemory(vm_addr, integer_byte_size, true, scalar,
2254 error))
2255 return scalar.SLongLong(fail_value);
2256 return fail_value;
2257}
2258
2260 Scalar scalar;
2261 if (ReadScalarIntegerFromMemory(vm_addr, GetAddressByteSize(), false, scalar,
2262 error))
2263 return scalar.ULongLong(LLDB_INVALID_ADDRESS);
2264 return LLDB_INVALID_ADDRESS;
2265}
2266
2268 Status &error) {
2269 Scalar scalar;
2270 const uint32_t addr_byte_size = GetAddressByteSize();
2271 if (addr_byte_size <= 4)
2272 scalar = (uint32_t)ptr_value;
2273 else
2274 scalar = ptr_value;
2275 return WriteScalarToMemory(vm_addr, scalar, addr_byte_size, error) ==
2276 addr_byte_size;
2277}
2278
2279size_t Process::WriteMemoryPrivate(addr_t addr, const void *buf, size_t size,
2280 Status &error) {
2281 size_t bytes_written = 0;
2282 const uint8_t *bytes = (const uint8_t *)buf;
2283
2284 while (bytes_written < size) {
2285 const size_t curr_size = size - bytes_written;
2286 const size_t curr_bytes_written = DoWriteMemory(
2287 addr + bytes_written, bytes + bytes_written, curr_size, error);
2288 bytes_written += curr_bytes_written;
2289 if (curr_bytes_written == curr_size || curr_bytes_written == 0)
2290 break;
2291 }
2292 return bytes_written;
2293}
2294
2295size_t Process::WriteMemory(addr_t addr, const void *buf, size_t size,
2296 Status &error) {
2297 if (ABISP abi_sp = GetABI())
2298 addr = abi_sp->FixAnyAddress(addr);
2299
2300#if defined(ENABLE_MEMORY_CACHING)
2301 m_memory_cache.Flush(addr, size);
2302#endif
2303
2304 if (buf == nullptr || size == 0)
2305 return 0;
2306
2308
2309 // We need to write any data that would go where any current software traps
2310 // (enabled software breakpoints) any software traps (breakpoints) that we
2311 // may have placed in our tasks memory.
2312
2313 StopPointSiteList<BreakpointSite> bp_sites_in_range;
2314 if (!m_breakpoint_site_list.FindInRange(addr, addr + size, bp_sites_in_range))
2315 return WriteMemoryPrivate(addr, buf, size, error);
2316
2317 // No breakpoint sites overlap
2318 if (bp_sites_in_range.IsEmpty())
2319 return WriteMemoryPrivate(addr, buf, size, error);
2320
2321 const uint8_t *ubuf = (const uint8_t *)buf;
2322 uint64_t bytes_written = 0;
2323
2324 bp_sites_in_range.ForEach([this, addr, size, &bytes_written, &ubuf,
2325 &error](BreakpointSite *bp) -> void {
2326 if (error.Fail())
2327 return;
2328
2330 return;
2331
2332 addr_t intersect_addr;
2333 size_t intersect_size;
2334 size_t opcode_offset;
2335 const bool intersects = bp->IntersectsRange(
2336 addr, size, &intersect_addr, &intersect_size, &opcode_offset);
2337 UNUSED_IF_ASSERT_DISABLED(intersects);
2338 assert(intersects);
2339 assert(addr <= intersect_addr && intersect_addr < addr + size);
2340 assert(addr < intersect_addr + intersect_size &&
2341 intersect_addr + intersect_size <= addr + size);
2342 assert(opcode_offset + intersect_size <= bp->GetByteSize());
2343
2344 // Check for bytes before this breakpoint
2345 const addr_t curr_addr = addr + bytes_written;
2346 if (intersect_addr > curr_addr) {
2347 // There are some bytes before this breakpoint that we need to just
2348 // write to memory
2349 size_t curr_size = intersect_addr - curr_addr;
2350 size_t curr_bytes_written =
2351 WriteMemoryPrivate(curr_addr, ubuf + bytes_written, curr_size, error);
2352 bytes_written += curr_bytes_written;
2353 if (curr_bytes_written != curr_size) {
2354 // We weren't able to write all of the requested bytes, we are
2355 // done looping and will return the number of bytes that we have
2356 // written so far.
2357 if (error.Success())
2358 error.SetErrorToGenericError();
2359 }
2360 }
2361 // Now write any bytes that would cover up any software breakpoints
2362 // directly into the breakpoint opcode buffer
2363 ::memcpy(bp->GetSavedOpcodeBytes() + opcode_offset, ubuf + bytes_written,
2364 intersect_size);
2365 bytes_written += intersect_size;
2366 });
2367
2368 // Write any remaining bytes after the last breakpoint if we have any left
2369 if (bytes_written < size)
2370 bytes_written +=
2371 WriteMemoryPrivate(addr + bytes_written, ubuf + bytes_written,
2372 size - bytes_written, error);
2373
2374 return bytes_written;
2375}
2376
2377size_t Process::WriteScalarToMemory(addr_t addr, const Scalar &scalar,
2378 size_t byte_size, Status &error) {
2379 if (byte_size == UINT32_MAX)
2380 byte_size = scalar.GetByteSize();
2381 if (byte_size > 0) {
2382 uint8_t buf[32];
2383 const size_t mem_size =
2384 scalar.GetAsMemoryData(buf, byte_size, GetByteOrder(), error);
2385 if (mem_size > 0)
2386 return WriteMemory(addr, buf, mem_size, error);
2387 else
2388 error.SetErrorString("failed to get scalar as memory data");
2389 } else {
2390 error.SetErrorString("invalid scalar value");
2391 }
2392 return 0;
2393}
2394
2395size_t Process::ReadScalarIntegerFromMemory(addr_t addr, uint32_t byte_size,
2396 bool is_signed, Scalar &scalar,
2397 Status &error) {
2398 uint64_t uval = 0;
2399 if (byte_size == 0) {
2400 error.SetErrorString("byte size is zero");
2401 } else if (byte_size & (byte_size - 1)) {
2402 error.SetErrorStringWithFormat("byte size %u is not a power of 2",
2403 byte_size);
2404 } else if (byte_size <= sizeof(uval)) {
2405 const size_t bytes_read = ReadMemory(addr, &uval, byte_size, error);
2406 if (bytes_read == byte_size) {
2407 DataExtractor data(&uval, sizeof(uval), GetByteOrder(),
2409 lldb::offset_t offset = 0;
2410 if (byte_size <= 4)
2411 scalar = data.GetMaxU32(&offset, byte_size);
2412 else
2413 scalar = data.GetMaxU64(&offset, byte_size);
2414 if (is_signed)
2415 scalar.SignExtend(byte_size * 8);
2416 return bytes_read;
2417 }
2418 } else {
2419 error.SetErrorStringWithFormat(
2420 "byte size of %u is too large for integer scalar type", byte_size);
2421 }
2422 return 0;
2423}
2424
2425Status Process::WriteObjectFile(std::vector<ObjectFile::LoadableData> entries) {
2426 Status error;
2427 for (const auto &Entry : entries) {
2428 WriteMemory(Entry.Dest, Entry.Contents.data(), Entry.Contents.size(),
2429 error);
2430 if (!error.Success())
2431 break;
2432 }
2433 return error;
2434}
2435
2436#define USE_ALLOCATE_MEMORY_CACHE 1
2437addr_t Process::AllocateMemory(size_t size, uint32_t permissions,
2438 Status &error) {
2439 if (GetPrivateState() != eStateStopped) {
2440 error.SetErrorToGenericError();
2441 return LLDB_INVALID_ADDRESS;
2442 }
2443
2444#if defined(USE_ALLOCATE_MEMORY_CACHE)
2445 return m_allocated_memory_cache.AllocateMemory(size, permissions, error);
2446#else
2447 addr_t allocated_addr = DoAllocateMemory(size, permissions, error);
2448 Log *log = GetLog(LLDBLog::Process);
2449 LLDB_LOGF(log,
2450 "Process::AllocateMemory(size=%" PRIu64
2451 ", permissions=%s) => 0x%16.16" PRIx64
2452 " (m_stop_id = %u m_memory_id = %u)",
2453 (uint64_t)size, GetPermissionsAsCString(permissions),
2454 (uint64_t)allocated_addr, m_mod_id.GetStopID(),
2456 return allocated_addr;
2457#endif
2458}
2459
2460addr_t Process::CallocateMemory(size_t size, uint32_t permissions,
2461 Status &error) {
2462 addr_t return_addr = AllocateMemory(size, permissions, error);
2463 if (error.Success()) {
2464 std::string buffer(size, 0);
2465 WriteMemory(return_addr, buffer.c_str(), size, error);
2466 }
2467 return return_addr;
2468}
2469
2471 if (m_can_jit == eCanJITDontKnow) {
2472 Log *log = GetLog(LLDBLog::Process);
2473 Status err;
2474
2475 uint64_t allocated_memory = AllocateMemory(
2476 8, ePermissionsReadable | ePermissionsWritable | ePermissionsExecutable,
2477 err);
2478
2479 if (err.Success()) {
2481 LLDB_LOGF(log,
2482 "Process::%s pid %" PRIu64
2483 " allocation test passed, CanJIT () is true",
2484 __FUNCTION__, GetID());
2485 } else {
2487 LLDB_LOGF(log,
2488 "Process::%s pid %" PRIu64
2489 " allocation test failed, CanJIT () is false: %s",
2490 __FUNCTION__, GetID(), err.AsCString());
2491 }
2492
2493 DeallocateMemory(allocated_memory);
2494 }
2495
2496 return m_can_jit == eCanJITYes;
2497}
2498
2499void Process::SetCanJIT(bool can_jit) {
2500 m_can_jit = (can_jit ? eCanJITYes : eCanJITNo);
2501}
2502
2503void Process::SetCanRunCode(bool can_run_code) {
2504 SetCanJIT(can_run_code);
2505 m_can_interpret_function_calls = can_run_code;
2506}
2507
2509 Status error;
2510#if defined(USE_ALLOCATE_MEMORY_CACHE)
2512 error.SetErrorStringWithFormat(
2513 "deallocation of memory at 0x%" PRIx64 " failed.", (uint64_t)ptr);
2514 }
2515#else
2517
2518 Log *log = GetLog(LLDBLog::Process);
2519 LLDB_LOGF(log,
2520 "Process::DeallocateMemory(addr=0x%16.16" PRIx64
2521 ") => err = %s (m_stop_id = %u, m_memory_id = %u)",
2522 ptr, error.AsCString("SUCCESS"), m_mod_id.GetStopID(),
2524#endif
2525 return error;
2526}
2527
2529 if (std::optional<bool> subclass_override = DoGetWatchpointReportedAfter())
2530 return *subclass_override;
2531
2532 bool reported_after = true;
2533 const ArchSpec &arch = GetTarget().GetArchitecture();
2534 if (!arch.IsValid())
2535 return reported_after;
2536 llvm::Triple triple = arch.GetTriple();
2537
2538 if (triple.isMIPS() || triple.isPPC64() || triple.isRISCV() ||
2539 triple.isAArch64() || triple.isArmMClass() || triple.isARM())
2540 reported_after = false;
2541
2542 return reported_after;
2543}
2544
2546 lldb::addr_t header_addr,
2547 size_t size_to_read) {
2548 Log *log = GetLog(LLDBLog::Host);
2549 if (log) {
2550 LLDB_LOGF(log,
2551 "Process::ReadModuleFromMemory reading %s binary from memory",
2552 file_spec.GetPath().c_str());
2553 }
2554 ModuleSP module_sp(new Module(file_spec, ArchSpec()));
2555 if (module_sp) {
2556 Status error;
2557 std::unique_ptr<Progress> progress_up;
2558 // Reading an ObjectFile from a local corefile is very fast,
2559 // only print a progress update if we're reading from a
2560 // live session which might go over gdb remote serial protocol.
2561 if (IsLiveDebugSession())
2562 progress_up = std::make_unique<Progress>(
2563 "Reading binary from memory", file_spec.GetFilename().GetString());
2564
2565 ObjectFile *objfile = module_sp->GetMemoryObjectFile(
2566 shared_from_this(), header_addr, error, size_to_read);
2567 if (objfile)
2568 return module_sp;
2569 }
2570 return ModuleSP();
2571}
2572
2574 uint32_t &permissions) {
2575 MemoryRegionInfo range_info;
2576 permissions = 0;
2577 Status error(GetMemoryRegionInfo(load_addr, range_info));
2578 if (!error.Success())
2579 return false;
2580 if (range_info.GetReadable() == MemoryRegionInfo::eDontKnow ||
2581 range_info.GetWritable() == MemoryRegionInfo::eDontKnow ||
2583 return false;
2584 }
2585 permissions = range_info.GetLLDBPermissions();
2586 return true;
2587}
2588
2590 Status error;
2591 error.SetErrorString("watchpoints are not supported");
2592 return error;
2593}
2594
2596 Status error;
2597 error.SetErrorString("watchpoints are not supported");
2598 return error;
2599}
2600
2603 const Timeout<std::micro> &timeout) {
2604 StateType state;
2605
2606 while (true) {
2607 event_sp.reset();
2608 state = GetStateChangedEventsPrivate(event_sp, timeout);
2609
2610 if (StateIsStoppedState(state, false))
2611 break;
2612
2613 // If state is invalid, then we timed out
2614 if (state == eStateInvalid)
2615 break;
2616
2617 if (event_sp)
2618 HandlePrivateEvent(event_sp);
2619 }
2620 return state;
2621}
2622
2624 std::lock_guard<std::recursive_mutex> guard(m_thread_mutex);
2625 if (flush)
2627 m_os_up.reset(OperatingSystem::FindPlugin(this, nullptr));
2628 if (flush)
2629 Flush();
2630}
2631
2633 StateType state_after_launch = eStateInvalid;
2634 EventSP first_stop_event_sp;
2635 Status status =
2636 LaunchPrivate(launch_info, state_after_launch, first_stop_event_sp);
2637 if (status.Fail())
2638 return status;
2639
2640 if (state_after_launch != eStateStopped &&
2641 state_after_launch != eStateCrashed)
2642 return Status();
2643
2644 // Note, the stop event was consumed above, but not handled. This
2645 // was done to give DidLaunch a chance to run. The target is either
2646 // stopped or crashed. Directly set the state. This is done to
2647 // prevent a stop message with a bunch of spurious output on thread
2648 // status, as well as not pop a ProcessIOHandler.
2649 SetPublicState(state_after_launch, false);
2650
2653 else
2655
2656 // Target was stopped at entry as was intended. Need to notify the
2657 // listeners about it.
2658 if (launch_info.GetFlags().Test(eLaunchFlagStopAtEntry))
2659 HandlePrivateEvent(first_stop_event_sp);
2660
2661 return Status();
2662}
2663
2665 EventSP &event_sp) {
2666 Status error;
2667 m_abi_sp.reset();
2668 m_dyld_up.reset();
2669 m_jit_loaders_up.reset();
2670 m_system_runtime_up.reset();
2671 m_os_up.reset();
2672
2673 {
2674 std::lock_guard<std::mutex> guard(m_process_input_reader_mutex);
2675 m_process_input_reader.reset();
2676 }
2677
2679
2680 // The "remote executable path" is hooked up to the local Executable
2681 // module. But we should be able to debug a remote process even if the
2682 // executable module only exists on the remote. However, there needs to
2683 // be a way to express this path, without actually having a module.
2684 // The way to do that is to set the ExecutableFile in the LaunchInfo.
2685 // Figure that out here:
2686
2687 FileSpec exe_spec_to_use;
2688 if (!exe_module) {
2689 if (!launch_info.GetExecutableFile() && !launch_info.IsScriptedProcess()) {
2690 error.SetErrorString("executable module does not exist");
2691 return error;
2692 }
2693 exe_spec_to_use = launch_info.GetExecutableFile();
2694 } else
2695 exe_spec_to_use = exe_module->GetFileSpec();
2696
2697 if (exe_module && FileSystem::Instance().Exists(exe_module->GetFileSpec())) {
2698 // Install anything that might need to be installed prior to launching.
2699 // For host systems, this will do nothing, but if we are connected to a
2700 // remote platform it will install any needed binaries
2701 error = GetTarget().Install(&launch_info);
2702 if (error.Fail())
2703 return error;
2704 }
2705
2706 // Listen and queue events that are broadcasted during the process launch.
2707 ListenerSP listener_sp(Listener::MakeListener("LaunchEventHijack"));
2708 HijackProcessEvents(listener_sp);
2709 auto on_exit = llvm::make_scope_exit([this]() { RestoreProcessEvents(); });
2710
2713
2714 error = WillLaunch(exe_module);
2715 if (error.Fail()) {
2716 std::string local_exec_file_path = exe_spec_to_use.GetPath();
2717 return Status("file doesn't exist: '%s'", local_exec_file_path.c_str());
2718 }
2719
2720 const bool restarted = false;
2721 SetPublicState(eStateLaunching, restarted);
2722 m_should_detach = false;
2725 // Now launch using these arguments.
2726 error = DoLaunch(exe_module, launch_info);
2727 } else {
2728 // This shouldn't happen
2729 error.SetErrorString("failed to acquire process run lock");
2730 }
2731
2732 if (error.Fail()) {
2733 if (GetID() != LLDB_INVALID_PROCESS_ID) {
2735 const char *error_string = error.AsCString();
2736 if (error_string == nullptr)
2737 error_string = "launch failed";
2738 SetExitStatus(-1, error_string);
2739 }
2740 return error;
2741 }
2742
2743 // Now wait for the process to launch and return control to us, and then
2744 // call DidLaunch:
2745 state = WaitForProcessStopPrivate(event_sp, seconds(10));
2746
2747 if (state == eStateInvalid || !event_sp) {
2748 // We were able to launch the process, but we failed to catch the
2749 // initial stop.
2750 error.SetErrorString("failed to catch stop after launch");
2751 SetExitStatus(0, error.AsCString());
2752 Destroy(false);
2753 return error;
2754 }
2755
2756 if (state == eStateExited) {
2757 // We exited while trying to launch somehow. Don't call DidLaunch
2758 // as that's not likely to work, and return an invalid pid.
2759 HandlePrivateEvent(event_sp);
2760 return Status();
2761 }
2762
2763 if (state == eStateStopped || state == eStateCrashed) {
2764 DidLaunch();
2765
2766 // Now that we know the process type, update its signal responses from the
2767 // ones stored in the Target:
2768 if (m_unix_signals_sp) {
2771 }
2772
2774 if (dyld)
2775 dyld->DidLaunch();
2776
2778
2779 SystemRuntime *system_runtime = GetSystemRuntime();
2780 if (system_runtime)
2781 system_runtime->DidLaunch();
2782
2783 if (!m_os_up)
2785
2786 // We successfully launched the process and stopped, now it the
2787 // right time to set up signal filters before resuming.
2789 return Status();
2790 }
2791
2792 return Status("Unexpected process state after the launch: %s, expected %s, "
2793 "%s, %s or %s",
2797}
2798
2801 if (error.Success()) {
2802 ListenerSP listener_sp(
2803 Listener::MakeListener("lldb.process.load_core_listener"));
2804 HijackProcessEvents(listener_sp);
2805
2808 else
2810
2812 if (dyld)
2813 dyld->DidAttach();
2814
2816
2817 SystemRuntime *system_runtime = GetSystemRuntime();
2818 if (system_runtime)
2819 system_runtime->DidAttach();
2820
2821 if (!m_os_up)
2823
2824 // We successfully loaded a core file, now pretend we stopped so we can
2825 // show all of the threads in the core file and explore the crashed state.
2827
2828 // Wait for a stopped event since we just posted one above...
2829 lldb::EventSP event_sp;
2830 StateType state =
2831 WaitForProcessToStop(std::nullopt, &event_sp, true, listener_sp,
2832 nullptr, true, SelectMostRelevantFrame);
2833
2834 if (!StateIsStoppedState(state, false)) {
2835 Log *log = GetLog(LLDBLog::Process);
2836 LLDB_LOGF(log, "Process::Halt() failed to stop, state is: %s",
2837 StateAsCString(state));
2838 error.SetErrorString(
2839 "Did not get stopped event after loading the core file.");
2840 }
2842 }
2843 return error;
2844}
2845
2847 if (!m_dyld_up)
2848 m_dyld_up.reset(DynamicLoader::FindPlugin(this, ""));
2849 return m_dyld_up.get();
2850}
2851
2853 m_dyld_up = std::move(dyld_up);
2854}
2855
2857
2858llvm::Expected<bool> Process::SaveCore(llvm::StringRef outfile) {
2859 return false;
2860}
2861
2863 if (!m_jit_loaders_up) {
2864 m_jit_loaders_up = std::make_unique<JITLoaderList>();
2866 }
2867 return *m_jit_loaders_up;
2868}
2869
2873 return m_system_runtime_up.get();
2874}
2875
2877 uint32_t exec_count)
2878 : NextEventAction(process), m_exec_count(exec_count) {
2879 Log *log = GetLog(LLDBLog::Process);
2880 LLDB_LOGF(
2881 log,
2882 "Process::AttachCompletionHandler::%s process=%p, exec_count=%" PRIu32,
2883 __FUNCTION__, static_cast<void *>(process), exec_count);
2884}
2885
2888 Log *log = GetLog(LLDBLog::Process);
2889
2890 StateType state = ProcessEventData::GetStateFromEvent(event_sp.get());
2891 LLDB_LOGF(log,
2892 "Process::AttachCompletionHandler::%s called with state %s (%d)",
2893 __FUNCTION__, StateAsCString(state), static_cast<int>(state));
2894
2895 switch (state) {
2896 case eStateAttaching:
2897 return eEventActionSuccess;
2898
2899 case eStateRunning:
2900 case eStateConnected:
2901 return eEventActionRetry;
2902
2903 case eStateStopped:
2904 case eStateCrashed:
2905 // During attach, prior to sending the eStateStopped event,
2906 // lldb_private::Process subclasses must set the new process ID.
2908 // We don't want these events to be reported, so go set the
2909 // ShouldReportStop here:
2911
2912 if (m_exec_count > 0) {
2913 --m_exec_count;
2914
2915 LLDB_LOGF(log,
2916 "Process::AttachCompletionHandler::%s state %s: reduced "
2917 "remaining exec count to %" PRIu32 ", requesting resume",
2918 __FUNCTION__, StateAsCString(state), m_exec_count);
2919
2920 RequestResume();
2921 return eEventActionRetry;
2922 } else {
2923 LLDB_LOGF(log,
2924 "Process::AttachCompletionHandler::%s state %s: no more "
2925 "execs expected to start, continuing with attach",
2926 __FUNCTION__, StateAsCString(state));
2927
2929 return eEventActionSuccess;
2930 }
2931 break;
2932
2933 default:
2934 case eStateExited:
2935 case eStateInvalid:
2936 break;
2937 }
2938
2939 m_exit_string.assign("No valid Process");
2940 return eEventActionExit;
2941}
2942
2945 return eEventActionSuccess;
2946}
2947
2949 return m_exit_string.c_str();
2950}
2951
2953 if (m_listener_sp)
2954 return m_listener_sp;
2955 else
2956 return debugger.GetListener();
2957}
2958
2960 return DoWillLaunch(module);
2961}
2962
2964 return DoWillAttachToProcessWithID(pid);
2965}
2966
2968 bool wait_for_launch) {
2969 return DoWillAttachToProcessWithName(process_name, wait_for_launch);
2970}
2971
2973 m_abi_sp.reset();
2974 {
2975 std::lock_guard<std::mutex> guard(m_process_input_reader_mutex);
2976 m_process_input_reader.reset();
2977 }
2978 m_dyld_up.reset();
2979 m_jit_loaders_up.reset();
2980 m_system_runtime_up.reset();
2981 m_os_up.reset();
2982
2983 lldb::pid_t attach_pid = attach_info.GetProcessID();
2984 Status error;
2985 if (attach_pid == LLDB_INVALID_PROCESS_ID) {
2986 char process_name[PATH_MAX];
2987
2988 if (attach_info.GetExecutableFile().GetPath(process_name,
2989 sizeof(process_name))) {
2990 const bool wait_for_launch = attach_info.GetWaitForLaunch();
2991
2992 if (wait_for_launch) {
2993 error = WillAttachToProcessWithName(process_name, wait_for_launch);
2994 if (error.Success()) {
2996 m_should_detach = true;
2997 const bool restarted = false;
2998 SetPublicState(eStateAttaching, restarted);
2999 // Now attach using these arguments.
3000 error = DoAttachToProcessWithName(process_name, attach_info);
3001 } else {
3002 // This shouldn't happen
3003 error.SetErrorString("failed to acquire process run lock");
3004 }
3005
3006 if (error.Fail()) {
3007 if (GetID() != LLDB_INVALID_PROCESS_ID) {
3009 if (error.AsCString() == nullptr)
3010 error.SetErrorString("attach failed");
3011
3012 SetExitStatus(-1, error.AsCString());
3013 }
3014 } else {
3016 this, attach_info.GetResumeCount()));
3018 }
3019 return error;
3020 }
3021 } else {
3022 ProcessInstanceInfoList process_infos;
3023 PlatformSP platform_sp(GetTarget().GetPlatform());
3024
3025 if (platform_sp) {
3026 ProcessInstanceInfoMatch match_info;
3027 match_info.GetProcessInfo() = attach_info;
3029 platform_sp->FindProcesses(match_info, process_infos);
3030 const uint32_t num_matches = process_infos.size();
3031 if (num_matches == 1) {
3032 attach_pid = process_infos[0].GetProcessID();
3033 // Fall through and attach using the above process ID
3034 } else {
3036 process_name, sizeof(process_name));
3037 if (num_matches > 1) {
3038 StreamString s;
3040 for (size_t i = 0; i < num_matches; i++) {
3041 process_infos[i].DumpAsTableRow(
3042 s, platform_sp->GetUserIDResolver(), true, false);
3043 }
3044 error.SetErrorStringWithFormat(
3045 "more than one process named %s:\n%s", process_name,
3046 s.GetData());
3047 } else
3048 error.SetErrorStringWithFormat(
3049 "could not find a process named %s", process_name);
3050 }
3051 } else {
3052 error.SetErrorString(
3053 "invalid platform, can't find processes by name");
3054 return error;
3055 }
3056 }
3057 } else {
3058 error.SetErrorString("invalid process name");
3059 }
3060 }
3061
3062 if (attach_pid != LLDB_INVALID_PROCESS_ID) {
3063 error = WillAttachToProcessWithID(attach_pid);
3064 if (error.Success()) {
3065
3067 // Now attach using these arguments.
3068 m_should_detach = true;
3069 const bool restarted = false;
3070 SetPublicState(eStateAttaching, restarted);
3071 error = DoAttachToProcessWithID(attach_pid, attach_info);
3072 } else {
3073 // This shouldn't happen
3074 error.SetErrorString("failed to acquire process run lock");
3075 }
3076
3077 if (error.Success()) {
3079 this, attach_info.GetResumeCount()));
3081 } else {
3084
3085 const char *error_string = error.AsCString();
3086 if (error_string == nullptr)
3087 error_string = "attach failed";
3088
3089 SetExitStatus(-1, error_string);
3090 }
3091 }
3092 }
3093 return error;
3094}
3095
3098 LLDB_LOGF(log, "Process::%s()", __FUNCTION__);
3099
3100 // Let the process subclass figure out at much as it can about the process
3101 // before we go looking for a dynamic loader plug-in.
3102 ArchSpec process_arch;
3103 DidAttach(process_arch);
3104
3105 if (process_arch.IsValid()) {
3106 LLDB_LOG(log,
3107 "Process::{0} replacing process architecture with DidAttach() "
3108 "architecture: \"{1}\"",
3109 __FUNCTION__, process_arch.GetTriple().getTriple());
3110 GetTarget().SetArchitecture(process_arch);
3111 }
3112
3113 // We just attached. If we have a platform, ask it for the process
3114 // architecture, and if it isn't the same as the one we've already set,
3115 // switch architectures.
3116 PlatformSP platform_sp(GetTarget().GetPlatform());
3117 assert(platform_sp);
3118 ArchSpec process_host_arch = GetSystemArchitecture();
3119 if (platform_sp) {
3120 const ArchSpec &target_arch = GetTarget().GetArchitecture();
3121 if (target_arch.IsValid() && !platform_sp->IsCompatibleArchitecture(
3122 target_arch, process_host_arch,
3123 ArchSpec::CompatibleMatch, nullptr)) {
3124 ArchSpec platform_arch;
3126 target_arch, process_host_arch, &platform_arch);
3127 if (platform_sp) {
3128 GetTarget().SetPlatform(platform_sp);
3129 GetTarget().SetArchitecture(platform_arch);
3130 LLDB_LOG(log,
3131 "switching platform to {0} and architecture to {1} based on "
3132 "info from attach",
3133 platform_sp->GetName(), platform_arch.GetTriple().getTriple());
3134 }
3135 } else if (!process_arch.IsValid()) {
3136 ProcessInstanceInfo process_info;
3137 GetProcessInfo(process_info);
3138 const ArchSpec &process_arch = process_info.GetArchitecture();
3139 const ArchSpec &target_arch = GetTarget().GetArchitecture();
3140 if (process_arch.IsValid() &&
3141 target_arch.IsCompatibleMatch(process_arch) &&
3142 !target_arch.IsExactMatch(process_arch)) {
3143 GetTarget().SetArchitecture(process_arch);
3144 LLDB_LOGF(log,
3145 "Process::%s switching architecture to %s based on info "
3146 "the platform retrieved for pid %" PRIu64,
3147 __FUNCTION__, process_arch.GetTriple().getTriple().c_str(),
3148 GetID());
3149 }
3150 }
3151 }
3152 // Now that we know the process type, update its signal responses from the
3153 // ones stored in the Target:
3154 if (m_unix_signals_sp) {
3157 }
3158
3159 // We have completed the attach, now it is time to find the dynamic loader
3160 // plug-in
3162 if (dyld) {
3163 dyld->DidAttach();
3164 if (log) {
3165 ModuleSP exe_module_sp = GetTarget().GetExecutableModule();
3166 LLDB_LOG(log,
3167 "after DynamicLoader::DidAttach(), target "
3168 "executable is {0} (using {1} plugin)",
3169 exe_module_sp ? exe_module_sp->GetFileSpec() : FileSpec(),
3170 dyld->GetPluginName());
3171 }
3172 }
3173
3175
3176 SystemRuntime *system_runtime = GetSystemRuntime();
3177 if (system_runtime) {
3178 system_runtime->DidAttach();
3179 if (log) {
3180 ModuleSP exe_module_sp = GetTarget().GetExecutableModule();
3181 LLDB_LOG(log,
3182 "after SystemRuntime::DidAttach(), target "
3183 "executable is {0} (using {1} plugin)",
3184 exe_module_sp ? exe_module_sp->GetFileSpec() : FileSpec(),
3185 system_runtime->GetPluginName());
3186 }
3187 }
3188
3189 if (!m_os_up) {
3191 if (m_os_up) {
3192 // Somebody might have gotten threads before now, but we need to force the
3193 // update after we've loaded the OperatingSystem plugin or it won't get a
3194 // chance to process the threads.
3197 }
3198 }
3199 // Figure out which one is the executable, and set that in our target:
3200 ModuleSP new_executable_module_sp;
3201 for (ModuleSP module_sp : GetTarget().GetImages().Modules()) {
3202 if (module_sp && module_sp->IsExecutable()) {
3203 if (GetTarget().GetExecutableModulePointer() != module_sp.get())
3204 new_executable_module_sp = module_sp;
3205 break;
3206 }
3207 }
3208 if (new_executable_module_sp) {
3209 GetTarget().SetExecutableModule(new_executable_module_sp,
3211 if (log) {
3212 ModuleSP exe_module_sp = GetTarget().GetExecutableModule();
3213 LLDB_LOGF(
3214 log,
3215 "Process::%s after looping through modules, target executable is %s",
3216 __FUNCTION__,
3217 exe_module_sp ? exe_module_sp->GetFileSpec().GetPath().c_str()
3218 : "<none>");
3219 }
3220 }
3221}
3222
3223Status Process::ConnectRemote(llvm::StringRef remote_url) {
3224 m_abi_sp.reset();
3225 {
3226 std::lock_guard<std::mutex> guard(m_process_input_reader_mutex);
3227 m_process_input_reader.reset();
3228 }
3229
3230 // Find the process and its architecture. Make sure it matches the
3231 // architecture of the current Target, and if not adjust it.
3232
3233 Status error(DoConnectRemote(remote_url));
3234 if (error.Success()) {
3235 if (GetID() != LLDB_INVALID_PROCESS_ID) {
3236 EventSP event_sp;
3237 StateType state = WaitForProcessStopPrivate(event_sp, std::nullopt);
3238
3239 if (state == eStateStopped || state == eStateCrashed) {
3240 // If we attached and actually have a process on the other end, then
3241 // this ended up being the equivalent of an attach.
3243
3244 // This delays passing the stopped event to listeners till
3245 // CompleteAttach gets a chance to complete...
3246 HandlePrivateEvent(event_sp);
3247 }
3248 }
3249
3252 else
3254 }
3255 return error;
3256}
3257
3260 LLDB_LOGF(log,
3261 "Process::PrivateResume() m_stop_id = %u, public state: %s "
3262 "private state: %s",
3265
3266 // If signals handing status changed we might want to update our signal
3267 // filters before resuming.
3269 // Clear any crash info we accumulated for this stop, but don't do so if we
3270 // are running functions; we don't want to wipe out the real stop's info.
3271 if (!GetModID().IsLastResumeForUserExpression())
3273
3275 // Tell the process it is about to resume before the thread list
3276 if (error.Success()) {
3277 // Now let the thread list know we are about to resume so it can let all of
3278 // our threads know that they are about to be resumed. Threads will each be
3279 // called with Thread::WillResume(StateType) where StateType contains the
3280 // state that they are supposed to have when the process is resumed
3281 // (suspended/running/stepping). Threads should also check their resume
3282 // signal in lldb::Thread::GetResumeSignal() to see if they are supposed to
3283 // start back up with a signal.
3284 if (m_thread_list.WillResume()) {
3285 // Last thing, do the PreResumeActions.
3286 if (!RunPreResumeActions()) {
3287 error.SetErrorString(
3288 "Process::PrivateResume PreResumeActions failed, not resuming.");
3289 } else {
3291 error = DoResume();
3292 if (error.Success()) {
3293 DidResume();
3295 LLDB_LOGF(log, "Process thinks the process has resumed.");
3296 } else {
3297 LLDB_LOGF(log, "Process::PrivateResume() DoResume failed.");
3298 return error;
3299 }
3300 }
3301 } else {
3302 // Somebody wanted to run without running (e.g. we were faking a step
3303 // from one frame of a set of inlined frames that share the same PC to
3304 // another.) So generate a continue & a stopped event, and let the world
3305 // handle them.
3306 LLDB_LOGF(log,
3307 "Process::PrivateResume() asked to simulate a start & stop.");
3308
3311 }
3312 } else
3313 LLDB_LOGF(log, "Process::PrivateResume() got an error \"%s\".",
3314 error.AsCString("<unknown error>"));
3315 return error;
3316}
3317
3318Status Process::Halt(bool clear_thread_plans, bool use_run_lock) {
3320 return Status("Process is not running.");
3321
3322 // Don't clear the m_clear_thread_plans_on_stop, only set it to true if in
3323 // case it was already set and some thread plan logic calls halt on its own.
3324 m_clear_thread_plans_on_stop |= clear_thread_plans;
3325
3326 ListenerSP halt_listener_sp(
3327 Listener::MakeListener("lldb.process.halt_listener"));
3328 HijackProcessEvents(halt_listener_sp);
3329
3330 EventSP event_sp;
3331
3333
3335 // Don't hijack and eat the eStateExited as the code that was doing the
3336 // attach will be waiting for this event...
3338 Destroy(false);
3339 SetExitStatus(SIGKILL, "Cancelled async attach.");
3340 return Status();
3341 }
3342
3343 // Wait for the process halt timeout seconds for the process to stop.
3344 // If we are going to use the run lock, that means we're stopping out to the
3345 // user, so we should also select the most relevant frame.
3346 SelectMostRelevant select_most_relevant =
3348 StateType state = WaitForProcessToStop(GetInterruptTimeout(), &event_sp, true,
3349 halt_listener_sp, nullptr,
3350 use_run_lock, select_most_relevant);
3352
3353 if (state == eStateInvalid || !event_sp) {
3354 // We timed out and didn't get a stop event...
3355 return Status("Halt timed out. State = %s", StateAsCString(GetState()));
3356 }
3357
3358 BroadcastEvent(event_sp);
3359
3360 return Status();
3361}
3362
3364 const uint8_t *buf, size_t size) {
3365 const size_t region_size = high - low;
3366
3367 if (region_size < size)
3368 return LLDB_INVALID_ADDRESS;
3369
3370 std::vector<size_t> bad_char_heuristic(256, size);
3371 ProcessMemoryIterator iterator(*this, low);
3372
3373 for (size_t idx = 0; idx < size - 1; idx++) {
3374 decltype(bad_char_heuristic)::size_type bcu_idx = buf[idx];
3375 bad_char_heuristic[bcu_idx] = size - idx - 1;
3376 }
3377 for (size_t s = 0; s <= (region_size - size);) {
3378 int64_t j = size - 1;
3379 while (j >= 0 && buf[j] == iterator[s + j])
3380 j--;
3381 if (j < 0)
3382 return low + s;
3383 else
3384 s += bad_char_heuristic[iterator[s + size - 1]];
3385 }
3386
3387 return LLDB_INVALID_ADDRESS;
3388}
3389
3391 Status error;
3392
3393 // Check both the public & private states here. If we're hung evaluating an
3394 // expression, for instance, then the public state will be stopped, but we
3395 // still need to interrupt.
3398 Log *log = GetLog(LLDBLog::Process);
3399 LLDB_LOGF(log, "Process::%s() About to stop.", __FUNCTION__);
3400
3401 ListenerSP listener_sp(
3402 Listener::MakeListener("lldb.Process.StopForDestroyOrDetach.hijack"));
3403 HijackProcessEvents(listener_sp);
3404
3406
3407 // Consume the interrupt event.
3409 &exit_event_sp, true, listener_sp);
3410
3412
3413 // If the process exited while we were waiting for it to stop, put the
3414 // exited event into the shared pointer passed in and return. Our caller
3415 // doesn't need to do anything else, since they don't have a process
3416 // anymore...
3417
3418 if (state == eStateExited || m_private_state.GetValue() == eStateExited) {
3419 LLDB_LOGF(log, "Process::%s() Process exited while waiting to stop.",
3420 __FUNCTION__);
3421 return error;
3422 } else
3423 exit_event_sp.reset(); // It is ok to consume any non-exit stop events
3424
3425 if (state != eStateStopped) {
3426 LLDB_LOGF(log, "Process::%s() failed to stop, state is: %s", __FUNCTION__,
3427 StateAsCString(state));
3428 // If we really couldn't stop the process then we should just error out
3429 // here, but if the lower levels just bobbled sending the event and we
3430 // really are stopped, then continue on.
3431 StateType private_state = m_private_state.GetValue();
3432 if (private_state != eStateStopped) {
3433 return Status(
3434 "Attempt to stop the target in order to detach timed out. "
3435 "State = %s",
3437 }
3438 }
3439 }
3440 return error;
3441}
3442
3443Status Process::Detach(bool keep_stopped) {
3444 EventSP exit_event_sp;
3445 Status error;
3446 m_destroy_in_process = true;
3447
3448 error = WillDetach();
3449
3450 if (error.Success()) {
3451 if (DetachRequiresHalt()) {
3452 error = StopForDestroyOrDetach(exit_event_sp);
3453 if (!error.Success()) {
3454 m_destroy_in_process = false;
3455 return error;
3456 } else if (exit_event_sp) {
3457 // We shouldn't need to do anything else here. There's no process left
3458 // to detach from...
3460 m_destroy_in_process = false;
3461 return error;
3462 }
3463 }
3464
3467
3468 error = DoDetach(keep_stopped);
3469 if (error.Success()) {
3470 DidDetach();
3472 } else {
3473 return error;
3474 }
3475 }
3476 m_destroy_in_process = false;
3477
3478 // If we exited when we were waiting for a process to stop, then forward the
3479 // event here so we don't lose the event
3480 if (exit_event_sp) {
3481 // Directly broadcast our exited event because we shut down our private
3482 // state thread above
3483 BroadcastEvent(exit_event_sp);
3484 }
3485
3486 // If we have been interrupted (to kill us) in the middle of running, we may
3487 // not end up propagating the last events through the event system, in which
3488 // case we might strand the write lock. Unlock it here so when we do to tear
3489 // down the process we don't get an error destroying the lock.
3490
3492 return error;
3493}
3494
3495Status Process::Destroy(bool force_kill) {
3496 // If we've already called Process::Finalize then there's nothing useful to
3497 // be done here. Finalize has actually called Destroy already.
3498 if (m_finalizing)
3499 return {};
3500 return DestroyImpl(force_kill);
3501}
3502
3504 // Tell ourselves we are in the process of destroying the process, so that we
3505 // don't do any unnecessary work that might hinder the destruction. Remember
3506 // to set this back to false when we are done. That way if the attempt
3507 // failed and the process stays around for some reason it won't be in a
3508 // confused state.
3509
3510 if (force_kill)
3511 m_should_detach = false;
3512
3513 if (GetShouldDetach()) {
3514 // FIXME: This will have to be a process setting:
3515 bool keep_stopped = false;
3516 Detach(keep_stopped);
3517 }
3518
3519 m_destroy_in_process = true;
3520
3522 if (error.Success()) {
3523 EventSP exit_event_sp;
3524 if (DestroyRequiresHalt()) {
3525 error = StopForDestroyOrDetach(exit_event_sp);
3526 }
3527
3529 // Ditch all thread plans, and remove all our breakpoints: in case we
3530 // have to restart the target to kill it, we don't want it hitting a
3531 // breakpoint... Only do this if we've stopped, however, since if we
3532 // didn't manage to halt it above, then we're not going to have much luck
3533 // doing this now.
3536 }
3537
3538 error = DoDestroy();
3539 if (error.Success()) {
3540 DidDestroy();
3542 }
3545 m_stdin_forward = false;
3546
3547 {
3548 std::lock_guard<std::mutex> guard(m_process_input_reader_mutex);
3550 m_process_input_reader->SetIsDone(true);
3551 m_process_input_reader->Cancel();
3552 m_process_input_reader.reset();
3553 }
3554 }
3555
3556 // If we exited when we were waiting for a process to stop, then forward
3557 // the event here so we don't lose the event
3558 if (exit_event_sp) {
3559 // Directly broadcast our exited event because we shut down our private
3560 // state thread above
3561 BroadcastEvent(exit_event_sp);
3562 }
3563
3564 // If we have been interrupted (to kill us) in the middle of running, we
3565 // may not end up propagating the last events through the event system, in
3566 // which case we might strand the write lock. Unlock it here so when we do
3567 // to tear down the process we don't get an error destroying the lock.
3569 }
3570
3571 m_destroy_in_process = false;
3572
3573 return error;
3574}
3575
3578 if (error.Success()) {
3579 error = DoSignal(signal);
3580 if (error.Success())
3581 DidSignal();
3582 }
3583 return error;
3584}
3585
3587 assert(signals_sp && "null signals_sp");
3588 m_unix_signals_sp = std::move(signals_sp);
3589}
3590
3592 assert(m_unix_signals_sp && "null m_unix_signals_sp");
3593 return m_unix_signals_sp;
3594}
3595
3598}
3599
3602}
3603
3605 const StateType state =
3607 bool return_value = true;
3609
3610 switch (state) {
3611 case eStateDetached:
3612 case eStateExited:
3613 case eStateUnloaded:
3617 m_stdin_forward = false;
3618
3619 [[fallthrough]];
3620 case eStateConnected:
3621 case eStateAttaching:
3622 case eStateLaunching:
3623 // These events indicate changes in the state of the debugging session,
3624 // always report them.
3625 return_value = true;
3626 break;
3627 case eStateInvalid:
3628 // We stopped for no apparent reason, don't report it.
3629 return_value = false;
3630 break;
3631 case eStateRunning:
3632 case eStateStepping:
3633 // If we've started the target running, we handle the cases where we are
3634 // already running and where there is a transition from stopped to running
3635 // differently. running -> running: Automatically suppress extra running
3636 // events stopped -> running: Report except when there is one or more no
3637 // votes
3638 // and no yes votes.
3641 return_value = true;
3642 else {
3643 switch (m_last_broadcast_state) {
3644 case eStateRunning:
3645 case eStateStepping:
3646 // We always suppress multiple runnings with no PUBLIC stop in between.
3647 return_value = false;
3648 break;
3649 default:
3650 // TODO: make this work correctly. For now always report
3651 // run if we aren't running so we don't miss any running events. If I
3652 // run the lldb/test/thread/a.out file and break at main.cpp:58, run
3653 // and hit the breakpoints on multiple threads, then somehow during the
3654 // stepping over of all breakpoints no run gets reported.
3655
3656 // This is a transition from stop to run.
3657 switch (m_thread_list.ShouldReportRun(event_ptr)) {
3658 case eVoteYes:
3659 case eVoteNoOpinion:
3660 return_value = true;
3661 break;
3662 case eVoteNo:
3663 return_value = false;
3664 break;
3665 }
3666 break;
3667 }
3668 }
3669 break;
3670 case eStateStopped:
3671 case eStateCrashed:
3672 case eStateSuspended:
3673 // We've stopped. First see if we're going to restart the target. If we
3674 // are going to stop, then we always broadcast the event. If we aren't
3675 // going to stop, let the thread plans decide if we're going to report this
3676 // event. If no thread has an opinion, we don't report it.
3677
3681 LLDB_LOGF(log,
3682 "Process::ShouldBroadcastEvent (%p) stopped due to an "
3683 "interrupt, state: %s",
3684 static_cast<void *>(event_ptr), StateAsCString(state));
3685 // Even though we know we are going to stop, we should let the threads
3686 // have a look at the stop, so they can properly set their state.
3687 m_thread_list.ShouldStop(event_ptr);
3688 return_value = true;
3689 } else {
3690 bool was_restarted = ProcessEventData::GetRestartedFromEvent(event_ptr);
3691 bool should_resume = false;
3692
3693 // It makes no sense to ask "ShouldStop" if we've already been
3694 // restarted... Asking the thread list is also not likely to go well,
3695 // since we are running again. So in that case just report the event.
3696
3697 if (!was_restarted)
3698 should_resume = !m_thread_list.ShouldStop(event_ptr);
3699
3700 if (was_restarted || should_resume || m_resume_requested) {
3701 Vote report_stop_vote = m_thread_list.ShouldReportStop(event_ptr);
3702 LLDB_LOGF(log,
3703 "Process::ShouldBroadcastEvent: should_resume: %i state: "
3704 "%s was_restarted: %i report_stop_vote: %d.",
3705 should_resume, StateAsCString(state), was_restarted,
3706 report_stop_vote);
3707
3708 switch (report_stop_vote) {
3709 case eVoteYes:
3710 return_value = true;
3711 break;
3712 case eVoteNoOpinion:
3713 case eVoteNo:
3714 return_value = false;
3715 break;
3716 }
3717
3718 if (!was_restarted) {
3719 LLDB_LOGF(log,
3720 "Process::ShouldBroadcastEvent (%p) Restarting process "
3721 "from state: %s",
3722 static_cast<void *>(event_ptr), StateAsCString(state));
3724 PrivateResume();
3725 }
3726 } else {
3727 return_value = true;
3729 }
3730 }
3731 break;
3732 }
3733
3734 // Forcing the next event delivery is a one shot deal. So reset it here.
3736
3737 // We do some coalescing of events (for instance two consecutive running
3738 // events get coalesced.) But we only coalesce against events we actually
3739 // broadcast. So we use m_last_broadcast_state to track that. NB - you
3740 // can't use "m_public_state.GetValue()" for that purpose, as was originally
3741 // done, because the PublicState reflects the last event pulled off the
3742 // queue, and there may be several events stacked up on the queue unserviced.
3743 // So the PublicState may not reflect the last broadcasted event yet.
3744 // m_last_broadcast_state gets updated here.
3745
3746 if (return_value)
3747 m_last_broadcast_state = state;
3748
3749 LLDB_LOGF(log,
3750 "Process::ShouldBroadcastEvent (%p) => new state: %s, last "
3751 "broadcast state: %s - %s",
3752 static_cast<void *>(event_ptr), StateAsCString(state),
3754 return_value ? "YES" : "NO");
3755 return return_value;
3756}
3757
3758bool Process::StartPrivateStateThread(bool is_secondary_thread) {
3759 Log *log = GetLog(LLDBLog::Events);
3760
3761 bool already_running = PrivateStateThreadIsValid();
3762 LLDB_LOGF(log, "Process::%s()%s ", __FUNCTION__,
3763 already_running ? " already running"
3764 : " starting private state thread");
3765
3766 if (!is_secondary_thread && already_running)
3767 return true;
3768
3769 // Create a thread that watches our internal state and controls which events
3770 // make it to clients (into the DCProcess event queue).
3771 char thread_name[1024];
3772 uint32_t max_len = llvm::get_max_thread_name_length();
3773 if (max_len > 0 && max_len <= 30) {
3774 // On platforms with abbreviated thread name lengths, choose thread names
3775 // that fit within the limit.
3776 if (already_running)
3777 snprintf(thread_name, sizeof(thread_name), "intern-state-OV");
3778 else
3779 snprintf(thread_name, sizeof(thread_name), "intern-state");
3780 } else {
3781 if (already_running)
3782 snprintf(thread_name, sizeof(thread_name),
3783 "<lldb.process.internal-state-override(pid=%" PRIu64 ")>",
3784 GetID());
3785 else
3786 snprintf(thread_name, sizeof(thread_name),
3787 "<lldb.process.internal-state(pid=%" PRIu64 ")>", GetID());
3788 }
3789
3790 llvm::Expected<HostThread> private_state_thread =
3792 thread_name,
3793 [this, is_secondary_thread] {
3794 return RunPrivateStateThread(is_secondary_thread);
3795 },
3796 8 * 1024 * 1024);
3797 if (!private_state_thread) {
3798 LLDB_LOG_ERROR(GetLog(LLDBLog::Host), private_state_thread.takeError(),
3799 "failed to launch host thread: {0}");
3800 return false;
3801 }
3802
3803 assert(private_state_thread->IsJoinable());
3804 m_private_state_thread = *private_state_thread;
3806 return true;
3807}
3808
3811}
3812
3815}
3816
3820 else {
3821 Log *log = GetLog(LLDBLog::Process);
3822 LLDB_LOGF(
3823 log,
3824 "Went to stop the private state thread, but it was already invalid.");
3825 }
3826}
3827
3829 Log *log = GetLog(LLDBLog::Process);
3830
3831 assert(signal == eBroadcastInternalStateControlStop ||
3834
3835 LLDB_LOGF(log, "Process::%s (signal = %d)", __FUNCTION__, signal);
3836
3837 // Signal the private state thread
3839 // Broadcast the event.
3840 // It is important to do this outside of the if below, because it's
3841 // possible that the thread state is invalid but that the thread is waiting
3842 // on a control event instead of simply being on its way out (this should
3843 // not happen, but it apparently can).
3844 LLDB_LOGF(log, "Sending control event of type: %d.", signal);
3845 std::shared_ptr<EventDataReceipt> event_receipt_sp(new EventDataReceipt());
3847 event_receipt_sp);
3848
3849 // Wait for the event receipt or for the private state thread to exit
3850 bool receipt_received = false;
3852 while (!receipt_received) {
3853 // Check for a receipt for n seconds and then check if the private
3854 // state thread is still around.
3855 receipt_received =
3856 event_receipt_sp->WaitForEventReceived(GetUtilityExpressionTimeout());
3857 if (!receipt_received) {
3858 // Check if the private state thread is still around. If it isn't
3859 // then we are done waiting
3861 break; // Private state thread exited or is exiting, we are done
3862 }
3863 }
3864 }
3865
3866 if (signal == eBroadcastInternalStateControlStop) {
3867 thread_result_t result = {};
3870 }
3871 } else {
3872 LLDB_LOGF(
3873 log,
3874 "Private state thread already dead, no need to signal it to stop.");
3875 }
3876}
3877
3879 if (thread != nullptr)
3880 m_interrupt_tid = thread->GetProtocolID();
3881 else
3885 nullptr);
3886 else
3888}
3889
3891 Log *log = GetLog(LLDBLog::Process);
3892 m_resume_requested = false;
3893
3894 const StateType new_state =
3896
3897 // First check to see if anybody wants a shot at this event:
3900 m_next_event_action_up->PerformAction(event_sp);
3901 LLDB_LOGF(log, "Ran next event action, result was %d.", action_result);
3902
3903 switch (action_result) {
3905 SetNextEventAction(nullptr);
3906 break;
3907
3909 break;
3910
3912 // Handle Exiting Here. If we already got an exited event, we should
3913 // just propagate it. Otherwise, swallow this event, and set our state
3914 // to exit so the next event will kill us.
3915 if (new_state != eStateExited) {
3916 // FIXME: should cons up an exited event, and discard this one.
3917 SetExitStatus(0, m_next_event_action_up->GetExitString());
3918 SetNextEventAction(nullptr);
3919 return;
3920 }
3921 SetNextEventAction(nullptr);
3922 break;
3923 }
3924 }
3925
3926 // See if we should broadcast this state to external clients?
3927 const bool should_broadcast = ShouldBroadcastEvent(event_sp.get());
3928
3929 if (should_broadcast) {
3930 const bool is_hijacked = IsHijackedForEvent(eBroadcastBitStateChanged);
3931 if (log) {
3932 LLDB_LOGF(log,
3933 "Process::%s (pid = %" PRIu64
3934 ") broadcasting new state %s (old state %s) to %s",
3935 __FUNCTION__, GetID(), StateAsCString(new_state),
3937 is_hijacked ? "hijacked" : "public");
3938 }
3940 if (StateIsRunningState(new_state)) {
3941 // Only push the input handler if we aren't fowarding events, as this
3942 // means the curses GUI is in use... Or don't push it if we are launching
3943 // since it will come up stopped.
3944 if (!GetTarget().GetDebugger().IsForwardingEvents() &&
3945 new_state != eStateLaunching && new_state != eStateAttaching) {
3949 LLDB_LOGF(log, "Process::%s updated m_iohandler_sync to %d",
3950 __FUNCTION__, m_iohandler_sync.GetValue());
3951 }
3952 } else if (StateIsStoppedState(new_state, false)) {
3954 // If the lldb_private::Debugger is handling the events, we don't want
3955 // to pop the process IOHandler here, we want to do it when we receive
3956 // the stopped event so we can carefully control when the process
3957 // IOHandler is popped because when we stop we want to display some
3958 // text stating how and why we stopped, then maybe some
3959 // process/thread/frame info, and then we want the "(lldb) " prompt to
3960 // show up. If we pop the process IOHandler here, then we will cause
3961 // the command interpreter to become the top IOHandler after the
3962 // process pops off and it will update its prompt right away... See the
3963 // Debugger.cpp file where it calls the function as
3964 // "process_sp->PopProcessIOHandler()" to see where I am talking about.
3965 // Otherwise we end up getting overlapping "(lldb) " prompts and
3966 // garbled output.
3967 //
3968 // If we aren't handling the events in the debugger (which is indicated
3969 // by "m_target.GetDebugger().IsHandlingEvents()" returning false) or
3970 // we are hijacked, then we always pop the process IO handler manually.
3971 // Hijacking happens when the internal process state thread is running
3972 // thread plans, or when commands want to run in synchronous mode and
3973 // they call "process->WaitForProcessToStop()". An example of something
3974 // that will hijack the events is a simple expression:
3975 //
3976 // (lldb) expr (int)puts("hello")
3977 //
3978 // This will cause the internal process state thread to resume and halt
3979 // the process (and _it_ will hijack the eBroadcastBitStateChanged
3980 // events) and we do need the IO handler to be pushed and popped
3981 // correctly.
3982
3983 if (is_hijacked || !GetTarget().GetDebugger().IsHandlingEvents())
3985 }
3986 }
3987
3988 BroadcastEvent(event_sp);
3989 } else {
3990 if (log) {
3991 LLDB_LOGF(
3992 log,
3993 "Process::%s (pid = %" PRIu64
3994 ") suppressing state %s (old state %s): should_broadcast == false",
3995 __FUNCTION__, GetID(), StateAsCString(new_state),
3997 }
3998 }
3999}
4000
4002 EventSP event_sp;
4004 if (error.Fail())
4005 return error;
4006
4007 // Ask the process subclass to actually halt our process
4008 bool caused_stop;
4009 error = DoHalt(caused_stop);
4010
4011 DidHalt();
4012 return error;
4013}
4014
4016 bool control_only = true;
4017
4018 Log *log = GetLog(LLDBLog::Process);
4019 LLDB_LOGF(log, "Process::%s (arg = %p, pid = %" PRIu64 ") thread starting...",
4020 __FUNCTION__, static_cast<void *>(this), GetID());
4021
4022 bool exit_now = false;
4023 bool interrupt_requested = false;
4024 while (!exit_now) {
4025 EventSP event_sp;
4026 GetEventsPrivate(event_sp, std::nullopt, control_only);
4027 if (event_sp->BroadcasterIs(&m_private_state_control_broadcaster)) {
4028 LLDB_LOGF(log,
4029 "Process::%s (arg = %p, pid = %" PRIu64
4030 ") got a control event: %d",
4031 __FUNCTION__, static_cast<void *>(this), GetID(),
4032 event_sp->GetType());
4033
4034 switch (event_sp->GetType()) {
4036 exit_now = true;
4037 break; // doing any internal state management below
4038
4040 control_only = true;
4041 break;
4042
4044 control_only = false;
4045 break;
4046 }
4047
4048 continue;
4049 } else if (event_sp->GetType() == eBroadcastBitInterrupt) {
4051 LLDB_LOGF(log,
4052 "Process::%s (arg = %p, pid = %" PRIu64
4053 ") woke up with an interrupt while attaching - "
4054 "forwarding interrupt.",
4055 __FUNCTION__, static_cast<void *>(this), GetID());
4056 // The server may be spinning waiting for a process to appear, in which
4057 // case we should tell it to stop doing that. Normally, we don't NEED
4058 // to do that because we will next close the communication to the stub
4059 // and that will get it to shut down. But there are remote debugging
4060 // cases where relying on that side-effect causes the shutdown to be
4061 // flakey, so we should send a positive signal to interrupt the wait.
4065 LLDB_LOGF(log,
4066 "Process::%s (arg = %p, pid = %" PRIu64
4067 ") woke up with an interrupt - Halting.",
4068 __FUNCTION__, static_cast<void *>(this), GetID());
4070 if (error.Fail() && log)
4071 LLDB_LOGF(log,
4072 "Process::%s (arg = %p, pid = %" PRIu64
4073 ") failed to halt the process: %s",
4074 __FUNCTION__, static_cast<void *>(this), GetID(),
4075 error.AsCString());
4076 // Halt should generate a stopped event. Make a note of the fact that
4077 // we were doing the interrupt, so we can set the interrupted flag
4078 // after we receive the event. We deliberately set this to true even if
4079 // HaltPrivate failed, so that we can interrupt on the next natural
4080 // stop.
4081 interrupt_requested = true;
4082 } else {
4083 // This can happen when someone (e.g. Process::Halt) sees that we are
4084 // running and sends an interrupt request, but the process actually
4085 // stops before we receive it. In that case, we can just ignore the
4086 // request. We use m_last_broadcast_state, because the Stopped event
4087 // may not have been popped of the event queue yet, which is when the
4088 // public state gets updated.
4089 LLDB_LOGF(log,
4090 "Process::%s ignoring interrupt as we have already stopped.",
4091 __FUNCTION__);
4092 }
4093 continue;
4094 }
4095
4096 const StateType internal_state =
4098
4099 if (internal_state != eStateInvalid) {
4101 StateIsStoppedState(internal_state, true)) {
4104 }
4105
4106 if (interrupt_requested) {
4107 if (StateIsStoppedState(internal_state, true)) {
4108 // Only mark interrupt event if it is not thread specific async
4109 // interrupt.
4111 // We requested the interrupt, so mark this as such in the stop
4112 // event so clients can tell an interrupted process from a natural
4113 // stop
4114 ProcessEventData::SetInterruptedInEvent(event_sp.get(), true);
4115 }
4116 interrupt_requested = false;
4117 } else if (log) {
4118 LLDB_LOGF(log,
4119 "Process::%s interrupt_requested, but a non-stopped "
4120 "state '%s' received.",
4121 __FUNCTION__, StateAsCString(internal_state));
4122 }
4123 }
4124
4125 HandlePrivateEvent(event_sp);
4126 }
4127
4128 if (internal_state == eStateInvalid || internal_state == eStateExited ||
4129 internal_state == eStateDetached) {
4130 LLDB_LOGF(log,
4131 "Process::%s (arg = %p, pid = %" PRIu64
4132 ") about to exit with internal state %s...",
4133 __FUNCTION__, static_cast<void *>(this), GetID(),
4134 StateAsCString(internal_state));
4135
4136 break;
4137 }
4138 }
4139
4140 // Verify log is still enabled before attempting to write to it...
4141 LLDB_LOGF(log, "Process::%s (arg = %p, pid = %" PRIu64 ") thread exiting...",
4142 __FUNCTION__, static_cast<void *>(this), GetID());
4143
4144 // If we are a secondary thread, then the primary thread we are working for
4145 // will have already acquired the public_run_lock, and isn't done with what
4146 // it was doing yet, so don't try to change it on the way out.
4147 if (!is_secondary_thread)
4149 return {};
4150}
4151
4152// Process Event Data
4153
4155
4157 StateType state)
4158 : EventData(), m_process_wp(), m_state(state) {
4159 if (process_sp)
4160 m_process_wp = process_sp;
4161}
4162
4164
4166 return "Process::ProcessEventData";
4167}
4168
4171}
4172
4174 bool &found_valid_stopinfo) {
4175 found_valid_stopinfo = false;
4176
4177 ProcessSP process_sp(m_process_wp.lock());
4178 if (!process_sp)
4179 return false;
4180
4181 ThreadList &curr_thread_list = process_sp->GetThreadList();
4182 uint32_t num_threads = curr_thread_list.GetSize();
4183
4184 // The actions might change one of the thread's stop_info's opinions about
4185 // whether we should stop the process, so we need to query that as we go.
4186
4187 // One other complication here, is that we try to catch any case where the
4188 // target has run (except for expressions) and immediately exit, but if we
4189 // get that wrong (which is possible) then the thread list might have
4190 // changed, and that would cause our iteration here to crash. We could
4191 // make a copy of the thread list, but we'd really like to also know if it
4192 // has changed at all, so we store the original thread ID's of all threads and
4193 // check what we get back against this list & bag out if anything differs.
4194 std::vector<std::pair<ThreadSP, size_t>> not_suspended_threads;
4195 for (uint32_t idx = 0; idx < num_threads; ++idx) {
4196 lldb::ThreadSP thread_sp = curr_thread_list.GetThreadAtIndex(idx);
4197
4198 /*
4199 Filter out all suspended threads, they could not be the reason
4200 of stop and no need to perform any actions on them.
4201 */
4202 if (thread_sp->GetResumeState() != eStateSuspended)
4203 not_suspended_threads.emplace_back(thread_sp, thread_sp->GetIndexID());
4204 }
4205
4206 // Use this to track whether we should continue from here. We will only
4207 // continue the target running if no thread says we should stop. Of course
4208 // if some thread's PerformAction actually sets the target running, then it
4209 // doesn't matter what the other threads say...
4210
4211 bool still_should_stop = false;
4212
4213 // Sometimes - for instance if we have a bug in the stub we are talking to,
4214 // we stop but no thread has a valid stop reason. In that case we should
4215 // just stop, because we have no way of telling what the right thing to do
4216 // is, and it's better to let the user decide than continue behind their
4217 // backs.
4218
4219 for (auto [thread_sp, thread_index] : not_suspended_threads) {
4220 if (curr_thread_list.GetSize() != num_threads) {
4222 LLDB_LOGF(
4223 log,
4224 "Number of threads changed from %u to %u while processing event.",
4225 num_threads, curr_thread_list.GetSize());
4226 break;
4227 }
4228
4229 if (thread_sp->GetIndexID() != thread_index) {
4231 LLDB_LOG(log,
4232 "The thread {0} changed from {1} to {2} while processing event.",
4233 thread_sp.get(), thread_index, thread_sp->GetIndexID());
4234 break;
4235 }
4236
4237 StopInfoSP stop_info_sp = thread_sp->GetStopInfo();
4238 if (stop_info_sp && stop_info_sp->IsValid()) {
4239 found_valid_stopinfo = true;
4240 bool this_thread_wants_to_stop;
4241 if (stop_info_sp->GetOverrideShouldStop()) {
4242 this_thread_wants_to_stop =
4243 stop_info_sp->GetOverriddenShouldStopValue();
4244 } else {
4245 stop_info_sp->PerformAction(event_ptr);
4246 // The stop action might restart the target. If it does, then we
4247 // want to mark that in the event so that whoever is receiving it
4248 // will know to wait for the running event and reflect that state
4249 // appropriately. We also need to stop processing actions, since they
4250 // aren't expecting the target to be running.
4251
4252 // FIXME: we might have run.
4253 if (stop_info_sp->HasTargetRunSinceMe()) {
4254 SetRestarted(true);
4255 break;
4256 }
4257
4258 this_thread_wants_to_stop = stop_info_sp->ShouldStop(event_ptr);
4259 }
4260
4261 if (!still_should_stop)
4262 still_should_stop = this_thread_wants_to_stop;
4263 }
4264 }
4265
4266 return still_should_stop;
4267}
4268
4270 Event *event_ptr) {
4271 // STDIO and the other async event notifications should always be forwarded.
4272 if (event_ptr->GetType() != Process::eBroadcastBitStateChanged)
4273 return true;
4274
4275 // For state changed events, if the update state is zero, we are handling
4276 // this on the private state thread. We should wait for the public event.
4277 return m_update_state == 1;
4278}
4279
4281 // We only have work to do for state changed events:
4282 if (event_ptr->GetType() != Process::eBroadcastBitStateChanged)
4283 return;
4284
4285 ProcessSP process_sp(m_process_wp.lock());
4286
4287 if (!process_sp)
4288 return;
4289
4290 // This function gets called twice for each event, once when the event gets
4291 // pulled off of the private process event queue, and then any number of
4292 // times, first when it gets pulled off of the public event queue, then other
4293 // times when we're pretending that this is where we stopped at the end of
4294 // expression evaluation. m_update_state is used to distinguish these three
4295 // cases; it is 0 when we're just pulling it off for private handling, and >
4296 // 1 for expression evaluation, and we don't want to do the breakpoint
4297 // command handling then.
4298 if (m_update_state != 1)
4299 return;
4300
4301 process_sp->SetPublicState(
4303
4304 if (m_state == eStateStopped && !m_restarted) {
4305 // Let process subclasses know we are about to do a public stop and do
4306 // anything they might need to in order to speed up register and memory
4307 // accesses.
4308 process_sp->WillPublicStop();
4309 }
4310
4311 // If this is a halt event, even if the halt stopped with some reason other
4312 // than a plain interrupt (e.g. we had already stopped for a breakpoint when
4313 // the halt request came through) don't do the StopInfo actions, as they may
4314 // end up restarting the process.
4315 if (m_interrupted)
4316 return;
4317
4318 // If we're not stopped or have restarted, then skip the StopInfo actions:
4319 if (m_state != eStateStopped || m_restarted) {
4320 return;
4321 }
4322
4323 bool does_anybody_have_an_opinion = false;
4324 bool still_should_stop = ShouldStop(event_ptr, does_anybody_have_an_opinion);
4325
4326 if (GetRestarted()) {
4327 return;
4328 }
4329
4330 if (!still_should_stop && does_anybody_have_an_opinion) {
4331 // We've been asked to continue, so do that here.
4332 SetRestarted(true);
4333 // Use the private resume method here, since we aren't changing the run
4334 // lock state.
4335 process_sp->PrivateResume();
4336 } else {
4337 bool hijacked = process_sp->IsHijackedForEvent(eBroadcastBitStateChanged) &&
4338 !process_sp->StateChangedIsHijackedForSynchronousResume();
4339
4340 if (!hijacked) {
4341 // If we didn't restart, run the Stop Hooks here.
4342 // Don't do that if state changed events aren't hooked up to the
4343 // public (or SyncResume) broadcasters. StopHooks are just for
4344 // real public stops. They might also restart the target,
4345 // so watch for that.
4346 if (process_sp->GetTarget().RunStopHooks())
4347 SetRestarted(true);
4348 }
4349 }
4350}
4351
4353 ProcessSP process_sp(m_process_wp.lock());
4354
4355 if (process_sp)
4356 s->Printf(" process = %p (pid = %" PRIu64 "), ",
4357 static_cast<void *>(process_sp.get()), process_sp->GetID());
4358 else
4359 s->PutCString(" process = NULL, ");
4360
4361 s->Printf("state = %s", StateAsCString(GetState()));
4362}
4363
4366 if (event_ptr) {
4367 const EventData *event_data = event_ptr->GetData();
4368 if (event_data &&
4370 return static_cast<const ProcessEventData *>(event_ptr->GetData());
4371 }
4372 return nullptr;
4373}
4374
4377 ProcessSP process_sp;
4378 const ProcessEventData *data = GetEventDataFromEvent(event_ptr);
4379 if (data)
4380 process_sp = data->GetProcessSP();
4381 return process_sp;
4382}
4383
4385 const ProcessEventData *data = GetEventDataFromEvent(event_ptr);
4386 if (data == nullptr)
4387 return eStateInvalid;
4388 else
4389 return data->GetState();
4390}
4391
4393 const ProcessEventData *data = GetEventDataFromEvent(event_ptr);
4394 if (data == nullptr)
4395 return false;
4396 else
4397 return data->GetRestarted();
4398}
4399
4401 bool new_value) {
4402 ProcessEventData *data =
4403 const_cast<ProcessEventData *>(GetEventDataFromEvent(event_ptr));
4404 if (data != nullptr)
4405 data->SetRestarted(new_value);
4406}
4407
4408size_t
4410 ProcessEventData *data =
4411 const_cast<ProcessEventData *>(GetEventDataFromEvent(event_ptr));
4412 if (data != nullptr)
4413 return data->GetNumRestartedReasons();
4414 else
4415 return 0;
4416}
4417
4418const char *
4420 size_t idx) {
4421 ProcessEventData *data =
4422 const_cast<ProcessEventData *>(GetEventDataFromEvent(event_ptr));
4423 if (data != nullptr)
4424 return data->GetRestartedReasonAtIndex(idx);
4425 else
4426 return nullptr;
4427}
4428
4430 const char *reason) {
4431 ProcessEventData *data =
4432 const_cast<ProcessEventData *>(GetEventDataFromEvent(event_ptr));
4433 if (data != nullptr)
4434 data->AddRestartedReason(reason);
4435}
4436
4438 const Event *event_ptr) {
4439 const ProcessEventData *data = GetEventDataFromEvent(event_ptr);
4440 if (data == nullptr)
4441 return false;
4442 else
4443 return data->GetInterrupted();
4444}
4445
4447 bool new_value) {
4448 ProcessEventData *data =
4449 const_cast<ProcessEventData *>(GetEventDataFromEvent(event_ptr));
4450 if (data != nullptr)
4451 data->SetInterrupted(new_value);
4452}
4453
4455 ProcessEventData *data =
4456 const_cast<ProcessEventData *>(GetEventDataFromEvent(event_ptr));
4457 if (data) {
4459 return true;
4460 }
4461 return false;
4462}
4463
4465
4467 exe_ctx.SetTargetPtr(&GetTarget());
4468 exe_ctx.SetProcessPtr(this);
4469 exe_ctx.SetThreadPtr(nullptr);
4470 exe_ctx.SetFramePtr(nullptr);
4471}
4472
4473// uint32_t
4474// Process::ListProcessesMatchingName (const char *name, StringList &matches,
4475// std::vector<lldb::pid_t> &pids)
4476//{
4477// return 0;
4478//}
4479//
4480// ArchSpec
4481// Process::GetArchSpecForExistingProcess (lldb::pid_t pid)
4482//{
4483// return Host::GetArchSpecForExistingProcess (pid);
4484//}
4485//
4486// ArchSpec
4487// Process::GetArchSpecForExistingProcess (const char *process_name)
4488//{
4489// return Host::GetArchSpecForExistingProcess (process_name);
4490//}
4491
4493 auto event_data_sp =
4494 std::make_shared<ProcessEventData>(shared_from_this(), GetState());
4495 return std::make_shared<Event>(event_type, event_data_sp);
4496}
4497
4498void Process::AppendSTDOUT(const char *s, size_t len) {
4499 std::lock_guard<std::recursive_mutex> guard(m_stdio_communication_mutex);
4500 m_stdout_data.append(s, len);
4502 BroadcastEventIfUnique(event_sp);
4503}
4504
4505void Process::AppendSTDERR(const char *s, size_t len) {
4506 std::lock_guard<std::recursive_mutex> guard(m_stdio_communication_mutex);
4507 m_stderr_data.append(s, len);
4509 BroadcastEventIfUnique(event_sp);
4510}
4511
4512void Process::BroadcastAsyncProfileData(const std::string &one_profile_data) {
4513 std::lock_guard<std::recursive_mutex> guard(m_profile_data_comm_mutex);
4514 m_profile_data.push_back(one_profile_data);
4516 BroadcastEventIfUnique(event_sp);
4517}
4518
4520 const StructuredDataPluginSP &plugin_sp) {
4521 auto data_sp = std::make_shared<EventDataStructuredData>(
4522 shared_from_this(), object_sp, plugin_sp);
4524}
4525
4527Process::GetStructuredDataPlugin(llvm::StringRef type_name) const {
4528 auto find_it = m_structured_data_plugin_map.find(type_name);
4529 if (find_it != m_structured_data_plugin_map.end())
4530 return find_it->second;
4531 else
4532 return StructuredDataPluginSP();
4533}
4534
4535size_t Process::GetAsyncProfileData(char *buf, size_t buf_size, Status &error) {
4536 std::lock_guard<std::recursive_mutex> guard(m_profile_data_comm_mutex);
4537 if (m_profile_data.empty())
4538 return 0;
4539
4540 std::string &one_profile_data = m_profile_data.front();
4541 size_t bytes_available = one_profile_data.size();
4542 if (bytes_available > 0) {
4543 Log *log = GetLog(LLDBLog::Process);
4544 LLDB_LOGF(log, "Process::GetProfileData (buf = %p, size = %" PRIu64 ")",
4545 static_cast<void *>(buf), static_cast<uint64_t>(buf_size));
4546 if (bytes_available > buf_size) {
4547 memcpy(buf, one_profile_data.c_str(), buf_size);
4548 one_profile_data.erase(0, buf_size);
4549 bytes_available = buf_size;
4550 } else {
4551 memcpy(buf, one_profile_data.c_str(), bytes_available);
4552 m_profile_data.erase(m_profile_data.begin());
4553 }
4554 }
4555 return bytes_available;
4556}
4557
4558// Process STDIO
4559
4560size_t Process::GetSTDOUT(char *buf, size_t buf_size, Status &error) {
4561 std::lock_guard<std::recursive_mutex> guard(m_stdio_communication_mutex);
4562 size_t bytes_available = m_stdout_data.size();
4563 if (bytes_available > 0) {
4564 Log *log = GetLog(LLDBLog::Process);
4565 LLDB_LOGF(log, "Process::GetSTDOUT (buf = %p, size = %" PRIu64 ")",
4566 static_cast<void *>(buf), static_cast<uint64_t>(buf_size));
4567 if (bytes_available > buf_size) {
4568 memcpy(buf, m_stdout_data.c_str(), buf_size);
4569 m_stdout_data.erase(0, buf_size);
4570 bytes_available = buf_size;
4571 } else {
4572 memcpy(buf, m_stdout_data.c_str(), bytes_available);
4573 m_stdout_data.clear();
4574 }
4575 }
4576 return bytes_available;
4577}
4578
4579size_t Process::GetSTDERR(char *buf, size_t buf_size, Status &error) {
4580 std::lock_guard<std::recursive_mutex> gaurd(m_stdio_communication_mutex);
4581 size_t bytes_available = m_stderr_data.size();
4582 if (bytes_available > 0) {
4583 Log *log = GetLog(LLDBLog::Process);
4584 LLDB_LOGF(log, "Process::GetSTDERR (buf = %p, size = %" PRIu64 ")",
4585 static_cast<void *>(buf), static_cast<uint64_t>(buf_size));
4586 if (bytes_available > buf_size) {
4587 memcpy(buf, m_stderr_data.c_str(), buf_size);
4588 m_stderr_data.erase(0, buf_size);
4589 bytes_available = buf_size;
4590 } else {
4591 memcpy(buf, m_stderr_data.c_str(), bytes_available);
4592 m_stderr_data.clear();
4593 }
4594 }
4595 return bytes_available;
4596}
4597
4598void Process::STDIOReadThreadBytesReceived(void *baton, const void *src,
4599 size_t src_len) {
4600 Process *process = (Process *)baton;
4601 process->AppendSTDOUT(static_cast<const char *>(src), src_len);
4602}
4603
4605public:
4606 IOHandlerProcessSTDIO(Process *process, int write_fd)
4607 : IOHandler(process->GetTarget().GetDebugger(),
4608 IOHandler::Type::ProcessIO),
4609 m_process(process),
4610 m_read_file(GetInputFD(), File::eOpenOptionReadOnly, false),
4611 m_write_file(write_fd, File::eOpenOptionWriteOnly, false) {
4612 m_pipe.CreateNew(false);
4613 }
4614
4615 ~IOHandlerProcessSTDIO() override = default;
4616
4617 void SetIsRunning(bool running) {
4618 std::lock_guard<std::mutex> guard(m_mutex);
4619 SetIsDone(!running);
4620 m_is_running = running;
4621 }
4622
4623 // Each IOHandler gets to run until it is done. It should read data from the
4624 // "in" and place output into "out" and "err and return when done.
4625 void Run() override {
4626 if (!m_read_file.IsValid() || !m_write_file.IsValid() ||
4627 !m_pipe.CanRead() || !m_pipe.CanWrite()) {
4628 SetIsDone(true);
4629 return;
4630 }
4631
4632 SetIsDone(false);
4633 const int read_fd = m_read_file.GetDescriptor();
4634 Terminal terminal(read_fd);
4635 TerminalState terminal_state(terminal, false);
4636 // FIXME: error handling?
4637 llvm::consumeError(terminal.SetCanonical(false));
4638 llvm::consumeError(terminal.SetEcho(false));
4639// FD_ZERO, FD_SET are not supported on windows
4640#ifndef _WIN32
4641 const int pipe_read_fd = m_pipe.GetReadFileDescriptor();
4642 SetIsRunning(true);
4643 while (true) {
4644 {
4645 std::lock_guard<std::mutex> guard(m_mutex);
4646 if (GetIsDone())
4647 break;
4648 }
4649
4650 SelectHelper select_helper;
4651 select_helper.FDSetRead(read_fd);
4652 select_helper.FDSetRead(pipe_read_fd);
4653 Status error = select_helper.Select();
4654
4655 if (error.Fail())
4656 break;
4657
4658 char ch = 0;
4659 size_t n;
4660 if (select_helper.FDIsSetRead(read_fd)) {
4661 n = 1;
4662 if (m_read_file.Read(&ch, n).Success() && n == 1) {
4663 if (m_write_file.Write(&ch, n).Fail() || n != 1)
4664 break;
4665 } else
4666 break;
4667 }
4668
4669 if (select_helper.FDIsSetRead(pipe_read_fd)) {
4670 size_t bytes_read;
4671 // Consume the interrupt byte
4672 Status error = m_pipe.Read(&ch, 1, bytes_read);
4673 if (error.Success()) {
4674 if (ch == 'q')
4675 break;
4676 if (ch == 'i')
4677 if (StateIsRunningState(m_process->GetState()))
4678 m_process->SendAsyncInterrupt();
4679 }
4680 }
4681 }
4682 SetIsRunning(false);
4683#endif
4684 }
4685
4686 void Cancel() override {
4687 std::lock_guard<std::mutex> guard(m_mutex);
4688 SetIsDone(true);
4689 // Only write to our pipe to cancel if we are in
4690 // IOHandlerProcessSTDIO::Run(). We can end up with a python command that
4691 // is being run from the command interpreter:
4692 //
4693 // (lldb) step_process_thousands_of_times
4694 //
4695 // In this case the command interpreter will be in the middle of handling
4696 // the command and if the process pushes and pops the IOHandler thousands
4697 // of times, we can end up writing to m_pipe without ever consuming the
4698 // bytes from the pipe in IOHandlerProcessSTDIO::Run() and end up
4699 // deadlocking when the pipe gets fed up and blocks until data is consumed.
4700 if (m_is_running) {
4701 char ch = 'q'; // Send 'q' for quit
4702 size_t bytes_written = 0;
4703 m_pipe.Write(&ch, 1, bytes_written);
4704 }
4705 }
4706
4707 bool Interrupt() override {
4708 // Do only things that are safe to do in an interrupt context (like in a
4709 // SIGINT handler), like write 1 byte to a file descriptor. This will
4710 // interrupt the IOHandlerProcessSTDIO::Run() and we can look at the byte
4711 // that was written to the pipe and then call
4712 // m_process->SendAsyncInterrupt() from a much safer location in code.
4713 if (m_active) {
4714 char ch = 'i'; // Send 'i' for interrupt
4715 size_t bytes_written = 0;
4716 Status result = m_pipe.Write(&ch, 1, bytes_written);
4717 return result.Success();
4718 } else {
4719 // This IOHandler might be pushed on the stack, but not being run
4720 // currently so do the right thing if we aren't actively watching for
4721 // STDIN by sending the interrupt to the process. Otherwise the write to
4722 // the pipe above would do nothing. This can happen when the command
4723 // interpreter is running and gets a "expression ...". It will be on the
4724 // IOHandler thread and sending the input is complete to the delegate
4725 // which will cause the expression to run, which will push the process IO
4726 // handler, but not run it.
4727
4728 if (StateIsRunningState(m_process->GetState())) {
4729 m_process->SendAsyncInterrupt();
4730 return true;
4731 }
4732 }
4733 return false;
4734 }
4735
4736 void GotEOF() override {}
4737
4738protected:
4740 NativeFile m_read_file; // Read from this file (usually actual STDIN for LLDB
4741 NativeFile m_write_file; // Write to this file (usually the primary pty for
4742 // getting io to debuggee)
4744 std::mutex m_mutex;
4745 bool m_is_running = false;
4746};
4747
4749 // First set up the Read Thread for reading/handling process I/O
4751 std::make_unique<ConnectionFileDescriptor>(fd, true));
4756
4757 // Now read thread is set up, set up input reader.
4758 {
4759 std::lock_guard<std::mutex> guard(m_process_input_reader_mutex);
4762 std::make_shared<IOHandlerProcessSTDIO>(this, fd);
4763 }
4764 }
4765}
4766
4768 std::lock_guard<std::mutex> guard(m_process_input_reader_mutex);
4769 IOHandlerSP io_handler_sp(m_process_input_reader);
4770 if (io_handler_sp)
4771 return GetTarget().GetDebugger().IsTopIOHandler(io_handler_sp);
4772 return false;
4773}
4774
4776 std::lock_guard<std::mutex> guard(m_process_input_reader_mutex);
4777 IOHandlerSP io_handler_sp(m_process_input_reader);
4778 if (io_handler_sp) {
4779 Log *log = GetLog(LLDBLog::Process);
4780 LLDB_LOGF(log, "Process::%s pushing IO handler", __FUNCTION__);
4781
4782 io_handler_sp->SetIsDone(false);
4783 // If we evaluate an utility function, then we don't cancel the current
4784 // IOHandler. Our IOHandler is non-interactive and shouldn't disturb the
4785 // existing IOHandler that potentially provides the user interface (e.g.
4786 // the IOHandler for Editline).
4787 bool cancel_top_handler = !m_mod_id.IsRunningUtilityFunction();
4788 GetTarget().GetDebugger().RunIOHandlerAsync(io_handler_sp,
4789 cancel_top_handler);
4790 return true;
4791 }
4792 return false;
4793}
4794
4796 std::lock_guard<std::mutex> guard(m_process_input_reader_mutex);
4797 IOHandlerSP io_handler_sp(m_process_input_reader);
4798 if (io_handler_sp)
4799 return GetTarget().GetDebugger().RemoveIOHandler(io_handler_sp);
4800 return false;
4801}
4802
4803// The process needs to know about installed plug-ins
4805
4807
4808namespace {
4809// RestorePlanState is used to record the "is private", "is controlling" and
4810// "okay
4811// to discard" fields of the plan we are running, and reset it on Clean or on
4812// destruction. It will only reset the state once, so you can call Clean and
4813// then monkey with the state and it won't get reset on you again.
4814
4815class RestorePlanState {
4816public:
4817 RestorePlanState(lldb::ThreadPlanSP thread_plan_sp)
4818 : m_thread_plan_sp(thread_plan_sp) {
4819 if (m_thread_plan_sp) {
4820 m_private = m_thread_plan_sp->GetPrivate();
4821 m_is_controlling = m_thread_plan_sp->IsControllingPlan();
4822 m_okay_to_discard = m_thread_plan_sp->OkayToDiscard();
4823 }
4824 }
4825
4826 ~RestorePlanState() { Clean(); }
4827
4828 void Clean() {
4829 if (!m_already_reset && m_thread_plan_sp) {
4830 m_already_reset = true;
4831 m_thread_plan_sp->SetPrivate(m_private);
4832 m_thread_plan_sp->SetIsControllingPlan(m_is_controlling);
4833 m_thread_plan_sp->SetOkayToDiscard(m_okay_to_discard);
4834 }
4835 }
4836
4837private:
4838 lldb::ThreadPlanSP m_thread_plan_sp;
4839 bool m_already_reset = false;
4840 bool m_private = false;
4841 bool m_is_controlling = false;
4842 bool m_okay_to_discard = false;
4843};
4844} // anonymous namespace
4845
4846static microseconds
4848 const milliseconds default_one_thread_timeout(250);
4849
4850 // If the overall wait is forever, then we don't need to worry about it.
4851 if (!options.GetTimeout()) {
4852 return options.GetOneThreadTimeout() ? *options.GetOneThreadTimeout()
4853 : default_one_thread_timeout;
4854 }
4855
4856 // If the one thread timeout is set, use it.
4857 if (options.GetOneThreadTimeout())
4858 return *options.GetOneThreadTimeout();
4859
4860 // Otherwise use half the total timeout, bounded by the
4861 // default_one_thread_timeout.
4862 return std::min<microseconds>(default_one_thread_timeout,
4863 *options.GetTimeout() / 2);
4864}
4865
4868 bool before_first_timeout) {
4869 // If we are going to run all threads the whole time, or if we are only going
4870 // to run one thread, we can just return the overall timeout.
4871 if (!options.GetStopOthers() || !options.GetTryAllThreads())
4872 return options.GetTimeout();
4873
4874 if (before_first_timeout)
4875 return GetOneThreadExpressionTimeout(options);
4876
4877 if (!options.GetTimeout())
4878 return std::nullopt;
4879 else
4880 return *options.GetTimeout() - GetOneThreadExpressionTimeout(options);
4881}
4882
4883static std::optional<ExpressionResults>
4884HandleStoppedEvent(lldb::tid_t thread_id, const ThreadPlanSP &thread_plan_sp,
4885 RestorePlanState &restorer, const EventSP &event_sp,
4886 EventSP &event_to_broadcast_sp,
4887 const EvaluateExpressionOptions &options,
4888 bool handle_interrupts) {
4890
4891 ThreadSP thread_sp = thread_plan_sp->GetTarget()
4892 .GetProcessSP()
4893 ->GetThreadList()
4894 .FindThreadByID(thread_id);
4895 if (!thread_sp) {
4896 LLDB_LOG(log,
4897 "The thread on which we were running the "
4898 "expression: tid = {0}, exited while "
4899 "the expression was running.",
4900 thread_id);
4902 }
4903
4904 ThreadPlanSP plan = thread_sp->GetCompletedPlan();
4905 if (plan == thread_plan_sp && plan->PlanSucceeded()) {
4906 LLDB_LOG(log, "execution completed successfully");
4907
4908 // Restore the plan state so it will get reported as intended when we are
4909 // done.
4910 restorer.Clean();
4911 return eExpressionCompleted;
4912 }
4913
4914 StopInfoSP stop_info_sp = thread_sp->GetStopInfo();
4915 if (stop_info_sp && stop_info_sp->GetStopReason() == eStopReasonBreakpoint &&
4916 stop_info_sp->ShouldNotify(event_sp.get())) {
4917 LLDB_LOG(log, "stopped for breakpoint: {0}.", stop_info_sp->GetDescription());
4918 if (!options.DoesIgnoreBreakpoints()) {
4919 // Restore the plan state and then force Private to false. We are going
4920 // to stop because of this plan so we need it to become a public plan or
4921 // it won't report correctly when we continue to its termination later
4922 // on.
4923 restorer.Clean();
4924 thread_plan_sp->SetPrivate(false);
4925 event_to_broadcast_sp = event_sp;
4926 }
4928 }
4929
4930 if (!handle_interrupts &&
4932 return std::nullopt;
4933
4934 LLDB_LOG(log, "thread plan did not successfully complete");
4935 if (!options.DoesUnwindOnError())
4936 event_to_broadcast_sp = event_sp;
4938}
4939
4942 lldb::ThreadPlanSP &thread_plan_sp,
4943 const EvaluateExpressionOptions &options,
4944 DiagnosticManager &diagnostic_manager) {
4946
4947 std::lock_guard<std::mutex> run_thread_plan_locker(m_run_thread_plan_lock);
4948
4949 if (!thread_plan_sp) {
4950 diagnostic_manager.PutString(
4951 lldb::eSeverityError, "RunThreadPlan called with empty thread plan.");
4952 return eExpressionSetupError;
4953 }
4954
4955 if (!thread_plan_sp->ValidatePlan(nullptr)) {
4956 diagnostic_manager.PutString(
4958 "RunThreadPlan called with an invalid thread plan.");
4959 return eExpressionSetupError;
4960 }
4961
4962 if (exe_ctx.GetProcessPtr() != this) {
4963 diagnostic_manager.PutString(lldb::eSeverityError,
4964 "RunThreadPlan called on wrong process.");
4965 return eExpressionSetupError;
4966 }
4967
4968 Thread *thread = exe_ctx.GetThreadPtr();
4969 if (thread == nullptr) {
4970 diagnostic_manager.PutString(lldb::eSeverityError,
4971 "RunThreadPlan called with invalid thread.");
4972 return eExpressionSetupError;
4973 }
4974
4975 // Record the thread's id so we can tell when a thread we were using
4976 // to run the expression exits during the expression evaluation.
4977 lldb::tid_t expr_thread_id = thread->GetID();
4978
4979 // We need to change some of the thread plan attributes for the thread plan
4980 // runner. This will restore them when we are done:
4981
4982 RestorePlanState thread_plan_restorer(thread_plan_sp);
4983
4984 // We rely on the thread plan we are running returning "P