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 { 7466243847SJim 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 131*274fd6e9SEnrico Granata SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) : 132*274fd6e9SEnrico Granata m_opaque_sp(debugger_sp) 133*274fd6e9SEnrico Granata { 134*274fd6e9SEnrico Granata } 135*274fd6e9SEnrico Granata 136efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) : 137efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 138efabb123SGreg Clayton { 139efabb123SGreg Clayton } 140efabb123SGreg Clayton 141efabb123SGreg Clayton SBDebugger & 142efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs) 143efabb123SGreg Clayton { 144efabb123SGreg Clayton if (this != &rhs) 145efabb123SGreg Clayton { 146efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 147efabb123SGreg Clayton } 148efabb123SGreg Clayton return *this; 149efabb123SGreg Clayton } 150efabb123SGreg Clayton 1516611103cSGreg Clayton SBDebugger::~SBDebugger () 1526611103cSGreg Clayton { 1536611103cSGreg Clayton } 1546611103cSGreg Clayton 1556611103cSGreg Clayton bool 1566611103cSGreg Clayton SBDebugger::IsValid() const 1576611103cSGreg Clayton { 1586611103cSGreg Clayton return m_opaque_sp.get() != NULL; 1596611103cSGreg Clayton } 1606611103cSGreg Clayton 1616611103cSGreg Clayton 16230fdc8d8SChris Lattner void 16330fdc8d8SChris Lattner SBDebugger::SetAsync (bool b) 16430fdc8d8SChris Lattner { 1656611103cSGreg Clayton if (m_opaque_sp) 1666611103cSGreg Clayton m_opaque_sp->SetAsyncExecution(b); 16730fdc8d8SChris Lattner } 16830fdc8d8SChris Lattner 1696eee5aa0SGreg Clayton void 1706eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b) 1716eee5aa0SGreg Clayton { 1726eee5aa0SGreg Clayton if (m_opaque_sp) 1736eee5aa0SGreg Clayton m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b); 1746eee5aa0SGreg Clayton } 1756eee5aa0SGreg Clayton 17616e0c686SJim Ingham void 17716e0c686SJim Ingham SBDebugger::SkipAppInitFiles (bool b) 17816e0c686SJim Ingham { 17916e0c686SJim Ingham if (m_opaque_sp) 18016e0c686SJim Ingham m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b); 18116e0c686SJim Ingham } 18216e0c686SJim Ingham 18330fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users 18430fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session. 18530fdc8d8SChris Lattner void 18630fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership) 18730fdc8d8SChris Lattner { 188431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 189ceb6b139SCaroline Tice 190ceb6b139SCaroline Tice if (log) 191cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 192cfd1acedSGreg Clayton fh, transfer_ownership); 193ceb6b139SCaroline Tice 1946611103cSGreg Clayton if (m_opaque_sp) 1956611103cSGreg Clayton m_opaque_sp->SetInputFileHandle (fh, transfer_ownership); 19630fdc8d8SChris Lattner } 19730fdc8d8SChris Lattner 19830fdc8d8SChris Lattner void 19930fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership) 20030fdc8d8SChris Lattner { 201431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 202ceb6b139SCaroline Tice 203ceb6b139SCaroline Tice 204ceb6b139SCaroline Tice if (log) 205cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 206cfd1acedSGreg Clayton fh, transfer_ownership); 207ceb6b139SCaroline Tice 2086611103cSGreg Clayton if (m_opaque_sp) 2096611103cSGreg Clayton m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership); 21030fdc8d8SChris Lattner } 21130fdc8d8SChris Lattner 21230fdc8d8SChris Lattner void 21330fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership) 21430fdc8d8SChris Lattner { 215431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 216ceb6b139SCaroline Tice 217ceb6b139SCaroline Tice 218ceb6b139SCaroline Tice if (log) 219cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(), 220cfd1acedSGreg Clayton fh, transfer_ownership); 221ceb6b139SCaroline Tice 2226611103cSGreg Clayton if (m_opaque_sp) 2236611103cSGreg Clayton m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership); 22430fdc8d8SChris Lattner } 22530fdc8d8SChris Lattner 22630fdc8d8SChris Lattner FILE * 22730fdc8d8SChris Lattner SBDebugger::GetInputFileHandle () 22830fdc8d8SChris Lattner { 2296611103cSGreg Clayton if (m_opaque_sp) 23051b1e2d2SGreg Clayton return m_opaque_sp->GetInputFile().GetStream(); 2316611103cSGreg Clayton return NULL; 23230fdc8d8SChris Lattner } 23330fdc8d8SChris Lattner 23430fdc8d8SChris Lattner FILE * 23530fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle () 23630fdc8d8SChris Lattner { 2376611103cSGreg Clayton if (m_opaque_sp) 23851b1e2d2SGreg Clayton return m_opaque_sp->GetOutputFile().GetStream(); 2396611103cSGreg Clayton return NULL; 24030fdc8d8SChris Lattner } 24130fdc8d8SChris Lattner 24230fdc8d8SChris Lattner FILE * 24330fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle () 24430fdc8d8SChris Lattner { 2456611103cSGreg Clayton if (m_opaque_sp) 24651b1e2d2SGreg Clayton return m_opaque_sp->GetErrorFile().GetStream(); 2476611103cSGreg Clayton return NULL; 24830fdc8d8SChris Lattner } 24930fdc8d8SChris Lattner 25030fdc8d8SChris Lattner SBCommandInterpreter 25130fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter () 25230fdc8d8SChris Lattner { 253431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 254ceb6b139SCaroline Tice 2556611103cSGreg Clayton SBCommandInterpreter sb_interpreter; 2566611103cSGreg Clayton if (m_opaque_sp) 2576611103cSGreg Clayton sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter()); 258ceb6b139SCaroline Tice 259750cd175SCaroline Tice if (log) 26093aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)", 261750cd175SCaroline Tice m_opaque_sp.get(), sb_interpreter.get()); 262750cd175SCaroline Tice 26330fdc8d8SChris Lattner return sb_interpreter; 26430fdc8d8SChris Lattner } 26530fdc8d8SChris Lattner 26630fdc8d8SChris Lattner void 26730fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command) 26830fdc8d8SChris Lattner { 2696611103cSGreg Clayton if (m_opaque_sp) 2706611103cSGreg Clayton { 271af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 272af67cecdSGreg Clayton Mutex::Locker api_locker; 273af67cecdSGreg Clayton if (target_sp) 274af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 275af67cecdSGreg Clayton 2766611103cSGreg Clayton SBCommandInterpreter sb_interpreter(GetCommandInterpreter ()); 27730fdc8d8SChris Lattner SBCommandReturnObject result; 27830fdc8d8SChris Lattner 27930fdc8d8SChris Lattner sb_interpreter.HandleCommand (command, result, false); 28030fdc8d8SChris Lattner 28130fdc8d8SChris Lattner if (GetErrorFileHandle() != NULL) 28230fdc8d8SChris Lattner result.PutError (GetErrorFileHandle()); 28330fdc8d8SChris Lattner if (GetOutputFileHandle() != NULL) 28430fdc8d8SChris Lattner result.PutOutput (GetOutputFileHandle()); 28530fdc8d8SChris Lattner 2866611103cSGreg Clayton if (m_opaque_sp->GetAsyncExecution() == false) 28730fdc8d8SChris Lattner { 2886611103cSGreg Clayton SBProcess process(GetCommandInterpreter().GetProcess ()); 28930fdc8d8SChris Lattner if (process.IsValid()) 29030fdc8d8SChris Lattner { 29130fdc8d8SChris Lattner EventSP event_sp; 2926611103cSGreg Clayton Listener &lldb_listener = m_opaque_sp->GetListener(); 29330fdc8d8SChris Lattner while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp)) 29430fdc8d8SChris Lattner { 29530fdc8d8SChris Lattner SBEvent event(event_sp); 29630fdc8d8SChris Lattner HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle()); 29730fdc8d8SChris Lattner } 29830fdc8d8SChris Lattner } 29930fdc8d8SChris Lattner } 30030fdc8d8SChris Lattner } 3016611103cSGreg Clayton } 30230fdc8d8SChris Lattner 30330fdc8d8SChris Lattner SBListener 30430fdc8d8SChris Lattner SBDebugger::GetListener () 30530fdc8d8SChris Lattner { 306431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 307ceb6b139SCaroline Tice 3086611103cSGreg Clayton SBListener sb_listener; 3096611103cSGreg Clayton if (m_opaque_sp) 3106611103cSGreg Clayton sb_listener.reset(&m_opaque_sp->GetListener(), false); 311ceb6b139SCaroline Tice 312750cd175SCaroline Tice if (log) 31393aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(), 314750cd175SCaroline Tice sb_listener.get()); 315750cd175SCaroline Tice 31630fdc8d8SChris Lattner return sb_listener; 31730fdc8d8SChris Lattner } 31830fdc8d8SChris Lattner 31930fdc8d8SChris Lattner void 32030fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err) 32130fdc8d8SChris Lattner { 322af67cecdSGreg Clayton if (!process.IsValid()) 323af67cecdSGreg Clayton return; 324af67cecdSGreg Clayton 32530fdc8d8SChris Lattner const uint32_t event_type = event.GetType(); 32630fdc8d8SChris Lattner char stdio_buffer[1024]; 32730fdc8d8SChris Lattner size_t len; 32830fdc8d8SChris Lattner 329af67cecdSGreg Clayton Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex()); 330af67cecdSGreg Clayton 331af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged)) 33230fdc8d8SChris Lattner { 333af67cecdSGreg Clayton // Drain stdout when we stop just in case we have any bytes 33430fdc8d8SChris Lattner while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0) 33530fdc8d8SChris Lattner if (out != NULL) 33630fdc8d8SChris Lattner ::fwrite (stdio_buffer, 1, len, out); 33730fdc8d8SChris Lattner } 338af67cecdSGreg Clayton 339af67cecdSGreg Clayton if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged)) 34030fdc8d8SChris Lattner { 341af67cecdSGreg Clayton // Drain stderr when we stop just in case we have any bytes 34230fdc8d8SChris Lattner while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0) 343af67cecdSGreg Clayton if (err != NULL) 344af67cecdSGreg Clayton ::fwrite (stdio_buffer, 1, len, err); 34530fdc8d8SChris Lattner } 346af67cecdSGreg Clayton 347af67cecdSGreg Clayton if (event_type & Process::eBroadcastBitStateChanged) 34830fdc8d8SChris Lattner { 34930fdc8d8SChris Lattner StateType event_state = SBProcess::GetStateFromEvent (event); 35030fdc8d8SChris Lattner 35130fdc8d8SChris Lattner if (event_state == eStateInvalid) 35230fdc8d8SChris Lattner return; 35330fdc8d8SChris Lattner 35430fdc8d8SChris Lattner bool is_stopped = StateIsStoppedState (event_state); 35530fdc8d8SChris Lattner if (!is_stopped) 3562976d00aSJim Ingham process.ReportEventState (event, out); 35730fdc8d8SChris Lattner } 35830fdc8d8SChris Lattner } 35930fdc8d8SChris Lattner 36030fdc8d8SChris Lattner SBSourceManager & 36130fdc8d8SChris Lattner SBDebugger::GetSourceManager () 36230fdc8d8SChris Lattner { 36330fdc8d8SChris Lattner static SourceManager g_lldb_source_manager; 364efabb123SGreg Clayton static SBSourceManager g_sb_source_manager (&g_lldb_source_manager); 36530fdc8d8SChris Lattner return g_sb_source_manager; 36630fdc8d8SChris Lattner } 36730fdc8d8SChris Lattner 36830fdc8d8SChris Lattner 36930fdc8d8SChris Lattner bool 37030fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len) 37130fdc8d8SChris Lattner { 37230fdc8d8SChris Lattner if (arch_name && arch_name_len) 37330fdc8d8SChris Lattner { 374431ce678SGreg Clayton ArchSpec default_arch = Target::GetDefaultArchitecture (); 375daccaa9eSCaroline Tice 37630fdc8d8SChris Lattner if (default_arch.IsValid()) 37730fdc8d8SChris Lattner { 378431ce678SGreg Clayton const std::string &triple_str = default_arch.GetTriple().str(); 379431ce678SGreg Clayton if (!triple_str.empty()) 380431ce678SGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str()); 381431ce678SGreg Clayton else 38264195a2cSGreg Clayton ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName()); 38330fdc8d8SChris Lattner return true; 38430fdc8d8SChris Lattner } 38530fdc8d8SChris Lattner } 38630fdc8d8SChris Lattner if (arch_name && arch_name_len) 38730fdc8d8SChris Lattner arch_name[0] = '\0'; 38830fdc8d8SChris Lattner return false; 38930fdc8d8SChris Lattner } 39030fdc8d8SChris Lattner 39130fdc8d8SChris Lattner 39230fdc8d8SChris Lattner bool 39330fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name) 39430fdc8d8SChris Lattner { 39530fdc8d8SChris Lattner if (arch_name) 39630fdc8d8SChris Lattner { 397eb0103f2SGreg Clayton ArchSpec arch (arch_name, NULL); 39830fdc8d8SChris Lattner if (arch.IsValid()) 39930fdc8d8SChris Lattner { 400431ce678SGreg Clayton Target::SetDefaultArchitecture (arch); 40130fdc8d8SChris Lattner return true; 40230fdc8d8SChris Lattner } 40330fdc8d8SChris Lattner } 40430fdc8d8SChris Lattner return false; 40530fdc8d8SChris Lattner } 40630fdc8d8SChris Lattner 40730fdc8d8SChris Lattner ScriptLanguage 40830fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name) 40930fdc8d8SChris Lattner { 410af67cecdSGreg Clayton 41130fdc8d8SChris Lattner return Args::StringToScriptLanguage (script_language_name, 41230fdc8d8SChris Lattner eScriptLanguageDefault, 41330fdc8d8SChris Lattner NULL); 41430fdc8d8SChris Lattner } 41530fdc8d8SChris Lattner 41630fdc8d8SChris Lattner const char * 41730fdc8d8SChris Lattner SBDebugger::GetVersionString () 41830fdc8d8SChris Lattner { 419431ce678SGreg Clayton return GetVersion(); 42030fdc8d8SChris Lattner } 42130fdc8d8SChris Lattner 42230fdc8d8SChris Lattner const char * 423431ce678SGreg Clayton SBDebugger::StateAsCString (StateType state) 42430fdc8d8SChris Lattner { 425c2bbb49aSCaroline Tice return lldb_private::StateAsCString (state); 42630fdc8d8SChris Lattner } 42730fdc8d8SChris Lattner 42830fdc8d8SChris Lattner bool 429431ce678SGreg Clayton SBDebugger::StateIsRunningState (StateType state) 43030fdc8d8SChris Lattner { 431431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4324838131bSGreg Clayton 433c2bbb49aSCaroline Tice const bool result = lldb_private::StateIsRunningState (state); 4344838131bSGreg Clayton if (log) 4354838131bSGreg Clayton log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i", 436431ce678SGreg Clayton StateAsCString (state), result); 4374838131bSGreg Clayton 4384838131bSGreg Clayton return result; 43930fdc8d8SChris Lattner } 44030fdc8d8SChris Lattner 44130fdc8d8SChris Lattner bool 442431ce678SGreg Clayton SBDebugger::StateIsStoppedState (StateType state) 44330fdc8d8SChris Lattner { 444431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 445ceb6b139SCaroline Tice 446c2bbb49aSCaroline Tice const bool result = lldb_private::StateIsStoppedState (state); 447ceb6b139SCaroline Tice if (log) 4484838131bSGreg Clayton log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i", 449431ce678SGreg Clayton StateAsCString (state), result); 450ceb6b139SCaroline Tice 4514838131bSGreg Clayton return result; 45230fdc8d8SChris Lattner } 45330fdc8d8SChris Lattner 45430fdc8d8SChris Lattner 45530fdc8d8SChris Lattner SBTarget 45630fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename, 45730fdc8d8SChris Lattner const char *target_triple) 45830fdc8d8SChris Lattner { 4596611103cSGreg Clayton SBTarget target; 4606611103cSGreg Clayton if (m_opaque_sp) 4616611103cSGreg Clayton { 46230fdc8d8SChris Lattner ArchSpec arch; 463274060b6SGreg Clayton FileSpec file_spec (filename, true); 464eb0103f2SGreg Clayton arch.SetTriple (target_triple, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 46530fdc8d8SChris Lattner TargetSP target_sp; 466e996fd30SGreg Clayton Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, true, target_sp)); 4676611103cSGreg Clayton target.reset (target_sp); 4686611103cSGreg Clayton } 4694838131bSGreg Clayton 470431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4714838131bSGreg Clayton if (log) 4724838131bSGreg Clayton { 473cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)", 4744838131bSGreg Clayton m_opaque_sp.get(), filename, target_triple, target.get()); 4754838131bSGreg Clayton } 4764838131bSGreg Clayton 47730fdc8d8SChris Lattner return target; 47830fdc8d8SChris Lattner } 47930fdc8d8SChris Lattner 48030fdc8d8SChris Lattner SBTarget 48164195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr) 48230fdc8d8SChris Lattner { 483431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 484ceb6b139SCaroline Tice 4856611103cSGreg Clayton SBTarget target; 4866611103cSGreg Clayton if (m_opaque_sp) 4876611103cSGreg Clayton { 488274060b6SGreg Clayton FileSpec file (filename, true); 48964195a2cSGreg Clayton ArchSpec arch; 49030fdc8d8SChris Lattner TargetSP target_sp; 49130fdc8d8SChris Lattner Error error; 49230fdc8d8SChris Lattner 49364195a2cSGreg Clayton if (arch_cstr) 494eb0103f2SGreg Clayton arch.SetTriple (arch_cstr, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 49564195a2cSGreg Clayton 496e996fd30SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp); 49730fdc8d8SChris Lattner 49830fdc8d8SChris Lattner if (error.Success()) 4996611103cSGreg Clayton { 5002976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 5016611103cSGreg Clayton target.reset(target_sp); 5026611103cSGreg Clayton } 5036611103cSGreg Clayton } 504ceb6b139SCaroline Tice 505ceb6b139SCaroline Tice if (log) 506ceb6b139SCaroline Tice { 507cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)", 50864195a2cSGreg Clayton m_opaque_sp.get(), filename, arch_cstr, target.get()); 509ceb6b139SCaroline Tice } 510ceb6b139SCaroline Tice 5116611103cSGreg Clayton return target; 51230fdc8d8SChris Lattner } 51330fdc8d8SChris Lattner 51430fdc8d8SChris Lattner SBTarget 51530fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename) 51630fdc8d8SChris Lattner { 5176611103cSGreg Clayton SBTarget target; 5186611103cSGreg Clayton if (m_opaque_sp) 5196611103cSGreg Clayton { 520274060b6SGreg Clayton FileSpec file (filename, true); 521431ce678SGreg Clayton ArchSpec arch = Target::GetDefaultArchitecture (); 52230fdc8d8SChris Lattner TargetSP target_sp; 52330fdc8d8SChris Lattner Error error; 52430fdc8d8SChris Lattner 525e996fd30SGreg Clayton error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp); 52630fdc8d8SChris Lattner 5276611103cSGreg Clayton if (error.Success()) 5286611103cSGreg Clayton { 5292976d00aSJim Ingham m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); 5306611103cSGreg Clayton target.reset (target_sp); 5316611103cSGreg Clayton } 5326611103cSGreg Clayton } 533431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5344838131bSGreg Clayton if (log) 5354838131bSGreg Clayton { 536cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)", 5374838131bSGreg Clayton m_opaque_sp.get(), filename, target.get()); 5384838131bSGreg Clayton } 5396611103cSGreg Clayton return target; 54030fdc8d8SChris Lattner } 54130fdc8d8SChris Lattner 5423794ad95SJohnny Chen bool 5433794ad95SJohnny Chen SBDebugger::DeleteTarget (lldb::SBTarget &target) 5443794ad95SJohnny Chen { 5453794ad95SJohnny Chen bool result = false; 5463794ad95SJohnny Chen if (m_opaque_sp) 5473794ad95SJohnny Chen { 5483794ad95SJohnny Chen // No need to lock, the target list is thread safe 5493794ad95SJohnny Chen result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp); 5503794ad95SJohnny Chen } 5513794ad95SJohnny Chen 5523794ad95SJohnny Chen LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5533794ad95SJohnny Chen if (log) 5543794ad95SJohnny Chen { 5553794ad95SJohnny Chen log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result); 5563794ad95SJohnny Chen } 5573794ad95SJohnny Chen 5583794ad95SJohnny Chen return result; 5593794ad95SJohnny Chen } 56030fdc8d8SChris Lattner SBTarget 56130fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx) 56230fdc8d8SChris Lattner { 5636611103cSGreg Clayton SBTarget sb_target; 5646611103cSGreg Clayton if (m_opaque_sp) 565af67cecdSGreg Clayton { 566af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5676611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx)); 568af67cecdSGreg Clayton } 56930fdc8d8SChris Lattner return sb_target; 57030fdc8d8SChris Lattner } 57130fdc8d8SChris Lattner 57230fdc8d8SChris Lattner SBTarget 57330fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid) 57430fdc8d8SChris Lattner { 5756611103cSGreg Clayton SBTarget sb_target; 5766611103cSGreg Clayton if (m_opaque_sp) 577af67cecdSGreg Clayton { 578af67cecdSGreg Clayton // No need to lock, the target list is thread safe 5796611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid)); 580af67cecdSGreg Clayton } 58130fdc8d8SChris Lattner return sb_target; 58230fdc8d8SChris Lattner } 58330fdc8d8SChris Lattner 58430fdc8d8SChris Lattner SBTarget 58530fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name) 58630fdc8d8SChris Lattner { 5876611103cSGreg Clayton SBTarget sb_target; 5886611103cSGreg Clayton if (m_opaque_sp && filename && filename[0]) 5896611103cSGreg Clayton { 590af67cecdSGreg Clayton // No need to lock, the target list is thread safe 591eb0103f2SGreg Clayton ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get()); 592274060b6SGreg Clayton TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL)); 5936611103cSGreg Clayton sb_target.reset(target_sp); 5946611103cSGreg Clayton } 5956611103cSGreg Clayton return sb_target; 59630fdc8d8SChris Lattner } 59730fdc8d8SChris Lattner 59830fdc8d8SChris Lattner SBTarget 599431ce678SGreg Clayton SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp) 60030fdc8d8SChris Lattner { 6016611103cSGreg Clayton SBTarget sb_target; 6026611103cSGreg Clayton if (m_opaque_sp) 603af67cecdSGreg Clayton { 604af67cecdSGreg Clayton // No need to lock, the target list is thread safe 6056611103cSGreg Clayton sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get())); 606af67cecdSGreg Clayton } 60730fdc8d8SChris Lattner return sb_target; 60830fdc8d8SChris Lattner } 60930fdc8d8SChris Lattner 61030fdc8d8SChris Lattner 61130fdc8d8SChris Lattner uint32_t 61230fdc8d8SChris Lattner SBDebugger::GetNumTargets () 61330fdc8d8SChris Lattner { 6146611103cSGreg Clayton if (m_opaque_sp) 615af67cecdSGreg Clayton { 616af67cecdSGreg Clayton // No need to lock, the target list is thread safe 6176611103cSGreg Clayton return m_opaque_sp->GetTargetList().GetNumTargets (); 618af67cecdSGreg Clayton } 6196611103cSGreg Clayton return 0; 6206611103cSGreg Clayton } 62130fdc8d8SChris Lattner 62230fdc8d8SChris Lattner SBTarget 6232976d00aSJim Ingham SBDebugger::GetSelectedTarget () 62430fdc8d8SChris Lattner { 625431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 626ceb6b139SCaroline Tice 6276611103cSGreg Clayton SBTarget sb_target; 6286611103cSGreg Clayton if (m_opaque_sp) 629af67cecdSGreg Clayton { 630af67cecdSGreg Clayton // No need to lock, the target list is thread safe 6312976d00aSJim Ingham sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ()); 632af67cecdSGreg Clayton } 633ceb6b139SCaroline Tice 634ceb6b139SCaroline Tice if (log) 635ceb6b139SCaroline Tice { 636ceb6b139SCaroline Tice SBStream sstr; 637431ce678SGreg Clayton sb_target.GetDescription (sstr, eDescriptionLevelBrief); 63893aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), 639750cd175SCaroline Tice sb_target.get(), sstr.GetData()); 640ceb6b139SCaroline Tice } 641ceb6b139SCaroline Tice 64230fdc8d8SChris Lattner return sb_target; 64330fdc8d8SChris Lattner } 64430fdc8d8SChris Lattner 64530fdc8d8SChris Lattner void 64630fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len) 64730fdc8d8SChris Lattner { 648431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 649ceb6b139SCaroline Tice 650ceb6b139SCaroline Tice if (log) 651cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(), 652cfd1acedSGreg Clayton baton, (int) data_len, (const char *) data, data_len); 653ceb6b139SCaroline Tice 6546611103cSGreg Clayton if (m_opaque_sp) 6556611103cSGreg Clayton m_opaque_sp->DispatchInput ((const char *) data, data_len); 65630fdc8d8SChris Lattner } 65730fdc8d8SChris Lattner 65830fdc8d8SChris Lattner void 659efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt () 660efed6131SCaroline Tice { 661efed6131SCaroline Tice if (m_opaque_sp) 662efed6131SCaroline Tice m_opaque_sp->DispatchInputInterrupt (); 663efed6131SCaroline Tice } 664efed6131SCaroline Tice 665efed6131SCaroline Tice void 666efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile () 667efed6131SCaroline Tice { 668efed6131SCaroline Tice if (m_opaque_sp) 669efed6131SCaroline Tice m_opaque_sp->DispatchInputEndOfFile (); 670efed6131SCaroline Tice } 6719088b068SCaroline Tice 6729088b068SCaroline Tice bool 6739088b068SCaroline Tice SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader) 6749088b068SCaroline Tice { 6759088b068SCaroline Tice LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 6769088b068SCaroline Tice 6779088b068SCaroline Tice if (log) 6789088b068SCaroline Tice log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 6799088b068SCaroline Tice 6809088b068SCaroline Tice if (m_opaque_sp && reader.IsValid()) 6819088b068SCaroline Tice { 6829088b068SCaroline Tice InputReaderSP reader_sp (*reader); 6839088b068SCaroline Tice return m_opaque_sp->InputReaderIsTopReader (reader_sp); 6849088b068SCaroline Tice } 6859088b068SCaroline Tice 6869088b068SCaroline Tice return false; 6879088b068SCaroline Tice } 6889088b068SCaroline Tice 689efed6131SCaroline Tice 690efed6131SCaroline Tice void 69130fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader) 69230fdc8d8SChris Lattner { 693431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 694ceb6b139SCaroline Tice 695ceb6b139SCaroline Tice if (log) 69693aa84e8SGreg Clayton log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader); 697ceb6b139SCaroline Tice 6986611103cSGreg Clayton if (m_opaque_sp && reader.IsValid()) 69930fdc8d8SChris Lattner { 700af67cecdSGreg Clayton TargetSP target_sp (m_opaque_sp->GetSelectedTarget()); 701af67cecdSGreg Clayton Mutex::Locker api_locker; 702af67cecdSGreg Clayton if (target_sp) 703af67cecdSGreg Clayton api_locker.Reset(target_sp->GetAPIMutex().GetMutex()); 70430fdc8d8SChris Lattner InputReaderSP reader_sp(*reader); 7056611103cSGreg Clayton m_opaque_sp->PushInputReader (reader_sp); 70630fdc8d8SChris Lattner } 70730fdc8d8SChris Lattner } 7086611103cSGreg Clayton 7096611103cSGreg Clayton void 710969ed3d1SCaroline Tice SBDebugger::NotifyTopInputReader (InputReaderAction notification) 711969ed3d1SCaroline Tice { 712969ed3d1SCaroline Tice LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 713969ed3d1SCaroline Tice 714969ed3d1SCaroline Tice if (log) 715969ed3d1SCaroline Tice log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification); 716969ed3d1SCaroline Tice 717969ed3d1SCaroline Tice if (m_opaque_sp) 718969ed3d1SCaroline Tice m_opaque_sp->NotifyTopInputReader (notification); 719969ed3d1SCaroline Tice } 720969ed3d1SCaroline Tice 721969ed3d1SCaroline Tice void 722431ce678SGreg Clayton SBDebugger::reset (const DebuggerSP &debugger_sp) 7236611103cSGreg Clayton { 7246611103cSGreg Clayton m_opaque_sp = debugger_sp; 7256611103cSGreg Clayton } 7266611103cSGreg Clayton 7276611103cSGreg Clayton Debugger * 7286611103cSGreg Clayton SBDebugger::get () const 7296611103cSGreg Clayton { 7306611103cSGreg Clayton return m_opaque_sp.get(); 7316611103cSGreg Clayton } 7326611103cSGreg Clayton 7336611103cSGreg Clayton Debugger & 7346611103cSGreg Clayton SBDebugger::ref () const 7356611103cSGreg Clayton { 7366611103cSGreg Clayton assert (m_opaque_sp.get()); 7376611103cSGreg Clayton return *m_opaque_sp; 7386611103cSGreg Clayton } 7396611103cSGreg Clayton 7406611103cSGreg Clayton 741ebc1bb27SCaroline Tice SBDebugger 742ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id) 743ebc1bb27SCaroline Tice { 744af67cecdSGreg Clayton // No need to lock, the debugger list is thread safe 745ebc1bb27SCaroline Tice SBDebugger sb_debugger; 746431ce678SGreg Clayton DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id); 747ebc1bb27SCaroline Tice if (debugger_sp) 748ebc1bb27SCaroline Tice sb_debugger.reset (debugger_sp); 749ebc1bb27SCaroline Tice return sb_debugger; 750ebc1bb27SCaroline Tice } 751e40e4218SJim Ingham 752dd759857SCaroline Tice const char * 753dd759857SCaroline Tice SBDebugger::GetInstanceName() 754dd759857SCaroline Tice { 755dd759857SCaroline Tice if (m_opaque_sp) 756dd759857SCaroline Tice return m_opaque_sp->GetInstanceName().AsCString(); 757dd759857SCaroline Tice else 758dd759857SCaroline Tice return NULL; 759dd759857SCaroline Tice } 760dd759857SCaroline Tice 7613df9a8dfSCaroline Tice SBError 762dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name) 7633df9a8dfSCaroline Tice { 764431ce678SGreg Clayton UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController(); 7653df9a8dfSCaroline Tice 766e0d378b3SGreg Clayton Error err = root_settings_controller->SetVariable (var_name, 767e0d378b3SGreg Clayton value, 768e0d378b3SGreg Clayton eVarSetOperationAssign, 769e0d378b3SGreg Clayton true, 770101c7c20SCaroline Tice debugger_instance_name); 7713df9a8dfSCaroline Tice SBError sb_error; 7723df9a8dfSCaroline Tice sb_error.SetError (err); 7733df9a8dfSCaroline Tice 7743df9a8dfSCaroline Tice return sb_error; 7753df9a8dfSCaroline Tice } 7763df9a8dfSCaroline Tice 777431ce678SGreg Clayton SBStringList 778dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name) 7793df9a8dfSCaroline Tice { 7803df9a8dfSCaroline Tice SBStringList ret_value; 781e0d378b3SGreg Clayton SettableVariableType var_type; 782431ce678SGreg Clayton Error err; 783101c7c20SCaroline Tice 784431ce678SGreg Clayton UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController(); 7853df9a8dfSCaroline Tice 786daccaa9eSCaroline Tice StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err); 787daccaa9eSCaroline Tice 788daccaa9eSCaroline Tice if (err.Success()) 789daccaa9eSCaroline Tice { 790311adf3dSChris Lattner for (unsigned i = 0; i != value.GetSize(); ++i) 7913df9a8dfSCaroline Tice ret_value.AppendString (value.GetStringAtIndex(i)); 792daccaa9eSCaroline Tice } 793daccaa9eSCaroline Tice else 794daccaa9eSCaroline Tice { 795daccaa9eSCaroline Tice ret_value.AppendString (err.AsCString()); 796daccaa9eSCaroline Tice } 797daccaa9eSCaroline Tice 7983df9a8dfSCaroline Tice 7993df9a8dfSCaroline Tice return ret_value; 8003df9a8dfSCaroline Tice } 8013df9a8dfSCaroline Tice 802a7015092SGreg Clayton uint32_t 803a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const 804a7015092SGreg Clayton { 805a7015092SGreg Clayton if (m_opaque_sp) 806a7015092SGreg Clayton return m_opaque_sp->GetTerminalWidth (); 807a7015092SGreg Clayton return 0; 808a7015092SGreg Clayton } 809a7015092SGreg Clayton 810a7015092SGreg Clayton void 811a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width) 812a7015092SGreg Clayton { 813a7015092SGreg Clayton if (m_opaque_sp) 814a7015092SGreg Clayton m_opaque_sp->SetTerminalWidth (term_width); 815a7015092SGreg Clayton } 816a7015092SGreg Clayton 817a7015092SGreg Clayton const char * 818a7015092SGreg Clayton SBDebugger::GetPrompt() const 819a7015092SGreg Clayton { 820431ce678SGreg Clayton LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 821ceb6b139SCaroline Tice 822ceb6b139SCaroline Tice if (log) 823cfd1acedSGreg Clayton log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(), 824750cd175SCaroline Tice (m_opaque_sp ? m_opaque_sp->GetPrompt() : "")); 825ceb6b139SCaroline Tice 826a7015092SGreg Clayton if (m_opaque_sp) 827a7015092SGreg Clayton return m_opaque_sp->GetPrompt (); 828a7015092SGreg Clayton return 0; 829a7015092SGreg Clayton } 830a7015092SGreg Clayton 831a7015092SGreg Clayton void 832a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt) 833a7015092SGreg Clayton { 834a7015092SGreg Clayton if (m_opaque_sp) 835a7015092SGreg Clayton m_opaque_sp->SetPrompt (prompt); 836a7015092SGreg Clayton } 837a7015092SGreg Clayton 838a7015092SGreg Clayton 839431ce678SGreg Clayton ScriptLanguage 840a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const 841a7015092SGreg Clayton { 842a7015092SGreg Clayton if (m_opaque_sp) 843a7015092SGreg Clayton return m_opaque_sp->GetScriptLanguage (); 844a7015092SGreg Clayton return eScriptLanguageNone; 845a7015092SGreg Clayton } 846a7015092SGreg Clayton 847a7015092SGreg Clayton void 848431ce678SGreg Clayton SBDebugger::SetScriptLanguage (ScriptLanguage script_lang) 849a7015092SGreg Clayton { 850a7015092SGreg Clayton if (m_opaque_sp) 851af67cecdSGreg Clayton { 852a7015092SGreg Clayton m_opaque_sp->SetScriptLanguage (script_lang); 853a7015092SGreg Clayton } 854af67cecdSGreg Clayton } 855a7015092SGreg Clayton 856e40e4218SJim Ingham bool 857e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value) 858e40e4218SJim Ingham { 859e40e4218SJim Ingham if (m_opaque_sp) 860e40e4218SJim Ingham return m_opaque_sp->SetUseExternalEditor (value); 861e40e4218SJim Ingham return false; 862e40e4218SJim Ingham } 863e40e4218SJim Ingham 864e40e4218SJim Ingham bool 865daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor () 866e40e4218SJim Ingham { 867e40e4218SJim Ingham if (m_opaque_sp) 868daccaa9eSCaroline Tice return m_opaque_sp->GetUseExternalEditor (); 869e40e4218SJim Ingham return false; 870e40e4218SJim Ingham } 871e40e4218SJim Ingham 872dde9cff3SCaroline Tice bool 873dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description) 874dde9cff3SCaroline Tice { 875dde9cff3SCaroline Tice if (m_opaque_sp) 876dde9cff3SCaroline Tice { 877dde9cff3SCaroline Tice const char *name = m_opaque_sp->GetInstanceName().AsCString(); 878431ce678SGreg Clayton user_id_t id = m_opaque_sp->GetID(); 879cfd1acedSGreg Clayton description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id); 880dde9cff3SCaroline Tice } 881dde9cff3SCaroline Tice else 882dde9cff3SCaroline Tice description.Printf ("No value"); 883dde9cff3SCaroline Tice 884dde9cff3SCaroline Tice return true; 885dde9cff3SCaroline Tice } 886efed6131SCaroline Tice 887431ce678SGreg Clayton user_id_t 888efed6131SCaroline Tice SBDebugger::GetID() 889efed6131SCaroline Tice { 890efed6131SCaroline Tice if (m_opaque_sp) 891efed6131SCaroline Tice return m_opaque_sp->GetID(); 892efed6131SCaroline Tice return LLDB_INVALID_UID; 893efed6131SCaroline Tice } 8942289fa48SGreg Clayton 8952289fa48SGreg Clayton 8962289fa48SGreg Clayton SBError 8972289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name) 8982289fa48SGreg Clayton { 8992289fa48SGreg Clayton SBError sb_error; 9002289fa48SGreg Clayton if (m_opaque_sp) 9012289fa48SGreg Clayton { 9022289fa48SGreg Clayton PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref())); 9032289fa48SGreg Clayton 9042289fa48SGreg Clayton if (platform_sp) 9052289fa48SGreg Clayton { 9062289fa48SGreg Clayton bool make_selected = true; 9072289fa48SGreg Clayton m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected); 9082289fa48SGreg Clayton } 9092289fa48SGreg Clayton } 9102289fa48SGreg Clayton return sb_error; 9112289fa48SGreg Clayton } 9122289fa48SGreg Clayton 913fc3f027dSGreg Clayton bool 914f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot) 915f3dd93c8SGreg Clayton { 916f3dd93c8SGreg Clayton if (m_opaque_sp) 917f3dd93c8SGreg Clayton { 918f3dd93c8SGreg Clayton PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform()); 919f3dd93c8SGreg Clayton 920f3dd93c8SGreg Clayton if (platform_sp) 921f3dd93c8SGreg Clayton { 922f3dd93c8SGreg Clayton platform_sp->SetSDKRootDirectory (ConstString (sysroot)); 923f3dd93c8SGreg Clayton return true; 924f3dd93c8SGreg Clayton } 925f3dd93c8SGreg Clayton } 926f3dd93c8SGreg Clayton return false; 927f3dd93c8SGreg Clayton } 928f3dd93c8SGreg Clayton 929f3dd93c8SGreg Clayton bool 930fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const 931fc3f027dSGreg Clayton { 932fc3f027dSGreg Clayton if (m_opaque_sp) 933fc3f027dSGreg Clayton return m_opaque_sp->GetCloseInputOnEOF (); 934fc3f027dSGreg Clayton return false; 935fc3f027dSGreg Clayton } 936fc3f027dSGreg Clayton 937fc3f027dSGreg Clayton void 938fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b) 939fc3f027dSGreg Clayton { 940fc3f027dSGreg Clayton if (m_opaque_sp) 941fc3f027dSGreg Clayton m_opaque_sp->SetCloseInputOnEOF (b); 942fc3f027dSGreg Clayton } 943