130fdc8d8SChris Lattner //===-- SBDebugger.cpp ------------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 10ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h" 1130fdc8d8SChris Lattner 12e0d378b3SGreg Clayton #include "lldb/lldb-private.h" 1330fdc8d8SChris Lattner 14ca93cc1dSEli Friedman #include "lldb/API/SBListener.h" 15ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h" 16ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h" 17ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h" 182289fa48SGreg Clayton #include "lldb/API/SBError.h" 19ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h" 20ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h" 21ca93cc1dSEli Friedman #include "lldb/API/SBInputReader.h" 223df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h" 233df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h" 24dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 253df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h" 263df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h" 273df9a8dfSCaroline Tice #include "lldb/API/SBThread.h" 286eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h" 296eee5aa0SGreg Clayton #include "lldb/Core/State.h" 306eee5aa0SGreg Clayton #include "lldb/Interpreter/Args.h" 316eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h" 326eee5aa0SGreg Clayton #include "lldb/Target/Process.h" 336eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h" 3430fdc8d8SChris Lattner 3530fdc8d8SChris Lattner using namespace lldb; 3630fdc8d8SChris Lattner using namespace lldb_private; 3730fdc8d8SChris Lattner 3830fdc8d8SChris Lattner void 3930fdc8d8SChris Lattner SBDebugger::Initialize () 4030fdc8d8SChris Lattner { 41431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 42ceb6b139SCaroline Tice 43ceb6b139SCaroline Tice if (log) 44ceb6b139SCaroline Tice log->Printf ("SBDebugger::Initialize ()"); 45ceb6b139SCaroline Tice 46fc36f791SGreg Clayton SBCommandInterpreter::InitializeSWIG (); 47fc36f791SGreg Clayton 4830fdc8d8SChris Lattner Debugger::Initialize(); 4930fdc8d8SChris Lattner } 5030fdc8d8SChris Lattner 5130fdc8d8SChris Lattner void 5230fdc8d8SChris Lattner SBDebugger::Terminate () 5330fdc8d8SChris Lattner { 5430fdc8d8SChris Lattner Debugger::Terminate(); 5530fdc8d8SChris Lattner } 5630fdc8d8SChris Lattner 5748e42549SGreg Clayton void 5848e42549SGreg Clayton SBDebugger::Clear () 5948e42549SGreg Clayton { 60431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 61ceb6b139SCaroline Tice 62ceb6b139SCaroline Tice if (log) 6393aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get()); 643d6086f6SCaroline Tice 653d6086f6SCaroline Tice if (m_opaque_sp) 663d6086f6SCaroline Tice m_opaque_sp->CleanUpInputReaders (); 67ceb6b139SCaroline Tice 6848e42549SGreg Clayton m_opaque_sp.reset(); 6948e42549SGreg Clayton } 7048e42549SGreg Clayton 716611103cSGreg Clayton SBDebugger 726611103cSGreg Clayton SBDebugger::Create() 736611103cSGreg Clayton { 74*66243847SJim Ingham return SBDebugger::Create(false); 7506942690SJim Ingham } 7606942690SJim Ingham 7706942690SJim Ingham SBDebugger 7806942690SJim Ingham SBDebugger::Create(bool source_init_files) 7906942690SJim Ingham { 80431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 81ceb6b139SCaroline Tice 826611103cSGreg Clayton SBDebugger debugger; 836611103cSGreg Clayton debugger.reset(Debugger::CreateInstance()); 84ceb6b139SCaroline Tice 85ceb6b139SCaroline Tice if (log) 86ceb6b139SCaroline Tice { 87ceb6b139SCaroline Tice SBStream sstr; 88ceb6b139SCaroline Tice debugger.GetDescription (sstr); 8993aa84e8SGreg Clayton log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 90ceb6b139SCaroline Tice } 91ceb6b139SCaroline Tice 9206942690SJim Ingham SBCommandInterpreter interp = debugger.GetCommandInterpreter(); 9306942690SJim Ingham if (source_init_files) 9406942690SJim Ingham { 9506942690SJim Ingham interp.get()->SkipLLDBInitFiles(false); 9606942690SJim Ingham interp.get()->SkipAppInitFiles (false); 9706942690SJim Ingham SBCommandReturnObject result; 9806942690SJim Ingham interp.SourceInitFileInHomeDirectory(result); 9906942690SJim Ingham } 10006942690SJim Ingham else 10106942690SJim Ingham { 10206942690SJim Ingham interp.get()->SkipLLDBInitFiles(true); 10306942690SJim Ingham interp.get()->SkipAppInitFiles (true); 10406942690SJim Ingham } 1056611103cSGreg Clayton return debugger; 1066611103cSGreg Clayton } 1076611103cSGreg Clayton 108e02657b1SCaroline Tice void 109e02657b1SCaroline Tice SBDebugger::Destroy (SBDebugger &debugger) 110e02657b1SCaroline Tice { 111431ce678SGreg Clayton LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 112e02657b1SCaroline Tice 113e02657b1SCaroline Tice if (log) 114e02657b1SCaroline Tice { 115e02657b1SCaroline Tice SBStream sstr; 116e02657b1SCaroline Tice debugger.GetDescription (sstr); 117e02657b1SCaroline Tice log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData()); 118e02657b1SCaroline Tice } 119e02657b1SCaroline Tice 120e02657b1SCaroline Tice Debugger::Destroy (debugger.m_opaque_sp); 121e02657b1SCaroline Tice 122e02657b1SCaroline Tice if (debugger.m_opaque_sp.get() != NULL) 123e02657b1SCaroline Tice debugger.m_opaque_sp.reset(); 124e02657b1SCaroline Tice } 125e02657b1SCaroline Tice 1266611103cSGreg Clayton SBDebugger::SBDebugger () : 1276611103cSGreg Clayton m_opaque_sp () 1286611103cSGreg Clayton { 1296611103cSGreg Clayton } 1306611103cSGreg Clayton 131efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) : 132efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 133efabb123SGreg Clayton { 134efabb123SGreg Clayton } 135efabb123SGreg Clayton 136efabb123SGreg Clayton SBDebugger & 137efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs) 138efabb123SGreg Clayton { 139efabb123SGreg Clayton if (this != &rhs) 140efabb123SGreg Clayton { 141efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 142efabb123SGreg Clayton } 143efabb123SGreg Clayton return *this; 144efabb123SGreg Clayton } 145efabb123SGreg Clayton 1466611103cSGreg Clayton SBDebugger::~SBDebugger () 1476611103cSGreg Clayton { 1486611103cSGreg Clayton } 1496611103cSGreg Clayton 1506611103cSGreg Clayton bool 1516611103cSGreg Clayton SBDebugger::IsValid() const 1526611103cSGreg Clayton { 1536611103cSGreg Clayton return m_opaque_sp.get() != NULL; 1546611103cSGreg Clayton } 1556611103cSGreg Clayton 1566611103cSGreg Clayton 15730fdc8d8SChris Lattner void 15830fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 15930fdc8d8SChris Lattner { 1606611103cSGreg Clayton if (m_opaque_sp) 1616611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 16230fdc8d8SChris Lattner } 16330fdc8d8SChris Lattner 1646eee5aa0SGreg Clayton void 1656eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 1666eee5aa0SGreg Clayton { 1676eee5aa0SGreg Clayton if (m_opaque_sp) 1686eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 1696eee5aa0SGreg Clayton } 1706eee5aa0SGreg Clayton 17116e0c686SJim Ingham void 17216e0c686SJim Ingham SBDebugger::SkipAppInitFiles (bool b) 17316e0c686SJim Ingham { 17416e0c686SJim Ingham if (m_opaque_sp) 17516e0c686SJim Ingham m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b); 17616e0c686SJim Ingham } 17716e0c686SJim Ingham 17830fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 17930fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 18030fdc8d8SChris Lattner void 18130fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 18230fdc8d8SChris Lattner { 183431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 184ceb6b139SCaroline Tice 185ceb6b139SCaroline Tice if (log) 186cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 187cfd1acedSGreg Clayton fh, transfer_ownership); 188ceb6b139SCaroline Tice 1896611103cSGreg Clayton if (m_opaque_sp) 1906611103cSGreg Clayton m_opaque_sp->SetInputFileHandle (fh, transfer_ownership); 19130fdc8d8SChris Lattner } 19230fdc8d8SChris Lattner 19330fdc8d8SChris Lattner void 19430fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 19530fdc8d8SChris Lattner { 196431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 197ceb6b139SCaroline Tice 198ceb6b139SCaroline Tice 199ceb6b139SCaroline Tice if (log) 200cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 201cfd1acedSGreg Clayton fh, transfer_ownership); 202ceb6b139SCaroline Tice 2036611103cSGreg Clayton if (m_opaque_sp) 2046611103cSGreg Clayton m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership); 20530fdc8d8SChris Lattner } 20630fdc8d8SChris Lattner 20730fdc8d8SChris Lattner void 20830fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 20930fdc8d8SChris Lattner { 210431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 211ceb6b139SCaroline Tice 212ceb6b139SCaroline Tice 213ceb6b139SCaroline Tice if (log) 214cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 215cfd1acedSGreg Clayton fh, transfer_ownership); 216ceb6b139SCaroline Tice 2176611103cSGreg Clayton if (m_opaque_sp) 2186611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 21930fdc8d8SChris Lattner } 22030fdc8d8SChris Lattner 22130fdc8d8SChris Lattner FILE * 22230fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 22330fdc8d8SChris Lattner { 2246611103cSGreg Clayton if (m_opaque_sp) 22551b1e2d2SGreg Clayton return m_opaque_sp->GetInputFile().GetStream(); 2266611103cSGreg Clayton return NULL; 22730fdc8d8SChris Lattner } 22830fdc8d8SChris Lattner 22930fdc8d8SChris Lattner FILE * 23030fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 23130fdc8d8SChris Lattner { 2326611103cSGreg Clayton if (m_opaque_sp) 23351b1e2d2SGreg Clayton return m_opaque_sp->GetOutputFile().GetStream(); 2346611103cSGreg Clayton return NULL; 23530fdc8d8SChris Lattner } 23630fdc8d8SChris Lattner 23730fdc8d8SChris Lattner FILE * 23830fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 23930fdc8d8SChris Lattner { 2406611103cSGreg Clayton if (m_opaque_sp) 24151b1e2d2SGreg Clayton return m_opaque_sp->GetErrorFile().GetStream(); 2426611103cSGreg Clayton return NULL; 24330fdc8d8SChris Lattner } 24430fdc8d8SChris Lattner 24530fdc8d8SChris Lattner SBCommandInterpreter 24630fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 24730fdc8d8SChris Lattner { 248431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 249ceb6b139SCaroline Tice 2506611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 2516611103cSGreg Clayton if (m_opaque_sp) 2526611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 253ceb6b139SCaroline Tice 254750cd175SCaroline Tice if (log) 25593aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)", 256750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 257750cd175SCaroline Tice 25830fdc8d8SChris Lattner return sb_interpreter; 25930fdc8d8SChris Lattner } 26030fdc8d8SChris Lattner 26130fdc8d8SChris Lattner void 26230fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 26330fdc8d8SChris Lattner { 2646611103cSGreg Clayton if (m_opaque_sp) 2656611103cSGreg Clayton { 266af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 267af67cecdSGreg Clayton Mutex::Locker api_locker; 268af67cecdSGreg Clayton if (target_sp) 269af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 270af67cecdSGreg Clayton 2716611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 27230fdc8d8SChris Lattner SBCommandReturnObject result; 27330fdc8d8SChris Lattner 27430fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 27530fdc8d8SChris Lattner 27630fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 27730fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 27830fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 27930fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 28030fdc8d8SChris Lattner 2816611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 28230fdc8d8SChris Lattner { 2836611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 28430fdc8d8SChris Lattner if (process.IsValid()) 28530fdc8d8SChris Lattner { 28630fdc8d8SChris Lattner EventSP event_sp; 2876611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 28830fdc8d8SChris Lattner while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp)) 28930fdc8d8SChris Lattner { 29030fdc8d8SChris Lattner SBEvent event(event_sp); 29130fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 29230fdc8d8SChris Lattner } 29330fdc8d8SChris Lattner } 29430fdc8d8SChris Lattner } 29530fdc8d8SChris Lattner } 2966611103cSGreg Clayton } 29730fdc8d8SChris Lattner 29830fdc8d8SChris Lattner SBListener 29930fdc8d8SChris Lattner SBDebugger::GetListener () 30030fdc8d8SChris Lattner { 301431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 302ceb6b139SCaroline Tice 3036611103cSGreg Clayton SBListener sb_listener; 3046611103cSGreg Clayton if (m_opaque_sp) 3056611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 306ceb6b139SCaroline Tice 307750cd175SCaroline Tice if (log) 30893aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(), 309750cd175SCaroline Tice sb_listener.get()); 310750cd175SCaroline Tice 31130fdc8d8SChris Lattner return sb_listener; 31230fdc8d8SChris Lattner } 31330fdc8d8SChris Lattner 31430fdc8d8SChris Lattner void 31530fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 31630fdc8d8SChris Lattner { 317af67cecdSGreg Clayton if (!process.IsValid()) 318af67cecdSGreg Clayton return; 319af67cecdSGreg Clayton 32030fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 32130fdc8d8SChris Lattner char stdio_buffer[1024]; 32230fdc8d8SChris Lattner size_t len; 32330fdc8d8SChris Lattner 324af67cecdSGreg Clayton Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex()); 325af67cecdSGreg Clayton 326af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) 32730fdc8d8SChris Lattner { 328af67cecdSGreg Clayton // Drain stdout when we stop just in case we have any bytes 32930fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 33030fdc8d8SChris Lattner if (out != NULL) 33130fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 33230fdc8d8SChris Lattner } 333af67cecdSGreg Clayton 334af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) 33530fdc8d8SChris Lattner { 336af67cecdSGreg Clayton // Drain stderr when we stop just in case we have any bytes 33730fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 338af67cecdSGreg Clayton if (err != NULL) 339af67cecdSGreg Clayton ::fwrite (stdio_buffer, 1, len, err); 34030fdc8d8SChris Lattner } 341af67cecdSGreg Clayton 342af67cecdSGreg Clayton if (event_type & Process::eBroadcastBitStateChanged) 34330fdc8d8SChris Lattner { 34430fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent (event); 34530fdc8d8SChris Lattner 34630fdc8d8SChris Lattner if (event_state == eStateInvalid) 34730fdc8d8SChris Lattner return; 34830fdc8d8SChris Lattner 34930fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 35030fdc8d8SChris Lattner if (!is_stopped) 3512976d00aSJim Ingham process.ReportEventState (event, out); 35230fdc8d8SChris Lattner } 35330fdc8d8SChris Lattner } 35430fdc8d8SChris Lattner 35530fdc8d8SChris Lattner SBSourceManager & 35630fdc8d8SChris Lattner SBDebugger::GetSourceManager () 35730fdc8d8SChris Lattner { 35830fdc8d8SChris Lattner static SourceManager g_lldb_source_manager; 359efabb123SGreg Clayton static SBSourceManager g_sb_source_manager (&g_lldb_source_manager); 36030fdc8d8SChris Lattner return g_sb_source_manager; 36130fdc8d8SChris Lattner } 36230fdc8d8SChris Lattner 36330fdc8d8SChris Lattner 36430fdc8d8SChris Lattner bool 36530fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 36630fdc8d8SChris Lattner { 36730fdc8d8SChris Lattner if (arch_name && arch_name_len) 36830fdc8d8SChris Lattner { 369431ce678SGreg Clayton ArchSpec default_arch = Target::GetDefaultArchitecture (); 370daccaa9eSCaroline Tice 37130fdc8d8SChris Lattner if (default_arch.IsValid()) 37230fdc8d8SChris Lattner { 373431ce678SGreg Clayton const std::string &triple_str = default_arch.GetTriple().str(); 374431ce678SGreg Clayton if (!triple_str.empty()) 375431ce678SGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str()); 376431ce678SGreg Clayton else 37764195a2cSGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName()); 37830fdc8d8SChris Lattner return true; 37930fdc8d8SChris Lattner } 38030fdc8d8SChris Lattner } 38130fdc8d8SChris Lattner if (arch_name && arch_name_len) 38230fdc8d8SChris Lattner arch_name[0] = '\0'; 38330fdc8d8SChris Lattner return false; 38430fdc8d8SChris Lattner } 38530fdc8d8SChris Lattner 38630fdc8d8SChris Lattner 38730fdc8d8SChris Lattner bool 38830fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 38930fdc8d8SChris Lattner { 39030fdc8d8SChris Lattner if (arch_name) 39130fdc8d8SChris Lattner { 392eb0103f2SGreg Clayton ArchSpec arch (arch_name, NULL); 39330fdc8d8SChris Lattner if (arch.IsValid()) 39430fdc8d8SChris Lattner { 395431ce678SGreg Clayton Target::SetDefaultArchitecture (arch); 39630fdc8d8SChris Lattner return true; 39730fdc8d8SChris Lattner } 39830fdc8d8SChris Lattner } 39930fdc8d8SChris Lattner return false; 40030fdc8d8SChris Lattner } 40130fdc8d8SChris Lattner 40230fdc8d8SChris Lattner ScriptLanguage 40330fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 40430fdc8d8SChris Lattner { 405af67cecdSGreg Clayton 40630fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 40730fdc8d8SChris Lattner eScriptLanguageDefault, 40830fdc8d8SChris Lattner NULL); 40930fdc8d8SChris Lattner } 41030fdc8d8SChris Lattner 41130fdc8d8SChris Lattner const char * 41230fdc8d8SChris Lattner SBDebugger::GetVersionString () 41330fdc8d8SChris Lattner { 414431ce678SGreg Clayton return GetVersion(); 41530fdc8d8SChris Lattner } 41630fdc8d8SChris Lattner 41730fdc8d8SChris Lattner const char * 418431ce678SGreg Clayton SBDebugger::StateAsCString (StateType state) 41930fdc8d8SChris Lattner { 420c2bbb49aSCaroline Tice return lldb_private::StateAsCString (state); 42130fdc8d8SChris Lattner } 42230fdc8d8SChris Lattner 42330fdc8d8SChris Lattner bool 424431ce678SGreg Clayton SBDebugger::StateIsRunningState (StateType state) 42530fdc8d8SChris Lattner { 426431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4274838131bSGreg Clayton 428c2bbb49aSCaroline Tice const bool result = lldb_private::StateIsRunningState (state); 4294838131bSGreg Clayton if (log) 4304838131bSGreg Clayton log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i", 431431ce678SGreg Clayton StateAsCString (state), result); 4324838131bSGreg Clayton 4334838131bSGreg Clayton return result; 43430fdc8d8SChris Lattner } 43530fdc8d8SChris Lattner 43630fdc8d8SChris Lattner bool 437431ce678SGreg Clayton SBDebugger::StateIsStoppedState (StateType state) 43830fdc8d8SChris Lattner { 439431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 440ceb6b139SCaroline Tice 441c2bbb49aSCaroline Tice const bool result = lldb_private::StateIsStoppedState (state); 442ceb6b139SCaroline Tice if (log) 4434838131bSGreg Clayton log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i", 444431ce678SGreg Clayton StateAsCString (state), result); 445ceb6b139SCaroline Tice 4464838131bSGreg Clayton return result; 44730fdc8d8SChris Lattner } 44830fdc8d8SChris Lattner 44930fdc8d8SChris Lattner 45030fdc8d8SChris Lattner SBTarget 45130fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 45230fdc8d8SChris Lattner const char *target_triple) 45330fdc8d8SChris Lattner { 4546611103cSGreg Clayton SBTarget target; 4556611103cSGreg Clayton if (m_opaque_sp) 4566611103cSGreg Clayton { 45730fdc8d8SChris Lattner ArchSpec arch; 458274060b6SGreg Clayton FileSpec file_spec (filename, true); 459eb0103f2SGreg Clayton arch.SetTriple (target_triple, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 46030fdc8d8SChris Lattner TargetSP target_sp; 461e996fd30SGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, true, target_sp)); 4626611103cSGreg Clayton target.reset (target_sp); 4636611103cSGreg Clayton } 4644838131bSGreg Clayton 465431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4664838131bSGreg Clayton if (log) 4674838131bSGreg Clayton { 468cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)", 4694838131bSGreg Clayton m_opaque_sp.get(), filename, target_triple, target.get()); 4704838131bSGreg Clayton } 4714838131bSGreg Clayton 47230fdc8d8SChris Lattner return target; 47330fdc8d8SChris Lattner } 47430fdc8d8SChris Lattner 47530fdc8d8SChris Lattner SBTarget 47664195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr) 47730fdc8d8SChris Lattner { 478431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 479ceb6b139SCaroline Tice 4806611103cSGreg Clayton SBTarget target; 4816611103cSGreg Clayton if (m_opaque_sp) 4826611103cSGreg Clayton { 483274060b6SGreg Clayton FileSpec file (filename, true); 48464195a2cSGreg Clayton ArchSpec arch; 48530fdc8d8SChris Lattner TargetSP target_sp; 48630fdc8d8SChris Lattner Error error; 48730fdc8d8SChris Lattner 48864195a2cSGreg Clayton if (arch_cstr) 489eb0103f2SGreg Clayton arch.SetTriple (arch_cstr, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 49064195a2cSGreg Clayton 491e996fd30SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp); 49230fdc8d8SChris Lattner 49330fdc8d8SChris Lattner if (error.Success()) 4946611103cSGreg Clayton { 4952976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 4966611103cSGreg Clayton target.reset(target_sp); 4976611103cSGreg Clayton } 4986611103cSGreg Clayton } 499ceb6b139SCaroline Tice 500ceb6b139SCaroline Tice if (log) 501ceb6b139SCaroline Tice { 502cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)", 50364195a2cSGreg Clayton m_opaque_sp.get(), filename, arch_cstr, target.get()); 504ceb6b139SCaroline Tice } 505ceb6b139SCaroline Tice 5066611103cSGreg Clayton return target; 50730fdc8d8SChris Lattner } 50830fdc8d8SChris Lattner 50930fdc8d8SChris Lattner SBTarget 51030fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 51130fdc8d8SChris Lattner { 5126611103cSGreg Clayton SBTarget target; 5136611103cSGreg Clayton if (m_opaque_sp) 5146611103cSGreg Clayton { 515274060b6SGreg Clayton FileSpec file (filename, true); 516431ce678SGreg Clayton ArchSpec arch = Target::GetDefaultArchitecture (); 51730fdc8d8SChris Lattner TargetSP target_sp; 51830fdc8d8SChris Lattner Error error; 51930fdc8d8SChris Lattner 520e996fd30SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp); 52130fdc8d8SChris Lattner 5226611103cSGreg Clayton if (error.Success()) 5236611103cSGreg Clayton { 5242976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 5256611103cSGreg Clayton target.reset (target_sp); 5266611103cSGreg Clayton } 5276611103cSGreg Clayton } 528431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5294838131bSGreg Clayton if (log) 5304838131bSGreg Clayton { 531cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 5324838131bSGreg Clayton m_opaque_sp.get(), filename, target.get()); 5334838131bSGreg Clayton } 5346611103cSGreg Clayton return target; 53530fdc8d8SChris Lattner } 53630fdc8d8SChris Lattner 5373794ad95SJohnny Chen bool 5383794ad95SJohnny Chen SBDebugger::DeleteTarget (lldb::SBTarget &target) 5393794ad95SJohnny Chen { 5403794ad95SJohnny Chen bool result = false; 5413794ad95SJohnny Chen if (m_opaque_sp) 5423794ad95SJohnny Chen { 5433794ad95SJohnny Chen // No need to lock, the target list is thread safe 5443794ad95SJohnny Chen result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp); 5453794ad95SJohnny Chen } 5463794ad95SJohnny Chen 5473794ad95SJohnny Chen LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5483794ad95SJohnny Chen if (log) 5493794ad95SJohnny Chen { 5503794ad95SJohnny Chen log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result); 5513794ad95SJohnny Chen } 5523794ad95SJohnny Chen 5533794ad95SJohnny Chen return result; 5543794ad95SJohnny Chen } 55530fdc8d8SChris Lattner SBTarget 55630fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 55730fdc8d8SChris Lattner { 5586611103cSGreg Clayton SBTarget sb_target; 5596611103cSGreg Clayton if (m_opaque_sp) 560af67cecdSGreg Clayton { 561af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5626611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 563af67cecdSGreg Clayton } 56430fdc8d8SChris Lattner return sb_target; 56530fdc8d8SChris Lattner } 56630fdc8d8SChris Lattner 56730fdc8d8SChris Lattner SBTarget 56830fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 56930fdc8d8SChris Lattner { 5706611103cSGreg Clayton SBTarget sb_target; 5716611103cSGreg Clayton if (m_opaque_sp) 572af67cecdSGreg Clayton { 573af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5746611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 575af67cecdSGreg Clayton } 57630fdc8d8SChris Lattner return sb_target; 57730fdc8d8SChris Lattner } 57830fdc8d8SChris Lattner 57930fdc8d8SChris Lattner SBTarget 58030fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 58130fdc8d8SChris Lattner { 5826611103cSGreg Clayton SBTarget sb_target; 5836611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 5846611103cSGreg Clayton { 585af67cecdSGreg Clayton // No need to lock, the target list is thread safe 586eb0103f2SGreg Clayton ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 587274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 5886611103cSGreg Clayton sb_target.reset(target_sp); 5896611103cSGreg Clayton } 5906611103cSGreg Clayton return sb_target; 59130fdc8d8SChris Lattner } 59230fdc8d8SChris Lattner 59330fdc8d8SChris Lattner SBTarget 594431ce678SGreg Clayton SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp) 59530fdc8d8SChris Lattner { 5966611103cSGreg Clayton SBTarget sb_target; 5976611103cSGreg Clayton if (m_opaque_sp) 598af67cecdSGreg Clayton { 599af67cecdSGreg Clayton // No need to lock, the target list is thread safe 6006611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get())); 601af67cecdSGreg Clayton } 60230fdc8d8SChris Lattner return sb_target; 60330fdc8d8SChris Lattner } 60430fdc8d8SChris Lattner 60530fdc8d8SChris Lattner 60630fdc8d8SChris Lattner uint32_t 60730fdc8d8SChris Lattner SBDebugger::GetNumTargets () 60830fdc8d8SChris Lattner { 6096611103cSGreg Clayton if (m_opaque_sp) 610af67cecdSGreg Clayton { 611af67cecdSGreg Clayton // No need to lock, the target list is thread safe 6126611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 613af67cecdSGreg Clayton } 6146611103cSGreg Clayton return 0; 6156611103cSGreg Clayton } 61630fdc8d8SChris Lattner 61730fdc8d8SChris Lattner SBTarget 6182976d00aSJim Ingham SBDebugger::GetSelectedTarget () 61930fdc8d8SChris Lattner { 620431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 621ceb6b139SCaroline Tice 6226611103cSGreg Clayton SBTarget sb_target; 6236611103cSGreg Clayton if (m_opaque_sp) 624af67cecdSGreg Clayton { 625af67cecdSGreg Clayton // No need to lock, the target list is thread safe 6262976d00aSJim Ingham sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ()); 627af67cecdSGreg Clayton } 628ceb6b139SCaroline Tice 629ceb6b139SCaroline Tice if (log) 630ceb6b139SCaroline Tice { 631ceb6b139SCaroline Tice SBStream sstr; 632431ce678SGreg Clayton sb_target.GetDescription (sstr, eDescriptionLevelBrief); 63393aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 634750cd175SCaroline Tice sb_target.get(), sstr.GetData()); 635ceb6b139SCaroline Tice } 636ceb6b139SCaroline Tice 63730fdc8d8SChris Lattner return sb_target; 63830fdc8d8SChris Lattner } 63930fdc8d8SChris Lattner 64030fdc8d8SChris Lattner void 64130fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len) 64230fdc8d8SChris Lattner { 643431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 644ceb6b139SCaroline Tice 645ceb6b139SCaroline Tice if (log) 646cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(), 647cfd1acedSGreg Clayton baton, (int) data_len, (const char *) data, data_len); 648ceb6b139SCaroline Tice 6496611103cSGreg Clayton if (m_opaque_sp) 6506611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 65130fdc8d8SChris Lattner } 65230fdc8d8SChris Lattner 65330fdc8d8SChris Lattner void 654efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt () 655efed6131SCaroline Tice { 656efed6131SCaroline Tice if (m_opaque_sp) 657efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt (); 658efed6131SCaroline Tice } 659efed6131SCaroline Tice 660efed6131SCaroline Tice void 661efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile () 662efed6131SCaroline Tice { 663efed6131SCaroline Tice if (m_opaque_sp) 664efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile (); 665efed6131SCaroline Tice } 6669088b068SCaroline Tice 6679088b068SCaroline Tice bool 6689088b068SCaroline Tice SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader) 6699088b068SCaroline Tice { 6709088b068SCaroline Tice LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6719088b068SCaroline Tice 6729088b068SCaroline Tice if (log) 6739088b068SCaroline Tice log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 6749088b068SCaroline Tice 6759088b068SCaroline Tice if (m_opaque_sp && reader.IsValid()) 6769088b068SCaroline Tice { 6779088b068SCaroline Tice InputReaderSP reader_sp (*reader); 6789088b068SCaroline Tice return m_opaque_sp->InputReaderIsTopReader (reader_sp); 6799088b068SCaroline Tice } 6809088b068SCaroline Tice 6819088b068SCaroline Tice return false; 6829088b068SCaroline Tice } 6839088b068SCaroline Tice 684efed6131SCaroline Tice 685efed6131SCaroline Tice void 68630fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 68730fdc8d8SChris Lattner { 688431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 689ceb6b139SCaroline Tice 690ceb6b139SCaroline Tice if (log) 69193aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 692ceb6b139SCaroline Tice 6936611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 69430fdc8d8SChris Lattner { 695af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 696af67cecdSGreg Clayton Mutex::Locker api_locker; 697af67cecdSGreg Clayton if (target_sp) 698af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 69930fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 7006611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 70130fdc8d8SChris Lattner } 70230fdc8d8SChris Lattner } 7036611103cSGreg Clayton 7046611103cSGreg Clayton void 705969ed3d1SCaroline Tice SBDebugger::NotifyTopInputReader (InputReaderAction notification) 706969ed3d1SCaroline Tice { 707969ed3d1SCaroline Tice LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 708969ed3d1SCaroline Tice 709969ed3d1SCaroline Tice if (log) 710969ed3d1SCaroline Tice log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification); 711969ed3d1SCaroline Tice 712969ed3d1SCaroline Tice if (m_opaque_sp) 713969ed3d1SCaroline Tice m_opaque_sp->NotifyTopInputReader (notification); 714969ed3d1SCaroline Tice } 715969ed3d1SCaroline Tice 716969ed3d1SCaroline Tice void 717431ce678SGreg Clayton SBDebugger::reset (const DebuggerSP &debugger_sp) 7186611103cSGreg Clayton { 7196611103cSGreg Clayton m_opaque_sp = debugger_sp; 7206611103cSGreg Clayton } 7216611103cSGreg Clayton 7226611103cSGreg Clayton Debugger * 7236611103cSGreg Clayton SBDebugger::get () const 7246611103cSGreg Clayton { 7256611103cSGreg Clayton return m_opaque_sp.get(); 7266611103cSGreg Clayton } 7276611103cSGreg Clayton 7286611103cSGreg Clayton Debugger & 7296611103cSGreg Clayton SBDebugger::ref () const 7306611103cSGreg Clayton { 7316611103cSGreg Clayton assert (m_opaque_sp.get()); 7326611103cSGreg Clayton return *m_opaque_sp; 7336611103cSGreg Clayton } 7346611103cSGreg Clayton 7356611103cSGreg Clayton 736ebc1bb27SCaroline Tice SBDebugger 737ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 738ebc1bb27SCaroline Tice { 739af67cecdSGreg Clayton // No need to lock, the debugger list is thread safe 740ebc1bb27SCaroline Tice SBDebugger sb_debugger; 741431ce678SGreg Clayton DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 742ebc1bb27SCaroline Tice if (debugger_sp) 743ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 744ebc1bb27SCaroline Tice return sb_debugger; 745ebc1bb27SCaroline Tice } 746e40e4218SJim Ingham 747dd759857SCaroline Tice const char * 748dd759857SCaroline Tice SBDebugger::GetInstanceName() 749dd759857SCaroline Tice { 750dd759857SCaroline Tice if (m_opaque_sp) 751dd759857SCaroline Tice return m_opaque_sp->GetInstanceName().AsCString(); 752dd759857SCaroline Tice else 753dd759857SCaroline Tice return NULL; 754dd759857SCaroline Tice } 755dd759857SCaroline Tice 7563df9a8dfSCaroline Tice SBError 757dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 7583df9a8dfSCaroline Tice { 759431ce678SGreg Clayton UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController(); 7603df9a8dfSCaroline Tice 761e0d378b3SGreg Clayton Error err = root_settings_controller->SetVariable (var_name, 762e0d378b3SGreg Clayton value, 763e0d378b3SGreg Clayton eVarSetOperationAssign, 764e0d378b3SGreg Clayton true, 765101c7c20SCaroline Tice debugger_instance_name); 7663df9a8dfSCaroline Tice SBError sb_error; 7673df9a8dfSCaroline Tice sb_error.SetError (err); 7683df9a8dfSCaroline Tice 7693df9a8dfSCaroline Tice return sb_error; 7703df9a8dfSCaroline Tice } 7713df9a8dfSCaroline Tice 772431ce678SGreg Clayton SBStringList 773dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 7743df9a8dfSCaroline Tice { 7753df9a8dfSCaroline Tice SBStringList ret_value; 776e0d378b3SGreg Clayton SettableVariableType var_type; 777431ce678SGreg Clayton Error err; 778101c7c20SCaroline Tice 779431ce678SGreg Clayton UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController(); 7803df9a8dfSCaroline Tice 781daccaa9eSCaroline Tice StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err); 782daccaa9eSCaroline Tice 783daccaa9eSCaroline Tice if (err.Success()) 784daccaa9eSCaroline Tice { 785311adf3dSChris Lattner for (unsigned i = 0; i != value.GetSize(); ++i) 7863df9a8dfSCaroline Tice ret_value.AppendString (value.GetStringAtIndex(i)); 787daccaa9eSCaroline Tice } 788daccaa9eSCaroline Tice else 789daccaa9eSCaroline Tice { 790daccaa9eSCaroline Tice ret_value.AppendString (err.AsCString()); 791daccaa9eSCaroline Tice } 792daccaa9eSCaroline Tice 7933df9a8dfSCaroline Tice 7943df9a8dfSCaroline Tice return ret_value; 7953df9a8dfSCaroline Tice } 7963df9a8dfSCaroline Tice 797a7015092SGreg Clayton uint32_t 798a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 799a7015092SGreg Clayton { 800a7015092SGreg Clayton if (m_opaque_sp) 801a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 802a7015092SGreg Clayton return 0; 803a7015092SGreg Clayton } 804a7015092SGreg Clayton 805a7015092SGreg Clayton void 806a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 807a7015092SGreg Clayton { 808a7015092SGreg Clayton if (m_opaque_sp) 809a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 810a7015092SGreg Clayton } 811a7015092SGreg Clayton 812a7015092SGreg Clayton const char * 813a7015092SGreg Clayton SBDebugger::GetPrompt() const 814a7015092SGreg Clayton { 815431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 816ceb6b139SCaroline Tice 817ceb6b139SCaroline Tice if (log) 818cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(), 819750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 820ceb6b139SCaroline Tice 821a7015092SGreg Clayton if (m_opaque_sp) 822a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 823a7015092SGreg Clayton return 0; 824a7015092SGreg Clayton } 825a7015092SGreg Clayton 826a7015092SGreg Clayton void 827a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 828a7015092SGreg Clayton { 829a7015092SGreg Clayton if (m_opaque_sp) 830a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 831a7015092SGreg Clayton } 832a7015092SGreg Clayton 833a7015092SGreg Clayton 834431ce678SGreg Clayton ScriptLanguage 835a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 836a7015092SGreg Clayton { 837a7015092SGreg Clayton if (m_opaque_sp) 838a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 839a7015092SGreg Clayton return eScriptLanguageNone; 840a7015092SGreg Clayton } 841a7015092SGreg Clayton 842a7015092SGreg Clayton void 843431ce678SGreg Clayton SBDebugger::SetScriptLanguage (ScriptLanguage script_lang) 844a7015092SGreg Clayton { 845a7015092SGreg Clayton if (m_opaque_sp) 846af67cecdSGreg Clayton { 847a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 848a7015092SGreg Clayton } 849af67cecdSGreg Clayton } 850a7015092SGreg Clayton 851e40e4218SJim Ingham bool 852e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 853e40e4218SJim Ingham { 854e40e4218SJim Ingham if (m_opaque_sp) 855e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 856e40e4218SJim Ingham return false; 857e40e4218SJim Ingham } 858e40e4218SJim Ingham 859e40e4218SJim Ingham bool 860daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 861e40e4218SJim Ingham { 862e40e4218SJim Ingham if (m_opaque_sp) 863daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 864e40e4218SJim Ingham return false; 865e40e4218SJim Ingham } 866e40e4218SJim Ingham 867dde9cff3SCaroline Tice bool 868dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 869dde9cff3SCaroline Tice { 870dde9cff3SCaroline Tice if (m_opaque_sp) 871dde9cff3SCaroline Tice { 872dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 873431ce678SGreg Clayton user_id_t id = m_opaque_sp->GetID(); 874cfd1acedSGreg Clayton description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id); 875dde9cff3SCaroline Tice } 876dde9cff3SCaroline Tice else 877dde9cff3SCaroline Tice description.Printf ("No value"); 878dde9cff3SCaroline Tice 879dde9cff3SCaroline Tice return true; 880dde9cff3SCaroline Tice } 881efed6131SCaroline Tice 882431ce678SGreg Clayton user_id_t 883efed6131SCaroline Tice SBDebugger::GetID() 884efed6131SCaroline Tice { 885efed6131SCaroline Tice if (m_opaque_sp) 886efed6131SCaroline Tice return m_opaque_sp->GetID(); 887efed6131SCaroline Tice return LLDB_INVALID_UID; 888efed6131SCaroline Tice } 8892289fa48SGreg Clayton 8902289fa48SGreg Clayton 8912289fa48SGreg Clayton SBError 8922289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name) 8932289fa48SGreg Clayton { 8942289fa48SGreg Clayton SBError sb_error; 8952289fa48SGreg Clayton if (m_opaque_sp) 8962289fa48SGreg Clayton { 8972289fa48SGreg Clayton PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref())); 8982289fa48SGreg Clayton 8992289fa48SGreg Clayton if (platform_sp) 9002289fa48SGreg Clayton { 9012289fa48SGreg Clayton bool make_selected = true; 9022289fa48SGreg Clayton m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected); 9032289fa48SGreg Clayton } 9042289fa48SGreg Clayton } 9052289fa48SGreg Clayton return sb_error; 9062289fa48SGreg Clayton } 9072289fa48SGreg Clayton 908fc3f027dSGreg Clayton bool 909f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot) 910f3dd93c8SGreg Clayton { 911f3dd93c8SGreg Clayton if (m_opaque_sp) 912f3dd93c8SGreg Clayton { 913f3dd93c8SGreg Clayton PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform()); 914f3dd93c8SGreg Clayton 915f3dd93c8SGreg Clayton if (platform_sp) 916f3dd93c8SGreg Clayton { 917f3dd93c8SGreg Clayton platform_sp->SetSDKRootDirectory (ConstString (sysroot)); 918f3dd93c8SGreg Clayton return true; 919f3dd93c8SGreg Clayton } 920f3dd93c8SGreg Clayton } 921f3dd93c8SGreg Clayton return false; 922f3dd93c8SGreg Clayton } 923f3dd93c8SGreg Clayton 924f3dd93c8SGreg Clayton bool 925fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const 926fc3f027dSGreg Clayton { 927fc3f027dSGreg Clayton if (m_opaque_sp) 928fc3f027dSGreg Clayton return m_opaque_sp->GetCloseInputOnEOF (); 929fc3f027dSGreg Clayton return false; 930fc3f027dSGreg Clayton } 931fc3f027dSGreg Clayton 932fc3f027dSGreg Clayton void 933fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b) 934fc3f027dSGreg Clayton { 935fc3f027dSGreg Clayton if (m_opaque_sp) 936fc3f027dSGreg Clayton m_opaque_sp->SetCloseInputOnEOF (b); 937fc3f027dSGreg Clayton } 938