diff options
Diffstat (limited to 'lldb/source/Target/TargetList.cpp')
| -rw-r--r-- | lldb/source/Target/TargetList.cpp | 436 |
1 files changed, 0 insertions, 436 deletions
diff --git a/lldb/source/Target/TargetList.cpp b/lldb/source/Target/TargetList.cpp deleted file mode 100644 index d9879139dc5f..000000000000 --- a/lldb/source/Target/TargetList.cpp +++ /dev/null @@ -1,436 +0,0 @@ -//===-- TargetList.cpp ------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// C Includes -// C++ Includes -// Other libraries and framework includes -// Project includes -#include "lldb/Core/Broadcaster.h" -#include "lldb/Core/Debugger.h" -#include "lldb/Core/Event.h" -#include "lldb/Core/State.h" -#include "lldb/Core/Timer.h" -#include "lldb/Host/Host.h" -#include "lldb/Interpreter/CommandInterpreter.h" -#include "lldb/Interpreter/OptionGroupPlatform.h" -#include "lldb/Target/Platform.h" -#include "lldb/Target/Process.h" -#include "lldb/Target/TargetList.h" - -using namespace lldb; -using namespace lldb_private; - -ConstString & -TargetList::GetStaticBroadcasterClass () -{ - static ConstString class_name ("lldb.targetList"); - return class_name; -} - -//---------------------------------------------------------------------- -// TargetList constructor -//---------------------------------------------------------------------- -TargetList::TargetList(Debugger &debugger) : - Broadcaster(&debugger, "TargetList"), - m_target_list(), - m_target_list_mutex (Mutex::eMutexTypeRecursive), - m_selected_target_idx (0) -{ - CheckInWithManager(); -} - -//---------------------------------------------------------------------- -// Destructor -//---------------------------------------------------------------------- -TargetList::~TargetList() -{ - Mutex::Locker locker(m_target_list_mutex); - m_target_list.clear(); -} - -Error -TargetList::CreateTarget (Debugger &debugger, - const FileSpec& file, - const char *triple_cstr, - bool get_dependent_files, - const OptionGroupPlatform *platform_options, - TargetSP &target_sp) -{ - Error error; - PlatformSP platform_sp; - - // This is purposely left empty unless it is specified by triple_cstr. - // If not initialized via triple_cstr, then the currently selected platform - // will set the architecture correctly. - ArchSpec arch; - - if (triple_cstr) - { - arch.SetTriple(triple_cstr, platform_sp.get()); - if (!arch.IsValid()) - { - error.SetErrorStringWithFormat("invalid triple '%s'", triple_cstr); - return error; - } - } - - CommandInterpreter &interpreter = debugger.GetCommandInterpreter(); - if (platform_options) - { - if (platform_options->PlatformWasSpecified ()) - { - const bool select_platform = true; - platform_sp = platform_options->CreatePlatformWithOptions (interpreter, - arch, - select_platform, - error); - if (!platform_sp) - return error; - } - } - - if (!platform_sp) - { - // Get the current platform and make sure it is compatible with the - // current architecture if we have a valid architecture. - platform_sp = debugger.GetPlatformList().GetSelectedPlatform (); - - if (arch.IsValid() && !platform_sp->IsCompatibleWithArchitecture(arch)) - { - platform_sp = Platform::GetPlatformForArchitecture(arch); - } - } - - error = TargetList::CreateTarget (debugger, - file, - arch, - get_dependent_files, - platform_sp, - target_sp); - - if (target_sp) - { - if (file.GetDirectory()) - { - FileSpec file_dir; - file_dir.GetDirectory() = file.GetDirectory(); - target_sp->GetExecutableSearchPaths ().Append (file_dir); - } - } - return error; -} - -Error -TargetList::CreateTarget -( - Debugger &debugger, - const FileSpec& file, - const ArchSpec& arch, - bool get_dependent_files, - PlatformSP &platform_sp, - TargetSP &target_sp -) -{ - Timer scoped_timer (__PRETTY_FUNCTION__, - "TargetList::CreateTarget (file = '%s/%s', arch = '%s')", - file.GetDirectory().AsCString(), - file.GetFilename().AsCString(), - arch.GetArchitectureName()); - Error error; - - - if (file) - { - ModuleSP exe_module_sp; - FileSpec resolved_file(file); - - if (platform_sp) - { - FileSpecList executable_search_paths (Target::GetDefaultExecutableSearchPaths()); - error = platform_sp->ResolveExecutable (file, arch, - exe_module_sp, - executable_search_paths.GetSize() ? &executable_search_paths : NULL); - - if (exe_module_sp) - { - const ArchSpec &arch = exe_module_sp->GetArchitecture(); - if (arch.IsValid() && !platform_sp->IsCompatibleWithArchitecture(arch)) - platform_sp = Platform::GetPlatformForArchitecture(arch); - } - } - - if (error.Success() && exe_module_sp) - { - if (exe_module_sp->GetObjectFile() == NULL) - { - if (arch.IsValid()) - { - error.SetErrorStringWithFormat("\"%s%s%s\" doesn't contain architecture %s", - file.GetDirectory().AsCString(), - file.GetDirectory() ? "/" : "", - file.GetFilename().AsCString(), - arch.GetArchitectureName()); - } - else - { - error.SetErrorStringWithFormat("unsupported file type \"%s%s%s\"", - file.GetDirectory().AsCString(), - file.GetDirectory() ? "/" : "", - file.GetFilename().AsCString()); - } - return error; - } - target_sp.reset(new Target(debugger, arch, platform_sp)); - target_sp->SetExecutableModule (exe_module_sp, get_dependent_files); - } - } - else - { - // No file was specified, just create an empty target with any arch - // if a valid arch was specified - target_sp.reset(new Target(debugger, arch, platform_sp)); - } - - if (target_sp) - { - target_sp->UpdateInstanceName(); - - Mutex::Locker locker(m_target_list_mutex); - m_selected_target_idx = m_target_list.size(); - m_target_list.push_back(target_sp); - } - - return error; -} - -bool -TargetList::DeleteTarget (TargetSP &target_sp) -{ - Mutex::Locker locker(m_target_list_mutex); - collection::iterator pos, end = m_target_list.end(); - - for (pos = m_target_list.begin(); pos != end; ++pos) - { - if (pos->get() == target_sp.get()) - { - m_target_list.erase(pos); - return true; - } - } - return false; -} - - -TargetSP -TargetList::FindTargetWithExecutableAndArchitecture -( - const FileSpec &exe_file_spec, - const ArchSpec *exe_arch_ptr -) const -{ - Mutex::Locker locker (m_target_list_mutex); - TargetSP target_sp; - bool full_match = exe_file_spec.GetDirectory(); - - collection::const_iterator pos, end = m_target_list.end(); - for (pos = m_target_list.begin(); pos != end; ++pos) - { - Module *exe_module = (*pos)->GetExecutableModulePointer(); - - if (exe_module) - { - if (FileSpec::Equal (exe_file_spec, exe_module->GetFileSpec(), full_match)) - { - if (exe_arch_ptr) - { - if (*exe_arch_ptr != exe_module->GetArchitecture()) - continue; - } - target_sp = *pos; - break; - } - } - } - return target_sp; -} - -TargetSP -TargetList::FindTargetWithProcessID (lldb::pid_t pid) const -{ - Mutex::Locker locker(m_target_list_mutex); - TargetSP target_sp; - collection::const_iterator pos, end = m_target_list.end(); - for (pos = m_target_list.begin(); pos != end; ++pos) - { - Process* process = (*pos)->GetProcessSP().get(); - if (process && process->GetID() == pid) - { - target_sp = *pos; - break; - } - } - return target_sp; -} - - -TargetSP -TargetList::FindTargetWithProcess (Process *process) const -{ - TargetSP target_sp; - if (process) - { - Mutex::Locker locker(m_target_list_mutex); - collection::const_iterator pos, end = m_target_list.end(); - for (pos = m_target_list.begin(); pos != end; ++pos) - { - if (process == (*pos)->GetProcessSP().get()) - { - target_sp = *pos; - break; - } - } - } - return target_sp; -} - -TargetSP -TargetList::GetTargetSP (Target *target) const -{ - TargetSP target_sp; - if (target) - { - Mutex::Locker locker(m_target_list_mutex); - collection::const_iterator pos, end = m_target_list.end(); - for (pos = m_target_list.begin(); pos != end; ++pos) - { - if (target == (*pos).get()) - { - target_sp = *pos; - break; - } - } - } - return target_sp; -} - -uint32_t -TargetList::SendAsyncInterrupt (lldb::pid_t pid) -{ - uint32_t num_async_interrupts_sent = 0; - - if (pid != LLDB_INVALID_PROCESS_ID) - { - TargetSP target_sp(FindTargetWithProcessID (pid)); - if (target_sp.get()) - { - Process* process = target_sp->GetProcessSP().get(); - if (process) - { - process->BroadcastEvent (Process::eBroadcastBitInterrupt, NULL); - ++num_async_interrupts_sent; - } - } - } - else - { - // We don't have a valid pid to broadcast to, so broadcast to the target - // list's async broadcaster... - BroadcastEvent (Process::eBroadcastBitInterrupt, NULL); - } - - return num_async_interrupts_sent; -} - -uint32_t -TargetList::SignalIfRunning (lldb::pid_t pid, int signo) -{ - uint32_t num_signals_sent = 0; - Process *process = NULL; - if (pid == LLDB_INVALID_PROCESS_ID) - { - // Signal all processes with signal - Mutex::Locker locker(m_target_list_mutex); - collection::iterator pos, end = m_target_list.end(); - for (pos = m_target_list.begin(); pos != end; ++pos) - { - process = (*pos)->GetProcessSP().get(); - if (process) - { - if (process->IsAlive()) - { - ++num_signals_sent; - process->Signal (signo); - } - } - } - } - else - { - // Signal a specific process with signal - TargetSP target_sp(FindTargetWithProcessID (pid)); - if (target_sp.get()) - { - process = target_sp->GetProcessSP().get(); - if (process) - { - if (process->IsAlive()) - { - ++num_signals_sent; - process->Signal (signo); - } - } - } - } - return num_signals_sent; -} - -int -TargetList::GetNumTargets () const -{ - Mutex::Locker locker (m_target_list_mutex); - return m_target_list.size(); -} - -lldb::TargetSP -TargetList::GetTargetAtIndex (uint32_t idx) const -{ - TargetSP target_sp; - Mutex::Locker locker (m_target_list_mutex); - if (idx < m_target_list.size()) - target_sp = m_target_list[idx]; - return target_sp; -} - -uint32_t -TargetList::SetSelectedTarget (Target* target) -{ - Mutex::Locker locker (m_target_list_mutex); - collection::const_iterator pos, - begin = m_target_list.begin(), - end = m_target_list.end(); - for (pos = begin; pos != end; ++pos) - { - if (pos->get() == target) - { - m_selected_target_idx = std::distance (begin, pos); - return m_selected_target_idx; - } - } - m_selected_target_idx = 0; - return m_selected_target_idx; -} - -lldb::TargetSP -TargetList::GetSelectedTarget () -{ - Mutex::Locker locker (m_target_list_mutex); - if (m_selected_target_idx >= m_target_list.size()) - m_selected_target_idx = 0; - return GetTargetAtIndex (m_selected_target_idx); -} |
