1 //===-- Target.cpp ----------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/lldb-python.h"
12 #include "lldb/Target/Target.h"
16 // Other libraries and framework includes
18 #include "lldb/Breakpoint/BreakpointResolver.h"
19 #include "lldb/Breakpoint/BreakpointResolverAddress.h"
20 #include "lldb/Breakpoint/BreakpointResolverFileLine.h"
21 #include "lldb/Breakpoint/BreakpointResolverFileRegex.h"
22 #include "lldb/Breakpoint/BreakpointResolverName.h"
23 #include "lldb/Breakpoint/Watchpoint.h"
24 #include "lldb/Core/Debugger.h"
25 #include "lldb/Core/Event.h"
26 #include "lldb/Core/Log.h"
27 #include "lldb/Core/Module.h"
28 #include "lldb/Core/ModuleSpec.h"
29 #include "lldb/Core/Section.h"
30 #include "lldb/Core/SourceManager.h"
31 #include "lldb/Core/State.h"
32 #include "lldb/Core/StreamFile.h"
33 #include "lldb/Core/StreamString.h"
34 #include "lldb/Core/Timer.h"
35 #include "lldb/Core/ValueObject.h"
36 #include "lldb/Expression/ClangASTSource.h"
37 #include "lldb/Expression/ClangUserExpression.h"
38 #include "lldb/Host/Host.h"
39 #include "lldb/Interpreter/CommandInterpreter.h"
40 #include "lldb/Interpreter/CommandReturnObject.h"
41 #include "lldb/Interpreter/OptionGroupWatchpoint.h"
42 #include "lldb/Interpreter/OptionValues.h"
43 #include "lldb/Interpreter/Property.h"
44 #include "lldb/lldb-private-log.h"
45 #include "lldb/Symbol/ObjectFile.h"
46 #include "lldb/Target/Process.h"
47 #include "lldb/Target/SectionLoadList.h"
48 #include "lldb/Target/StackFrame.h"
49 #include "lldb/Target/SystemRuntime.h"
50 #include "lldb/Target/Thread.h"
51 #include "lldb/Target/ThreadSpec.h"
54 using namespace lldb_private;
57 Target::GetStaticBroadcasterClass ()
59 static ConstString class_name ("lldb.target");
63 //----------------------------------------------------------------------
65 //----------------------------------------------------------------------
66 Target::Target(Debugger &debugger, const ArchSpec &target_arch, const lldb::PlatformSP &platform_sp) :
67 TargetProperties (this),
68 Broadcaster (&debugger, Target::GetStaticBroadcasterClass().AsCString()),
69 ExecutionContextScope (),
70 m_debugger (debugger),
71 m_platform_sp (platform_sp),
72 m_mutex (Mutex::eMutexTypeRecursive),
75 m_section_load_history (),
76 m_breakpoint_list (false),
77 m_internal_breakpoint_list (true),
80 m_search_filter_sp (),
81 m_image_search_paths (ImageSearchPathsChanged, this),
82 m_scratch_ast_context_ap (),
83 m_scratch_ast_source_ap (),
85 m_persistent_variables (),
86 m_source_manager_ap(),
88 m_stop_hook_next_id (0),
90 m_suppress_stop_hooks (false)
92 SetEventName (eBroadcastBitBreakpointChanged, "breakpoint-changed");
93 SetEventName (eBroadcastBitModulesLoaded, "modules-loaded");
94 SetEventName (eBroadcastBitModulesUnloaded, "modules-unloaded");
95 SetEventName (eBroadcastBitWatchpointChanged, "watchpoint-changed");
96 SetEventName (eBroadcastBitSymbolsLoaded, "symbols-loaded");
100 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT));
102 log->Printf ("%p Target::Target()", static_cast<void*>(this));
103 if (m_arch.IsValid())
105 LogIfAnyCategoriesSet(LIBLLDB_LOG_TARGET, "Target::Target created with architecture %s (%s)", m_arch.GetArchitectureName(), m_arch.GetTriple().getTriple().c_str());
109 //----------------------------------------------------------------------
111 //----------------------------------------------------------------------
114 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT));
116 log->Printf ("%p Target::~Target()", static_cast<void*>(this));
117 DeleteCurrentProcess ();
121 Target::Dump (Stream *s, lldb::DescriptionLevel description_level)
123 // s->Printf("%.*p: ", (int)sizeof(void*) * 2, this);
124 if (description_level != lldb::eDescriptionLevelBrief)
127 s->PutCString("Target\n");
130 m_breakpoint_list.Dump(s);
131 m_internal_breakpoint_list.Dump(s);
136 Module *exe_module = GetExecutableModulePointer();
138 s->PutCString (exe_module->GetFileSpec().GetFilename().GetCString());
140 s->PutCString ("No executable module.");
145 Target::CleanupProcess ()
147 // Do any cleanup of the target we need to do between process instances.
148 // NB It is better to do this before destroying the process in case the
149 // clean up needs some help from the process.
150 m_breakpoint_list.ClearAllBreakpointSites();
151 m_internal_breakpoint_list.ClearAllBreakpointSites();
152 // Disable watchpoints just on the debugger side.
153 Mutex::Locker locker;
154 this->GetWatchpointList().GetListMutex(locker);
155 DisableAllWatchpoints(false);
156 ClearAllWatchpointHitCounts();
160 Target::DeleteCurrentProcess ()
162 if (m_process_sp.get())
164 m_section_load_history.Clear();
165 if (m_process_sp->IsAlive())
166 m_process_sp->Destroy();
168 m_process_sp->Finalize();
172 m_process_sp.reset();
176 const lldb::ProcessSP &
177 Target::CreateProcess (Listener &listener, const char *plugin_name, const FileSpec *crash_file)
179 DeleteCurrentProcess ();
180 m_process_sp = Process::FindPlugin(*this, plugin_name, listener, crash_file);
184 const lldb::ProcessSP &
185 Target::GetProcessSP () const
193 Mutex::Locker locker (m_mutex);
195 DeleteCurrentProcess ();
196 m_platform_sp.reset();
199 m_section_load_history.Clear();
200 const bool notify = false;
201 m_breakpoint_list.RemoveAll(notify);
202 m_internal_breakpoint_list.RemoveAll(notify);
203 m_last_created_breakpoint.reset();
204 m_last_created_watchpoint.reset();
205 m_search_filter_sp.reset();
206 m_image_search_paths.Clear(notify);
207 m_persistent_variables.Clear();
208 m_stop_hooks.clear();
209 m_stop_hook_next_id = 0;
210 m_suppress_stop_hooks = false;
215 Target::GetBreakpointList(bool internal)
218 return m_internal_breakpoint_list;
220 return m_breakpoint_list;
223 const BreakpointList &
224 Target::GetBreakpointList(bool internal) const
227 return m_internal_breakpoint_list;
229 return m_breakpoint_list;
233 Target::GetBreakpointByID (break_id_t break_id)
237 if (LLDB_BREAK_ID_IS_INTERNAL (break_id))
238 bp_sp = m_internal_breakpoint_list.FindBreakpointByID (break_id);
240 bp_sp = m_breakpoint_list.FindBreakpointByID (break_id);
246 Target::CreateSourceRegexBreakpoint (const FileSpecList *containingModules,
247 const FileSpecList *source_file_spec_list,
248 RegularExpression &source_regex,
252 SearchFilterSP filter_sp(GetSearchFilterForModuleAndCUList (containingModules, source_file_spec_list));
253 BreakpointResolverSP resolver_sp(new BreakpointResolverFileRegex (NULL, source_regex));
254 return CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, true);
259 Target::CreateBreakpoint (const FileSpecList *containingModules,
260 const FileSpec &file,
262 LazyBool check_inlines,
263 LazyBool skip_prologue,
267 if (check_inlines == eLazyBoolCalculate)
269 const InlineStrategy inline_strategy = GetInlineStrategy();
270 switch (inline_strategy)
272 case eInlineBreakpointsNever:
273 check_inlines = eLazyBoolNo;
276 case eInlineBreakpointsHeaders:
277 if (file.IsSourceImplementationFile())
278 check_inlines = eLazyBoolNo;
280 check_inlines = eLazyBoolYes;
283 case eInlineBreakpointsAlways:
284 check_inlines = eLazyBoolYes;
288 SearchFilterSP filter_sp;
289 if (check_inlines == eLazyBoolNo)
291 // Not checking for inlines, we are looking only for matching compile units
292 FileSpecList compile_unit_list;
293 compile_unit_list.Append (file);
294 filter_sp = GetSearchFilterForModuleAndCUList (containingModules, &compile_unit_list);
298 filter_sp = GetSearchFilterForModuleList (containingModules);
300 if (skip_prologue == eLazyBoolCalculate)
301 skip_prologue = GetSkipPrologue() ? eLazyBoolYes : eLazyBoolNo;
303 BreakpointResolverSP resolver_sp(new BreakpointResolverFileLine (NULL,
308 return CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, true);
313 Target::CreateBreakpoint (lldb::addr_t addr, bool internal, bool hardware)
316 // Attempt to resolve our load address if possible, though it is ok if
317 // it doesn't resolve to section/offset.
319 // Try and resolve as a load address if possible
320 GetSectionLoadList().ResolveLoadAddress(addr, so_addr);
321 if (!so_addr.IsValid())
323 // The address didn't resolve, so just set this as an absolute address
324 so_addr.SetOffset (addr);
326 BreakpointSP bp_sp (CreateBreakpoint(so_addr, internal, hardware));
331 Target::CreateBreakpoint (Address &addr, bool internal, bool hardware)
333 SearchFilterSP filter_sp(new SearchFilterForNonModuleSpecificSearches (shared_from_this()));
334 BreakpointResolverSP resolver_sp (new BreakpointResolverAddress (NULL, addr));
335 return CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, false);
339 Target::CreateBreakpoint (const FileSpecList *containingModules,
340 const FileSpecList *containingSourceFiles,
341 const char *func_name,
342 uint32_t func_name_type_mask,
343 LazyBool skip_prologue,
350 SearchFilterSP filter_sp(GetSearchFilterForModuleAndCUList (containingModules, containingSourceFiles));
352 if (skip_prologue == eLazyBoolCalculate)
353 skip_prologue = GetSkipPrologue() ? eLazyBoolYes : eLazyBoolNo;
355 BreakpointResolverSP resolver_sp (new BreakpointResolverName (NULL,
360 bp_sp = CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, true);
366 Target::CreateBreakpoint (const FileSpecList *containingModules,
367 const FileSpecList *containingSourceFiles,
368 const std::vector<std::string> &func_names,
369 uint32_t func_name_type_mask,
370 LazyBool skip_prologue,
375 size_t num_names = func_names.size();
378 SearchFilterSP filter_sp(GetSearchFilterForModuleAndCUList (containingModules, containingSourceFiles));
380 if (skip_prologue == eLazyBoolCalculate)
381 skip_prologue = GetSkipPrologue() ? eLazyBoolYes : eLazyBoolNo;
383 BreakpointResolverSP resolver_sp (new BreakpointResolverName (NULL,
387 bp_sp = CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, true);
393 Target::CreateBreakpoint (const FileSpecList *containingModules,
394 const FileSpecList *containingSourceFiles,
395 const char *func_names[],
397 uint32_t func_name_type_mask,
398 LazyBool skip_prologue,
405 SearchFilterSP filter_sp(GetSearchFilterForModuleAndCUList (containingModules, containingSourceFiles));
407 if (skip_prologue == eLazyBoolCalculate)
408 skip_prologue = GetSkipPrologue() ? eLazyBoolYes : eLazyBoolNo;
410 BreakpointResolverSP resolver_sp (new BreakpointResolverName (NULL,
415 bp_sp = CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, true);
421 Target::GetSearchFilterForModule (const FileSpec *containingModule)
423 SearchFilterSP filter_sp;
424 if (containingModule != NULL)
426 // TODO: We should look into sharing module based search filters
427 // across many breakpoints like we do for the simple target based one
428 filter_sp.reset (new SearchFilterByModule (shared_from_this(), *containingModule));
432 if (m_search_filter_sp.get() == NULL)
433 m_search_filter_sp.reset (new SearchFilterForNonModuleSpecificSearches (shared_from_this()));
434 filter_sp = m_search_filter_sp;
440 Target::GetSearchFilterForModuleList (const FileSpecList *containingModules)
442 SearchFilterSP filter_sp;
443 if (containingModules && containingModules->GetSize() != 0)
445 // TODO: We should look into sharing module based search filters
446 // across many breakpoints like we do for the simple target based one
447 filter_sp.reset (new SearchFilterByModuleList (shared_from_this(), *containingModules));
451 if (m_search_filter_sp.get() == NULL)
452 m_search_filter_sp.reset (new SearchFilterForNonModuleSpecificSearches (shared_from_this()));
453 filter_sp = m_search_filter_sp;
459 Target::GetSearchFilterForModuleAndCUList (const FileSpecList *containingModules,
460 const FileSpecList *containingSourceFiles)
462 if (containingSourceFiles == NULL || containingSourceFiles->GetSize() == 0)
463 return GetSearchFilterForModuleList(containingModules);
465 SearchFilterSP filter_sp;
466 if (containingModules == NULL)
468 // We could make a special "CU List only SearchFilter". Better yet was if these could be composable,
469 // but that will take a little reworking.
471 filter_sp.reset (new SearchFilterByModuleListAndCU (shared_from_this(), FileSpecList(), *containingSourceFiles));
475 filter_sp.reset (new SearchFilterByModuleListAndCU (shared_from_this(), *containingModules, *containingSourceFiles));
481 Target::CreateFuncRegexBreakpoint (const FileSpecList *containingModules,
482 const FileSpecList *containingSourceFiles,
483 RegularExpression &func_regex,
484 LazyBool skip_prologue,
488 SearchFilterSP filter_sp(GetSearchFilterForModuleAndCUList (containingModules, containingSourceFiles));
490 (skip_prologue == eLazyBoolCalculate) ? GetSkipPrologue()
491 : static_cast<bool>(skip_prologue);
492 BreakpointResolverSP resolver_sp(new BreakpointResolverName (NULL,
496 return CreateBreakpoint (filter_sp, resolver_sp, internal, hardware, true);
500 Target::CreateExceptionBreakpoint (enum lldb::LanguageType language, bool catch_bp, bool throw_bp, bool internal)
502 return LanguageRuntime::CreateExceptionBreakpoint (*this, language, catch_bp, throw_bp, internal);
506 Target::CreateBreakpoint (SearchFilterSP &filter_sp, BreakpointResolverSP &resolver_sp, bool internal, bool request_hardware, bool resolve_indirect_symbols)
509 if (filter_sp && resolver_sp)
511 bp_sp.reset(new Breakpoint (*this, filter_sp, resolver_sp, request_hardware, resolve_indirect_symbols));
512 resolver_sp->SetBreakpoint (bp_sp.get());
515 m_internal_breakpoint_list.Add (bp_sp, false);
517 m_breakpoint_list.Add (bp_sp, true);
519 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
523 bp_sp->GetDescription(&s, lldb::eDescriptionLevelVerbose);
524 log->Printf ("Target::%s (internal = %s) => break_id = %s\n", __FUNCTION__, internal ? "yes" : "no", s.GetData());
527 bp_sp->ResolveBreakpoint();
530 if (!internal && bp_sp)
532 m_last_created_breakpoint = bp_sp;
539 Target::ProcessIsValid()
541 return (m_process_sp && m_process_sp->IsAlive());
545 CheckIfWatchpointsExhausted(Target *target, Error &error)
547 uint32_t num_supported_hardware_watchpoints;
548 Error rc = target->GetProcessSP()->GetWatchpointSupportInfo(num_supported_hardware_watchpoints);
551 uint32_t num_current_watchpoints = target->GetWatchpointList().GetSize();
552 if (num_current_watchpoints >= num_supported_hardware_watchpoints)
553 error.SetErrorStringWithFormat("number of supported hardware watchpoints (%u) has been reached",
554 num_supported_hardware_watchpoints);
559 // See also Watchpoint::SetWatchpointType(uint32_t type) and
560 // the OptionGroupWatchpoint::WatchType enum type.
562 Target::CreateWatchpoint(lldb::addr_t addr, size_t size, const ClangASTType *type, uint32_t kind, Error &error)
564 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
566 log->Printf("Target::%s (addr = 0x%8.8" PRIx64 " size = %" PRIu64 " type = %u)\n",
567 __FUNCTION__, addr, (uint64_t)size, kind);
570 if (!ProcessIsValid())
572 error.SetErrorString("process is not alive");
576 if (addr == LLDB_INVALID_ADDRESS || size == 0)
579 error.SetErrorString("cannot set a watchpoint with watch_size of 0");
581 error.SetErrorStringWithFormat("invalid watch address: %" PRIu64, addr);
585 if (!LLDB_WATCH_TYPE_IS_VALID(kind))
587 error.SetErrorStringWithFormat ("invalid watchpoint type: %d", kind);
590 // Currently we only support one watchpoint per address, with total number
591 // of watchpoints limited by the hardware which the inferior is running on.
593 // Grab the list mutex while doing operations.
594 const bool notify = false; // Don't notify about all the state changes we do on creating the watchpoint.
595 Mutex::Locker locker;
596 this->GetWatchpointList().GetListMutex(locker);
597 WatchpointSP matched_sp = m_watchpoint_list.FindByAddress(addr);
600 size_t old_size = matched_sp->GetByteSize();
602 (matched_sp->WatchpointRead() ? LLDB_WATCH_TYPE_READ : 0) |
603 (matched_sp->WatchpointWrite() ? LLDB_WATCH_TYPE_WRITE : 0);
604 // Return the existing watchpoint if both size and type match.
605 if (size == old_size && kind == old_type)
608 wp_sp->SetEnabled(false, notify);
612 // Nil the matched watchpoint; we will be creating a new one.
613 m_process_sp->DisableWatchpoint(matched_sp.get(), notify);
614 m_watchpoint_list.Remove(matched_sp->GetID(), true);
620 wp_sp.reset(new Watchpoint(*this, addr, size, type));
621 wp_sp->SetWatchpointType(kind, notify);
622 m_watchpoint_list.Add (wp_sp, true);
625 error = m_process_sp->EnableWatchpoint(wp_sp.get(), notify);
627 log->Printf("Target::%s (creation of watchpoint %s with id = %u)\n",
629 error.Success() ? "succeeded" : "failed",
634 // Enabling the watchpoint on the device side failed.
635 // Remove the said watchpoint from the list maintained by the target instance.
636 m_watchpoint_list.Remove (wp_sp->GetID(), true);
637 // See if we could provide more helpful error message.
638 if (!CheckIfWatchpointsExhausted(this, error))
640 if (!OptionGroupWatchpoint::IsWatchSizeSupported(size))
641 error.SetErrorStringWithFormat("watch size of %" PRIu64 " is not supported", (uint64_t)size);
646 m_last_created_watchpoint = wp_sp;
651 Target::RemoveAllBreakpoints (bool internal_also)
653 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
655 log->Printf ("Target::%s (internal_also = %s)\n", __FUNCTION__, internal_also ? "yes" : "no");
657 m_breakpoint_list.RemoveAll (true);
659 m_internal_breakpoint_list.RemoveAll (false);
661 m_last_created_breakpoint.reset();
665 Target::DisableAllBreakpoints (bool internal_also)
667 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
669 log->Printf ("Target::%s (internal_also = %s)\n", __FUNCTION__, internal_also ? "yes" : "no");
671 m_breakpoint_list.SetEnabledAll (false);
673 m_internal_breakpoint_list.SetEnabledAll (false);
677 Target::EnableAllBreakpoints (bool internal_also)
679 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
681 log->Printf ("Target::%s (internal_also = %s)\n", __FUNCTION__, internal_also ? "yes" : "no");
683 m_breakpoint_list.SetEnabledAll (true);
685 m_internal_breakpoint_list.SetEnabledAll (true);
689 Target::RemoveBreakpointByID (break_id_t break_id)
691 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
693 log->Printf ("Target::%s (break_id = %i, internal = %s)\n", __FUNCTION__, break_id, LLDB_BREAK_ID_IS_INTERNAL (break_id) ? "yes" : "no");
695 if (DisableBreakpointByID (break_id))
697 if (LLDB_BREAK_ID_IS_INTERNAL (break_id))
698 m_internal_breakpoint_list.Remove(break_id, false);
701 if (m_last_created_breakpoint)
703 if (m_last_created_breakpoint->GetID() == break_id)
704 m_last_created_breakpoint.reset();
706 m_breakpoint_list.Remove(break_id, true);
714 Target::DisableBreakpointByID (break_id_t break_id)
716 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
718 log->Printf ("Target::%s (break_id = %i, internal = %s)\n", __FUNCTION__, break_id, LLDB_BREAK_ID_IS_INTERNAL (break_id) ? "yes" : "no");
722 if (LLDB_BREAK_ID_IS_INTERNAL (break_id))
723 bp_sp = m_internal_breakpoint_list.FindBreakpointByID (break_id);
725 bp_sp = m_breakpoint_list.FindBreakpointByID (break_id);
728 bp_sp->SetEnabled (false);
735 Target::EnableBreakpointByID (break_id_t break_id)
737 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
739 log->Printf ("Target::%s (break_id = %i, internal = %s)\n",
742 LLDB_BREAK_ID_IS_INTERNAL (break_id) ? "yes" : "no");
746 if (LLDB_BREAK_ID_IS_INTERNAL (break_id))
747 bp_sp = m_internal_breakpoint_list.FindBreakpointByID (break_id);
749 bp_sp = m_breakpoint_list.FindBreakpointByID (break_id);
753 bp_sp->SetEnabled (true);
759 // The flag 'end_to_end', default to true, signifies that the operation is
760 // performed end to end, for both the debugger and the debuggee.
762 // Assumption: Caller holds the list mutex lock for m_watchpoint_list for end
763 // to end operations.
765 Target::RemoveAllWatchpoints (bool end_to_end)
767 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
769 log->Printf ("Target::%s\n", __FUNCTION__);
772 m_watchpoint_list.RemoveAll(true);
776 // Otherwise, it's an end to end operation.
778 if (!ProcessIsValid())
781 size_t num_watchpoints = m_watchpoint_list.GetSize();
782 for (size_t i = 0; i < num_watchpoints; ++i)
784 WatchpointSP wp_sp = m_watchpoint_list.GetByIndex(i);
788 Error rc = m_process_sp->DisableWatchpoint(wp_sp.get());
792 m_watchpoint_list.RemoveAll (true);
793 m_last_created_watchpoint.reset();
794 return true; // Success!
797 // Assumption: Caller holds the list mutex lock for m_watchpoint_list for end to
800 Target::DisableAllWatchpoints (bool end_to_end)
802 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
804 log->Printf ("Target::%s\n", __FUNCTION__);
807 m_watchpoint_list.SetEnabledAll(false);
811 // Otherwise, it's an end to end operation.
813 if (!ProcessIsValid())
816 size_t num_watchpoints = m_watchpoint_list.GetSize();
817 for (size_t i = 0; i < num_watchpoints; ++i)
819 WatchpointSP wp_sp = m_watchpoint_list.GetByIndex(i);
823 Error rc = m_process_sp->DisableWatchpoint(wp_sp.get());
827 return true; // Success!
830 // Assumption: Caller holds the list mutex lock for m_watchpoint_list for end to
833 Target::EnableAllWatchpoints (bool end_to_end)
835 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
837 log->Printf ("Target::%s\n", __FUNCTION__);
840 m_watchpoint_list.SetEnabledAll(true);
844 // Otherwise, it's an end to end operation.
846 if (!ProcessIsValid())
849 size_t num_watchpoints = m_watchpoint_list.GetSize();
850 for (size_t i = 0; i < num_watchpoints; ++i)
852 WatchpointSP wp_sp = m_watchpoint_list.GetByIndex(i);
856 Error rc = m_process_sp->EnableWatchpoint(wp_sp.get());
860 return true; // Success!
863 // Assumption: Caller holds the list mutex lock for m_watchpoint_list.
865 Target::ClearAllWatchpointHitCounts ()
867 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
869 log->Printf ("Target::%s\n", __FUNCTION__);
871 size_t num_watchpoints = m_watchpoint_list.GetSize();
872 for (size_t i = 0; i < num_watchpoints; ++i)
874 WatchpointSP wp_sp = m_watchpoint_list.GetByIndex(i);
878 wp_sp->ResetHitCount();
880 return true; // Success!
883 // Assumption: Caller holds the list mutex lock for m_watchpoint_list
884 // during these operations.
886 Target::IgnoreAllWatchpoints (uint32_t ignore_count)
888 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
890 log->Printf ("Target::%s\n", __FUNCTION__);
892 if (!ProcessIsValid())
895 size_t num_watchpoints = m_watchpoint_list.GetSize();
896 for (size_t i = 0; i < num_watchpoints; ++i)
898 WatchpointSP wp_sp = m_watchpoint_list.GetByIndex(i);
902 wp_sp->SetIgnoreCount(ignore_count);
904 return true; // Success!
907 // Assumption: Caller holds the list mutex lock for m_watchpoint_list.
909 Target::DisableWatchpointByID (lldb::watch_id_t watch_id)
911 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
913 log->Printf ("Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
915 if (!ProcessIsValid())
918 WatchpointSP wp_sp = m_watchpoint_list.FindByID (watch_id);
921 Error rc = m_process_sp->DisableWatchpoint(wp_sp.get());
925 // Else, fallthrough.
930 // Assumption: Caller holds the list mutex lock for m_watchpoint_list.
932 Target::EnableWatchpointByID (lldb::watch_id_t watch_id)
934 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
936 log->Printf ("Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
938 if (!ProcessIsValid())
941 WatchpointSP wp_sp = m_watchpoint_list.FindByID (watch_id);
944 Error rc = m_process_sp->EnableWatchpoint(wp_sp.get());
948 // Else, fallthrough.
953 // Assumption: Caller holds the list mutex lock for m_watchpoint_list.
955 Target::RemoveWatchpointByID (lldb::watch_id_t watch_id)
957 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
959 log->Printf ("Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
961 WatchpointSP watch_to_remove_sp = m_watchpoint_list.FindByID(watch_id);
962 if (watch_to_remove_sp == m_last_created_watchpoint)
963 m_last_created_watchpoint.reset();
965 if (DisableWatchpointByID (watch_id))
967 m_watchpoint_list.Remove(watch_id, true);
973 // Assumption: Caller holds the list mutex lock for m_watchpoint_list.
975 Target::IgnoreWatchpointByID (lldb::watch_id_t watch_id, uint32_t ignore_count)
977 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_WATCHPOINTS));
979 log->Printf ("Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
981 if (!ProcessIsValid())
984 WatchpointSP wp_sp = m_watchpoint_list.FindByID (watch_id);
987 wp_sp->SetIgnoreCount(ignore_count);
994 Target::GetExecutableModule ()
996 return m_images.GetModuleAtIndex(0);
1000 Target::GetExecutableModulePointer ()
1002 return m_images.GetModulePointerAtIndex(0);
1006 LoadScriptingResourceForModule (const ModuleSP &module_sp, Target *target)
1009 StreamString feedback_stream;
1010 if (module_sp && !module_sp->LoadScriptingResourceInTarget(target, error, &feedback_stream))
1012 if (error.AsCString())
1013 target->GetDebugger().GetErrorFile()->Printf("unable to load scripting data for module %s - error reported was %s\n",
1014 module_sp->GetFileSpec().GetFileNameStrippingExtension().GetCString(),
1017 if (feedback_stream.GetSize())
1018 target->GetDebugger().GetErrorFile()->Printf("%s\n",
1019 feedback_stream.GetData());
1023 Target::ClearModules(bool delete_locations)
1025 ModulesDidUnload (m_images, delete_locations);
1026 m_section_load_history.Clear();
1028 m_scratch_ast_context_ap.reset();
1029 m_scratch_ast_source_ap.reset();
1030 m_ast_importer_ap.reset();
1036 // When a process exec's we need to know about it so we can do some cleanup.
1037 m_breakpoint_list.RemoveInvalidLocations(m_arch);
1038 m_internal_breakpoint_list.RemoveInvalidLocations(m_arch);
1042 Target::SetExecutableModule (ModuleSP& executable_sp, bool get_dependent_files)
1044 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TARGET));
1045 ClearModules(false);
1047 if (executable_sp.get())
1049 Timer scoped_timer (__PRETTY_FUNCTION__,
1050 "Target::SetExecutableModule (executable = '%s')",
1051 executable_sp->GetFileSpec().GetPath().c_str());
1053 m_images.Append(executable_sp); // The first image is our executable file
1055 // If we haven't set an architecture yet, reset our architecture based on what we found in the executable module.
1056 if (!m_arch.IsValid())
1058 m_arch = executable_sp->GetArchitecture();
1060 log->Printf ("Target::SetExecutableModule setting architecture to %s (%s) based on executable file", m_arch.GetArchitectureName(), m_arch.GetTriple().getTriple().c_str());
1063 FileSpecList dependent_files;
1064 ObjectFile *executable_objfile = executable_sp->GetObjectFile();
1066 if (executable_objfile && get_dependent_files)
1068 executable_objfile->GetDependentModules(dependent_files);
1069 for (uint32_t i=0; i<dependent_files.GetSize(); i++)
1071 FileSpec dependent_file_spec (dependent_files.GetFileSpecPointerAtIndex(i));
1072 FileSpec platform_dependent_file_spec;
1074 m_platform_sp->GetFileWithUUID (dependent_file_spec, NULL, platform_dependent_file_spec);
1076 platform_dependent_file_spec = dependent_file_spec;
1078 ModuleSpec module_spec (platform_dependent_file_spec, m_arch);
1079 ModuleSP image_module_sp(GetSharedModule (module_spec));
1080 if (image_module_sp.get())
1082 ObjectFile *objfile = image_module_sp->GetObjectFile();
1084 objfile->GetDependentModules(dependent_files);
1093 Target::SetArchitecture (const ArchSpec &arch_spec)
1095 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TARGET));
1096 if (m_arch.IsCompatibleMatch(arch_spec) || !m_arch.IsValid())
1098 // If we haven't got a valid arch spec, or the architectures are
1099 // compatible, so just update the architecture. Architectures can be
1100 // equal, yet the triple OS and vendor might change, so we need to do
1101 // the assignment here just in case.
1104 log->Printf ("Target::SetArchitecture setting architecture to %s (%s)", arch_spec.GetArchitectureName(), arch_spec.GetTriple().getTriple().c_str());
1109 // If we have an executable file, try to reset the executable to the desired architecture
1111 log->Printf ("Target::SetArchitecture changing architecture to %s (%s)", arch_spec.GetArchitectureName(), arch_spec.GetTriple().getTriple().c_str());
1113 ModuleSP executable_sp = GetExecutableModule ();
1116 // Need to do something about unsetting breakpoints.
1121 log->Printf("Target::SetArchitecture Trying to select executable file architecture %s (%s)", arch_spec.GetArchitectureName(), arch_spec.GetTriple().getTriple().c_str());
1122 ModuleSpec module_spec (executable_sp->GetFileSpec(), arch_spec);
1123 Error error = ModuleList::GetSharedModule (module_spec,
1125 &GetExecutableSearchPaths(),
1129 if (!error.Fail() && executable_sp)
1131 SetExecutableModule (executable_sp, true);
1140 Target::WillClearList (const ModuleList& module_list)
1145 Target::ModuleAdded (const ModuleList& module_list, const ModuleSP &module_sp)
1147 // A module is being added to this target for the first time
1150 ModuleList my_module_list;
1151 my_module_list.Append(module_sp);
1152 LoadScriptingResourceForModule(module_sp, this);
1153 ModulesDidLoad (my_module_list);
1158 Target::ModuleRemoved (const ModuleList& module_list, const ModuleSP &module_sp)
1160 // A module is being added to this target for the first time
1163 ModuleList my_module_list;
1164 my_module_list.Append(module_sp);
1165 ModulesDidUnload (my_module_list, false);
1170 Target::ModuleUpdated (const ModuleList& module_list, const ModuleSP &old_module_sp, const ModuleSP &new_module_sp)
1172 // A module is replacing an already added module
1174 m_breakpoint_list.UpdateBreakpointsWhenModuleIsReplaced(old_module_sp, new_module_sp);
1178 Target::ModulesDidLoad (ModuleList &module_list)
1180 if (m_valid && module_list.GetSize())
1182 m_breakpoint_list.UpdateBreakpoints (module_list, true, false);
1185 m_process_sp->ModulesDidLoad (module_list);
1187 // TODO: make event data that packages up the module_list
1188 BroadcastEvent (eBroadcastBitModulesLoaded, NULL);
1193 Target::SymbolsDidLoad (ModuleList &module_list)
1195 if (m_valid && module_list.GetSize())
1199 LanguageRuntime* runtime = m_process_sp->GetLanguageRuntime(lldb::eLanguageTypeObjC);
1202 ObjCLanguageRuntime *objc_runtime = (ObjCLanguageRuntime*)runtime;
1203 objc_runtime->SymbolsDidLoad(module_list);
1207 m_breakpoint_list.UpdateBreakpoints (module_list, true, false);
1208 BroadcastEvent(eBroadcastBitSymbolsLoaded, NULL);
1213 Target::ModulesDidUnload (ModuleList &module_list, bool delete_locations)
1215 if (m_valid && module_list.GetSize())
1217 m_breakpoint_list.UpdateBreakpoints (module_list, false, delete_locations);
1218 // TODO: make event data that packages up the module_list
1219 BroadcastEvent (eBroadcastBitModulesUnloaded, NULL);
1224 Target::ModuleIsExcludedForNonModuleSpecificSearches (const FileSpec &module_file_spec)
1226 if (GetBreakpointsConsultPlatformAvoidList())
1228 ModuleList matchingModules;
1229 ModuleSpec module_spec (module_file_spec);
1230 size_t num_modules = GetImages().FindModules(module_spec, matchingModules);
1232 // If there is more than one module for this file spec, only return true if ALL the modules are on the
1234 if (num_modules > 0)
1236 for (size_t i = 0; i < num_modules; i++)
1238 if (!ModuleIsExcludedForNonModuleSpecificSearches (matchingModules.GetModuleAtIndex(i)))
1248 Target::ModuleIsExcludedForNonModuleSpecificSearches (const lldb::ModuleSP &module_sp)
1250 if (GetBreakpointsConsultPlatformAvoidList())
1253 return m_platform_sp->ModuleIsExcludedForNonModuleSpecificSearches (*this, module_sp);
1259 Target::ReadMemoryFromFileCache (const Address& addr, void *dst, size_t dst_len, Error &error)
1261 SectionSP section_sp (addr.GetSection());
1264 // If the contents of this section are encrypted, the on-disk file is unusable. Read only from live memory.
1265 if (section_sp->IsEncrypted())
1267 error.SetErrorString("section is encrypted");
1270 ModuleSP module_sp (section_sp->GetModule());
1273 ObjectFile *objfile = section_sp->GetModule()->GetObjectFile();
1276 size_t bytes_read = objfile->ReadSectionData (section_sp.get(),
1283 error.SetErrorStringWithFormat("error reading data from section %s", section_sp->GetName().GetCString());
1286 error.SetErrorString("address isn't from a object file");
1289 error.SetErrorString("address isn't in a module");
1292 error.SetErrorString("address doesn't contain a section that points to a section in a object file");
1298 Target::ReadMemory (const Address& addr,
1299 bool prefer_file_cache,
1303 lldb::addr_t *load_addr_ptr)
1307 // if we end up reading this from process memory, we will fill this
1308 // with the actual load address
1310 *load_addr_ptr = LLDB_INVALID_ADDRESS;
1312 size_t bytes_read = 0;
1314 addr_t load_addr = LLDB_INVALID_ADDRESS;
1315 addr_t file_addr = LLDB_INVALID_ADDRESS;
1316 Address resolved_addr;
1317 if (!addr.IsSectionOffset())
1319 SectionLoadList §ion_load_list = GetSectionLoadList();
1320 if (section_load_list.IsEmpty())
1322 // No sections are loaded, so we must assume we are not running
1323 // yet and anything we are given is a file address.
1324 file_addr = addr.GetOffset(); // "addr" doesn't have a section, so its offset is the file address
1325 m_images.ResolveFileAddress (file_addr, resolved_addr);
1329 // We have at least one section loaded. This can be because
1330 // we have manually loaded some sections with "target modules load ..."
1331 // or because we have have a live process that has sections loaded
1332 // through the dynamic loader
1333 load_addr = addr.GetOffset(); // "addr" doesn't have a section, so its offset is the load address
1334 section_load_list.ResolveLoadAddress (load_addr, resolved_addr);
1337 if (!resolved_addr.IsValid())
1338 resolved_addr = addr;
1341 if (prefer_file_cache)
1343 bytes_read = ReadMemoryFromFileCache (resolved_addr, dst, dst_len, error);
1348 if (ProcessIsValid())
1350 if (load_addr == LLDB_INVALID_ADDRESS)
1351 load_addr = resolved_addr.GetLoadAddress (this);
1353 if (load_addr == LLDB_INVALID_ADDRESS)
1355 ModuleSP addr_module_sp (resolved_addr.GetModule());
1356 if (addr_module_sp && addr_module_sp->GetFileSpec())
1357 error.SetErrorStringWithFormat("%s[0x%" PRIx64 "] can't be resolved, %s in not currently loaded",
1358 addr_module_sp->GetFileSpec().GetFilename().AsCString(),
1359 resolved_addr.GetFileAddress(),
1360 addr_module_sp->GetFileSpec().GetFilename().AsCString());
1362 error.SetErrorStringWithFormat("0x%" PRIx64 " can't be resolved", resolved_addr.GetFileAddress());
1366 bytes_read = m_process_sp->ReadMemory(load_addr, dst, dst_len, error);
1367 if (bytes_read != dst_len)
1369 if (error.Success())
1371 if (bytes_read == 0)
1372 error.SetErrorStringWithFormat("read memory from 0x%" PRIx64 " failed", load_addr);
1374 error.SetErrorStringWithFormat("only %" PRIu64 " of %" PRIu64 " bytes were read from memory at 0x%" PRIx64, (uint64_t)bytes_read, (uint64_t)dst_len, load_addr);
1380 *load_addr_ptr = load_addr;
1383 // If the address is not section offset we have an address that
1384 // doesn't resolve to any address in any currently loaded shared
1385 // libraries and we failed to read memory so there isn't anything
1386 // more we can do. If it is section offset, we might be able to
1387 // read cached memory from the object file.
1388 if (!resolved_addr.IsSectionOffset())
1393 if (!prefer_file_cache && resolved_addr.IsSectionOffset())
1395 // If we didn't already try and read from the object file cache, then
1396 // try it after failing to read from the process.
1397 return ReadMemoryFromFileCache (resolved_addr, dst, dst_len, error);
1403 Target::ReadCStringFromMemory (const Address& addr, std::string &out_str, Error &error)
1407 addr_t curr_addr = addr.GetLoadAddress(this);
1408 Address address(addr);
1411 size_t length = ReadCStringFromMemory (address, buf, sizeof(buf), error);
1414 out_str.append(buf, length);
1415 // If we got "length - 1" bytes, we didn't get the whole C string, we
1416 // need to read some more characters
1417 if (length == sizeof(buf) - 1)
1418 curr_addr += length;
1421 address = Address(curr_addr);
1423 return out_str.size();
1428 Target::ReadCStringFromMemory (const Address& addr, char *dst, size_t dst_max_len, Error &result_error)
1430 size_t total_cstr_len = 0;
1431 if (dst && dst_max_len)
1433 result_error.Clear();
1434 // NULL out everything just to be safe
1435 memset (dst, 0, dst_max_len);
1437 addr_t curr_addr = addr.GetLoadAddress(this);
1438 Address address(addr);
1439 const size_t cache_line_size = 512;
1440 size_t bytes_left = dst_max_len - 1;
1441 char *curr_dst = dst;
1443 while (bytes_left > 0)
1445 addr_t cache_line_bytes_left = cache_line_size - (curr_addr % cache_line_size);
1446 addr_t bytes_to_read = std::min<addr_t>(bytes_left, cache_line_bytes_left);
1447 size_t bytes_read = ReadMemory (address, false, curr_dst, bytes_to_read, error);
1449 if (bytes_read == 0)
1451 result_error = error;
1452 dst[total_cstr_len] = '\0';
1455 const size_t len = strlen(curr_dst);
1457 total_cstr_len += len;
1459 if (len < bytes_to_read)
1462 curr_dst += bytes_read;
1463 curr_addr += bytes_read;
1464 bytes_left -= bytes_read;
1465 address = Address(curr_addr);
1471 result_error.SetErrorString("invalid arguments");
1473 result_error.Clear();
1475 return total_cstr_len;
1479 Target::ReadScalarIntegerFromMemory (const Address& addr,
1480 bool prefer_file_cache,
1488 if (byte_size <= sizeof(uval))
1490 size_t bytes_read = ReadMemory (addr, prefer_file_cache, &uval, byte_size, error);
1491 if (bytes_read == byte_size)
1493 DataExtractor data (&uval, sizeof(uval), m_arch.GetByteOrder(), m_arch.GetAddressByteSize());
1494 lldb::offset_t offset = 0;
1496 scalar = data.GetMaxU32 (&offset, byte_size);
1498 scalar = data.GetMaxU64 (&offset, byte_size);
1501 scalar.SignExtend(byte_size * 8);
1507 error.SetErrorStringWithFormat ("byte size of %u is too large for integer scalar type", byte_size);
1513 Target::ReadUnsignedIntegerFromMemory (const Address& addr,
1514 bool prefer_file_cache,
1515 size_t integer_byte_size,
1516 uint64_t fail_value,
1520 if (ReadScalarIntegerFromMemory (addr,
1526 return scalar.ULongLong(fail_value);
1531 Target::ReadPointerFromMemory (const Address& addr,
1532 bool prefer_file_cache,
1534 Address &pointer_addr)
1537 if (ReadScalarIntegerFromMemory (addr,
1539 m_arch.GetAddressByteSize(),
1544 addr_t pointer_vm_addr = scalar.ULongLong(LLDB_INVALID_ADDRESS);
1545 if (pointer_vm_addr != LLDB_INVALID_ADDRESS)
1547 SectionLoadList §ion_load_list = GetSectionLoadList();
1548 if (section_load_list.IsEmpty())
1550 // No sections are loaded, so we must assume we are not running
1551 // yet and anything we are given is a file address.
1552 m_images.ResolveFileAddress (pointer_vm_addr, pointer_addr);
1556 // We have at least one section loaded. This can be because
1557 // we have manually loaded some sections with "target modules load ..."
1558 // or because we have have a live process that has sections loaded
1559 // through the dynamic loader
1560 section_load_list.ResolveLoadAddress (pointer_vm_addr, pointer_addr);
1562 // We weren't able to resolve the pointer value, so just return
1563 // an address with no section
1564 if (!pointer_addr.IsValid())
1565 pointer_addr.SetOffset (pointer_vm_addr);
1574 Target::GetSharedModule (const ModuleSpec &module_spec, Error *error_ptr)
1580 // First see if we already have this module in our module list. If we do, then we're done, we don't need
1581 // to consult the shared modules list. But only do this if we are passed a UUID.
1583 if (module_spec.GetUUID().IsValid())
1584 module_sp = m_images.FindFirstModule(module_spec);
1588 ModuleSP old_module_sp; // This will get filled in if we have a new version of the library
1589 bool did_create_module = false;
1591 // If there are image search path entries, try to use them first to acquire a suitable image.
1592 if (m_image_search_paths.GetSize())
1594 ModuleSpec transformed_spec (module_spec);
1595 if (m_image_search_paths.RemapPath (module_spec.GetFileSpec().GetDirectory(), transformed_spec.GetFileSpec().GetDirectory()))
1597 transformed_spec.GetFileSpec().GetFilename() = module_spec.GetFileSpec().GetFilename();
1598 error = ModuleList::GetSharedModule (transformed_spec,
1600 &GetExecutableSearchPaths(),
1602 &did_create_module);
1608 // If we have a UUID, we can check our global shared module list in case
1609 // we already have it. If we don't have a valid UUID, then we can't since
1610 // the path in "module_spec" will be a platform path, and we will need to
1611 // let the platform find that file. For example, we could be asking for
1612 // "/usr/lib/dyld" and if we do not have a UUID, we don't want to pick
1613 // the local copy of "/usr/lib/dyld" since our platform could be a remote
1614 // platform that has its own "/usr/lib/dyld" in an SDK or in a local file
1616 if (module_spec.GetUUID().IsValid())
1618 // We have a UUID, it is OK to check the global module list...
1619 error = ModuleList::GetSharedModule (module_spec,
1621 &GetExecutableSearchPaths(),
1623 &did_create_module);
1628 // The platform is responsible for finding and caching an appropriate
1629 // module in the shared module cache.
1632 FileSpec platform_file_spec;
1633 error = m_platform_sp->GetSharedModule (module_spec,
1635 &GetExecutableSearchPaths(),
1637 &did_create_module);
1641 error.SetErrorString("no platform is currently set");
1646 // We found a module that wasn't in our target list. Let's make sure that there wasn't an equivalent
1647 // module in the list already, and if there was, let's remove it.
1650 ObjectFile *objfile = module_sp->GetObjectFile();
1653 switch (objfile->GetType())
1655 case ObjectFile::eTypeCoreFile: /// A core file that has a checkpoint of a program's execution state
1656 case ObjectFile::eTypeExecutable: /// A normal executable
1657 case ObjectFile::eTypeDynamicLinker: /// The platform's dynamic linker executable
1658 case ObjectFile::eTypeObjectFile: /// An intermediate object file
1659 case ObjectFile::eTypeSharedLibrary: /// A shared library that can be used during execution
1661 case ObjectFile::eTypeDebugInfo: /// An object file that contains only debug information
1663 error_ptr->SetErrorString("debug info files aren't valid target modules, please specify an executable");
1665 case ObjectFile::eTypeStubLibrary: /// A library that can be linked against but not used for execution
1667 error_ptr->SetErrorString("stub libraries aren't valid target modules, please specify an executable");
1671 error_ptr->SetErrorString("unsupported file type, please specify an executable");
1674 // GetSharedModule is not guaranteed to find the old shared module, for instance
1675 // in the common case where you pass in the UUID, it is only going to find the one
1676 // module matching the UUID. In fact, it has no good way to know what the "old module"
1677 // relevant to this target is, since there might be many copies of a module with this file spec
1678 // in various running debug sessions, but only one of them will belong to this target.
1679 // So let's remove the UUID from the module list, and look in the target's module list.
1680 // Only do this if there is SOMETHING else in the module spec...
1683 if (module_spec.GetUUID().IsValid() && !module_spec.GetFileSpec().GetFilename().IsEmpty() && !module_spec.GetFileSpec().GetDirectory().IsEmpty())
1685 ModuleSpec module_spec_copy(module_spec.GetFileSpec());
1686 module_spec_copy.GetUUID().Clear();
1688 ModuleList found_modules;
1689 size_t num_found = m_images.FindModules (module_spec_copy, found_modules);
1692 old_module_sp = found_modules.GetModuleAtIndex(0);
1697 if (old_module_sp && m_images.GetIndexForModule (old_module_sp.get()) != LLDB_INVALID_INDEX32)
1699 m_images.ReplaceModule(old_module_sp, module_sp);
1700 Module *old_module_ptr = old_module_sp.get();
1701 old_module_sp.reset();
1702 ModuleList::RemoveSharedModuleIfOrphaned (old_module_ptr);
1705 m_images.Append(module_sp);
1718 Target::CalculateTarget ()
1720 return shared_from_this();
1724 Target::CalculateProcess ()
1730 Target::CalculateThread ()
1736 Target::CalculateStackFrame ()
1738 return StackFrameSP();
1742 Target::CalculateExecutionContext (ExecutionContext &exe_ctx)
1745 exe_ctx.SetTargetPtr(this);
1749 Target::GetImageSearchPathList ()
1751 return m_image_search_paths;
1755 Target::ImageSearchPathsChanged
1757 const PathMappingList &path_list,
1761 Target *target = (Target *)baton;
1762 ModuleSP exe_module_sp (target->GetExecutableModule());
1764 target->SetExecutableModule (exe_module_sp, true);
1768 Target::GetScratchClangASTContext(bool create_on_demand)
1770 // Now see if we know the target triple, and if so, create our scratch AST context:
1771 if (m_scratch_ast_context_ap.get() == NULL && m_arch.IsValid() && create_on_demand)
1773 m_scratch_ast_context_ap.reset (new ClangASTContext(m_arch.GetTriple().str().c_str()));
1774 m_scratch_ast_source_ap.reset (new ClangASTSource(shared_from_this()));
1775 m_scratch_ast_source_ap->InstallASTContext(m_scratch_ast_context_ap->getASTContext());
1776 llvm::IntrusiveRefCntPtr<clang::ExternalASTSource> proxy_ast_source(m_scratch_ast_source_ap->CreateProxy());
1777 m_scratch_ast_context_ap->SetExternalSource(proxy_ast_source);
1779 return m_scratch_ast_context_ap.get();
1783 Target::GetClangASTImporter()
1785 ClangASTImporter *ast_importer = m_ast_importer_ap.get();
1789 ast_importer = new ClangASTImporter();
1790 m_ast_importer_ap.reset(ast_importer);
1793 return ast_importer;
1797 Target::SettingsInitialize ()
1799 Process::SettingsInitialize ();
1803 Target::SettingsTerminate ()
1805 Process::SettingsTerminate ();
1809 Target::GetDefaultExecutableSearchPaths ()
1811 TargetPropertiesSP properties_sp(Target::GetGlobalProperties());
1813 return properties_sp->GetExecutableSearchPaths();
1814 return FileSpecList();
1818 Target::GetDefaultDebugFileSearchPaths ()
1820 TargetPropertiesSP properties_sp(Target::GetGlobalProperties());
1822 return properties_sp->GetDebugFileSearchPaths();
1823 return FileSpecList();
1827 Target::GetDefaultArchitecture ()
1829 TargetPropertiesSP properties_sp(Target::GetGlobalProperties());
1831 return properties_sp->GetDefaultArchitecture();
1836 Target::SetDefaultArchitecture (const ArchSpec &arch)
1838 TargetPropertiesSP properties_sp(Target::GetGlobalProperties());
1841 LogIfAnyCategoriesSet(LIBLLDB_LOG_TARGET, "Target::SetDefaultArchitecture setting target's default architecture to %s (%s)", arch.GetArchitectureName(), arch.GetTriple().getTriple().c_str());
1842 return properties_sp->SetDefaultArchitecture(arch);
1847 Target::GetTargetFromContexts (const ExecutionContext *exe_ctx_ptr, const SymbolContext *sc_ptr)
1849 // The target can either exist in the "process" of ExecutionContext, or in
1850 // the "target_sp" member of SymbolContext. This accessor helper function
1851 // will get the target from one of these locations.
1853 Target *target = NULL;
1855 target = sc_ptr->target_sp.get();
1856 if (target == NULL && exe_ctx_ptr)
1857 target = exe_ctx_ptr->GetTargetPtr();
1862 Target::EvaluateExpression
1864 const char *expr_cstr,
1866 lldb::ValueObjectSP &result_valobj_sp,
1867 const EvaluateExpressionOptions& options
1870 result_valobj_sp.reset();
1872 ExpressionResults execution_results = eExpressionSetupError;
1874 if (expr_cstr == NULL || expr_cstr[0] == '\0')
1875 return execution_results;
1877 // We shouldn't run stop hooks in expressions.
1878 // Be sure to reset this if you return anywhere within this function.
1879 bool old_suppress_value = m_suppress_stop_hooks;
1880 m_suppress_stop_hooks = true;
1882 ExecutionContext exe_ctx;
1886 frame->CalculateExecutionContext(exe_ctx);
1888 else if (m_process_sp)
1890 m_process_sp->CalculateExecutionContext(exe_ctx);
1894 CalculateExecutionContext(exe_ctx);
1897 // Make sure we aren't just trying to see the value of a persistent
1898 // variable (something like "$0")
1899 lldb::ClangExpressionVariableSP persistent_var_sp;
1900 // Only check for persistent variables the expression starts with a '$'
1901 if (expr_cstr[0] == '$')
1902 persistent_var_sp = m_persistent_variables.GetVariable (expr_cstr);
1904 if (persistent_var_sp)
1906 result_valobj_sp = persistent_var_sp->GetValueObject ();
1907 execution_results = eExpressionCompleted;
1911 const char *prefix = GetExpressionPrefixContentsAsCString();
1913 execution_results = ClangUserExpression::Evaluate (exe_ctx,
1921 m_suppress_stop_hooks = old_suppress_value;
1923 return execution_results;
1927 Target::GetCallableLoadAddress (lldb::addr_t load_addr, AddressClass addr_class) const
1929 addr_t code_addr = load_addr;
1930 switch (m_arch.GetMachine())
1932 case llvm::Triple::arm:
1933 case llvm::Triple::thumb:
1936 case eAddressClassData:
1937 case eAddressClassDebug:
1938 return LLDB_INVALID_ADDRESS;
1940 case eAddressClassUnknown:
1941 case eAddressClassInvalid:
1942 case eAddressClassCode:
1943 case eAddressClassCodeAlternateISA:
1944 case eAddressClassRuntime:
1945 // Check if bit zero it no set?
1946 if ((code_addr & 1ull) == 0)
1948 // Bit zero isn't set, check if the address is a multiple of 2?
1949 if (code_addr & 2ull)
1951 // The address is a multiple of 2 so it must be thumb, set bit zero
1954 else if (addr_class == eAddressClassCodeAlternateISA)
1956 // We checked the address and the address claims to be the alternate ISA
1957 // which means thumb, so set bit zero.
1972 Target::GetOpcodeLoadAddress (lldb::addr_t load_addr, AddressClass addr_class) const
1974 addr_t opcode_addr = load_addr;
1975 switch (m_arch.GetMachine())
1977 case llvm::Triple::arm:
1978 case llvm::Triple::thumb:
1981 case eAddressClassData:
1982 case eAddressClassDebug:
1983 return LLDB_INVALID_ADDRESS;
1985 case eAddressClassInvalid:
1986 case eAddressClassUnknown:
1987 case eAddressClassCode:
1988 case eAddressClassCodeAlternateISA:
1989 case eAddressClassRuntime:
1990 opcode_addr &= ~(1ull);
2002 Target::GetSourceManager ()
2004 if (m_source_manager_ap.get() == NULL)
2005 m_source_manager_ap.reset (new SourceManager(shared_from_this()));
2006 return *m_source_manager_ap;
2011 Target::CreateStopHook ()
2013 lldb::user_id_t new_uid = ++m_stop_hook_next_id;
2014 Target::StopHookSP stop_hook_sp (new StopHook(shared_from_this(), new_uid));
2015 m_stop_hooks[new_uid] = stop_hook_sp;
2016 return stop_hook_sp;
2020 Target::RemoveStopHookByID (lldb::user_id_t user_id)
2023 num_removed = m_stop_hooks.erase (user_id);
2024 if (num_removed == 0)
2031 Target::RemoveAllStopHooks ()
2033 m_stop_hooks.clear();
2037 Target::GetStopHookByID (lldb::user_id_t user_id)
2039 StopHookSP found_hook;
2041 StopHookCollection::iterator specified_hook_iter;
2042 specified_hook_iter = m_stop_hooks.find (user_id);
2043 if (specified_hook_iter != m_stop_hooks.end())
2044 found_hook = (*specified_hook_iter).second;
2049 Target::SetStopHookActiveStateByID (lldb::user_id_t user_id, bool active_state)
2051 StopHookCollection::iterator specified_hook_iter;
2052 specified_hook_iter = m_stop_hooks.find (user_id);
2053 if (specified_hook_iter == m_stop_hooks.end())
2056 (*specified_hook_iter).second->SetIsActive (active_state);
2061 Target::SetAllStopHooksActiveState (bool active_state)
2063 StopHookCollection::iterator pos, end = m_stop_hooks.end();
2064 for (pos = m_stop_hooks.begin(); pos != end; pos++)
2066 (*pos).second->SetIsActive (active_state);
2071 Target::RunStopHooks ()
2073 if (m_suppress_stop_hooks)
2079 // <rdar://problem/12027563> make sure we check that we are not stopped because of us running a user expression
2080 // since in that case we do not want to run the stop-hooks
2081 if (m_process_sp->GetModIDRef().IsLastResumeForUserExpression())
2084 if (m_stop_hooks.empty())
2087 StopHookCollection::iterator pos, end = m_stop_hooks.end();
2089 // If there aren't any active stop hooks, don't bother either:
2090 bool any_active_hooks = false;
2091 for (pos = m_stop_hooks.begin(); pos != end; pos++)
2093 if ((*pos).second->IsActive())
2095 any_active_hooks = true;
2099 if (!any_active_hooks)
2102 CommandReturnObject result;
2104 std::vector<ExecutionContext> exc_ctx_with_reasons;
2105 std::vector<SymbolContext> sym_ctx_with_reasons;
2107 ThreadList &cur_threadlist = m_process_sp->GetThreadList();
2108 size_t num_threads = cur_threadlist.GetSize();
2109 for (size_t i = 0; i < num_threads; i++)
2111 lldb::ThreadSP cur_thread_sp = cur_threadlist.GetThreadAtIndex (i);
2112 if (cur_thread_sp->ThreadStoppedForAReason())
2114 lldb::StackFrameSP cur_frame_sp = cur_thread_sp->GetStackFrameAtIndex(0);
2115 exc_ctx_with_reasons.push_back(ExecutionContext(m_process_sp.get(), cur_thread_sp.get(), cur_frame_sp.get()));
2116 sym_ctx_with_reasons.push_back(cur_frame_sp->GetSymbolContext(eSymbolContextEverything));
2120 // If no threads stopped for a reason, don't run the stop-hooks.
2121 size_t num_exe_ctx = exc_ctx_with_reasons.size();
2122 if (num_exe_ctx == 0)
2125 result.SetImmediateOutputStream (m_debugger.GetAsyncOutputStream());
2126 result.SetImmediateErrorStream (m_debugger.GetAsyncErrorStream());
2128 bool keep_going = true;
2129 bool hooks_ran = false;
2130 bool print_hook_header;
2131 bool print_thread_header;
2133 if (num_exe_ctx == 1)
2134 print_thread_header = false;
2136 print_thread_header = true;
2138 if (m_stop_hooks.size() == 1)
2139 print_hook_header = false;
2141 print_hook_header = true;
2143 for (pos = m_stop_hooks.begin(); keep_going && pos != end; pos++)
2146 StopHookSP cur_hook_sp = (*pos).second;
2147 if (!cur_hook_sp->IsActive())
2150 bool any_thread_matched = false;
2151 for (size_t i = 0; keep_going && i < num_exe_ctx; i++)
2153 if ((cur_hook_sp->GetSpecifier () == NULL
2154 || cur_hook_sp->GetSpecifier()->SymbolContextMatches(sym_ctx_with_reasons[i]))
2155 && (cur_hook_sp->GetThreadSpecifier() == NULL
2156 || cur_hook_sp->GetThreadSpecifier()->ThreadPassesBasicTests(exc_ctx_with_reasons[i].GetThreadRef())))
2162 if (print_hook_header && !any_thread_matched)
2164 const char *cmd = (cur_hook_sp->GetCommands().GetSize() == 1 ?
2165 cur_hook_sp->GetCommands().GetStringAtIndex(0) :
2168 result.AppendMessageWithFormat("\n- Hook %" PRIu64 " (%s)\n", cur_hook_sp->GetID(), cmd);
2170 result.AppendMessageWithFormat("\n- Hook %" PRIu64 "\n", cur_hook_sp->GetID());
2171 any_thread_matched = true;
2174 if (print_thread_header)
2175 result.AppendMessageWithFormat("-- Thread %d\n", exc_ctx_with_reasons[i].GetThreadPtr()->GetIndexID());
2177 bool stop_on_continue = true;
2178 bool stop_on_error = true;
2179 bool echo_commands = false;
2180 bool print_results = true;
2181 GetDebugger().GetCommandInterpreter().HandleCommands (cur_hook_sp->GetCommands(),
2182 &exc_ctx_with_reasons[i],
2190 // If the command started the target going again, we should bag out of
2191 // running the stop hooks.
2192 if ((result.GetStatus() == eReturnStatusSuccessContinuingNoResult) ||
2193 (result.GetStatus() == eReturnStatusSuccessContinuingResult))
2195 result.AppendMessageWithFormat ("Aborting stop hooks, hook %" PRIu64 " set the program running.", cur_hook_sp->GetID());
2202 result.GetImmediateOutputStream()->Flush();
2203 result.GetImmediateErrorStream()->Flush();
2206 const TargetPropertiesSP &
2207 Target::GetGlobalProperties()
2209 static TargetPropertiesSP g_settings_sp;
2212 g_settings_sp.reset (new TargetProperties (NULL));
2214 return g_settings_sp;
2218 Target::Install (ProcessLaunchInfo *launch_info)
2221 PlatformSP platform_sp (GetPlatform());
2224 if (platform_sp->IsRemote())
2226 if (platform_sp->IsConnected())
2228 // Install all files that have an install path, and always install the
2229 // main executable when connected to a remote platform
2230 const ModuleList& modules = GetImages();
2231 const size_t num_images = modules.GetSize();
2232 for (size_t idx = 0; idx < num_images; ++idx)
2234 const bool is_main_executable = idx == 0;
2235 ModuleSP module_sp(modules.GetModuleAtIndex(idx));
2238 FileSpec local_file (module_sp->GetFileSpec());
2241 FileSpec remote_file (module_sp->GetRemoteInstallFileSpec());
2244 if (is_main_executable) // TODO: add setting for always installing main executable???
2246 // Always install the main executable
2247 remote_file.GetDirectory() = platform_sp->GetWorkingDirectory();
2248 remote_file.GetFilename() = module_sp->GetFileSpec().GetFilename();
2253 error = platform_sp->Install(local_file, remote_file);
2254 if (error.Success())
2256 module_sp->SetPlatformFileSpec(remote_file);
2257 if (is_main_executable)
2260 launch_info->SetExecutableFile(remote_file, false);
2276 Target::ResolveLoadAddress (addr_t load_addr, Address &so_addr, uint32_t stop_id)
2278 return m_section_load_history.ResolveLoadAddress(stop_id, load_addr, so_addr);
2282 Target::SetSectionLoadAddress (const SectionSP §ion_sp, addr_t new_section_load_addr, bool warn_multiple)
2284 const addr_t old_section_load_addr = m_section_load_history.GetSectionLoadAddress (SectionLoadHistory::eStopIDNow, section_sp);
2285 if (old_section_load_addr != new_section_load_addr)
2287 uint32_t stop_id = 0;
2288 ProcessSP process_sp(GetProcessSP());
2290 stop_id = process_sp->GetStopID();
2292 stop_id = m_section_load_history.GetLastStopID();
2293 if (m_section_load_history.SetSectionLoadAddress (stop_id, section_sp, new_section_load_addr, warn_multiple))
2294 return true; // Return true if the section load address was changed...
2296 return false; // Return false to indicate nothing changed
2301 Target::SetSectionUnloaded (const lldb::SectionSP §ion_sp)
2303 uint32_t stop_id = 0;
2304 ProcessSP process_sp(GetProcessSP());
2306 stop_id = process_sp->GetStopID();
2308 stop_id = m_section_load_history.GetLastStopID();
2309 return m_section_load_history.SetSectionUnloaded (stop_id, section_sp);
2313 Target::SetSectionUnloaded (const lldb::SectionSP §ion_sp, addr_t load_addr)
2315 uint32_t stop_id = 0;
2316 ProcessSP process_sp(GetProcessSP());
2318 stop_id = process_sp->GetStopID();
2320 stop_id = m_section_load_history.GetLastStopID();
2321 return m_section_load_history.SetSectionUnloaded (stop_id, section_sp, load_addr);
2325 Target::ClearAllLoadedSections ()
2327 m_section_load_history.Clear();
2332 Target::Launch (Listener &listener, ProcessLaunchInfo &launch_info)
2336 StateType state = eStateInvalid;
2338 // Scope to temporarily get the process state in case someone has manually
2339 // remotely connected already to a process and we can skip the platform
2342 ProcessSP process_sp (GetProcessSP());
2345 state = process_sp->GetState();
2348 launch_info.GetFlags().Set (eLaunchFlagDebug);
2350 // Get the value of synchronous execution here. If you wait till after you have started to
2351 // run, then you could have hit a breakpoint, whose command might switch the value, and
2352 // then you'll pick up that incorrect value.
2353 Debugger &debugger = GetDebugger();
2354 const bool synchronous_execution = debugger.GetCommandInterpreter().GetSynchronous ();
2356 PlatformSP platform_sp (GetPlatform());
2358 // Finalize the file actions, and if none were given, default to opening
2359 // up a pseudo terminal
2360 const bool default_to_use_pty = platform_sp ? platform_sp->IsHost() : false;
2361 launch_info.FinalizeFileActions (this, default_to_use_pty);
2363 if (state == eStateConnected)
2365 if (launch_info.GetFlags().Test (eLaunchFlagLaunchInTTY))
2367 error.SetErrorString("can't launch in tty when launching through a remote connection");
2372 if (!launch_info.GetArchitecture().IsValid())
2373 launch_info.GetArchitecture() = GetArchitecture();
2375 // If we're not already connected to the process, and if we have a platform that can launch a process for debugging, go ahead and do that here.
2376 if (state != eStateConnected && platform_sp && platform_sp->CanDebugProcess ())
2378 m_process_sp = GetPlatform()->DebugProcess (launch_info,
2386 if (state == eStateConnected)
2388 assert(m_process_sp);
2392 // Use a Process plugin to construct the process.
2393 const char *plugin_name = launch_info.GetProcessPluginName();
2394 CreateProcess (listener, plugin_name, NULL);
2397 // Since we didn't have a platform launch the process, launch it here.
2399 error = m_process_sp->Launch (launch_info);
2404 if (error.Success())
2405 error.SetErrorString("failed to launch or debug process");
2409 if (error.Success())
2411 if (launch_info.GetFlags().Test(eLaunchFlagStopAtEntry) == false)
2413 ListenerSP hijack_listener_sp (launch_info.GetHijackListener());
2415 StateType state = m_process_sp->WaitForProcessToStop (NULL, NULL, false, hijack_listener_sp.get());
2417 if (state == eStateStopped)
2419 if (!synchronous_execution)
2420 m_process_sp->RestoreProcessEvents ();
2422 error = m_process_sp->PrivateResume();
2424 if (error.Success())
2426 // there is a race condition where this thread will return up the call stack to the main command
2427 // handler and show an (lldb) prompt before HandlePrivateEvent (from PrivateStateThread) has
2428 // a chance to call PushProcessIOHandler()
2429 m_process_sp->SyncIOHandler(2000);
2431 if (synchronous_execution)
2433 state = m_process_sp->WaitForProcessToStop (NULL, NULL, true, hijack_listener_sp.get());
2434 const bool must_be_alive = false; // eStateExited is ok, so this must be false
2435 if (!StateIsStoppedState(state, must_be_alive))
2437 error.SetErrorStringWithFormat("process isn't stopped: %s", StateAsCString(state));
2444 error2.SetErrorStringWithFormat("process resume at entry point failed: %s", error.AsCString());
2448 else if (state == eStateExited)
2450 bool with_shell = launch_info.GetShell();
2451 const int exit_status = m_process_sp->GetExitStatus();
2452 const char *exit_desc = m_process_sp->GetExitDescription();
2453 #define LAUNCH_SHELL_MESSAGE "\n'r' and 'run' are aliases that default to launching through a shell.\nTry launching without going through a shell by using 'process launch'."
2454 if (exit_desc && exit_desc[0])
2457 error.SetErrorStringWithFormat ("process exited with status %i (%s)" LAUNCH_SHELL_MESSAGE, exit_status, exit_desc);
2459 error.SetErrorStringWithFormat ("process exited with status %i (%s)", exit_status, exit_desc);
2464 error.SetErrorStringWithFormat ("process exited with status %i" LAUNCH_SHELL_MESSAGE, exit_status);
2466 error.SetErrorStringWithFormat ("process exited with status %i", exit_status);
2471 error.SetErrorStringWithFormat ("initial process state wasn't stopped: %s", StateAsCString(state));
2474 m_process_sp->RestoreProcessEvents ();
2479 error2.SetErrorStringWithFormat ("process launch failed: %s", error.AsCString());
2484 //--------------------------------------------------------------
2486 //--------------------------------------------------------------
2487 Target::StopHook::StopHook (lldb::TargetSP target_sp, lldb::user_id_t uid) :
2489 m_target_sp (target_sp),
2497 Target::StopHook::StopHook (const StopHook &rhs) :
2498 UserID (rhs.GetID()),
2499 m_target_sp (rhs.m_target_sp),
2500 m_commands (rhs.m_commands),
2501 m_specifier_sp (rhs.m_specifier_sp),
2502 m_thread_spec_ap (),
2503 m_active (rhs.m_active)
2505 if (rhs.m_thread_spec_ap.get() != NULL)
2506 m_thread_spec_ap.reset (new ThreadSpec(*rhs.m_thread_spec_ap.get()));
2510 Target::StopHook::~StopHook ()
2515 Target::StopHook::SetThreadSpecifier (ThreadSpec *specifier)
2517 m_thread_spec_ap.reset (specifier);
2522 Target::StopHook::GetDescription (Stream *s, lldb::DescriptionLevel level) const
2524 int indent_level = s->GetIndentLevel();
2526 s->SetIndentLevel(indent_level + 2);
2528 s->Printf ("Hook: %" PRIu64 "\n", GetID());
2530 s->Indent ("State: enabled\n");
2532 s->Indent ("State: disabled\n");
2537 s->PutCString ("Specifier:\n");
2538 s->SetIndentLevel (indent_level + 4);
2539 m_specifier_sp->GetDescription (s, level);
2540 s->SetIndentLevel (indent_level + 2);
2543 if (m_thread_spec_ap.get() != NULL)
2546 s->Indent("Thread:\n");
2547 m_thread_spec_ap->GetDescription (&tmp, level);
2548 s->SetIndentLevel (indent_level + 4);
2549 s->Indent (tmp.GetData());
2550 s->PutCString ("\n");
2551 s->SetIndentLevel (indent_level + 2);
2554 s->Indent ("Commands: \n");
2555 s->SetIndentLevel (indent_level + 4);
2556 uint32_t num_commands = m_commands.GetSize();
2557 for (uint32_t i = 0; i < num_commands; i++)
2559 s->Indent(m_commands.GetStringAtIndex(i));
2560 s->PutCString ("\n");
2562 s->SetIndentLevel (indent_level);
2565 //--------------------------------------------------------------
2566 // class TargetProperties
2567 //--------------------------------------------------------------
2569 OptionEnumValueElement
2570 lldb_private::g_dynamic_value_types[] =
2572 { eNoDynamicValues, "no-dynamic-values", "Don't calculate the dynamic type of values"},
2573 { eDynamicCanRunTarget, "run-target", "Calculate the dynamic type of values even if you have to run the target."},
2574 { eDynamicDontRunTarget, "no-run-target", "Calculate the dynamic type of values, but don't run the target."},
2578 static OptionEnumValueElement
2579 g_inline_breakpoint_enums[] =
2581 { eInlineBreakpointsNever, "never", "Never look for inline breakpoint locations (fastest). This setting should only be used if you know that no inlining occurs in your programs."},
2582 { eInlineBreakpointsHeaders, "headers", "Only check for inline breakpoint locations when setting breakpoints in header files, but not when setting breakpoint in implementation source files (default)."},
2583 { eInlineBreakpointsAlways, "always", "Always look for inline breakpoint locations when setting file and line breakpoints (slower but most accurate)."},
2587 typedef enum x86DisassemblyFlavor
2589 eX86DisFlavorDefault,
2592 } x86DisassemblyFlavor;
2594 static OptionEnumValueElement
2595 g_x86_dis_flavor_value_types[] =
2597 { eX86DisFlavorDefault, "default", "Disassembler default (currently att)."},
2598 { eX86DisFlavorIntel, "intel", "Intel disassembler flavor."},
2599 { eX86DisFlavorATT, "att", "AT&T disassembler flavor."},
2603 static OptionEnumValueElement
2604 g_hex_immediate_style_values[] =
2606 { Disassembler::eHexStyleC, "c", "C-style (0xffff)."},
2607 { Disassembler::eHexStyleAsm, "asm", "Asm-style (0ffffh)."},
2611 static OptionEnumValueElement
2612 g_load_script_from_sym_file_values[] =
2614 { eLoadScriptFromSymFileTrue, "true", "Load debug scripts inside symbol files"},
2615 { eLoadScriptFromSymFileFalse, "false", "Do not load debug scripts inside symbol files."},
2616 { eLoadScriptFromSymFileWarn, "warn", "Warn about debug scripts inside symbol files but do not load them."},
2621 static OptionEnumValueElement
2622 g_memory_module_load_level_values[] =
2624 { eMemoryModuleLoadLevelMinimal, "minimal" , "Load minimal information when loading modules from memory. Currently this setting loads sections only."},
2625 { eMemoryModuleLoadLevelPartial, "partial" , "Load partial information when loading modules from memory. Currently this setting loads sections and function bounds."},
2626 { eMemoryModuleLoadLevelComplete, "complete", "Load complete information when loading modules from memory. Currently this setting loads sections and all symbols."},
2630 static PropertyDefinition
2633 { "default-arch" , OptionValue::eTypeArch , true , 0 , NULL, NULL, "Default architecture to choose, when there's a choice." },
2634 { "expr-prefix" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "Path to a file containing expressions to be prepended to all expressions." },
2635 { "prefer-dynamic-value" , OptionValue::eTypeEnum , false, eNoDynamicValues , NULL, g_dynamic_value_types, "Should printed values be shown as their dynamic value." },
2636 { "enable-synthetic-value" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "Should synthetic values be used by default whenever available." },
2637 { "skip-prologue" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "Skip function prologues when setting breakpoints by name." },
2638 { "source-map" , OptionValue::eTypePathMap , false, 0 , NULL, NULL, "Source path remappings used to track the change of location between a source file when built, and "
2639 "where it exists on the current system. It consists of an array of duples, the first element of each duple is "
2640 "some part (starting at the root) of the path to the file when it was built, "
2641 "and the second is where the remainder of the original build hierarchy is rooted on the local system. "
2642 "Each element of the array is checked in order and the first one that results in a match wins." },
2643 { "exec-search-paths" , OptionValue::eTypeFileSpecList, false, 0 , NULL, NULL, "Executable search paths to use when locating executable files whose paths don't match the local file system." },
2644 { "debug-file-search-paths" , OptionValue::eTypeFileSpecList, false, 0 , NULL, NULL, "List of directories to be searched when locating debug symbol files." },
2645 { "max-children-count" , OptionValue::eTypeSInt64 , false, 256 , NULL, NULL, "Maximum number of children to expand in any level of depth." },
2646 { "max-string-summary-length" , OptionValue::eTypeSInt64 , false, 1024 , NULL, NULL, "Maximum number of characters to show when using %s in summary strings." },
2647 { "max-memory-read-size" , OptionValue::eTypeSInt64 , false, 1024 , NULL, NULL, "Maximum number of bytes that 'memory read' will fetch before --force must be specified." },
2648 { "breakpoints-use-platform-avoid-list", OptionValue::eTypeBoolean , false, true , NULL, NULL, "Consult the platform module avoid list when setting non-module specific breakpoints." },
2649 { "arg0" , OptionValue::eTypeString , false, 0 , NULL, NULL, "The first argument passed to the program in the argument array which can be different from the executable itself." },
2650 { "run-args" , OptionValue::eTypeArgs , false, 0 , NULL, NULL, "A list containing all the arguments to be passed to the executable when it is run. Note that this does NOT include the argv[0] which is in target.arg0." },
2651 { "env-vars" , OptionValue::eTypeDictionary, false, OptionValue::eTypeString , NULL, NULL, "A list of all the environment variables to be passed to the executable's environment, and their values." },
2652 { "inherit-env" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "Inherit the environment from the process that is running LLDB." },
2653 { "input-path" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "The file/path to be used by the executable program for reading its standard input." },
2654 { "output-path" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "The file/path to be used by the executable program for writing its standard output." },
2655 { "error-path" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "The file/path to be used by the executable program for writing its standard error." },
2656 { "detach-on-error" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "debugserver will detach (rather than killing) a process if it loses connection with lldb." },
2657 { "disable-aslr" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "Disable Address Space Layout Randomization (ASLR)" },
2658 { "disable-stdio" , OptionValue::eTypeBoolean , false, false , NULL, NULL, "Disable stdin/stdout for process (e.g. for a GUI application)" },
2659 { "inline-breakpoint-strategy" , OptionValue::eTypeEnum , false, eInlineBreakpointsHeaders , NULL, g_inline_breakpoint_enums, "The strategy to use when settings breakpoints by file and line. "
2660 "Breakpoint locations can end up being inlined by the compiler, so that a compile unit 'a.c' might contain an inlined function from another source file. "
2661 "Usually this is limitted to breakpoint locations from inlined functions from header or other include files, or more accurately non-implementation source files. "
2662 "Sometimes code might #include implementation files and cause inlined breakpoint locations in inlined implementation files. "
2663 "Always checking for inlined breakpoint locations can be expensive (memory and time), so we try to minimize the "
2664 "times we look for inlined locations. This setting allows you to control exactly which strategy is used when settings "
2665 "file and line breakpoints." },
2666 // FIXME: This is the wrong way to do per-architecture settings, but we don't have a general per architecture settings system in place yet.
2667 { "x86-disassembly-flavor" , OptionValue::eTypeEnum , false, eX86DisFlavorDefault, NULL, g_x86_dis_flavor_value_types, "The default disassembly flavor to use for x86 or x86-64 targets." },
2668 { "use-hex-immediates" , OptionValue::eTypeBoolean , false, true, NULL, NULL, "Show immediates in disassembly as hexadecimal." },
2669 { "hex-immediate-style" , OptionValue::eTypeEnum , false, Disassembler::eHexStyleC, NULL, g_hex_immediate_style_values, "Which style to use for printing hexadecimal disassembly values." },
2670 { "use-fast-stepping" , OptionValue::eTypeBoolean , false, true, NULL, NULL, "Use a fast stepping algorithm based on running from branch to branch rather than instruction single-stepping." },
2671 { "load-script-from-symbol-file" , OptionValue::eTypeEnum , false, eLoadScriptFromSymFileWarn, NULL, g_load_script_from_sym_file_values, "Allow LLDB to load scripting resources embedded in symbol files when available." },
2672 { "memory-module-load-level" , OptionValue::eTypeEnum , false, eMemoryModuleLoadLevelComplete, NULL, g_memory_module_load_level_values,
2673 "Loading modules from memory can be slow as reading the symbol tables and other data can take a long time depending on your connection to the debug target. "
2674 "This setting helps users control how much information gets loaded when loading modules from memory."
2675 "'complete' is the default value for this setting which will load all sections and symbols by reading them from memory (slowest, most accurate). "
2676 "'partial' will load sections and attempt to find function bounds without downloading the symbol table (faster, still accurate, missing symbol names). "
2677 "'minimal' is the fastest setting and will load section data with no symbols, but should rarely be used as stack frames in these memory regions will be inaccurate and not provide any context (fastest). " },
2678 { "display-expression-in-crashlogs" , OptionValue::eTypeBoolean , false, false, NULL, NULL, "Expressions that crash will show up in crash logs if the host system supports executable specific crash log strings and this setting is set to true." },
2679 { "trap-handler-names" , OptionValue::eTypeArray , true, OptionValue::eTypeString, NULL, NULL, "A list of trap handler function names, e.g. a common Unix user process one is _sigtramp." },
2680 { NULL , OptionValue::eTypeInvalid , false, 0 , NULL, NULL, NULL }
2684 ePropertyDefaultArch,
2685 ePropertyExprPrefix,
2686 ePropertyPreferDynamic,
2687 ePropertyEnableSynthetic,
2688 ePropertySkipPrologue,
2690 ePropertyExecutableSearchPaths,
2691 ePropertyDebugFileSearchPaths,
2692 ePropertyMaxChildrenCount,
2693 ePropertyMaxSummaryLength,
2694 ePropertyMaxMemReadSize,
2695 ePropertyBreakpointUseAvoidList,
2699 ePropertyInheritEnv,
2701 ePropertyOutputPath,
2703 ePropertyDetachOnError,
2704 ePropertyDisableASLR,
2705 ePropertyDisableSTDIO,
2706 ePropertyInlineStrategy,
2707 ePropertyDisassemblyFlavor,
2708 ePropertyUseHexImmediates,
2709 ePropertyHexImmediateStyle,
2710 ePropertyUseFastStepping,
2711 ePropertyLoadScriptFromSymbolFile,
2712 ePropertyMemoryModuleLoadLevel,
2713 ePropertyDisplayExpressionsInCrashlogs,
2714 ePropertyTrapHandlerNames
2718 class TargetOptionValueProperties : public OptionValueProperties
2721 TargetOptionValueProperties (const ConstString &name) :
2722 OptionValueProperties (name),
2724 m_got_host_env (false)
2728 // This constructor is used when creating TargetOptionValueProperties when it
2729 // is part of a new lldb_private::Target instance. It will copy all current
2730 // global property values as needed
2731 TargetOptionValueProperties (Target *target, const TargetPropertiesSP &target_properties_sp) :
2732 OptionValueProperties(*target_properties_sp->GetValueProperties()),
2734 m_got_host_env (false)
2738 virtual const Property *
2739 GetPropertyAtIndex (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const
2741 // When getting the value for a key from the target options, we will always
2742 // try and grab the setting from the current target if there is one. Else we just
2743 // use the one from this instance.
2744 if (idx == ePropertyEnvVars)
2745 GetHostEnvironmentIfNeeded ();
2749 Target *target = exe_ctx->GetTargetPtr();
2752 TargetOptionValueProperties *target_properties = static_cast<TargetOptionValueProperties *>(target->GetValueProperties().get());
2753 if (this != target_properties)
2754 return target_properties->ProtectedGetPropertyAtIndex (idx);
2757 return ProtectedGetPropertyAtIndex (idx);
2763 return m_target->shared_from_this();
2769 GetHostEnvironmentIfNeeded () const
2771 if (!m_got_host_env)
2775 m_got_host_env = true;
2776 const uint32_t idx = ePropertyInheritEnv;
2777 if (GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0))
2779 PlatformSP platform_sp (m_target->GetPlatform());
2783 if (platform_sp->GetEnvironment(env))
2785 OptionValueDictionary *env_dict = GetPropertyAtIndexAsOptionValueDictionary (NULL, ePropertyEnvVars);
2788 const bool can_replace = false;
2789 const size_t envc = env.GetSize();
2790 for (size_t idx=0; idx<envc; idx++)
2792 const char *env_entry = env.GetStringAtIndex (idx);
2795 const char *equal_pos = ::strchr(env_entry, '=');
2797 // It is ok to have environment variables with no values
2798 const char *value = NULL;
2801 key.SetCStringWithLength(env_entry, equal_pos - env_entry);
2803 value = equal_pos + 1;
2807 key.SetCString(env_entry);
2809 // Don't allow existing keys to be replaced with ones we get from the platform environment
2810 env_dict->SetValueForKey(key, OptionValueSP(new OptionValueString(value)), can_replace);
2821 mutable bool m_got_host_env;
2824 //----------------------------------------------------------------------
2826 //----------------------------------------------------------------------
2827 TargetProperties::TargetProperties (Target *target) :
2832 m_collection_sp.reset (new TargetOptionValueProperties(target, Target::GetGlobalProperties()));
2836 m_collection_sp.reset (new TargetOptionValueProperties(ConstString("target")));
2837 m_collection_sp->Initialize(g_properties);
2838 m_collection_sp->AppendProperty(ConstString("process"),
2839 ConstString("Settings specify to processes."),
2841 Process::GetGlobalProperties()->GetValueProperties());
2845 TargetProperties::~TargetProperties ()
2849 TargetProperties::GetDefaultArchitecture () const
2851 OptionValueArch *value = m_collection_sp->GetPropertyAtIndexAsOptionValueArch (NULL, ePropertyDefaultArch);
2853 return value->GetCurrentValue();
2858 TargetProperties::SetDefaultArchitecture (const ArchSpec& arch)
2860 OptionValueArch *value = m_collection_sp->GetPropertyAtIndexAsOptionValueArch (NULL, ePropertyDefaultArch);
2862 return value->SetCurrentValue(arch, true);
2865 lldb::DynamicValueType
2866 TargetProperties::GetPreferDynamicValue() const
2868 const uint32_t idx = ePropertyPreferDynamic;
2869 return (lldb::DynamicValueType)m_collection_sp->GetPropertyAtIndexAsEnumeration (NULL, idx, g_properties[idx].default_uint_value);
2873 TargetProperties::GetDisableASLR () const
2875 const uint32_t idx = ePropertyDisableASLR;
2876 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
2880 TargetProperties::SetDisableASLR (bool b)
2882 const uint32_t idx = ePropertyDisableASLR;
2883 m_collection_sp->SetPropertyAtIndexAsBoolean (NULL, idx, b);
2887 TargetProperties::GetDetachOnError () const
2889 const uint32_t idx = ePropertyDetachOnError;
2890 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
2894 TargetProperties::SetDetachOnError (bool b)
2896 const uint32_t idx = ePropertyDetachOnError;
2897 m_collection_sp->SetPropertyAtIndexAsBoolean (NULL, idx, b);
2901 TargetProperties::GetDisableSTDIO () const
2903 const uint32_t idx = ePropertyDisableSTDIO;
2904 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
2908 TargetProperties::SetDisableSTDIO (bool b)
2910 const uint32_t idx = ePropertyDisableSTDIO;
2911 m_collection_sp->SetPropertyAtIndexAsBoolean (NULL, idx, b);
2915 TargetProperties::GetDisassemblyFlavor () const
2917 const uint32_t idx = ePropertyDisassemblyFlavor;
2918 const char *return_value;
2920 x86DisassemblyFlavor flavor_value = (x86DisassemblyFlavor) m_collection_sp->GetPropertyAtIndexAsEnumeration (NULL, idx, g_properties[idx].default_uint_value);
2921 return_value = g_x86_dis_flavor_value_types[flavor_value].string_value;
2922 return return_value;
2926 TargetProperties::GetInlineStrategy () const
2928 const uint32_t idx = ePropertyInlineStrategy;
2929 return (InlineStrategy)m_collection_sp->GetPropertyAtIndexAsEnumeration (NULL, idx, g_properties[idx].default_uint_value);
2933 TargetProperties::GetArg0 () const
2935 const uint32_t idx = ePropertyArg0;
2936 return m_collection_sp->GetPropertyAtIndexAsString (NULL, idx, NULL);
2940 TargetProperties::SetArg0 (const char *arg)
2942 const uint32_t idx = ePropertyArg0;
2943 m_collection_sp->SetPropertyAtIndexAsString (NULL, idx, arg);
2947 TargetProperties::GetRunArguments (Args &args) const
2949 const uint32_t idx = ePropertyRunArgs;
2950 return m_collection_sp->GetPropertyAtIndexAsArgs (NULL, idx, args);
2954 TargetProperties::SetRunArguments (const Args &args)
2956 const uint32_t idx = ePropertyRunArgs;
2957 m_collection_sp->SetPropertyAtIndexFromArgs (NULL, idx, args);
2961 TargetProperties::GetEnvironmentAsArgs (Args &env) const
2963 const uint32_t idx = ePropertyEnvVars;
2964 return m_collection_sp->GetPropertyAtIndexAsArgs (NULL, idx, env);
2968 TargetProperties::GetSkipPrologue() const
2970 const uint32_t idx = ePropertySkipPrologue;
2971 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
2975 TargetProperties::GetSourcePathMap () const
2977 const uint32_t idx = ePropertySourceMap;
2978 OptionValuePathMappings *option_value = m_collection_sp->GetPropertyAtIndexAsOptionValuePathMappings (NULL, false, idx);
2979 assert(option_value);
2980 return option_value->GetCurrentValue();
2984 TargetProperties::GetExecutableSearchPaths ()
2986 const uint32_t idx = ePropertyExecutableSearchPaths;
2987 OptionValueFileSpecList *option_value = m_collection_sp->GetPropertyAtIndexAsOptionValueFileSpecList (NULL, false, idx);
2988 assert(option_value);
2989 return option_value->GetCurrentValue();
2993 TargetProperties::GetDebugFileSearchPaths ()
2995 const uint32_t idx = ePropertyDebugFileSearchPaths;
2996 OptionValueFileSpecList *option_value = m_collection_sp->GetPropertyAtIndexAsOptionValueFileSpecList (NULL, false, idx);
2997 assert(option_value);
2998 return option_value->GetCurrentValue();
3002 TargetProperties::GetEnableSyntheticValue () const
3004 const uint32_t idx = ePropertyEnableSynthetic;
3005 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
3009 TargetProperties::GetMaximumNumberOfChildrenToDisplay() const
3011 const uint32_t idx = ePropertyMaxChildrenCount;
3012 return m_collection_sp->GetPropertyAtIndexAsSInt64 (NULL, idx, g_properties[idx].default_uint_value);
3016 TargetProperties::GetMaximumSizeOfStringSummary() const
3018 const uint32_t idx = ePropertyMaxSummaryLength;
3019 return m_collection_sp->GetPropertyAtIndexAsSInt64 (NULL, idx, g_properties[idx].default_uint_value);
3023 TargetProperties::GetMaximumMemReadSize () const
3025 const uint32_t idx = ePropertyMaxMemReadSize;
3026 return m_collection_sp->GetPropertyAtIndexAsSInt64 (NULL, idx, g_properties[idx].default_uint_value);
3030 TargetProperties::GetStandardInputPath () const
3032 const uint32_t idx = ePropertyInputPath;
3033 return m_collection_sp->GetPropertyAtIndexAsFileSpec (NULL, idx);
3037 TargetProperties::SetStandardInputPath (const char *p)
3039 const uint32_t idx = ePropertyInputPath;
3040 m_collection_sp->SetPropertyAtIndexAsString (NULL, idx, p);
3044 TargetProperties::GetStandardOutputPath () const
3046 const uint32_t idx = ePropertyOutputPath;
3047 return m_collection_sp->GetPropertyAtIndexAsFileSpec (NULL, idx);
3051 TargetProperties::SetStandardOutputPath (const char *p)
3053 const uint32_t idx = ePropertyOutputPath;
3054 m_collection_sp->SetPropertyAtIndexAsString (NULL, idx, p);
3058 TargetProperties::GetStandardErrorPath () const
3060 const uint32_t idx = ePropertyErrorPath;
3061 return m_collection_sp->GetPropertyAtIndexAsFileSpec(NULL, idx);
3065 TargetProperties::GetExpressionPrefixContentsAsCString ()
3067 const uint32_t idx = ePropertyExprPrefix;
3068 OptionValueFileSpec *file = m_collection_sp->GetPropertyAtIndexAsOptionValueFileSpec (NULL, false, idx);
3071 const bool null_terminate = true;
3072 DataBufferSP data_sp(file->GetFileContents(null_terminate));
3074 return (const char *) data_sp->GetBytes();
3080 TargetProperties::SetStandardErrorPath (const char *p)
3082 const uint32_t idx = ePropertyErrorPath;
3083 m_collection_sp->SetPropertyAtIndexAsString (NULL, idx, p);
3087 TargetProperties::GetBreakpointsConsultPlatformAvoidList ()
3089 const uint32_t idx = ePropertyBreakpointUseAvoidList;
3090 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
3094 TargetProperties::GetUseHexImmediates () const
3096 const uint32_t idx = ePropertyUseHexImmediates;
3097 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
3101 TargetProperties::GetUseFastStepping () const
3103 const uint32_t idx = ePropertyUseFastStepping;
3104 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
3108 TargetProperties::GetDisplayExpressionsInCrashlogs () const
3110 const uint32_t idx = ePropertyDisplayExpressionsInCrashlogs;
3111 return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
3114 LoadScriptFromSymFile
3115 TargetProperties::GetLoadScriptFromSymbolFile () const
3117 const uint32_t idx = ePropertyLoadScriptFromSymbolFile;
3118 return (LoadScriptFromSymFile)m_collection_sp->GetPropertyAtIndexAsEnumeration(NULL, idx, g_properties[idx].default_uint_value);
3121 Disassembler::HexImmediateStyle
3122 TargetProperties::GetHexImmediateStyle () const
3124 const uint32_t idx = ePropertyHexImmediateStyle;
3125 return (Disassembler::HexImmediateStyle)m_collection_sp->GetPropertyAtIndexAsEnumeration(NULL, idx, g_properties[idx].default_uint_value);
3128 MemoryModuleLoadLevel
3129 TargetProperties::GetMemoryModuleLoadLevel() const
3131 const uint32_t idx = ePropertyMemoryModuleLoadLevel;
3132 return (MemoryModuleLoadLevel)m_collection_sp->GetPropertyAtIndexAsEnumeration(NULL, idx, g_properties[idx].default_uint_value);
3136 TargetProperties::GetUserSpecifiedTrapHandlerNames (Args &args) const
3138 const uint32_t idx = ePropertyTrapHandlerNames;
3139 return m_collection_sp->GetPropertyAtIndexAsArgs (NULL, idx, args);
3143 TargetProperties::SetUserSpecifiedTrapHandlerNames (const Args &args)
3145 const uint32_t idx = ePropertyTrapHandlerNames;
3146 m_collection_sp->SetPropertyAtIndexFromArgs (NULL, idx, args);
3149 //----------------------------------------------------------------------
3150 // Target::TargetEventData
3151 //----------------------------------------------------------------------
3153 Target::TargetEventData::GetFlavorString ()
3155 static ConstString g_flavor ("Target::TargetEventData");
3160 Target::TargetEventData::GetFlavor () const
3162 return TargetEventData::GetFlavorString ();
3165 Target::TargetEventData::TargetEventData (const lldb::TargetSP &new_target_sp) :
3167 m_target_sp (new_target_sp)
3171 Target::TargetEventData::~TargetEventData()
3177 Target::TargetEventData::Dump (Stream *s) const
3183 Target::TargetEventData::GetTargetFromEvent (const lldb::EventSP &event_sp)
3187 const TargetEventData *data = GetEventDataFromEvent (event_sp.get());
3189 target_sp = data->m_target_sp;
3194 const Target::TargetEventData *
3195 Target::TargetEventData::GetEventDataFromEvent (const Event *event_ptr)
3199 const EventData *event_data = event_ptr->GetData();
3200 if (event_data && event_data->GetFlavor() == TargetEventData::GetFlavorString())
3201 return static_cast <const TargetEventData *> (event_ptr->GetData());