1 //===-- SBTarget.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/API/SBTarget.h"
12 #include "lldb/lldb-public.h"
14 #include "lldb/API/SBBreakpoint.h"
15 #include "lldb/API/SBDebugger.h"
16 #include "lldb/API/SBEvent.h"
17 #include "lldb/API/SBExpressionOptions.h"
18 #include "lldb/API/SBFileSpec.h"
19 #include "lldb/API/SBListener.h"
20 #include "lldb/API/SBModule.h"
21 #include "lldb/API/SBModuleSpec.h"
22 #include "lldb/API/SBSourceManager.h"
23 #include "lldb/API/SBProcess.h"
24 #include "lldb/API/SBStream.h"
25 #include "lldb/API/SBSymbolContextList.h"
26 #include "lldb/Breakpoint/BreakpointID.h"
27 #include "lldb/Breakpoint/BreakpointIDList.h"
28 #include "lldb/Breakpoint/BreakpointList.h"
29 #include "lldb/Breakpoint/BreakpointLocation.h"
30 #include "lldb/Core/Address.h"
31 #include "lldb/Core/AddressResolver.h"
32 #include "lldb/Core/AddressResolverName.h"
33 #include "lldb/Core/ArchSpec.h"
34 #include "lldb/Core/Debugger.h"
35 #include "lldb/Core/Disassembler.h"
36 #include "lldb/Core/Log.h"
37 #include "lldb/Core/Module.h"
38 #include "lldb/Core/ModuleSpec.h"
39 #include "lldb/Core/RegularExpression.h"
40 #include "lldb/Core/SearchFilter.h"
41 #include "lldb/Core/Section.h"
42 #include "lldb/Core/STLUtils.h"
43 #include "lldb/Core/ValueObjectConstResult.h"
44 #include "lldb/Core/ValueObjectList.h"
45 #include "lldb/Core/ValueObjectVariable.h"
46 #include "lldb/Host/FileSpec.h"
47 #include "lldb/Host/Host.h"
48 #include "lldb/Interpreter/Args.h"
49 #include "lldb/Symbol/ClangASTContext.h"
50 #include "lldb/Symbol/DeclVendor.h"
51 #include "lldb/Symbol/ObjectFile.h"
52 #include "lldb/Symbol/SymbolVendor.h"
53 #include "lldb/Symbol/VariableList.h"
54 #include "lldb/Target/ABI.h"
55 #include "lldb/Target/Language.h"
56 #include "lldb/Target/LanguageRuntime.h"
57 #include "lldb/Target/ObjCLanguageRuntime.h"
58 #include "lldb/Target/Process.h"
59 #include "lldb/Target/StackFrame.h"
60 #include "lldb/Target/Target.h"
61 #include "lldb/Target/TargetList.h"
63 #include "lldb/Interpreter/CommandReturnObject.h"
64 #include "../source/Commands/CommandObjectBreakpoint.h"
65 #include "llvm/Support/Regex.h"
69 using namespace lldb_private;
71 #define DEFAULT_DISASM_BYTE_SIZE 32
76 AttachToProcess (ProcessAttachInfo &attach_info, Target &target)
78 Mutex::Locker api_locker (target.GetAPIMutex ());
80 auto process_sp = target.GetProcessSP ();
83 const auto state = process_sp->GetState ();
84 if (process_sp->IsAlive () && state == eStateConnected)
86 // If we are already connected, then we have already specified the
87 // listener, so if a valid listener is supplied, we need to error out
88 // to let the client know.
89 if (attach_info.GetListener ())
90 return Error ("process is connected and already has a listener, pass empty listener");
94 return target.Attach (attach_info, nullptr);
99 //----------------------------------------------------------------------
100 // SBTarget constructor
101 //----------------------------------------------------------------------
102 SBTarget::SBTarget () :
107 SBTarget::SBTarget (const SBTarget& rhs) :
108 m_opaque_sp (rhs.m_opaque_sp)
112 SBTarget::SBTarget(const TargetSP& target_sp) :
113 m_opaque_sp (target_sp)
118 SBTarget::operator = (const SBTarget& rhs)
121 m_opaque_sp = rhs.m_opaque_sp;
125 //----------------------------------------------------------------------
127 //----------------------------------------------------------------------
128 SBTarget::~SBTarget()
133 SBTarget::EventIsTargetEvent (const SBEvent &event)
135 return Target::TargetEventData::GetEventDataFromEvent(event.get()) != NULL;
139 SBTarget::GetTargetFromEvent (const SBEvent &event)
141 return Target::TargetEventData::GetTargetFromEvent (event.get());
145 SBTarget::GetNumModulesFromEvent (const SBEvent &event)
147 const ModuleList module_list = Target::TargetEventData::GetModuleListFromEvent (event.get());
148 return module_list.GetSize();
152 SBTarget::GetModuleAtIndexFromEvent (const uint32_t idx, const SBEvent &event)
154 const ModuleList module_list = Target::TargetEventData::GetModuleListFromEvent (event.get());
155 return SBModule(module_list.GetModuleAtIndex(idx));
159 SBTarget::GetBroadcasterClassName ()
161 return Target::GetStaticBroadcasterClass().AsCString();
165 SBTarget::IsValid () const
167 return m_opaque_sp.get() != NULL && m_opaque_sp->IsValid();
171 SBTarget::GetProcess ()
173 SBProcess sb_process;
174 ProcessSP process_sp;
175 TargetSP target_sp(GetSP());
178 process_sp = target_sp->GetProcessSP();
179 sb_process.SetSP (process_sp);
182 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
184 log->Printf ("SBTarget(%p)::GetProcess () => SBProcess(%p)",
185 static_cast<void*>(target_sp.get()),
186 static_cast<void*>(process_sp.get()));
192 SBTarget::GetPlatform ()
194 TargetSP target_sp(GetSP());
199 platform.m_opaque_sp = target_sp->GetPlatform();
205 SBTarget::GetDebugger () const
208 TargetSP target_sp(GetSP());
210 debugger.reset (target_sp->GetDebugger().shared_from_this());
215 SBTarget::LoadCore (const char *core_file)
217 SBProcess sb_process;
218 TargetSP target_sp(GetSP());
221 FileSpec filespec(core_file, true);
222 ProcessSP process_sp (target_sp->CreateProcess(target_sp->GetDebugger().GetListener(),
227 process_sp->LoadCore();
228 sb_process.SetSP (process_sp);
235 SBTarget::LaunchSimple
239 const char *working_directory
242 char *stdin_path = NULL;
243 char *stdout_path = NULL;
244 char *stderr_path = NULL;
245 uint32_t launch_flags = 0;
246 bool stop_at_entry = false;
248 SBListener listener = GetDebugger().GetListener();
249 return Launch (listener,
265 TargetSP target_sp(GetSP());
268 Mutex::Locker api_locker (target_sp->GetAPIMutex());
269 sb_error.ref() = target_sp->Install(NULL);
277 SBListener &listener,
280 const char *stdin_path,
281 const char *stdout_path,
282 const char *stderr_path,
283 const char *working_directory,
284 uint32_t launch_flags, // See LaunchFlags
289 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
291 SBProcess sb_process;
292 ProcessSP process_sp;
293 TargetSP target_sp(GetSP());
296 log->Printf ("SBTarget(%p)::Launch (argv=%p, envp=%p, stdin=%s, stdout=%s, stderr=%s, working-dir=%s, launch_flags=0x%x, stop_at_entry=%i, &error (%p))...",
297 static_cast<void*>(target_sp.get()),
298 static_cast<void*>(argv), static_cast<void*>(envp),
299 stdin_path ? stdin_path : "NULL",
300 stdout_path ? stdout_path : "NULL",
301 stderr_path ? stderr_path : "NULL",
302 working_directory ? working_directory : "NULL",
303 launch_flags, stop_at_entry,
304 static_cast<void*>(error.get()));
308 Mutex::Locker api_locker (target_sp->GetAPIMutex());
311 launch_flags |= eLaunchFlagStopAtEntry;
313 if (getenv("LLDB_LAUNCH_FLAG_DISABLE_ASLR"))
314 launch_flags |= eLaunchFlagDisableASLR;
316 StateType state = eStateInvalid;
317 process_sp = target_sp->GetProcessSP();
320 state = process_sp->GetState();
322 if (process_sp->IsAlive() && state != eStateConnected)
324 if (state == eStateAttaching)
325 error.SetErrorString ("process attach is in progress");
327 error.SetErrorString ("a process is already being debugged");
332 if (state == eStateConnected)
334 // If we are already connected, then we have already specified the
335 // listener, so if a valid listener is supplied, we need to error out
336 // to let the client know.
337 if (listener.IsValid())
339 error.SetErrorString ("process is connected and already has a listener, pass empty listener");
344 if (getenv("LLDB_LAUNCH_FLAG_DISABLE_STDIO"))
345 launch_flags |= eLaunchFlagDisableSTDIO;
347 ProcessLaunchInfo launch_info(FileSpec{stdin_path, false},
348 FileSpec{stdout_path, false},
349 FileSpec{stderr_path, false},
350 FileSpec{working_directory, false},
353 Module *exe_module = target_sp->GetExecutableModulePointer();
355 launch_info.SetExecutableFile(exe_module->GetPlatformFileSpec(), true);
357 launch_info.GetArguments().AppendArguments (argv);
359 launch_info.GetEnvironmentEntries ().SetArguments (envp);
361 if (listener.IsValid())
362 launch_info.SetListener(listener.GetSP());
364 error.SetError (target_sp->Launch(launch_info, NULL));
366 sb_process.SetSP(target_sp->GetProcessSP());
370 error.SetErrorString ("SBTarget is invalid");
373 log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
375 log->Printf ("SBTarget(%p)::Launch (...) => SBProcess(%p)",
376 static_cast<void*>(target_sp.get()),
377 static_cast<void*>(sb_process.GetSP().get()));
383 SBTarget::Launch (SBLaunchInfo &sb_launch_info, SBError& error)
385 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
387 SBProcess sb_process;
388 TargetSP target_sp(GetSP());
391 log->Printf ("SBTarget(%p)::Launch (launch_info, error)...",
392 static_cast<void*>(target_sp.get()));
396 Mutex::Locker api_locker (target_sp->GetAPIMutex());
397 StateType state = eStateInvalid;
399 ProcessSP process_sp = target_sp->GetProcessSP();
402 state = process_sp->GetState();
404 if (process_sp->IsAlive() && state != eStateConnected)
406 if (state == eStateAttaching)
407 error.SetErrorString ("process attach is in progress");
409 error.SetErrorString ("a process is already being debugged");
415 lldb_private::ProcessLaunchInfo &launch_info = sb_launch_info.ref();
417 if (!launch_info.GetExecutableFile())
419 Module *exe_module = target_sp->GetExecutableModulePointer();
421 launch_info.SetExecutableFile(exe_module->GetPlatformFileSpec(), true);
424 const ArchSpec &arch_spec = target_sp->GetArchitecture();
425 if (arch_spec.IsValid())
426 launch_info.GetArchitecture () = arch_spec;
428 error.SetError (target_sp->Launch (launch_info, NULL));
429 sb_process.SetSP(target_sp->GetProcessSP());
433 error.SetErrorString ("SBTarget is invalid");
436 log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
438 log->Printf ("SBTarget(%p)::Launch (...) => SBProcess(%p)",
439 static_cast<void*>(target_sp.get()),
440 static_cast<void*>(sb_process.GetSP().get()));
446 SBTarget::Attach (SBAttachInfo &sb_attach_info, SBError& error)
448 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
450 SBProcess sb_process;
451 TargetSP target_sp(GetSP());
454 log->Printf ("SBTarget(%p)::Attach (sb_attach_info, error)...",
455 static_cast<void*>(target_sp.get()));
459 ProcessAttachInfo &attach_info = sb_attach_info.ref();
460 if (attach_info.ProcessIDIsValid() && !attach_info.UserIDIsValid())
462 PlatformSP platform_sp = target_sp->GetPlatform();
463 // See if we can pre-verify if a process exists or not
464 if (platform_sp && platform_sp->IsConnected())
466 lldb::pid_t attach_pid = attach_info.GetProcessID();
467 ProcessInstanceInfo instance_info;
468 if (platform_sp->GetProcessInfo(attach_pid, instance_info))
470 attach_info.SetUserID(instance_info.GetEffectiveUserID());
474 error.ref().SetErrorStringWithFormat("no process found with process ID %" PRIu64, attach_pid);
477 log->Printf ("SBTarget(%p)::Attach (...) => error %s",
478 static_cast<void*>(target_sp.get()), error.GetCString());
484 error.SetError(AttachToProcess(attach_info, *target_sp));
486 sb_process.SetSP(target_sp->GetProcessSP());
490 error.SetErrorString ("SBTarget is invalid");
494 log->Printf ("SBTarget(%p)::Attach (...) => SBProcess(%p)",
495 static_cast<void*>(target_sp.get()),
496 static_cast<void*>(sb_process.GetSP().get()));
502 #if defined(__APPLE__)
505 SBTarget::AttachToProcessWithID (SBListener &listener,
507 lldb::SBError& error)
509 return AttachToProcessWithID (listener, (lldb::pid_t)pid, error);
512 #endif // #if defined(__APPLE__)
515 SBTarget::AttachToProcessWithID
517 SBListener &listener,
518 lldb::pid_t pid,// The process ID to attach to
519 SBError& error // An error explaining what went wrong if attach fails
522 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
524 SBProcess sb_process;
525 TargetSP target_sp(GetSP());
528 log->Printf ("SBTarget(%p)::%s (listener, pid=%" PRId64 ", error)...",
529 static_cast<void*>(target_sp.get()),
535 ProcessAttachInfo attach_info;
536 attach_info.SetProcessID (pid);
537 if (listener.IsValid())
538 attach_info.SetListener(listener.GetSP());
540 ProcessInstanceInfo instance_info;
541 if (target_sp->GetPlatform ()->GetProcessInfo (pid, instance_info))
542 attach_info.SetUserID (instance_info.GetEffectiveUserID ());
544 error.SetError (AttachToProcess (attach_info, *target_sp));
545 if (error.Success ())
546 sb_process.SetSP (target_sp->GetProcessSP ());
549 error.SetErrorString ("SBTarget is invalid");
552 log->Printf ("SBTarget(%p)::%s (...) => SBProcess(%p)",
553 static_cast<void*>(target_sp.get ()),
555 static_cast<void*>(sb_process.GetSP().get ()));
560 SBTarget::AttachToProcessWithName
562 SBListener &listener,
563 const char *name, // basename of process to attach to
564 bool wait_for, // if true wait for a new instance of "name" to be launched
565 SBError& error // An error explaining what went wrong if attach fails
568 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
570 SBProcess sb_process;
571 TargetSP target_sp(GetSP());
574 log->Printf ("SBTarget(%p)::%s (listener, name=%s, wait_for=%s, error)...",
575 static_cast<void*>(target_sp.get()),
578 wait_for ? "true" : "false");
580 if (name && target_sp)
582 ProcessAttachInfo attach_info;
583 attach_info.GetExecutableFile().SetFile(name, false);
584 attach_info.SetWaitForLaunch(wait_for);
585 if (listener.IsValid())
586 attach_info.SetListener(listener.GetSP());
588 error.SetError (AttachToProcess (attach_info, *target_sp));
589 if (error.Success ())
590 sb_process.SetSP (target_sp->GetProcessSP ());
593 error.SetErrorString ("SBTarget is invalid");
596 log->Printf ("SBTarget(%p)::%s (...) => SBProcess(%p)",
597 static_cast<void*>(target_sp.get()),
599 static_cast<void*>(sb_process.GetSP().get()));
604 SBTarget::ConnectRemote
606 SBListener &listener,
608 const char *plugin_name,
612 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
614 SBProcess sb_process;
615 ProcessSP process_sp;
616 TargetSP target_sp(GetSP());
619 log->Printf ("SBTarget(%p)::ConnectRemote (listener, url=%s, plugin_name=%s, error)...",
620 static_cast<void*>(target_sp.get()), url, plugin_name);
624 Mutex::Locker api_locker (target_sp->GetAPIMutex());
625 if (listener.IsValid())
626 process_sp = target_sp->CreateProcess (listener.ref(), plugin_name, NULL);
628 process_sp = target_sp->CreateProcess (target_sp->GetDebugger().GetListener(), plugin_name, NULL);
632 sb_process.SetSP (process_sp);
633 error.SetError (process_sp->ConnectRemote (NULL, url));
637 error.SetErrorString ("unable to create lldb_private::Process");
642 error.SetErrorString ("SBTarget is invalid");
646 log->Printf ("SBTarget(%p)::ConnectRemote (...) => SBProcess(%p)",
647 static_cast<void*>(target_sp.get()),
648 static_cast<void*>(process_sp.get()));
653 SBTarget::GetExecutable ()
656 SBFileSpec exe_file_spec;
657 TargetSP target_sp(GetSP());
660 Module *exe_module = target_sp->GetExecutableModulePointer();
662 exe_file_spec.SetFileSpec (exe_module->GetFileSpec());
665 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
668 log->Printf ("SBTarget(%p)::GetExecutable () => SBFileSpec(%p)",
669 static_cast<void*>(target_sp.get()),
670 static_cast<const void*>(exe_file_spec.get()));
673 return exe_file_spec;
677 SBTarget::operator == (const SBTarget &rhs) const
679 return m_opaque_sp.get() == rhs.m_opaque_sp.get();
683 SBTarget::operator != (const SBTarget &rhs) const
685 return m_opaque_sp.get() != rhs.m_opaque_sp.get();
689 SBTarget::GetSP () const
695 SBTarget::SetSP (const lldb::TargetSP& target_sp)
697 m_opaque_sp = target_sp;
701 SBTarget::ResolveLoadAddress (lldb::addr_t vm_addr)
703 lldb::SBAddress sb_addr;
704 Address &addr = sb_addr.ref();
705 TargetSP target_sp(GetSP());
708 Mutex::Locker api_locker (target_sp->GetAPIMutex());
709 if (target_sp->ResolveLoadAddress (vm_addr, addr))
713 // We have a load address that isn't in a section, just return an address
714 // with the offset filled in (the address) and the section set to NULL
715 addr.SetRawAddress(vm_addr);
720 SBTarget::ResolveFileAddress (lldb::addr_t file_addr)
722 lldb::SBAddress sb_addr;
723 Address &addr = sb_addr.ref();
724 TargetSP target_sp(GetSP());
727 Mutex::Locker api_locker (target_sp->GetAPIMutex());
728 if (target_sp->ResolveFileAddress (file_addr, addr))
732 addr.SetRawAddress(file_addr);
737 SBTarget::ResolvePastLoadAddress (uint32_t stop_id, lldb::addr_t vm_addr)
739 lldb::SBAddress sb_addr;
740 Address &addr = sb_addr.ref();
741 TargetSP target_sp(GetSP());
744 Mutex::Locker api_locker (target_sp->GetAPIMutex());
745 if (target_sp->ResolveLoadAddress (vm_addr, addr))
749 // We have a load address that isn't in a section, just return an address
750 // with the offset filled in (the address) and the section set to NULL
751 addr.SetRawAddress(vm_addr);
756 SBTarget::ResolveSymbolContextForAddress (const SBAddress& addr,
757 uint32_t resolve_scope)
762 TargetSP target_sp(GetSP());
764 target_sp->GetImages().ResolveSymbolContextForAddress (addr.ref(), resolve_scope, sc.ref());
770 SBTarget::ReadMemory (const SBAddress addr,
773 lldb::SBError &error)
776 size_t bytes_read = 0;
777 TargetSP target_sp(GetSP());
780 Mutex::Locker api_locker (target_sp->GetAPIMutex());
781 bytes_read = target_sp->ReadMemory(addr.ref(), false, buf, size, sb_error.ref());
785 sb_error.SetErrorString("invalid target");
792 SBTarget::BreakpointCreateByLocation (const char *file,
795 return SBBreakpoint(BreakpointCreateByLocation (SBFileSpec (file, false), line));
799 SBTarget::BreakpointCreateByLocation (const SBFileSpec &sb_file_spec,
802 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
805 TargetSP target_sp(GetSP());
806 if (target_sp && line != 0)
808 Mutex::Locker api_locker (target_sp->GetAPIMutex());
810 const LazyBool check_inlines = eLazyBoolCalculate;
811 const LazyBool skip_prologue = eLazyBoolCalculate;
812 const bool internal = false;
813 const bool hardware = false;
814 const LazyBool move_to_nearest_code = eLazyBoolCalculate;
815 *sb_bp = target_sp->CreateBreakpoint (NULL, *sb_file_spec, line, check_inlines, skip_prologue, internal, hardware, move_to_nearest_code);
821 sb_bp.GetDescription (sstr);
823 sb_file_spec->GetPath (path, sizeof(path));
824 log->Printf ("SBTarget(%p)::BreakpointCreateByLocation ( %s:%u ) => SBBreakpoint(%p): %s",
825 static_cast<void*>(target_sp.get()), path, line,
826 static_cast<void*>(sb_bp.get()), sstr.GetData());
833 SBTarget::BreakpointCreateByName (const char *symbol_name,
834 const char *module_name)
836 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
839 TargetSP target_sp(GetSP());
842 Mutex::Locker api_locker (target_sp->GetAPIMutex());
844 const bool internal = false;
845 const bool hardware = false;
846 const LazyBool skip_prologue = eLazyBoolCalculate;
847 if (module_name && module_name[0])
849 FileSpecList module_spec_list;
850 module_spec_list.Append (FileSpec (module_name, false));
851 *sb_bp = target_sp->CreateBreakpoint (&module_spec_list, NULL, symbol_name, eFunctionNameTypeAuto, eLanguageTypeUnknown, skip_prologue, internal, hardware);
855 *sb_bp = target_sp->CreateBreakpoint (NULL, NULL, symbol_name, eFunctionNameTypeAuto, eLanguageTypeUnknown, skip_prologue, internal, hardware);
860 log->Printf ("SBTarget(%p)::BreakpointCreateByName (symbol=\"%s\", module=\"%s\") => SBBreakpoint(%p)",
861 static_cast<void*>(target_sp.get()), symbol_name,
862 module_name, static_cast<void*>(sb_bp.get()));
868 SBTarget::BreakpointCreateByName (const char *symbol_name,
869 const SBFileSpecList &module_list,
870 const SBFileSpecList &comp_unit_list)
872 uint32_t name_type_mask = eFunctionNameTypeAuto;
873 return BreakpointCreateByName (symbol_name, name_type_mask, eLanguageTypeUnknown, module_list, comp_unit_list);
877 SBTarget::BreakpointCreateByName (const char *symbol_name,
878 uint32_t name_type_mask,
879 const SBFileSpecList &module_list,
880 const SBFileSpecList &comp_unit_list)
882 return BreakpointCreateByName (symbol_name, name_type_mask, eLanguageTypeUnknown, module_list, comp_unit_list);
886 SBTarget::BreakpointCreateByName (const char *symbol_name,
887 uint32_t name_type_mask,
888 LanguageType symbol_language,
889 const SBFileSpecList &module_list,
890 const SBFileSpecList &comp_unit_list)
892 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
895 TargetSP target_sp(GetSP());
896 if (target_sp && symbol_name && symbol_name[0])
898 const bool internal = false;
899 const bool hardware = false;
900 const LazyBool skip_prologue = eLazyBoolCalculate;
901 Mutex::Locker api_locker (target_sp->GetAPIMutex());
902 *sb_bp = target_sp->CreateBreakpoint (module_list.get(),
903 comp_unit_list.get(),
913 log->Printf ("SBTarget(%p)::BreakpointCreateByName (symbol=\"%s\", name_type: %d) => SBBreakpoint(%p)",
914 static_cast<void*>(target_sp.get()), symbol_name,
915 name_type_mask, static_cast<void*>(sb_bp.get()));
921 SBTarget::BreakpointCreateByNames (const char *symbol_names[],
923 uint32_t name_type_mask,
924 const SBFileSpecList &module_list,
925 const SBFileSpecList &comp_unit_list)
927 return BreakpointCreateByNames(symbol_names, num_names, name_type_mask, eLanguageTypeUnknown, module_list, comp_unit_list);
931 SBTarget::BreakpointCreateByNames (const char *symbol_names[],
933 uint32_t name_type_mask,
934 LanguageType symbol_language,
935 const SBFileSpecList &module_list,
936 const SBFileSpecList &comp_unit_list)
938 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
941 TargetSP target_sp(GetSP());
942 if (target_sp && num_names > 0)
944 Mutex::Locker api_locker (target_sp->GetAPIMutex());
945 const bool internal = false;
946 const bool hardware = false;
947 const LazyBool skip_prologue = eLazyBoolCalculate;
948 *sb_bp = target_sp->CreateBreakpoint (module_list.get(),
949 comp_unit_list.get(),
961 log->Printf ("SBTarget(%p)::BreakpointCreateByName (symbols={",
962 static_cast<void*>(target_sp.get()));
963 for (uint32_t i = 0 ; i < num_names; i++)
966 if (i < num_names - 1)
970 if (symbol_names[i] != NULL)
971 log->Printf ("\"%s\"%c ", symbol_names[i], sep);
973 log->Printf ("\"<NULL>\"%c ", sep);
975 log->Printf ("name_type: %d) => SBBreakpoint(%p)", name_type_mask,
976 static_cast<void*>(sb_bp.get()));
983 SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex,
984 const char *module_name)
986 SBFileSpecList module_spec_list;
987 SBFileSpecList comp_unit_list;
988 if (module_name && module_name[0])
990 module_spec_list.Append (FileSpec (module_name, false));
993 return BreakpointCreateByRegex (symbol_name_regex, eLanguageTypeUnknown, module_spec_list, comp_unit_list);
997 SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex,
998 const SBFileSpecList &module_list,
999 const SBFileSpecList &comp_unit_list)
1001 return BreakpointCreateByRegex (symbol_name_regex, eLanguageTypeUnknown, module_list, comp_unit_list);
1005 SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex,
1006 LanguageType symbol_language,
1007 const SBFileSpecList &module_list,
1008 const SBFileSpecList &comp_unit_list)
1010 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1013 TargetSP target_sp(GetSP());
1014 if (target_sp && symbol_name_regex && symbol_name_regex[0])
1016 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1017 RegularExpression regexp(symbol_name_regex);
1018 const bool internal = false;
1019 const bool hardware = false;
1020 const LazyBool skip_prologue = eLazyBoolCalculate;
1022 *sb_bp = target_sp->CreateFuncRegexBreakpoint (module_list.get(), comp_unit_list.get(), regexp, symbol_language, skip_prologue, internal, hardware);
1026 log->Printf ("SBTarget(%p)::BreakpointCreateByRegex (symbol_regex=\"%s\") => SBBreakpoint(%p)",
1027 static_cast<void*>(target_sp.get()), symbol_name_regex,
1028 static_cast<void*>(sb_bp.get()));
1034 SBTarget::BreakpointCreateByAddress (addr_t address)
1036 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1039 TargetSP target_sp(GetSP());
1042 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1043 const bool hardware = false;
1044 *sb_bp = target_sp->CreateBreakpoint (address, false, hardware);
1048 log->Printf ("SBTarget(%p)::BreakpointCreateByAddress (address=%" PRIu64 ") => SBBreakpoint(%p)",
1049 static_cast<void*>(target_sp.get()),
1050 static_cast<uint64_t>(address),
1051 static_cast<void*>(sb_bp.get()));
1057 SBTarget::BreakpointCreateBySBAddress (SBAddress &sb_address)
1059 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1062 TargetSP target_sp(GetSP());
1063 if (!sb_address.IsValid())
1066 log->Printf ("SBTarget(%p)::BreakpointCreateBySBAddress called with invalid address",
1067 static_cast<void*>(target_sp.get()));
1073 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1074 const bool hardware = false;
1075 *sb_bp = target_sp->CreateBreakpoint (sb_address.ref(), false, hardware);
1081 sb_address.GetDescription(s);
1082 log->Printf ("SBTarget(%p)::BreakpointCreateBySBAddress (address=%s) => SBBreakpoint(%p)",
1083 static_cast<void*>(target_sp.get()),
1085 static_cast<void*>(sb_bp.get()));
1092 SBTarget::BreakpointCreateBySourceRegex (const char *source_regex,
1093 const lldb::SBFileSpec &source_file,
1094 const char *module_name)
1096 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1099 TargetSP target_sp(GetSP());
1100 if (target_sp && source_regex && source_regex[0])
1102 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1103 RegularExpression regexp(source_regex);
1104 FileSpecList source_file_spec_list;
1105 const bool hardware = false;
1106 const LazyBool move_to_nearest_code = eLazyBoolCalculate;
1107 source_file_spec_list.Append (source_file.ref());
1109 if (module_name && module_name[0])
1111 FileSpecList module_spec_list;
1112 module_spec_list.Append (FileSpec (module_name, false));
1114 *sb_bp = target_sp->CreateSourceRegexBreakpoint (&module_spec_list, &source_file_spec_list, regexp, false, hardware, move_to_nearest_code);
1118 *sb_bp = target_sp->CreateSourceRegexBreakpoint (NULL, &source_file_spec_list, regexp, false, hardware, move_to_nearest_code);
1124 char path[PATH_MAX];
1125 source_file->GetPath (path, sizeof(path));
1126 log->Printf ("SBTarget(%p)::BreakpointCreateByRegex (source_regex=\"%s\", file=\"%s\", module_name=\"%s\") => SBBreakpoint(%p)",
1127 static_cast<void*>(target_sp.get()), source_regex, path,
1128 module_name, static_cast<void*>(sb_bp.get()));
1135 SBTarget::BreakpointCreateBySourceRegex (const char *source_regex,
1136 const SBFileSpecList &module_list,
1137 const lldb::SBFileSpecList &source_file_list)
1139 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1142 TargetSP target_sp(GetSP());
1143 if (target_sp && source_regex && source_regex[0])
1145 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1146 const bool hardware = false;
1147 const LazyBool move_to_nearest_code = eLazyBoolCalculate;
1148 RegularExpression regexp(source_regex);
1149 *sb_bp = target_sp->CreateSourceRegexBreakpoint (module_list.get(), source_file_list.get(), regexp, false, hardware, move_to_nearest_code);
1153 log->Printf ("SBTarget(%p)::BreakpointCreateByRegex (source_regex=\"%s\") => SBBreakpoint(%p)",
1154 static_cast<void*>(target_sp.get()), source_regex,
1155 static_cast<void*>(sb_bp.get()));
1161 SBTarget::BreakpointCreateForException (lldb::LanguageType language,
1165 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1168 TargetSP target_sp(GetSP());
1171 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1172 const bool hardware = false;
1173 *sb_bp = target_sp->CreateExceptionBreakpoint (language, catch_bp, throw_bp, hardware);
1177 log->Printf ("SBTarget(%p)::BreakpointCreateByRegex (Language: %s, catch: %s throw: %s) => SBBreakpoint(%p)",
1178 static_cast<void*>(target_sp.get()),
1179 Language::GetNameForLanguageType(language),
1180 catch_bp ? "on" : "off", throw_bp ? "on" : "off",
1181 static_cast<void*>(sb_bp.get()));
1187 SBTarget::GetNumBreakpoints () const
1189 TargetSP target_sp(GetSP());
1192 // The breakpoint list is thread safe, no need to lock
1193 return target_sp->GetBreakpointList().GetSize();
1199 SBTarget::GetBreakpointAtIndex (uint32_t idx) const
1201 SBBreakpoint sb_breakpoint;
1202 TargetSP target_sp(GetSP());
1205 // The breakpoint list is thread safe, no need to lock
1206 *sb_breakpoint = target_sp->GetBreakpointList().GetBreakpointAtIndex(idx);
1208 return sb_breakpoint;
1212 SBTarget::BreakpointDelete (break_id_t bp_id)
1214 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1216 bool result = false;
1217 TargetSP target_sp(GetSP());
1220 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1221 result = target_sp->RemoveBreakpointByID (bp_id);
1225 log->Printf ("SBTarget(%p)::BreakpointDelete (bp_id=%d) => %i",
1226 static_cast<void*>(target_sp.get()),
1227 static_cast<uint32_t>(bp_id), result);
1233 SBTarget::FindBreakpointByID (break_id_t bp_id)
1235 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1237 SBBreakpoint sb_breakpoint;
1238 TargetSP target_sp(GetSP());
1239 if (target_sp && bp_id != LLDB_INVALID_BREAK_ID)
1241 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1242 *sb_breakpoint = target_sp->GetBreakpointByID (bp_id);
1246 log->Printf ("SBTarget(%p)::FindBreakpointByID (bp_id=%d) => SBBreakpoint(%p)",
1247 static_cast<void*>(target_sp.get()),
1248 static_cast<uint32_t>(bp_id),
1249 static_cast<void*>(sb_breakpoint.get()));
1251 return sb_breakpoint;
1255 SBTarget::EnableAllBreakpoints ()
1257 TargetSP target_sp(GetSP());
1260 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1261 target_sp->EnableAllBreakpoints ();
1268 SBTarget::DisableAllBreakpoints ()
1270 TargetSP target_sp(GetSP());
1273 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1274 target_sp->DisableAllBreakpoints ();
1281 SBTarget::DeleteAllBreakpoints ()
1283 TargetSP target_sp(GetSP());
1286 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1287 target_sp->RemoveAllBreakpoints ();
1294 SBTarget::GetNumWatchpoints () const
1296 TargetSP target_sp(GetSP());
1299 // The watchpoint list is thread safe, no need to lock
1300 return target_sp->GetWatchpointList().GetSize();
1306 SBTarget::GetWatchpointAtIndex (uint32_t idx) const
1308 SBWatchpoint sb_watchpoint;
1309 TargetSP target_sp(GetSP());
1312 // The watchpoint list is thread safe, no need to lock
1313 sb_watchpoint.SetSP (target_sp->GetWatchpointList().GetByIndex(idx));
1315 return sb_watchpoint;
1319 SBTarget::DeleteWatchpoint (watch_id_t wp_id)
1321 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1323 bool result = false;
1324 TargetSP target_sp(GetSP());
1327 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1328 Mutex::Locker locker;
1329 target_sp->GetWatchpointList().GetListMutex(locker);
1330 result = target_sp->RemoveWatchpointByID (wp_id);
1334 log->Printf ("SBTarget(%p)::WatchpointDelete (wp_id=%d) => %i",
1335 static_cast<void*>(target_sp.get()),
1336 static_cast<uint32_t>(wp_id), result);
1342 SBTarget::FindWatchpointByID (lldb::watch_id_t wp_id)
1344 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1346 SBWatchpoint sb_watchpoint;
1347 lldb::WatchpointSP watchpoint_sp;
1348 TargetSP target_sp(GetSP());
1349 if (target_sp && wp_id != LLDB_INVALID_WATCH_ID)
1351 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1352 Mutex::Locker locker;
1353 target_sp->GetWatchpointList().GetListMutex(locker);
1354 watchpoint_sp = target_sp->GetWatchpointList().FindByID(wp_id);
1355 sb_watchpoint.SetSP (watchpoint_sp);
1359 log->Printf ("SBTarget(%p)::FindWatchpointByID (bp_id=%d) => SBWatchpoint(%p)",
1360 static_cast<void*>(target_sp.get()),
1361 static_cast<uint32_t>(wp_id),
1362 static_cast<void*>(watchpoint_sp.get()));
1364 return sb_watchpoint;
1368 SBTarget::WatchAddress (lldb::addr_t addr, size_t size, bool read, bool write, SBError &error)
1370 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1372 SBWatchpoint sb_watchpoint;
1373 lldb::WatchpointSP watchpoint_sp;
1374 TargetSP target_sp(GetSP());
1375 if (target_sp && (read || write) && addr != LLDB_INVALID_ADDRESS && size > 0)
1377 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1378 uint32_t watch_type = 0;
1380 watch_type |= LLDB_WATCH_TYPE_READ;
1382 watch_type |= LLDB_WATCH_TYPE_WRITE;
1383 if (watch_type == 0)
1385 error.SetErrorString("Can't create a watchpoint that is neither read nor write.");
1386 return sb_watchpoint;
1389 // Target::CreateWatchpoint() is thread safe.
1391 // This API doesn't take in a type, so we can't figure out what it is.
1392 CompilerType *type = NULL;
1393 watchpoint_sp = target_sp->CreateWatchpoint(addr, size, type, watch_type, cw_error);
1394 error.SetError(cw_error);
1395 sb_watchpoint.SetSP (watchpoint_sp);
1399 log->Printf ("SBTarget(%p)::WatchAddress (addr=0x%" PRIx64 ", 0x%u) => SBWatchpoint(%p)",
1400 static_cast<void*>(target_sp.get()), addr,
1401 static_cast<uint32_t>(size),
1402 static_cast<void*>(watchpoint_sp.get()));
1404 return sb_watchpoint;
1408 SBTarget::EnableAllWatchpoints ()
1410 TargetSP target_sp(GetSP());
1413 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1414 Mutex::Locker locker;
1415 target_sp->GetWatchpointList().GetListMutex(locker);
1416 target_sp->EnableAllWatchpoints ();
1423 SBTarget::DisableAllWatchpoints ()
1425 TargetSP target_sp(GetSP());
1428 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1429 Mutex::Locker locker;
1430 target_sp->GetWatchpointList().GetListMutex(locker);
1431 target_sp->DisableAllWatchpoints ();
1438 SBTarget::CreateValueFromAddress (const char *name, SBAddress addr, SBType type)
1441 lldb::ValueObjectSP new_value_sp;
1442 if (IsValid() && name && *name && addr.IsValid() && type.IsValid())
1444 lldb::addr_t load_addr(addr.GetLoadAddress(*this));
1445 ExecutionContext exe_ctx (ExecutionContextRef(ExecutionContext(m_opaque_sp.get(),false)));
1446 CompilerType ast_type(type.GetSP()->GetCompilerType(true));
1447 new_value_sp = ValueObject::CreateValueObjectFromAddress(name, load_addr, exe_ctx, ast_type);
1449 sb_value.SetSP(new_value_sp);
1450 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1454 log->Printf ("SBTarget(%p)::CreateValueFromAddress => \"%s\"",
1455 static_cast<void*>(m_opaque_sp.get()),
1456 new_value_sp->GetName().AsCString());
1458 log->Printf ("SBTarget(%p)::CreateValueFromAddress => NULL",
1459 static_cast<void*>(m_opaque_sp.get()));
1465 SBTarget::CreateValueFromData (const char *name, lldb::SBData data, lldb::SBType type)
1468 lldb::ValueObjectSP new_value_sp;
1469 if (IsValid() && name && *name && data.IsValid() && type.IsValid())
1471 DataExtractorSP extractor(*data);
1472 ExecutionContext exe_ctx (ExecutionContextRef(ExecutionContext(m_opaque_sp.get(),false)));
1473 CompilerType ast_type(type.GetSP()->GetCompilerType(true));
1474 new_value_sp = ValueObject::CreateValueObjectFromData(name, *extractor, exe_ctx, ast_type);
1476 sb_value.SetSP(new_value_sp);
1477 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1481 log->Printf ("SBTarget(%p)::CreateValueFromData => \"%s\"",
1482 static_cast<void*>(m_opaque_sp.get()),
1483 new_value_sp->GetName().AsCString());
1485 log->Printf ("SBTarget(%p)::CreateValueFromData => NULL",
1486 static_cast<void*>(m_opaque_sp.get()));
1492 SBTarget::CreateValueFromExpression (const char *name, const char* expr)
1495 lldb::ValueObjectSP new_value_sp;
1496 if (IsValid() && name && *name && expr && *expr)
1498 ExecutionContext exe_ctx (ExecutionContextRef(ExecutionContext(m_opaque_sp.get(),false)));
1499 new_value_sp = ValueObject::CreateValueObjectFromExpression(name, expr, exe_ctx);
1501 sb_value.SetSP(new_value_sp);
1502 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1506 log->Printf ("SBTarget(%p)::CreateValueFromExpression => \"%s\"",
1507 static_cast<void*>(m_opaque_sp.get()),
1508 new_value_sp->GetName().AsCString());
1510 log->Printf ("SBTarget(%p)::CreateValueFromExpression => NULL",
1511 static_cast<void*>(m_opaque_sp.get()));
1517 SBTarget::DeleteAllWatchpoints ()
1519 TargetSP target_sp(GetSP());
1522 Mutex::Locker api_locker (target_sp->GetAPIMutex());
1523 Mutex::Locker locker;
1524 target_sp->GetWatchpointList().GetListMutex(locker);
1525 target_sp->RemoveAllWatchpoints ();
1533 SBTarget::AddModule (const char *path,
1535 const char *uuid_cstr)
1537 return AddModule (path, triple, uuid_cstr, NULL);
1541 SBTarget::AddModule (const char *path,
1543 const char *uuid_cstr,
1544 const char *symfile)
1546 lldb::SBModule sb_module;
1547 TargetSP target_sp(GetSP());
1550 ModuleSpec module_spec;
1552 module_spec.GetFileSpec().SetFile(path, false);
1555 module_spec.GetUUID().SetFromCString(uuid_cstr);
1558 module_spec.GetArchitecture().SetTriple (triple, target_sp->GetPlatform ().get());
1560 module_spec.GetArchitecture() = target_sp->GetArchitecture();
1563 module_spec.GetSymbolFileSpec ().SetFile(symfile, false);
1565 sb_module.SetSP(target_sp->GetSharedModule (module_spec));
1571 SBTarget::AddModule (const SBModuleSpec &module_spec)
1573 lldb::SBModule sb_module;
1574 TargetSP target_sp(GetSP());
1576 sb_module.SetSP(target_sp->GetSharedModule (*module_spec.m_opaque_ap));
1581 SBTarget::AddModule (lldb::SBModule &module)
1583 TargetSP target_sp(GetSP());
1586 target_sp->GetImages().AppendIfNeeded (module.GetSP());
1593 SBTarget::GetNumModules () const
1595 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1598 TargetSP target_sp(GetSP());
1601 // The module list is thread safe, no need to lock
1602 num = target_sp->GetImages().GetSize();
1606 log->Printf ("SBTarget(%p)::GetNumModules () => %d",
1607 static_cast<void*>(target_sp.get()), num);
1615 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1618 log->Printf ("SBTarget(%p)::Clear ()",
1619 static_cast<void*>(m_opaque_sp.get()));
1621 m_opaque_sp.reset();
1626 SBTarget::FindModule (const SBFileSpec &sb_file_spec)
1629 TargetSP target_sp(GetSP());
1630 if (target_sp && sb_file_spec.IsValid())
1632 ModuleSpec module_spec(*sb_file_spec);
1633 // The module list is thread safe, no need to lock
1634 sb_module.SetSP (target_sp->GetImages().FindFirstModule (module_spec));
1640 SBTarget::GetByteOrder ()
1642 TargetSP target_sp(GetSP());
1644 return target_sp->GetArchitecture().GetByteOrder();
1645 return eByteOrderInvalid;
1649 SBTarget::GetTriple ()
1651 TargetSP target_sp(GetSP());
1654 std::string triple (target_sp->GetArchitecture().GetTriple().str());
1655 // Unique the string so we don't run into ownership issues since
1656 // the const strings put the string into the string pool once and
1657 // the strings never comes out
1658 ConstString const_triple (triple.c_str());
1659 return const_triple.GetCString();
1665 SBTarget::GetDataByteSize ()
1667 TargetSP target_sp(GetSP());
1670 return target_sp->GetArchitecture().GetDataByteSize() ;
1676 SBTarget::GetCodeByteSize ()
1678 TargetSP target_sp(GetSP());
1681 return target_sp->GetArchitecture().GetCodeByteSize() ;
1687 SBTarget::GetAddressByteSize()
1689 TargetSP target_sp(GetSP());
1691 return target_sp->GetArchitecture().GetAddressByteSize();
1692 return sizeof(void*);
1697 SBTarget::GetModuleAtIndex (uint32_t idx)
1699 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1703 TargetSP target_sp(GetSP());
1706 // The module list is thread safe, no need to lock
1707 module_sp = target_sp->GetImages().GetModuleAtIndex(idx);
1708 sb_module.SetSP (module_sp);
1712 log->Printf ("SBTarget(%p)::GetModuleAtIndex (idx=%d) => SBModule(%p)",
1713 static_cast<void*>(target_sp.get()), idx,
1714 static_cast<void*>(module_sp.get()));
1720 SBTarget::RemoveModule (lldb::SBModule module)
1722 TargetSP target_sp(GetSP());
1724 return target_sp->GetImages().Remove(module.GetSP());
1730 SBTarget::GetBroadcaster () const
1732 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1734 TargetSP target_sp(GetSP());
1735 SBBroadcaster broadcaster(target_sp.get(), false);
1738 log->Printf ("SBTarget(%p)::GetBroadcaster () => SBBroadcaster(%p)",
1739 static_cast<void*>(target_sp.get()),
1740 static_cast<void*>(broadcaster.get()));
1746 SBTarget::GetDescription (SBStream &description, lldb::DescriptionLevel description_level)
1748 Stream &strm = description.ref();
1750 TargetSP target_sp(GetSP());
1753 target_sp->Dump (&strm, description_level);
1756 strm.PutCString ("No value");
1761 lldb::SBSymbolContextList
1762 SBTarget::FindFunctions (const char *name, uint32_t name_type_mask)
1764 lldb::SBSymbolContextList sb_sc_list;
1765 if (name && name[0])
1767 TargetSP target_sp(GetSP());
1770 const bool symbols_ok = true;
1771 const bool inlines_ok = true;
1772 const bool append = true;
1773 target_sp->GetImages().FindFunctions (ConstString(name),
1784 lldb::SBSymbolContextList
1785 SBTarget::FindGlobalFunctions(const char *name, uint32_t max_matches, MatchType matchtype)
1787 lldb::SBSymbolContextList sb_sc_list;
1788 if (name && name[0])
1790 TargetSP target_sp(GetSP());
1793 std::string regexstr;
1796 case eMatchTypeRegex:
1797 target_sp->GetImages().FindFunctions(RegularExpression(name), true, true, true, *sb_sc_list);
1799 case eMatchTypeStartsWith:
1800 regexstr = llvm::Regex::escape(name) + ".*";
1801 target_sp->GetImages().FindFunctions(RegularExpression(regexstr.c_str()), true, true, true, *sb_sc_list);
1804 target_sp->GetImages().FindFunctions(ConstString(name), eFunctionNameTypeAny, true, true, true, *sb_sc_list);
1813 SBTarget::FindFirstType (const char* typename_cstr)
1815 TargetSP target_sp(GetSP());
1816 if (typename_cstr && typename_cstr[0] && target_sp)
1818 ConstString const_typename(typename_cstr);
1820 const bool exact_match = false;
1822 const ModuleList &module_list = target_sp->GetImages();
1823 size_t count = module_list.GetSize();
1824 for (size_t idx = 0; idx < count; idx++)
1826 ModuleSP module_sp (module_list.GetModuleAtIndex(idx));
1829 TypeSP type_sp (module_sp->FindFirstType(sc, const_typename, exact_match));
1831 return SBType(type_sp);
1835 // Didn't find the type in the symbols; try the Objective-C runtime
1836 // if one is installed
1838 ProcessSP process_sp(target_sp->GetProcessSP());
1842 ObjCLanguageRuntime *objc_language_runtime = process_sp->GetObjCLanguageRuntime();
1844 if (objc_language_runtime)
1846 DeclVendor *objc_decl_vendor = objc_language_runtime->GetDeclVendor();
1848 if (objc_decl_vendor)
1850 std::vector <clang::NamedDecl *> decls;
1852 if (objc_decl_vendor->FindDecls(const_typename, true, 1, decls) > 0)
1854 if (CompilerType type = ClangASTContext::GetTypeForDecl(decls[0]))
1856 return SBType(type);
1863 // No matches, search for basic typename matches
1864 ClangASTContext *clang_ast = target_sp->GetScratchClangASTContext();
1866 return SBType (ClangASTContext::GetBasicType (clang_ast->getASTContext(), const_typename));
1872 SBTarget::GetBasicType(lldb::BasicType type)
1874 TargetSP target_sp(GetSP());
1877 ClangASTContext *clang_ast = target_sp->GetScratchClangASTContext();
1879 return SBType (ClangASTContext::GetBasicType (clang_ast->getASTContext(), type));
1886 SBTarget::FindTypes (const char* typename_cstr)
1888 SBTypeList sb_type_list;
1889 TargetSP target_sp(GetSP());
1890 if (typename_cstr && typename_cstr[0] && target_sp)
1892 ModuleList& images = target_sp->GetImages();
1893 ConstString const_typename(typename_cstr);
1894 bool exact_match = false;
1898 uint32_t num_matches = images.FindTypes (sc,
1904 if (num_matches > 0)
1906 for (size_t idx = 0; idx < num_matches; idx++)
1908 TypeSP type_sp (type_list.GetTypeAtIndex(idx));
1910 sb_type_list.Append(SBType(type_sp));
1914 // Try the Objective-C runtime if one is installed
1916 ProcessSP process_sp(target_sp->GetProcessSP());
1920 ObjCLanguageRuntime *objc_language_runtime = process_sp->GetObjCLanguageRuntime();
1922 if (objc_language_runtime)
1924 DeclVendor *objc_decl_vendor = objc_language_runtime->GetDeclVendor();
1926 if (objc_decl_vendor)
1928 std::vector <clang::NamedDecl *> decls;
1930 if (objc_decl_vendor->FindDecls(const_typename, true, 1, decls) > 0)
1932 for (clang::NamedDecl *decl : decls)
1934 if (CompilerType type = ClangASTContext::GetTypeForDecl(decl))
1936 sb_type_list.Append(SBType(type));
1944 if (sb_type_list.GetSize() == 0)
1946 // No matches, search for basic typename matches
1947 ClangASTContext *clang_ast = target_sp->GetScratchClangASTContext();
1949 sb_type_list.Append (SBType (ClangASTContext::GetBasicType (clang_ast->getASTContext(), const_typename)));
1952 return sb_type_list;
1956 SBTarget::FindGlobalVariables (const char *name, uint32_t max_matches)
1958 SBValueList sb_value_list;
1960 TargetSP target_sp(GetSP());
1961 if (name && target_sp)
1963 VariableList variable_list;
1964 const bool append = true;
1965 const uint32_t match_count = target_sp->GetImages().FindGlobalVariables (ConstString (name),
1970 if (match_count > 0)
1972 ExecutionContextScope *exe_scope = target_sp->GetProcessSP().get();
1973 if (exe_scope == NULL)
1974 exe_scope = target_sp.get();
1975 for (uint32_t i=0; i<match_count; ++i)
1977 lldb::ValueObjectSP valobj_sp (ValueObjectVariable::Create (exe_scope, variable_list.GetVariableAtIndex(i)));
1979 sb_value_list.Append(SBValue(valobj_sp));
1984 return sb_value_list;
1988 SBTarget::FindGlobalVariables(const char *name, uint32_t max_matches, MatchType matchtype)
1990 SBValueList sb_value_list;
1992 TargetSP target_sp(GetSP());
1993 if (name && target_sp)
1995 VariableList variable_list;
1996 const bool append = true;
1998 std::string regexstr;
1999 uint32_t match_count;
2002 case eMatchTypeNormal:
2003 match_count = target_sp->GetImages().FindGlobalVariables(ConstString(name),
2008 case eMatchTypeRegex:
2009 match_count = target_sp->GetImages().FindGlobalVariables(RegularExpression(name),
2014 case eMatchTypeStartsWith:
2015 regexstr = llvm::Regex::escape(name) + ".*";
2016 match_count = target_sp->GetImages().FindGlobalVariables(RegularExpression(regexstr.c_str()),
2024 if (match_count > 0)
2026 ExecutionContextScope *exe_scope = target_sp->GetProcessSP().get();
2027 if (exe_scope == NULL)
2028 exe_scope = target_sp.get();
2029 for (uint32_t i = 0; i<match_count; ++i)
2031 lldb::ValueObjectSP valobj_sp(ValueObjectVariable::Create(exe_scope, variable_list.GetVariableAtIndex(i)));
2033 sb_value_list.Append(SBValue(valobj_sp));
2038 return sb_value_list;
2043 SBTarget::FindFirstGlobalVariable (const char* name)
2045 SBValueList sb_value_list(FindGlobalVariables(name, 1));
2046 if (sb_value_list.IsValid() && sb_value_list.GetSize() > 0)
2047 return sb_value_list.GetValueAtIndex(0);
2052 SBTarget::GetSourceManager()
2054 SBSourceManager source_manager (*this);
2055 return source_manager;
2058 lldb::SBInstructionList
2059 SBTarget::ReadInstructions (lldb::SBAddress base_addr, uint32_t count)
2061 return ReadInstructions (base_addr, count, NULL);
2064 lldb::SBInstructionList
2065 SBTarget::ReadInstructions (lldb::SBAddress base_addr, uint32_t count, const char *flavor_string)
2067 SBInstructionList sb_instructions;
2069 TargetSP target_sp(GetSP());
2072 Address *addr_ptr = base_addr.get();
2076 DataBufferHeap data (target_sp->GetArchitecture().GetMaximumOpcodeByteSize() * count, 0);
2077 bool prefer_file_cache = false;
2078 lldb_private::Error error;
2079 lldb::addr_t load_addr = LLDB_INVALID_ADDRESS;
2080 const size_t bytes_read = target_sp->ReadMemory(*addr_ptr,
2086 const bool data_from_file = load_addr == LLDB_INVALID_ADDRESS;
2087 sb_instructions.SetDisassembler (Disassembler::DisassembleBytes (target_sp->GetArchitecture(),
2098 return sb_instructions;
2102 lldb::SBInstructionList
2103 SBTarget::GetInstructions (lldb::SBAddress base_addr, const void *buf, size_t size)
2105 return GetInstructionsWithFlavor (base_addr, NULL, buf, size);
2108 lldb::SBInstructionList
2109 SBTarget::GetInstructionsWithFlavor (lldb::SBAddress base_addr, const char *flavor_string, const void *buf, size_t size)
2111 SBInstructionList sb_instructions;
2113 TargetSP target_sp(GetSP());
2118 if (base_addr.get())
2119 addr = *base_addr.get();
2121 const bool data_from_file = true;
2123 sb_instructions.SetDisassembler (Disassembler::DisassembleBytes (target_sp->GetArchitecture(),
2133 return sb_instructions;
2136 lldb::SBInstructionList
2137 SBTarget::GetInstructions (lldb::addr_t base_addr, const void *buf, size_t size)
2139 return GetInstructionsWithFlavor (ResolveLoadAddress(base_addr), NULL, buf, size);
2142 lldb::SBInstructionList
2143 SBTarget::GetInstructionsWithFlavor (lldb::addr_t base_addr, const char *flavor_string, const void *buf, size_t size)
2145 return GetInstructionsWithFlavor (ResolveLoadAddress(base_addr), flavor_string, buf, size);
2149 SBTarget::SetSectionLoadAddress (lldb::SBSection section,
2150 lldb::addr_t section_base_addr)
2153 TargetSP target_sp(GetSP());
2156 if (!section.IsValid())
2158 sb_error.SetErrorStringWithFormat ("invalid section");
2162 SectionSP section_sp (section.GetSP());
2165 if (section_sp->IsThreadSpecific())
2167 sb_error.SetErrorString ("thread specific sections are not yet supported");
2171 ProcessSP process_sp (target_sp->GetProcessSP());
2172 if (target_sp->SetSectionLoadAddress (section_sp, section_base_addr))
2174 // Flush info in the process (stack frames, etc)
2176 process_sp->Flush();
2184 sb_error.SetErrorString ("invalid target");
2190 SBTarget::ClearSectionLoadAddress (lldb::SBSection section)
2194 TargetSP target_sp(GetSP());
2197 if (!section.IsValid())
2199 sb_error.SetErrorStringWithFormat ("invalid section");
2203 ProcessSP process_sp (target_sp->GetProcessSP());
2204 if (target_sp->SetSectionUnloaded (section.GetSP()))
2206 // Flush info in the process (stack frames, etc)
2208 process_sp->Flush();
2214 sb_error.SetErrorStringWithFormat ("invalid target");
2220 SBTarget::SetModuleLoadAddress (lldb::SBModule module, int64_t slide_offset)
2224 TargetSP target_sp(GetSP());
2227 ModuleSP module_sp (module.GetSP());
2230 bool changed = false;
2231 if (module_sp->SetLoadAddress (*target_sp, slide_offset, true, changed))
2233 // The load was successful, make sure that at least some sections
2234 // changed before we notify that our module was loaded.
2237 ModuleList module_list;
2238 module_list.Append(module_sp);
2239 target_sp->ModulesDidLoad (module_list);
2240 // Flush info in the process (stack frames, etc)
2241 ProcessSP process_sp (target_sp->GetProcessSP());
2243 process_sp->Flush();
2249 sb_error.SetErrorStringWithFormat ("invalid module");
2255 sb_error.SetErrorStringWithFormat ("invalid target");
2261 SBTarget::ClearModuleLoadAddress (lldb::SBModule module)
2265 char path[PATH_MAX];
2266 TargetSP target_sp(GetSP());
2269 ModuleSP module_sp (module.GetSP());
2272 ObjectFile *objfile = module_sp->GetObjectFile();
2275 SectionList *section_list = objfile->GetSectionList();
2278 ProcessSP process_sp (target_sp->GetProcessSP());
2280 bool changed = false;
2281 const size_t num_sections = section_list->GetSize();
2282 for (size_t sect_idx = 0; sect_idx < num_sections; ++sect_idx)
2284 SectionSP section_sp (section_list->GetSectionAtIndex(sect_idx));
2286 changed |= target_sp->SetSectionUnloaded (section_sp);
2290 // Flush info in the process (stack frames, etc)
2291 ProcessSP process_sp (target_sp->GetProcessSP());
2293 process_sp->Flush();
2298 module_sp->GetFileSpec().GetPath (path, sizeof(path));
2299 sb_error.SetErrorStringWithFormat ("no sections in object file '%s'", path);
2304 module_sp->GetFileSpec().GetPath (path, sizeof(path));
2305 sb_error.SetErrorStringWithFormat ("no object file for module '%s'", path);
2310 sb_error.SetErrorStringWithFormat ("invalid module");
2315 sb_error.SetErrorStringWithFormat ("invalid target");
2321 lldb::SBSymbolContextList
2322 SBTarget::FindSymbols (const char *name, lldb::SymbolType symbol_type)
2324 SBSymbolContextList sb_sc_list;
2325 if (name && name[0])
2327 TargetSP target_sp(GetSP());
2331 target_sp->GetImages().FindSymbolsWithNameAndType (ConstString(name),
2342 SBTarget::EvaluateExpression (const char *expr)
2344 TargetSP target_sp(GetSP());
2348 SBExpressionOptions options;
2349 lldb::DynamicValueType fetch_dynamic_value = target_sp->GetPreferDynamicValue();
2350 options.SetFetchDynamicValue (fetch_dynamic_value);
2351 options.SetUnwindOnError (true);
2352 return EvaluateExpression(expr, options);
2356 SBTarget::EvaluateExpression (const char *expr, const SBExpressionOptions &options)
2358 Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2359 Log * expr_log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
2360 SBValue expr_result;
2361 ExpressionResults exe_results = eExpressionSetupError;
2362 ValueObjectSP expr_value_sp;
2363 TargetSP target_sp(GetSP());
2364 StackFrame *frame = NULL;
2367 if (expr == NULL || expr[0] == '\0')
2370 log->Printf ("SBTarget::EvaluateExpression called with an empty expression");
2374 Mutex::Locker api_locker (target_sp->GetAPIMutex());
2375 ExecutionContext exe_ctx (m_opaque_sp.get());
2378 log->Printf ("SBTarget()::EvaluateExpression (expr=\"%s\")...", expr);
2380 frame = exe_ctx.GetFramePtr();
2381 Target *target = exe_ctx.GetTargetPtr();
2385 #ifdef LLDB_CONFIGURATION_DEBUG
2386 StreamString frame_description;
2388 frame->DumpUsingSettingsFormat (&frame_description);
2389 Host::SetCrashDescriptionWithFormat ("SBTarget::EvaluateExpression (expr = \"%s\", fetch_dynamic_value = %u) %s",
2390 expr, options.GetFetchDynamicValue(), frame_description.GetString().c_str());
2392 exe_results = target->EvaluateExpression (expr,
2397 expr_result.SetSP(expr_value_sp, options.GetFetchDynamicValue());
2398 #ifdef LLDB_CONFIGURATION_DEBUG
2399 Host::SetCrashDescription (NULL);
2405 log->Printf ("SBTarget::EvaluateExpression () => error: could not reconstruct frame object for this SBTarget.");
2408 #ifndef LLDB_DISABLE_PYTHON
2410 expr_log->Printf("** [SBTarget::EvaluateExpression] Expression result is %s, summary %s **",
2411 expr_result.GetValue(), expr_result.GetSummary());
2414 log->Printf ("SBTarget(%p)::EvaluateExpression (expr=\"%s\") => SBValue(%p) (execution result=%d)",
2415 static_cast<void*>(frame), expr,
2416 static_cast<void*>(expr_value_sp.get()), exe_results);
2424 SBTarget::GetStackRedZoneSize()
2426 TargetSP target_sp(GetSP());
2430 ProcessSP process_sp (target_sp->GetProcessSP());
2432 abi_sp = process_sp->GetABI();
2434 abi_sp = ABI::FindPlugin(target_sp->GetArchitecture());
2436 return abi_sp->GetRedZoneSize();
2442 SBTarget::GetLaunchInfo () const
2444 lldb::SBLaunchInfo launch_info(NULL);
2445 TargetSP target_sp(GetSP());
2447 launch_info.ref() = m_opaque_sp->GetProcessLaunchInfo();
2452 SBTarget::SetLaunchInfo (const lldb::SBLaunchInfo &launch_info)
2454 TargetSP target_sp(GetSP());
2456 m_opaque_sp->SetProcessLaunchInfo(launch_info.ref());