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"
18ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
19ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h"
20ca93cc1dSEli Friedman #include "lldb/API/SBInputReader.h"
213df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h"
223df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h"
23dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
243df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h"
253df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h"
263df9a8dfSCaroline Tice #include "lldb/API/SBThread.h"
276eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h"
286eee5aa0SGreg Clayton #include "lldb/Core/State.h"
296eee5aa0SGreg Clayton #include "lldb/Interpreter/Args.h"
306eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
316eee5aa0SGreg Clayton #include "lldb/Target/Process.h"
326eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h"
3330fdc8d8SChris Lattner 
3430fdc8d8SChris Lattner using namespace lldb;
3530fdc8d8SChris Lattner using namespace lldb_private;
3630fdc8d8SChris Lattner 
3730fdc8d8SChris Lattner void
3830fdc8d8SChris Lattner SBDebugger::Initialize ()
3930fdc8d8SChris Lattner {
402d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
41ceb6b139SCaroline Tice 
42ceb6b139SCaroline Tice     if (log)
43ceb6b139SCaroline Tice         log->Printf ("SBDebugger::Initialize ()");
44ceb6b139SCaroline Tice 
45fc36f791SGreg Clayton     SBCommandInterpreter::InitializeSWIG ();
46fc36f791SGreg Clayton 
4730fdc8d8SChris Lattner     Debugger::Initialize();
4830fdc8d8SChris Lattner }
4930fdc8d8SChris Lattner 
5030fdc8d8SChris Lattner void
5130fdc8d8SChris Lattner SBDebugger::Terminate ()
5230fdc8d8SChris Lattner {
5330fdc8d8SChris Lattner     Debugger::Terminate();
5430fdc8d8SChris Lattner }
5530fdc8d8SChris Lattner 
5648e42549SGreg Clayton void
5748e42549SGreg Clayton SBDebugger::Clear ()
5848e42549SGreg Clayton {
592d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
60ceb6b139SCaroline Tice 
61ceb6b139SCaroline Tice     if (log)
6293aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
633d6086f6SCaroline Tice 
643d6086f6SCaroline Tice     if (m_opaque_sp)
653d6086f6SCaroline Tice         m_opaque_sp->CleanUpInputReaders ();
66ceb6b139SCaroline Tice 
6748e42549SGreg Clayton     m_opaque_sp.reset();
6848e42549SGreg Clayton }
6948e42549SGreg Clayton 
706611103cSGreg Clayton SBDebugger
716611103cSGreg Clayton SBDebugger::Create()
726611103cSGreg Clayton {
732d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
74ceb6b139SCaroline Tice 
756611103cSGreg Clayton     SBDebugger debugger;
766611103cSGreg Clayton     debugger.reset(Debugger::CreateInstance());
77ceb6b139SCaroline Tice 
78ceb6b139SCaroline Tice     if (log)
79ceb6b139SCaroline Tice     {
80ceb6b139SCaroline Tice         SBStream sstr;
81ceb6b139SCaroline Tice         debugger.GetDescription (sstr);
8293aa84e8SGreg Clayton         log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
83ceb6b139SCaroline Tice     }
84ceb6b139SCaroline Tice 
856611103cSGreg Clayton     return debugger;
866611103cSGreg Clayton }
876611103cSGreg Clayton 
88e02657b1SCaroline Tice void
89e02657b1SCaroline Tice SBDebugger::Destroy (SBDebugger &debugger)
90e02657b1SCaroline Tice {
91e02657b1SCaroline Tice     LogSP log (lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
92e02657b1SCaroline Tice 
93e02657b1SCaroline Tice     if (log)
94e02657b1SCaroline Tice     {
95e02657b1SCaroline Tice         SBStream sstr;
96e02657b1SCaroline Tice         debugger.GetDescription (sstr);
97e02657b1SCaroline Tice         log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
98e02657b1SCaroline Tice     }
99e02657b1SCaroline Tice 
100e02657b1SCaroline Tice     Debugger::Destroy (debugger.m_opaque_sp);
101e02657b1SCaroline Tice 
102e02657b1SCaroline Tice     if (debugger.m_opaque_sp.get() != NULL)
103e02657b1SCaroline Tice         debugger.m_opaque_sp.reset();
104e02657b1SCaroline Tice }
105e02657b1SCaroline Tice 
1066611103cSGreg Clayton SBDebugger::SBDebugger () :
1076611103cSGreg Clayton     m_opaque_sp ()
1086611103cSGreg Clayton {
1096611103cSGreg Clayton }
1106611103cSGreg Clayton 
111efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) :
112efabb123SGreg Clayton     m_opaque_sp (rhs.m_opaque_sp)
113efabb123SGreg Clayton {
114efabb123SGreg Clayton }
115efabb123SGreg Clayton 
116efabb123SGreg Clayton SBDebugger &
117efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs)
118efabb123SGreg Clayton {
119efabb123SGreg Clayton     if (this != &rhs)
120efabb123SGreg Clayton     {
121efabb123SGreg Clayton         m_opaque_sp = rhs.m_opaque_sp;
122efabb123SGreg Clayton     }
123efabb123SGreg Clayton     return *this;
124efabb123SGreg Clayton }
125efabb123SGreg Clayton 
1266611103cSGreg Clayton SBDebugger::~SBDebugger ()
1276611103cSGreg Clayton {
1286611103cSGreg Clayton }
1296611103cSGreg Clayton 
1306611103cSGreg Clayton bool
1316611103cSGreg Clayton SBDebugger::IsValid() const
1326611103cSGreg Clayton {
1336611103cSGreg Clayton     return m_opaque_sp.get() != NULL;
1346611103cSGreg Clayton }
1356611103cSGreg Clayton 
1366611103cSGreg Clayton 
13730fdc8d8SChris Lattner void
13830fdc8d8SChris Lattner SBDebugger::SetAsync (bool b)
13930fdc8d8SChris Lattner {
1406611103cSGreg Clayton     if (m_opaque_sp)
1416611103cSGreg Clayton         m_opaque_sp->SetAsyncExecution(b);
14230fdc8d8SChris Lattner }
14330fdc8d8SChris Lattner 
1446eee5aa0SGreg Clayton void
1456eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b)
1466eee5aa0SGreg Clayton {
1476eee5aa0SGreg Clayton     if (m_opaque_sp)
1486eee5aa0SGreg Clayton         m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
1496eee5aa0SGreg Clayton }
1506eee5aa0SGreg Clayton 
15130fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
15230fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session.
15330fdc8d8SChris Lattner void
15430fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
15530fdc8d8SChris Lattner {
1562d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
157ceb6b139SCaroline Tice 
158ceb6b139SCaroline Tice     if (log)
159cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
160cfd1acedSGreg Clayton                      fh, transfer_ownership);
161ceb6b139SCaroline Tice 
1626611103cSGreg Clayton     if (m_opaque_sp)
1636611103cSGreg Clayton         m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
16430fdc8d8SChris Lattner }
16530fdc8d8SChris Lattner 
16630fdc8d8SChris Lattner void
16730fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
16830fdc8d8SChris Lattner {
1692d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
170ceb6b139SCaroline Tice 
171ceb6b139SCaroline Tice 
172ceb6b139SCaroline Tice     if (log)
173cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
174cfd1acedSGreg Clayton                      fh, transfer_ownership);
175ceb6b139SCaroline Tice 
1766611103cSGreg Clayton     if (m_opaque_sp)
1776611103cSGreg Clayton         m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
17830fdc8d8SChris Lattner }
17930fdc8d8SChris Lattner 
18030fdc8d8SChris Lattner void
18130fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
18230fdc8d8SChris Lattner {
1832d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
184ceb6b139SCaroline Tice 
185ceb6b139SCaroline Tice 
186ceb6b139SCaroline Tice     if (log)
187cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
188cfd1acedSGreg Clayton                      fh, transfer_ownership);
189ceb6b139SCaroline Tice 
1906611103cSGreg Clayton     if (m_opaque_sp)
1916611103cSGreg Clayton         m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
19230fdc8d8SChris Lattner }
19330fdc8d8SChris Lattner 
19430fdc8d8SChris Lattner FILE *
19530fdc8d8SChris Lattner SBDebugger::GetInputFileHandle ()
19630fdc8d8SChris Lattner {
1976611103cSGreg Clayton     if (m_opaque_sp)
19851b1e2d2SGreg Clayton         return m_opaque_sp->GetInputFile().GetStream();
1996611103cSGreg Clayton     return NULL;
20030fdc8d8SChris Lattner }
20130fdc8d8SChris Lattner 
20230fdc8d8SChris Lattner FILE *
20330fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle ()
20430fdc8d8SChris Lattner {
2056611103cSGreg Clayton     if (m_opaque_sp)
20651b1e2d2SGreg Clayton         return m_opaque_sp->GetOutputFile().GetStream();
2076611103cSGreg Clayton     return NULL;
20830fdc8d8SChris Lattner }
20930fdc8d8SChris Lattner 
21030fdc8d8SChris Lattner FILE *
21130fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle ()
21230fdc8d8SChris Lattner {
2136611103cSGreg Clayton     if (m_opaque_sp)
21451b1e2d2SGreg Clayton         return m_opaque_sp->GetErrorFile().GetStream();
2156611103cSGreg Clayton     return NULL;
21630fdc8d8SChris Lattner }
21730fdc8d8SChris Lattner 
21830fdc8d8SChris Lattner SBCommandInterpreter
21930fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter ()
22030fdc8d8SChris Lattner {
2212d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
222ceb6b139SCaroline Tice 
2236611103cSGreg Clayton     SBCommandInterpreter sb_interpreter;
2246611103cSGreg Clayton     if (m_opaque_sp)
2256611103cSGreg Clayton         sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
226ceb6b139SCaroline Tice 
227750cd175SCaroline Tice     if (log)
22893aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
229750cd175SCaroline Tice                      m_opaque_sp.get(), sb_interpreter.get());
230750cd175SCaroline Tice 
23130fdc8d8SChris Lattner     return sb_interpreter;
23230fdc8d8SChris Lattner }
23330fdc8d8SChris Lattner 
23430fdc8d8SChris Lattner void
23530fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command)
23630fdc8d8SChris Lattner {
2376611103cSGreg Clayton     if (m_opaque_sp)
2386611103cSGreg Clayton     {
239af67cecdSGreg Clayton         TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
240af67cecdSGreg Clayton         Mutex::Locker api_locker;
241af67cecdSGreg Clayton         if (target_sp)
242af67cecdSGreg Clayton             api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
243af67cecdSGreg Clayton 
2446611103cSGreg Clayton         SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
24530fdc8d8SChris Lattner         SBCommandReturnObject result;
24630fdc8d8SChris Lattner 
24730fdc8d8SChris Lattner         sb_interpreter.HandleCommand (command, result, false);
24830fdc8d8SChris Lattner 
24930fdc8d8SChris Lattner         if (GetErrorFileHandle() != NULL)
25030fdc8d8SChris Lattner             result.PutError (GetErrorFileHandle());
25130fdc8d8SChris Lattner         if (GetOutputFileHandle() != NULL)
25230fdc8d8SChris Lattner             result.PutOutput (GetOutputFileHandle());
25330fdc8d8SChris Lattner 
2546611103cSGreg Clayton         if (m_opaque_sp->GetAsyncExecution() == false)
25530fdc8d8SChris Lattner         {
2566611103cSGreg Clayton             SBProcess process(GetCommandInterpreter().GetProcess ());
25730fdc8d8SChris Lattner             if (process.IsValid())
25830fdc8d8SChris Lattner             {
25930fdc8d8SChris Lattner                 EventSP event_sp;
2606611103cSGreg Clayton                 Listener &lldb_listener = m_opaque_sp->GetListener();
26130fdc8d8SChris Lattner                 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
26230fdc8d8SChris Lattner                 {
26330fdc8d8SChris Lattner                     SBEvent event(event_sp);
26430fdc8d8SChris Lattner                     HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
26530fdc8d8SChris Lattner                 }
26630fdc8d8SChris Lattner             }
26730fdc8d8SChris Lattner         }
26830fdc8d8SChris Lattner     }
2696611103cSGreg Clayton }
27030fdc8d8SChris Lattner 
27130fdc8d8SChris Lattner SBListener
27230fdc8d8SChris Lattner SBDebugger::GetListener ()
27330fdc8d8SChris Lattner {
2742d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
275ceb6b139SCaroline Tice 
2766611103cSGreg Clayton     SBListener sb_listener;
2776611103cSGreg Clayton     if (m_opaque_sp)
2786611103cSGreg Clayton         sb_listener.reset(&m_opaque_sp->GetListener(), false);
279ceb6b139SCaroline Tice 
280750cd175SCaroline Tice     if (log)
28193aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
282750cd175SCaroline Tice                      sb_listener.get());
283750cd175SCaroline Tice 
28430fdc8d8SChris Lattner     return sb_listener;
28530fdc8d8SChris Lattner }
28630fdc8d8SChris Lattner 
28730fdc8d8SChris Lattner void
28830fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
28930fdc8d8SChris Lattner {
290af67cecdSGreg Clayton     if (!process.IsValid())
291af67cecdSGreg Clayton         return;
292af67cecdSGreg Clayton 
29330fdc8d8SChris Lattner     const uint32_t event_type = event.GetType();
29430fdc8d8SChris Lattner     char stdio_buffer[1024];
29530fdc8d8SChris Lattner     size_t len;
29630fdc8d8SChris Lattner 
297af67cecdSGreg Clayton     Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex());
298af67cecdSGreg Clayton 
299af67cecdSGreg Clayton     if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
30030fdc8d8SChris Lattner     {
301af67cecdSGreg Clayton         // Drain stdout when we stop just in case we have any bytes
30230fdc8d8SChris Lattner         while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
30330fdc8d8SChris Lattner             if (out != NULL)
30430fdc8d8SChris Lattner                 ::fwrite (stdio_buffer, 1, len, out);
30530fdc8d8SChris Lattner     }
306af67cecdSGreg Clayton 
307af67cecdSGreg Clayton     if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
30830fdc8d8SChris Lattner     {
309af67cecdSGreg Clayton         // Drain stderr when we stop just in case we have any bytes
31030fdc8d8SChris Lattner         while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
311af67cecdSGreg Clayton             if (err != NULL)
312af67cecdSGreg Clayton                 ::fwrite (stdio_buffer, 1, len, err);
31330fdc8d8SChris Lattner     }
314af67cecdSGreg Clayton 
315af67cecdSGreg Clayton     if (event_type & Process::eBroadcastBitStateChanged)
31630fdc8d8SChris Lattner     {
31730fdc8d8SChris Lattner         StateType event_state = SBProcess::GetStateFromEvent (event);
31830fdc8d8SChris Lattner 
31930fdc8d8SChris Lattner         if (event_state == eStateInvalid)
32030fdc8d8SChris Lattner             return;
32130fdc8d8SChris Lattner 
32230fdc8d8SChris Lattner         bool is_stopped = StateIsStoppedState (event_state);
32330fdc8d8SChris Lattner         if (!is_stopped)
3242976d00aSJim Ingham             process.ReportEventState (event, out);
32530fdc8d8SChris Lattner     }
32630fdc8d8SChris Lattner }
32730fdc8d8SChris Lattner 
32830fdc8d8SChris Lattner SBSourceManager &
32930fdc8d8SChris Lattner SBDebugger::GetSourceManager ()
33030fdc8d8SChris Lattner {
33130fdc8d8SChris Lattner     static SourceManager g_lldb_source_manager;
332efabb123SGreg Clayton     static SBSourceManager g_sb_source_manager (&g_lldb_source_manager);
33330fdc8d8SChris Lattner     return g_sb_source_manager;
33430fdc8d8SChris Lattner }
33530fdc8d8SChris Lattner 
33630fdc8d8SChris Lattner 
33730fdc8d8SChris Lattner bool
33830fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
33930fdc8d8SChris Lattner {
34030fdc8d8SChris Lattner     if (arch_name && arch_name_len)
34130fdc8d8SChris Lattner     {
342daccaa9eSCaroline Tice         ArchSpec default_arch = lldb_private::Target::GetDefaultArchitecture ();
343daccaa9eSCaroline Tice 
34430fdc8d8SChris Lattner         if (default_arch.IsValid())
34530fdc8d8SChris Lattner         {
34664195a2cSGreg Clayton             ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
34730fdc8d8SChris Lattner             return true;
34830fdc8d8SChris Lattner         }
34930fdc8d8SChris Lattner     }
35030fdc8d8SChris Lattner     if (arch_name && arch_name_len)
35130fdc8d8SChris Lattner         arch_name[0] = '\0';
35230fdc8d8SChris Lattner     return false;
35330fdc8d8SChris Lattner }
35430fdc8d8SChris Lattner 
35530fdc8d8SChris Lattner 
35630fdc8d8SChris Lattner bool
35730fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name)
35830fdc8d8SChris Lattner {
35930fdc8d8SChris Lattner     if (arch_name)
36030fdc8d8SChris Lattner     {
361*eb0103f2SGreg Clayton         ArchSpec arch (arch_name, NULL);
36230fdc8d8SChris Lattner         if (arch.IsValid())
36330fdc8d8SChris Lattner         {
364daccaa9eSCaroline Tice             lldb_private::Target::SetDefaultArchitecture (arch);
36530fdc8d8SChris Lattner             return true;
36630fdc8d8SChris Lattner         }
36730fdc8d8SChris Lattner     }
36830fdc8d8SChris Lattner     return false;
36930fdc8d8SChris Lattner }
37030fdc8d8SChris Lattner 
37130fdc8d8SChris Lattner ScriptLanguage
37230fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name)
37330fdc8d8SChris Lattner {
374af67cecdSGreg Clayton 
37530fdc8d8SChris Lattner     return Args::StringToScriptLanguage (script_language_name,
37630fdc8d8SChris Lattner                                          eScriptLanguageDefault,
37730fdc8d8SChris Lattner                                          NULL);
37830fdc8d8SChris Lattner }
37930fdc8d8SChris Lattner 
38030fdc8d8SChris Lattner const char *
38130fdc8d8SChris Lattner SBDebugger::GetVersionString ()
38230fdc8d8SChris Lattner {
38330fdc8d8SChris Lattner     return lldb_private::GetVersion();
38430fdc8d8SChris Lattner }
38530fdc8d8SChris Lattner 
38630fdc8d8SChris Lattner const char *
38730fdc8d8SChris Lattner SBDebugger::StateAsCString (lldb::StateType state)
38830fdc8d8SChris Lattner {
38930fdc8d8SChris Lattner     return lldb_private::StateAsCString (state);
39030fdc8d8SChris Lattner }
39130fdc8d8SChris Lattner 
39230fdc8d8SChris Lattner bool
39330fdc8d8SChris Lattner SBDebugger::StateIsRunningState (lldb::StateType state)
39430fdc8d8SChris Lattner {
3952d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3964838131bSGreg Clayton 
3974838131bSGreg Clayton     const bool result = lldb_private::StateIsRunningState (state);
3984838131bSGreg Clayton     if (log)
3994838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
4004838131bSGreg Clayton                      lldb_private::StateAsCString (state), result);
4014838131bSGreg Clayton 
4024838131bSGreg Clayton     return result;
40330fdc8d8SChris Lattner }
40430fdc8d8SChris Lattner 
40530fdc8d8SChris Lattner bool
40630fdc8d8SChris Lattner SBDebugger::StateIsStoppedState (lldb::StateType state)
40730fdc8d8SChris Lattner {
4082d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
409ceb6b139SCaroline Tice 
4104838131bSGreg Clayton     const bool result = lldb_private::StateIsStoppedState (state);
411ceb6b139SCaroline Tice     if (log)
4124838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
4134838131bSGreg Clayton                      lldb_private::StateAsCString (state), result);
414ceb6b139SCaroline Tice 
4154838131bSGreg Clayton     return result;
41630fdc8d8SChris Lattner }
41730fdc8d8SChris Lattner 
41830fdc8d8SChris Lattner 
41930fdc8d8SChris Lattner SBTarget
42030fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
42130fdc8d8SChris Lattner                                                  const char *target_triple)
42230fdc8d8SChris Lattner {
4236611103cSGreg Clayton     SBTarget target;
4246611103cSGreg Clayton     if (m_opaque_sp)
4256611103cSGreg Clayton     {
42630fdc8d8SChris Lattner         ArchSpec arch;
427274060b6SGreg Clayton         FileSpec file_spec (filename, true);
428*eb0103f2SGreg Clayton         arch.SetTriple (target_triple, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
42930fdc8d8SChris Lattner         TargetSP target_sp;
430e996fd30SGreg Clayton         Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, true, target_sp));
4316611103cSGreg Clayton         target.reset (target_sp);
4326611103cSGreg Clayton     }
4334838131bSGreg Clayton 
4342d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4354838131bSGreg Clayton     if (log)
4364838131bSGreg Clayton     {
437cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
4384838131bSGreg Clayton                      m_opaque_sp.get(), filename, target_triple, target.get());
4394838131bSGreg Clayton     }
4404838131bSGreg Clayton 
44130fdc8d8SChris Lattner     return target;
44230fdc8d8SChris Lattner }
44330fdc8d8SChris Lattner 
44430fdc8d8SChris Lattner SBTarget
44564195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
44630fdc8d8SChris Lattner {
4472d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
448ceb6b139SCaroline Tice 
4496611103cSGreg Clayton     SBTarget target;
4506611103cSGreg Clayton     if (m_opaque_sp)
4516611103cSGreg Clayton     {
452274060b6SGreg Clayton         FileSpec file (filename, true);
45364195a2cSGreg Clayton         ArchSpec arch;
45430fdc8d8SChris Lattner         TargetSP target_sp;
45530fdc8d8SChris Lattner         Error error;
45630fdc8d8SChris Lattner 
45764195a2cSGreg Clayton         if (arch_cstr)
458*eb0103f2SGreg Clayton             arch.SetTriple (arch_cstr, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
45964195a2cSGreg Clayton 
460e996fd30SGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
46130fdc8d8SChris Lattner 
46230fdc8d8SChris Lattner         if (error.Success())
4636611103cSGreg Clayton         {
4642976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
4656611103cSGreg Clayton             target.reset(target_sp);
4666611103cSGreg Clayton         }
4676611103cSGreg Clayton     }
468ceb6b139SCaroline Tice 
469ceb6b139SCaroline Tice     if (log)
470ceb6b139SCaroline Tice     {
471cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
47264195a2cSGreg Clayton                      m_opaque_sp.get(), filename, arch_cstr, target.get());
473ceb6b139SCaroline Tice     }
474ceb6b139SCaroline Tice 
4756611103cSGreg Clayton     return target;
47630fdc8d8SChris Lattner }
47730fdc8d8SChris Lattner 
47830fdc8d8SChris Lattner SBTarget
47930fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename)
48030fdc8d8SChris Lattner {
4816611103cSGreg Clayton     SBTarget target;
4826611103cSGreg Clayton     if (m_opaque_sp)
4836611103cSGreg Clayton     {
484274060b6SGreg Clayton         FileSpec file (filename, true);
485daccaa9eSCaroline Tice         ArchSpec arch = lldb_private::Target::GetDefaultArchitecture ();
48630fdc8d8SChris Lattner         TargetSP target_sp;
48730fdc8d8SChris Lattner         Error error;
48830fdc8d8SChris Lattner 
489e996fd30SGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
49030fdc8d8SChris Lattner 
4916611103cSGreg Clayton         if (error.Success())
4926611103cSGreg Clayton         {
4932976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
4946611103cSGreg Clayton             target.reset (target_sp);
4956611103cSGreg Clayton         }
4966611103cSGreg Clayton     }
4972d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4984838131bSGreg Clayton     if (log)
4994838131bSGreg Clayton     {
500cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
5014838131bSGreg Clayton                      m_opaque_sp.get(), filename, target.get());
5024838131bSGreg Clayton     }
5036611103cSGreg Clayton     return target;
50430fdc8d8SChris Lattner }
50530fdc8d8SChris Lattner 
50630fdc8d8SChris Lattner SBTarget
50730fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx)
50830fdc8d8SChris Lattner {
5096611103cSGreg Clayton     SBTarget sb_target;
5106611103cSGreg Clayton     if (m_opaque_sp)
511af67cecdSGreg Clayton     {
512af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
5136611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
514af67cecdSGreg Clayton     }
51530fdc8d8SChris Lattner     return sb_target;
51630fdc8d8SChris Lattner }
51730fdc8d8SChris Lattner 
51830fdc8d8SChris Lattner SBTarget
51930fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid)
52030fdc8d8SChris Lattner {
5216611103cSGreg Clayton     SBTarget sb_target;
5226611103cSGreg Clayton     if (m_opaque_sp)
523af67cecdSGreg Clayton     {
524af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
5256611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
526af67cecdSGreg Clayton     }
52730fdc8d8SChris Lattner     return sb_target;
52830fdc8d8SChris Lattner }
52930fdc8d8SChris Lattner 
53030fdc8d8SChris Lattner SBTarget
53130fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
53230fdc8d8SChris Lattner {
5336611103cSGreg Clayton     SBTarget sb_target;
5346611103cSGreg Clayton     if (m_opaque_sp && filename && filename[0])
5356611103cSGreg Clayton     {
536af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
537*eb0103f2SGreg Clayton         ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
538274060b6SGreg Clayton         TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
5396611103cSGreg Clayton         sb_target.reset(target_sp);
5406611103cSGreg Clayton     }
5416611103cSGreg Clayton     return sb_target;
54230fdc8d8SChris Lattner }
54330fdc8d8SChris Lattner 
54430fdc8d8SChris Lattner SBTarget
54530fdc8d8SChris Lattner SBDebugger::FindTargetWithLLDBProcess (const lldb::ProcessSP &process_sp)
54630fdc8d8SChris Lattner {
5476611103cSGreg Clayton     SBTarget sb_target;
5486611103cSGreg Clayton     if (m_opaque_sp)
549af67cecdSGreg Clayton     {
550af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
5516611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
552af67cecdSGreg Clayton     }
55330fdc8d8SChris Lattner     return sb_target;
55430fdc8d8SChris Lattner }
55530fdc8d8SChris Lattner 
55630fdc8d8SChris Lattner 
55730fdc8d8SChris Lattner uint32_t
55830fdc8d8SChris Lattner SBDebugger::GetNumTargets ()
55930fdc8d8SChris Lattner {
5606611103cSGreg Clayton     if (m_opaque_sp)
561af67cecdSGreg Clayton     {
562af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
5636611103cSGreg Clayton         return m_opaque_sp->GetTargetList().GetNumTargets ();
564af67cecdSGreg Clayton     }
5656611103cSGreg Clayton     return 0;
5666611103cSGreg Clayton }
56730fdc8d8SChris Lattner 
56830fdc8d8SChris Lattner SBTarget
5692976d00aSJim Ingham SBDebugger::GetSelectedTarget ()
57030fdc8d8SChris Lattner {
5712d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
572ceb6b139SCaroline Tice 
5736611103cSGreg Clayton     SBTarget sb_target;
5746611103cSGreg Clayton     if (m_opaque_sp)
575af67cecdSGreg Clayton     {
576af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
5772976d00aSJim Ingham         sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
578af67cecdSGreg Clayton     }
579ceb6b139SCaroline Tice 
580ceb6b139SCaroline Tice     if (log)
581ceb6b139SCaroline Tice     {
582ceb6b139SCaroline Tice         SBStream sstr;
583ceb6b139SCaroline Tice         sb_target.GetDescription (sstr, lldb::eDescriptionLevelBrief);
58493aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
585750cd175SCaroline Tice                      sb_target.get(), sstr.GetData());
586ceb6b139SCaroline Tice     }
587ceb6b139SCaroline Tice 
58830fdc8d8SChris Lattner     return sb_target;
58930fdc8d8SChris Lattner }
59030fdc8d8SChris Lattner 
59130fdc8d8SChris Lattner void
59230fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
59330fdc8d8SChris Lattner {
5942d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
595ceb6b139SCaroline Tice 
596ceb6b139SCaroline Tice     if (log)
597cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
598cfd1acedSGreg Clayton                      baton, (int) data_len, (const char *) data, data_len);
599ceb6b139SCaroline Tice 
6006611103cSGreg Clayton     if (m_opaque_sp)
6016611103cSGreg Clayton         m_opaque_sp->DispatchInput ((const char *) data, data_len);
60230fdc8d8SChris Lattner }
60330fdc8d8SChris Lattner 
60430fdc8d8SChris Lattner void
605efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt ()
606efed6131SCaroline Tice {
607efed6131SCaroline Tice     if (m_opaque_sp)
608efed6131SCaroline Tice         m_opaque_sp->DispatchInputInterrupt ();
609efed6131SCaroline Tice }
610efed6131SCaroline Tice 
611efed6131SCaroline Tice void
612efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile ()
613efed6131SCaroline Tice {
614efed6131SCaroline Tice     if (m_opaque_sp)
615efed6131SCaroline Tice         m_opaque_sp->DispatchInputEndOfFile ();
616efed6131SCaroline Tice }
617efed6131SCaroline Tice 
618efed6131SCaroline Tice void
61930fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader)
62030fdc8d8SChris Lattner {
6212d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
622ceb6b139SCaroline Tice 
623ceb6b139SCaroline Tice     if (log)
62493aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
625ceb6b139SCaroline Tice 
6266611103cSGreg Clayton     if (m_opaque_sp && reader.IsValid())
62730fdc8d8SChris Lattner     {
628af67cecdSGreg Clayton         TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
629af67cecdSGreg Clayton         Mutex::Locker api_locker;
630af67cecdSGreg Clayton         if (target_sp)
631af67cecdSGreg Clayton             api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
63230fdc8d8SChris Lattner         InputReaderSP reader_sp(*reader);
6336611103cSGreg Clayton         m_opaque_sp->PushInputReader (reader_sp);
63430fdc8d8SChris Lattner     }
63530fdc8d8SChris Lattner }
6366611103cSGreg Clayton 
6376611103cSGreg Clayton void
6386611103cSGreg Clayton SBDebugger::reset (const lldb::DebuggerSP &debugger_sp)
6396611103cSGreg Clayton {
6406611103cSGreg Clayton     m_opaque_sp = debugger_sp;
6416611103cSGreg Clayton }
6426611103cSGreg Clayton 
6436611103cSGreg Clayton Debugger *
6446611103cSGreg Clayton SBDebugger::get () const
6456611103cSGreg Clayton {
6466611103cSGreg Clayton     return m_opaque_sp.get();
6476611103cSGreg Clayton }
6486611103cSGreg Clayton 
6496611103cSGreg Clayton Debugger &
6506611103cSGreg Clayton SBDebugger::ref () const
6516611103cSGreg Clayton {
6526611103cSGreg Clayton     assert (m_opaque_sp.get());
6536611103cSGreg Clayton     return *m_opaque_sp;
6546611103cSGreg Clayton }
6556611103cSGreg Clayton 
6566611103cSGreg Clayton 
657ebc1bb27SCaroline Tice SBDebugger
658ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id)
659ebc1bb27SCaroline Tice {
660af67cecdSGreg Clayton     // No need to lock, the debugger list is thread safe
661ebc1bb27SCaroline Tice     SBDebugger sb_debugger;
662ebc1bb27SCaroline Tice     lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
663ebc1bb27SCaroline Tice     if (debugger_sp)
664ebc1bb27SCaroline Tice         sb_debugger.reset (debugger_sp);
665ebc1bb27SCaroline Tice     return sb_debugger;
666ebc1bb27SCaroline Tice }
667e40e4218SJim Ingham 
668dd759857SCaroline Tice const char *
669dd759857SCaroline Tice SBDebugger::GetInstanceName()
670dd759857SCaroline Tice {
671dd759857SCaroline Tice     if (m_opaque_sp)
672dd759857SCaroline Tice         return m_opaque_sp->GetInstanceName().AsCString();
673dd759857SCaroline Tice     else
674dd759857SCaroline Tice         return NULL;
675dd759857SCaroline Tice }
676dd759857SCaroline Tice 
6773df9a8dfSCaroline Tice SBError
678dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
6793df9a8dfSCaroline Tice {
6803df9a8dfSCaroline Tice     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
6813df9a8dfSCaroline Tice 
682e0d378b3SGreg Clayton     Error err = root_settings_controller->SetVariable (var_name,
683e0d378b3SGreg Clayton                                                        value,
684e0d378b3SGreg Clayton                                                        eVarSetOperationAssign,
685e0d378b3SGreg Clayton                                                        true,
686101c7c20SCaroline Tice                                                        debugger_instance_name);
6873df9a8dfSCaroline Tice     SBError sb_error;
6883df9a8dfSCaroline Tice     sb_error.SetError (err);
6893df9a8dfSCaroline Tice 
6903df9a8dfSCaroline Tice     return sb_error;
6913df9a8dfSCaroline Tice }
6923df9a8dfSCaroline Tice 
6933df9a8dfSCaroline Tice lldb::SBStringList
694dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
6953df9a8dfSCaroline Tice {
6963df9a8dfSCaroline Tice     SBStringList ret_value;
697e0d378b3SGreg Clayton     SettableVariableType var_type;
698508265afSJohnny Chen     lldb_private::Error err;
699101c7c20SCaroline Tice 
7003df9a8dfSCaroline Tice     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
7013df9a8dfSCaroline Tice 
702daccaa9eSCaroline Tice     StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
703daccaa9eSCaroline Tice 
704daccaa9eSCaroline Tice     if (err.Success())
705daccaa9eSCaroline Tice     {
706311adf3dSChris Lattner         for (unsigned i = 0; i != value.GetSize(); ++i)
7073df9a8dfSCaroline Tice             ret_value.AppendString (value.GetStringAtIndex(i));
708daccaa9eSCaroline Tice     }
709daccaa9eSCaroline Tice     else
710daccaa9eSCaroline Tice     {
711daccaa9eSCaroline Tice         ret_value.AppendString (err.AsCString());
712daccaa9eSCaroline Tice     }
713daccaa9eSCaroline Tice 
7143df9a8dfSCaroline Tice 
7153df9a8dfSCaroline Tice     return ret_value;
7163df9a8dfSCaroline Tice }
7173df9a8dfSCaroline Tice 
718a7015092SGreg Clayton uint32_t
719a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const
720a7015092SGreg Clayton {
721a7015092SGreg Clayton     if (m_opaque_sp)
722a7015092SGreg Clayton         return m_opaque_sp->GetTerminalWidth ();
723a7015092SGreg Clayton     return 0;
724a7015092SGreg Clayton }
725a7015092SGreg Clayton 
726a7015092SGreg Clayton void
727a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width)
728a7015092SGreg Clayton {
729a7015092SGreg Clayton     if (m_opaque_sp)
730a7015092SGreg Clayton         m_opaque_sp->SetTerminalWidth (term_width);
731a7015092SGreg Clayton }
732a7015092SGreg Clayton 
733a7015092SGreg Clayton const char *
734a7015092SGreg Clayton SBDebugger::GetPrompt() const
735a7015092SGreg Clayton {
7362d4edfbcSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
737ceb6b139SCaroline Tice 
738ceb6b139SCaroline Tice     if (log)
739cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
740750cd175SCaroline Tice                      (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
741ceb6b139SCaroline Tice 
742a7015092SGreg Clayton     if (m_opaque_sp)
743a7015092SGreg Clayton         return m_opaque_sp->GetPrompt ();
744a7015092SGreg Clayton     return 0;
745a7015092SGreg Clayton }
746a7015092SGreg Clayton 
747a7015092SGreg Clayton void
748a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt)
749a7015092SGreg Clayton {
750a7015092SGreg Clayton     if (m_opaque_sp)
751a7015092SGreg Clayton         m_opaque_sp->SetPrompt (prompt);
752a7015092SGreg Clayton }
753a7015092SGreg Clayton 
754a7015092SGreg Clayton 
755a7015092SGreg Clayton lldb::ScriptLanguage
756a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const
757a7015092SGreg Clayton {
758a7015092SGreg Clayton     if (m_opaque_sp)
759a7015092SGreg Clayton         return m_opaque_sp->GetScriptLanguage ();
760a7015092SGreg Clayton     return eScriptLanguageNone;
761a7015092SGreg Clayton }
762a7015092SGreg Clayton 
763a7015092SGreg Clayton void
764a7015092SGreg Clayton SBDebugger::SetScriptLanguage (lldb::ScriptLanguage script_lang)
765a7015092SGreg Clayton {
766a7015092SGreg Clayton     if (m_opaque_sp)
767af67cecdSGreg Clayton     {
768a7015092SGreg Clayton         m_opaque_sp->SetScriptLanguage (script_lang);
769a7015092SGreg Clayton     }
770af67cecdSGreg Clayton }
771a7015092SGreg Clayton 
772e40e4218SJim Ingham bool
773e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value)
774e40e4218SJim Ingham {
775e40e4218SJim Ingham     if (m_opaque_sp)
776e40e4218SJim Ingham         return m_opaque_sp->SetUseExternalEditor (value);
777e40e4218SJim Ingham     return false;
778e40e4218SJim Ingham }
779e40e4218SJim Ingham 
780e40e4218SJim Ingham bool
781daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor ()
782e40e4218SJim Ingham {
783e40e4218SJim Ingham     if (m_opaque_sp)
784daccaa9eSCaroline Tice         return m_opaque_sp->GetUseExternalEditor ();
785e40e4218SJim Ingham     return false;
786e40e4218SJim Ingham }
787e40e4218SJim Ingham 
788dde9cff3SCaroline Tice bool
789dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description)
790dde9cff3SCaroline Tice {
791dde9cff3SCaroline Tice     if (m_opaque_sp)
792dde9cff3SCaroline Tice     {
793dde9cff3SCaroline Tice         const char *name = m_opaque_sp->GetInstanceName().AsCString();
794dde9cff3SCaroline Tice         lldb::user_id_t id = m_opaque_sp->GetID();
795cfd1acedSGreg Clayton         description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id);
796dde9cff3SCaroline Tice     }
797dde9cff3SCaroline Tice     else
798dde9cff3SCaroline Tice         description.Printf ("No value");
799dde9cff3SCaroline Tice 
800dde9cff3SCaroline Tice     return true;
801dde9cff3SCaroline Tice }
802efed6131SCaroline Tice 
803efed6131SCaroline Tice lldb::user_id_t
804efed6131SCaroline Tice SBDebugger::GetID()
805efed6131SCaroline Tice {
806efed6131SCaroline Tice     if (m_opaque_sp)
807efed6131SCaroline Tice         return m_opaque_sp->GetID();
808efed6131SCaroline Tice     return LLDB_INVALID_UID;
809efed6131SCaroline Tice }
810