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 
1230fdc8d8SChris Lattner #include "lldb/lldb-include.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 {
40ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
41ceb6b139SCaroline Tice 
42ceb6b139SCaroline Tice     if (log)
43ceb6b139SCaroline Tice         log->Printf ("SBDebugger::Initialize ()");
44ceb6b139SCaroline Tice 
4530fdc8d8SChris Lattner     Debugger::Initialize();
4630fdc8d8SChris Lattner }
4730fdc8d8SChris Lattner 
4830fdc8d8SChris Lattner void
4930fdc8d8SChris Lattner SBDebugger::Terminate ()
5030fdc8d8SChris Lattner {
5130fdc8d8SChris Lattner     Debugger::Terminate();
5230fdc8d8SChris Lattner }
5330fdc8d8SChris Lattner 
5448e42549SGreg Clayton void
5548e42549SGreg Clayton SBDebugger::Clear ()
5648e42549SGreg Clayton {
57ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
58ceb6b139SCaroline Tice 
59ceb6b139SCaroline Tice     if (log)
60ceb6b139SCaroline Tice         log->Printf ("SBDebugger::Clear ()");
61ceb6b139SCaroline Tice 
6248e42549SGreg Clayton     m_opaque_sp.reset();
6348e42549SGreg Clayton }
6448e42549SGreg Clayton 
656611103cSGreg Clayton SBDebugger
666611103cSGreg Clayton SBDebugger::Create()
676611103cSGreg Clayton {
68ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
69ceb6b139SCaroline Tice 
70*750cd175SCaroline Tice     //if (log)
71*750cd175SCaroline Tice     //    log->Printf ("SBDebugger::Create ()");
72ceb6b139SCaroline Tice 
736611103cSGreg Clayton     SBDebugger debugger;
746611103cSGreg Clayton     debugger.reset(Debugger::CreateInstance());
75ceb6b139SCaroline Tice 
76ceb6b139SCaroline Tice     if (log)
77ceb6b139SCaroline Tice     {
78ceb6b139SCaroline Tice         SBStream sstr;
79ceb6b139SCaroline Tice         debugger.GetDescription (sstr);
80*750cd175SCaroline Tice         log->Printf ("SBDebugger::Create () => SBDebugger (this.sp = %p, '%s')", debugger.m_opaque_sp.get(), sstr.GetData());
81ceb6b139SCaroline Tice     }
82ceb6b139SCaroline Tice 
836611103cSGreg Clayton     return debugger;
846611103cSGreg Clayton }
856611103cSGreg Clayton 
866611103cSGreg Clayton SBDebugger::SBDebugger () :
876611103cSGreg Clayton     m_opaque_sp ()
886611103cSGreg Clayton {
896611103cSGreg Clayton }
906611103cSGreg Clayton 
916611103cSGreg Clayton SBDebugger::~SBDebugger ()
926611103cSGreg Clayton {
936611103cSGreg Clayton }
946611103cSGreg Clayton 
956611103cSGreg Clayton bool
966611103cSGreg Clayton SBDebugger::IsValid() const
976611103cSGreg Clayton {
986611103cSGreg Clayton     return m_opaque_sp.get() != NULL;
996611103cSGreg Clayton }
1006611103cSGreg Clayton 
1016611103cSGreg Clayton 
10230fdc8d8SChris Lattner void
10330fdc8d8SChris Lattner SBDebugger::SetAsync (bool b)
10430fdc8d8SChris Lattner {
1056611103cSGreg Clayton     if (m_opaque_sp)
1066611103cSGreg Clayton         m_opaque_sp->SetAsyncExecution(b);
10730fdc8d8SChris Lattner }
10830fdc8d8SChris Lattner 
1096eee5aa0SGreg Clayton void
1106eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b)
1116eee5aa0SGreg Clayton {
1126eee5aa0SGreg Clayton     if (m_opaque_sp)
1136eee5aa0SGreg Clayton         m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
1146eee5aa0SGreg Clayton }
1156eee5aa0SGreg Clayton 
11630fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
11730fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session.
11830fdc8d8SChris Lattner void
11930fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
12030fdc8d8SChris Lattner {
121ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
122ceb6b139SCaroline Tice 
123ceb6b139SCaroline Tice     if (log)
124*750cd175SCaroline Tice         log->Printf ("SBDebugger::SetInputFileHandle (this.sp=%p, fh=%p, transfer_ownership='%s')", m_opaque_sp.get(),
125*750cd175SCaroline Tice                      fh, (transfer_ownership ? "true" : "false"));
126ceb6b139SCaroline Tice 
1276611103cSGreg Clayton     if (m_opaque_sp)
1286611103cSGreg Clayton         m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
12930fdc8d8SChris Lattner }
13030fdc8d8SChris Lattner 
13130fdc8d8SChris Lattner void
13230fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
13330fdc8d8SChris Lattner {
134ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
135ceb6b139SCaroline Tice 
136ceb6b139SCaroline Tice 
137ceb6b139SCaroline Tice     if (log)
138*750cd175SCaroline Tice         log->Printf ("SBDebugger::SetOutputFileHandle (this.sp=%p, fh=%p, transfer_ownership='%s')", m_opaque_sp.get(),
139*750cd175SCaroline Tice                      fh, (transfer_ownership ? "true" : "false"));
140ceb6b139SCaroline Tice 
1416611103cSGreg Clayton     if (m_opaque_sp)
1426611103cSGreg Clayton         m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
14330fdc8d8SChris Lattner }
14430fdc8d8SChris Lattner 
14530fdc8d8SChris Lattner void
14630fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
14730fdc8d8SChris Lattner {
148ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
149ceb6b139SCaroline Tice 
150ceb6b139SCaroline Tice 
151ceb6b139SCaroline Tice     if (log)
152*750cd175SCaroline Tice         log->Printf ("SBDebugger::SetErrorFileHandle (this.sp=%p, fh=%p, transfer_ownership='%s')", m_opaque_sp.get(),
153*750cd175SCaroline Tice                      fh, (transfer_ownership ? "true" : "false"));
154ceb6b139SCaroline Tice 
1556611103cSGreg Clayton     if (m_opaque_sp)
1566611103cSGreg Clayton         m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
15730fdc8d8SChris Lattner }
15830fdc8d8SChris Lattner 
15930fdc8d8SChris Lattner FILE *
16030fdc8d8SChris Lattner SBDebugger::GetInputFileHandle ()
16130fdc8d8SChris Lattner {
1626611103cSGreg Clayton     if (m_opaque_sp)
1636611103cSGreg Clayton         return m_opaque_sp->GetInputFileHandle();
1646611103cSGreg Clayton     return NULL;
16530fdc8d8SChris Lattner }
16630fdc8d8SChris Lattner 
16730fdc8d8SChris Lattner FILE *
16830fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle ()
16930fdc8d8SChris Lattner {
1706611103cSGreg Clayton     if (m_opaque_sp)
1716611103cSGreg Clayton         return m_opaque_sp->GetOutputFileHandle();
1726611103cSGreg Clayton     return NULL;
17330fdc8d8SChris Lattner }
17430fdc8d8SChris Lattner 
17530fdc8d8SChris Lattner FILE *
17630fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle ()
17730fdc8d8SChris Lattner {
1786611103cSGreg Clayton     if (m_opaque_sp)
1796611103cSGreg Clayton         return m_opaque_sp->GetErrorFileHandle();
1806611103cSGreg Clayton     return NULL;
18130fdc8d8SChris Lattner }
18230fdc8d8SChris Lattner 
18330fdc8d8SChris Lattner SBCommandInterpreter
18430fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter ()
18530fdc8d8SChris Lattner {
186ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
187ceb6b139SCaroline Tice 
1886611103cSGreg Clayton     SBCommandInterpreter sb_interpreter;
1896611103cSGreg Clayton     if (m_opaque_sp)
1906611103cSGreg Clayton         sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
191ceb6b139SCaroline Tice 
192*750cd175SCaroline Tice     if (log)
193*750cd175SCaroline Tice         log->Printf ("SBDebugger::GetCommandInterpreter (this.sp=%p) => SBCommandInterpreter (this.obj=%p)",
194*750cd175SCaroline Tice                      m_opaque_sp.get(), sb_interpreter.get());
195*750cd175SCaroline Tice 
19630fdc8d8SChris Lattner     return sb_interpreter;
19730fdc8d8SChris Lattner }
19830fdc8d8SChris Lattner 
19930fdc8d8SChris Lattner void
20030fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command)
20130fdc8d8SChris Lattner {
2026611103cSGreg Clayton     if (m_opaque_sp)
2036611103cSGreg Clayton     {
2046611103cSGreg Clayton         SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
20530fdc8d8SChris Lattner         SBCommandReturnObject result;
20630fdc8d8SChris Lattner 
20730fdc8d8SChris Lattner         sb_interpreter.HandleCommand (command, result, false);
20830fdc8d8SChris Lattner 
20930fdc8d8SChris Lattner         if (GetErrorFileHandle() != NULL)
21030fdc8d8SChris Lattner             result.PutError (GetErrorFileHandle());
21130fdc8d8SChris Lattner         if (GetOutputFileHandle() != NULL)
21230fdc8d8SChris Lattner             result.PutOutput (GetOutputFileHandle());
21330fdc8d8SChris Lattner 
2146611103cSGreg Clayton         if (m_opaque_sp->GetAsyncExecution() == false)
21530fdc8d8SChris Lattner         {
2166611103cSGreg Clayton             SBProcess process(GetCommandInterpreter().GetProcess ());
21730fdc8d8SChris Lattner             if (process.IsValid())
21830fdc8d8SChris Lattner             {
21930fdc8d8SChris Lattner                 EventSP event_sp;
2206611103cSGreg Clayton                 Listener &lldb_listener = m_opaque_sp->GetListener();
22130fdc8d8SChris Lattner                 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
22230fdc8d8SChris Lattner                 {
22330fdc8d8SChris Lattner                     SBEvent event(event_sp);
22430fdc8d8SChris Lattner                     HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
22530fdc8d8SChris Lattner                 }
22630fdc8d8SChris Lattner             }
22730fdc8d8SChris Lattner         }
22830fdc8d8SChris Lattner     }
2296611103cSGreg Clayton }
23030fdc8d8SChris Lattner 
23130fdc8d8SChris Lattner SBListener
23230fdc8d8SChris Lattner SBDebugger::GetListener ()
23330fdc8d8SChris Lattner {
234ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
235ceb6b139SCaroline Tice 
2366611103cSGreg Clayton     SBListener sb_listener;
2376611103cSGreg Clayton     if (m_opaque_sp)
2386611103cSGreg Clayton         sb_listener.reset(&m_opaque_sp->GetListener(), false);
239ceb6b139SCaroline Tice 
240*750cd175SCaroline Tice     if (log)
241*750cd175SCaroline Tice         log->Printf ("SBDebugger::GetListener (this.sp=%p) => SBListener (this.obj=%p)", m_opaque_sp.get(),
242*750cd175SCaroline Tice                      sb_listener.get());
243*750cd175SCaroline Tice 
24430fdc8d8SChris Lattner     return sb_listener;
24530fdc8d8SChris Lattner }
24630fdc8d8SChris Lattner 
24730fdc8d8SChris Lattner void
24830fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
24930fdc8d8SChris Lattner {
25030fdc8d8SChris Lattner      const uint32_t event_type = event.GetType();
25130fdc8d8SChris Lattner      char stdio_buffer[1024];
25230fdc8d8SChris Lattner      size_t len;
25330fdc8d8SChris Lattner 
25430fdc8d8SChris Lattner      if (event_type & Process::eBroadcastBitSTDOUT)
25530fdc8d8SChris Lattner      {
25630fdc8d8SChris Lattner          while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
25730fdc8d8SChris Lattner              if (out != NULL)
25830fdc8d8SChris Lattner                  ::fwrite (stdio_buffer, 1, len, out);
25930fdc8d8SChris Lattner      }
26030fdc8d8SChris Lattner      else if (event_type & Process::eBroadcastBitSTDERR)
26130fdc8d8SChris Lattner      {
26230fdc8d8SChris Lattner          while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
26330fdc8d8SChris Lattner              if (out != NULL)
26430fdc8d8SChris Lattner                  ::fwrite (stdio_buffer, 1, len, out);
26530fdc8d8SChris Lattner      }
26630fdc8d8SChris Lattner      else if (event_type & Process::eBroadcastBitStateChanged)
26730fdc8d8SChris Lattner      {
26830fdc8d8SChris Lattner          // Drain any stdout messages.
26930fdc8d8SChris Lattner          while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
27030fdc8d8SChris Lattner              if (out != NULL)
27130fdc8d8SChris Lattner                  ::fwrite (stdio_buffer, 1, len, out);
27230fdc8d8SChris Lattner 
27330fdc8d8SChris Lattner          // Drain any stderr messages.
27430fdc8d8SChris Lattner          while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
27530fdc8d8SChris Lattner              if (out != NULL)
27630fdc8d8SChris Lattner                  ::fwrite (stdio_buffer, 1, len, out);
27730fdc8d8SChris Lattner 
27830fdc8d8SChris Lattner          StateType event_state = SBProcess::GetStateFromEvent (event);
27930fdc8d8SChris Lattner 
28030fdc8d8SChris Lattner          if (event_state == eStateInvalid)
28130fdc8d8SChris Lattner              return;
28230fdc8d8SChris Lattner 
28330fdc8d8SChris Lattner          bool is_stopped = StateIsStoppedState (event_state);
28430fdc8d8SChris Lattner          if (!is_stopped)
2852976d00aSJim Ingham              process.ReportEventState (event, out);
28630fdc8d8SChris Lattner    }
28730fdc8d8SChris Lattner }
28830fdc8d8SChris Lattner 
28930fdc8d8SChris Lattner void
2902976d00aSJim Ingham SBDebugger::UpdateSelectedThread (SBProcess &process)
29130fdc8d8SChris Lattner {
29230fdc8d8SChris Lattner     if (process.IsValid())
29330fdc8d8SChris Lattner     {
2942976d00aSJim Ingham         SBThread curr_thread = process.GetSelectedThread ();
29530fdc8d8SChris Lattner         SBThread thread;
29630fdc8d8SChris Lattner         StopReason curr_thread_stop_reason = eStopReasonInvalid;
29730fdc8d8SChris Lattner         if (curr_thread.IsValid())
29830fdc8d8SChris Lattner         {
29930fdc8d8SChris Lattner             if (curr_thread.GetStopReason() != eStopReasonInvalid)
30030fdc8d8SChris Lattner                 curr_thread_stop_reason = curr_thread.GetStopReason ();
30130fdc8d8SChris Lattner         }
30230fdc8d8SChris Lattner 
30330fdc8d8SChris Lattner         if (! curr_thread.IsValid()
30430fdc8d8SChris Lattner             || curr_thread_stop_reason == eStopReasonInvalid
30530fdc8d8SChris Lattner             || curr_thread_stop_reason == eStopReasonNone)
30630fdc8d8SChris Lattner           {
30730fdc8d8SChris Lattner             // Prefer a thread that has just completed its plan over another thread as current thread.
30830fdc8d8SChris Lattner             SBThread plan_thread;
30930fdc8d8SChris Lattner             SBThread other_thread;
31030fdc8d8SChris Lattner             const size_t num_threads = process.GetNumThreads ();
31130fdc8d8SChris Lattner             size_t i;
31230fdc8d8SChris Lattner             for (i = 0; i < num_threads; ++i)
31330fdc8d8SChris Lattner             {
31430fdc8d8SChris Lattner                 thread = process.GetThreadAtIndex(i);
31530fdc8d8SChris Lattner                 if (thread.GetStopReason () != eStopReasonInvalid)
31630fdc8d8SChris Lattner                 {
31730fdc8d8SChris Lattner                     switch (thread.GetStopReason ())
31830fdc8d8SChris Lattner                     {
31930fdc8d8SChris Lattner                         default:
32030fdc8d8SChris Lattner                         case eStopReasonInvalid:
32130fdc8d8SChris Lattner                         case eStopReasonNone:
32230fdc8d8SChris Lattner                             break;
32330fdc8d8SChris Lattner 
32430fdc8d8SChris Lattner                         case eStopReasonTrace:
32530fdc8d8SChris Lattner                         case eStopReasonBreakpoint:
32630fdc8d8SChris Lattner                         case eStopReasonWatchpoint:
32730fdc8d8SChris Lattner                         case eStopReasonSignal:
32830fdc8d8SChris Lattner                         case eStopReasonException:
32930fdc8d8SChris Lattner                             if (! other_thread.IsValid())
33030fdc8d8SChris Lattner                                 other_thread = thread;
33130fdc8d8SChris Lattner                             break;
33230fdc8d8SChris Lattner                         case eStopReasonPlanComplete:
33330fdc8d8SChris Lattner                             if (! plan_thread.IsValid())
33430fdc8d8SChris Lattner                                 plan_thread = thread;
33530fdc8d8SChris Lattner                             break;
33630fdc8d8SChris Lattner                     }
33730fdc8d8SChris Lattner                 }
33830fdc8d8SChris Lattner             }
33930fdc8d8SChris Lattner             if (plan_thread.IsValid())
3402976d00aSJim Ingham                 process.SetSelectedThreadByID (plan_thread.GetThreadID());
34130fdc8d8SChris Lattner             else if (other_thread.IsValid())
3422976d00aSJim Ingham                 process.SetSelectedThreadByID (other_thread.GetThreadID());
34330fdc8d8SChris Lattner             else
34430fdc8d8SChris Lattner             {
34530fdc8d8SChris Lattner                 if (curr_thread.IsValid())
34630fdc8d8SChris Lattner                     thread = curr_thread;
34730fdc8d8SChris Lattner                 else
34830fdc8d8SChris Lattner                     thread = process.GetThreadAtIndex(0);
34930fdc8d8SChris Lattner 
35030fdc8d8SChris Lattner                 if (thread.IsValid())
3512976d00aSJim Ingham                     process.SetSelectedThreadByID (thread.GetThreadID());
35230fdc8d8SChris Lattner             }
35330fdc8d8SChris Lattner         }
35430fdc8d8SChris Lattner     }
35530fdc8d8SChris Lattner }
35630fdc8d8SChris Lattner 
35730fdc8d8SChris Lattner SBSourceManager &
35830fdc8d8SChris Lattner SBDebugger::GetSourceManager ()
35930fdc8d8SChris Lattner {
36030fdc8d8SChris Lattner     static SourceManager g_lldb_source_manager;
36130fdc8d8SChris Lattner     static SBSourceManager g_sb_source_manager (g_lldb_source_manager);
36230fdc8d8SChris Lattner     return g_sb_source_manager;
36330fdc8d8SChris Lattner }
36430fdc8d8SChris Lattner 
36530fdc8d8SChris Lattner 
36630fdc8d8SChris Lattner bool
36730fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
36830fdc8d8SChris Lattner {
36930fdc8d8SChris Lattner     if (arch_name && arch_name_len)
37030fdc8d8SChris Lattner     {
371daccaa9eSCaroline Tice         ArchSpec default_arch = lldb_private::Target::GetDefaultArchitecture ();
372daccaa9eSCaroline Tice 
37330fdc8d8SChris Lattner         if (default_arch.IsValid())
37430fdc8d8SChris Lattner         {
37530fdc8d8SChris Lattner             ::snprintf (arch_name, arch_name_len, "%s", default_arch.AsCString());
37630fdc8d8SChris Lattner             return true;
37730fdc8d8SChris Lattner         }
37830fdc8d8SChris Lattner     }
37930fdc8d8SChris Lattner     if (arch_name && arch_name_len)
38030fdc8d8SChris Lattner         arch_name[0] = '\0';
38130fdc8d8SChris Lattner     return false;
38230fdc8d8SChris Lattner }
38330fdc8d8SChris Lattner 
38430fdc8d8SChris Lattner 
38530fdc8d8SChris Lattner bool
38630fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name)
38730fdc8d8SChris Lattner {
38830fdc8d8SChris Lattner     if (arch_name)
38930fdc8d8SChris Lattner     {
39030fdc8d8SChris Lattner         ArchSpec arch (arch_name);
39130fdc8d8SChris Lattner         if (arch.IsValid())
39230fdc8d8SChris Lattner         {
393daccaa9eSCaroline Tice             lldb_private::Target::SetDefaultArchitecture (arch);
39430fdc8d8SChris Lattner             return true;
39530fdc8d8SChris Lattner         }
39630fdc8d8SChris Lattner     }
39730fdc8d8SChris Lattner     return false;
39830fdc8d8SChris Lattner }
39930fdc8d8SChris Lattner 
40030fdc8d8SChris Lattner ScriptLanguage
40130fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name)
40230fdc8d8SChris Lattner {
40330fdc8d8SChris Lattner     return Args::StringToScriptLanguage (script_language_name,
40430fdc8d8SChris Lattner                                          eScriptLanguageDefault,
40530fdc8d8SChris Lattner                                          NULL);
40630fdc8d8SChris Lattner }
40730fdc8d8SChris Lattner 
40830fdc8d8SChris Lattner const char *
40930fdc8d8SChris Lattner SBDebugger::GetVersionString ()
41030fdc8d8SChris Lattner {
41130fdc8d8SChris Lattner     return lldb_private::GetVersion();
41230fdc8d8SChris Lattner }
41330fdc8d8SChris Lattner 
41430fdc8d8SChris Lattner const char *
41530fdc8d8SChris Lattner SBDebugger::StateAsCString (lldb::StateType state)
41630fdc8d8SChris Lattner {
417ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
418ceb6b139SCaroline Tice 
419ceb6b139SCaroline Tice     if (log)
420*750cd175SCaroline Tice         log->Printf ("SBDebugger::StateAsCString (state=%d) => '%s'", state,
421*750cd175SCaroline Tice                      lldb_private::StateAsCString (state));
422ceb6b139SCaroline Tice 
42330fdc8d8SChris Lattner     return lldb_private::StateAsCString (state);
42430fdc8d8SChris Lattner }
42530fdc8d8SChris Lattner 
42630fdc8d8SChris Lattner bool
42730fdc8d8SChris Lattner SBDebugger::StateIsRunningState (lldb::StateType state)
42830fdc8d8SChris Lattner {
42930fdc8d8SChris Lattner     return lldb_private::StateIsRunningState (state);
43030fdc8d8SChris Lattner }
43130fdc8d8SChris Lattner 
43230fdc8d8SChris Lattner bool
43330fdc8d8SChris Lattner SBDebugger::StateIsStoppedState (lldb::StateType state)
43430fdc8d8SChris Lattner {
435ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
436ceb6b139SCaroline Tice 
437ceb6b139SCaroline Tice     if (log)
438*750cd175SCaroline Tice         log->Printf ("SBDebugger::StateIsStoppedState (state=%d) => '%s'", state,
439ceb6b139SCaroline Tice                      (lldb_private::StateIsStoppedState (state) ? "true" : "false"));
440ceb6b139SCaroline Tice 
44130fdc8d8SChris Lattner     return lldb_private::StateIsStoppedState (state);
44230fdc8d8SChris Lattner }
44330fdc8d8SChris Lattner 
44430fdc8d8SChris Lattner 
44530fdc8d8SChris Lattner SBTarget
44630fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
44730fdc8d8SChris Lattner                                                  const char *target_triple)
44830fdc8d8SChris Lattner {
4496611103cSGreg Clayton     SBTarget target;
4506611103cSGreg Clayton     if (m_opaque_sp)
4516611103cSGreg Clayton     {
45230fdc8d8SChris Lattner         ArchSpec arch;
453274060b6SGreg Clayton         FileSpec file_spec (filename, true);
45430fdc8d8SChris Lattner         arch.SetArchFromTargetTriple(target_triple);
45530fdc8d8SChris Lattner         TargetSP target_sp;
4566611103cSGreg Clayton         Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, NULL, true, target_sp));
4576611103cSGreg Clayton         target.reset (target_sp);
4586611103cSGreg Clayton     }
45930fdc8d8SChris Lattner     return target;
46030fdc8d8SChris Lattner }
46130fdc8d8SChris Lattner 
46230fdc8d8SChris Lattner SBTarget
46330fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *archname)
46430fdc8d8SChris Lattner {
465ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
466ceb6b139SCaroline Tice 
467*750cd175SCaroline Tice     //if (log)
468*750cd175SCaroline Tice     //    log->Printf ("SBDebugger::CreateTargetWithFileAndArch (this.sp=%p, filename='%s', arcname='%s')",
469*750cd175SCaroline Tice     //                 m_opaque_sp.get() filename, archname);
470ceb6b139SCaroline Tice 
4716611103cSGreg Clayton     SBTarget target;
4726611103cSGreg Clayton     if (m_opaque_sp)
4736611103cSGreg Clayton     {
474274060b6SGreg Clayton         FileSpec file (filename, true);
475daccaa9eSCaroline Tice         ArchSpec arch = lldb_private::Target::GetDefaultArchitecture ();
47630fdc8d8SChris Lattner         TargetSP target_sp;
47730fdc8d8SChris Lattner         Error error;
47830fdc8d8SChris Lattner 
47930fdc8d8SChris Lattner         if (archname != NULL)
48030fdc8d8SChris Lattner         {
48130fdc8d8SChris Lattner             ArchSpec arch2 (archname);
4826611103cSGreg Clayton             error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch2, NULL, true, target_sp);
48330fdc8d8SChris Lattner         }
48430fdc8d8SChris Lattner         else
48530fdc8d8SChris Lattner         {
48630fdc8d8SChris Lattner             if (!arch.IsValid())
48730fdc8d8SChris Lattner                 arch = LLDB_ARCH_DEFAULT;
48830fdc8d8SChris Lattner 
4896611103cSGreg Clayton             error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
49030fdc8d8SChris Lattner 
49130fdc8d8SChris Lattner             if (error.Fail())
49230fdc8d8SChris Lattner             {
49330fdc8d8SChris Lattner                 if (arch == LLDB_ARCH_DEFAULT_32BIT)
49430fdc8d8SChris Lattner                     arch = LLDB_ARCH_DEFAULT_64BIT;
49530fdc8d8SChris Lattner                 else
49630fdc8d8SChris Lattner                     arch = LLDB_ARCH_DEFAULT_32BIT;
49730fdc8d8SChris Lattner 
4986611103cSGreg Clayton                 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
49930fdc8d8SChris Lattner             }
50030fdc8d8SChris Lattner         }
50130fdc8d8SChris Lattner 
50230fdc8d8SChris Lattner         if (error.Success())
5036611103cSGreg Clayton         {
5042976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
5056611103cSGreg Clayton             target.reset(target_sp);
5066611103cSGreg Clayton         }
5076611103cSGreg Clayton     }
508ceb6b139SCaroline Tice 
509ceb6b139SCaroline Tice     if (log)
510ceb6b139SCaroline Tice     {
511ceb6b139SCaroline Tice         SBStream sstr;
512ceb6b139SCaroline Tice         target.GetDescription (sstr, lldb::eDescriptionLevelFull);
513*750cd175SCaroline Tice         log->Printf ("SBDebugger::CreateTargetWithFileAndArch (this.sp=%p, filename='%s', arcname='%s') "
514*750cd175SCaroline Tice                      "=> SBTarget: this.sp=%p, '%s'", m_opaque_sp.get(), filename, archname, target.get(),
515*750cd175SCaroline Tice                      sstr.GetData());
516ceb6b139SCaroline Tice     }
517ceb6b139SCaroline Tice 
5186611103cSGreg Clayton     return target;
51930fdc8d8SChris Lattner }
52030fdc8d8SChris Lattner 
52130fdc8d8SChris Lattner SBTarget
52230fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename)
52330fdc8d8SChris Lattner {
5246611103cSGreg Clayton     SBTarget target;
5256611103cSGreg Clayton     if (m_opaque_sp)
5266611103cSGreg Clayton     {
527274060b6SGreg Clayton         FileSpec file (filename, true);
528daccaa9eSCaroline Tice         ArchSpec arch = lldb_private::Target::GetDefaultArchitecture ();
52930fdc8d8SChris Lattner         TargetSP target_sp;
53030fdc8d8SChris Lattner         Error error;
53130fdc8d8SChris Lattner 
53230fdc8d8SChris Lattner         if (!arch.IsValid())
53330fdc8d8SChris Lattner             arch = LLDB_ARCH_DEFAULT;
53430fdc8d8SChris Lattner 
5356611103cSGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
53630fdc8d8SChris Lattner 
53730fdc8d8SChris Lattner         if (error.Fail())
53830fdc8d8SChris Lattner         {
53930fdc8d8SChris Lattner             if (arch == LLDB_ARCH_DEFAULT_32BIT)
54030fdc8d8SChris Lattner                 arch = LLDB_ARCH_DEFAULT_64BIT;
54130fdc8d8SChris Lattner             else
54230fdc8d8SChris Lattner                 arch = LLDB_ARCH_DEFAULT_32BIT;
54330fdc8d8SChris Lattner 
5446611103cSGreg Clayton             error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, NULL, true, target_sp);
54530fdc8d8SChris Lattner         }
54630fdc8d8SChris Lattner 
5476611103cSGreg Clayton         if (error.Success())
5486611103cSGreg Clayton         {
5492976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
5506611103cSGreg Clayton             target.reset (target_sp);
5516611103cSGreg Clayton         }
5526611103cSGreg Clayton     }
5536611103cSGreg Clayton     return target;
55430fdc8d8SChris Lattner }
55530fdc8d8SChris Lattner 
55630fdc8d8SChris Lattner SBTarget
55730fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx)
55830fdc8d8SChris Lattner {
5596611103cSGreg Clayton     SBTarget sb_target;
5606611103cSGreg Clayton     if (m_opaque_sp)
5616611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
56230fdc8d8SChris Lattner     return sb_target;
56330fdc8d8SChris Lattner }
56430fdc8d8SChris Lattner 
56530fdc8d8SChris Lattner SBTarget
56630fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid)
56730fdc8d8SChris Lattner {
5686611103cSGreg Clayton     SBTarget sb_target;
5696611103cSGreg Clayton     if (m_opaque_sp)
5706611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
57130fdc8d8SChris Lattner     return sb_target;
57230fdc8d8SChris Lattner }
57330fdc8d8SChris Lattner 
57430fdc8d8SChris Lattner SBTarget
57530fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
57630fdc8d8SChris Lattner {
5776611103cSGreg Clayton     SBTarget sb_target;
5786611103cSGreg Clayton     if (m_opaque_sp && filename && filename[0])
5796611103cSGreg Clayton     {
58030fdc8d8SChris Lattner         ArchSpec arch;
58130fdc8d8SChris Lattner         if (arch_name)
58230fdc8d8SChris Lattner             arch.SetArch(arch_name);
583274060b6SGreg Clayton         TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
5846611103cSGreg Clayton         sb_target.reset(target_sp);
5856611103cSGreg Clayton     }
5866611103cSGreg Clayton     return sb_target;
58730fdc8d8SChris Lattner }
58830fdc8d8SChris Lattner 
58930fdc8d8SChris Lattner SBTarget
59030fdc8d8SChris Lattner SBDebugger::FindTargetWithLLDBProcess (const lldb::ProcessSP &process_sp)
59130fdc8d8SChris Lattner {
5926611103cSGreg Clayton     SBTarget sb_target;
5936611103cSGreg Clayton     if (m_opaque_sp)
5946611103cSGreg Clayton         sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
59530fdc8d8SChris Lattner     return sb_target;
59630fdc8d8SChris Lattner }
59730fdc8d8SChris Lattner 
59830fdc8d8SChris Lattner 
59930fdc8d8SChris Lattner uint32_t
60030fdc8d8SChris Lattner SBDebugger::GetNumTargets ()
60130fdc8d8SChris Lattner {
6026611103cSGreg Clayton     if (m_opaque_sp)
6036611103cSGreg Clayton         return m_opaque_sp->GetTargetList().GetNumTargets ();
6046611103cSGreg Clayton     return 0;
6056611103cSGreg Clayton }
60630fdc8d8SChris Lattner 
60730fdc8d8SChris Lattner SBTarget
6082976d00aSJim Ingham SBDebugger::GetSelectedTarget ()
60930fdc8d8SChris Lattner {
610ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
611ceb6b139SCaroline Tice 
612*750cd175SCaroline Tice     //if (log)
613*750cd175SCaroline Tice     //    log->Printf ("SBDebugger::GetSelectedTarget ()");
614ceb6b139SCaroline Tice 
6156611103cSGreg Clayton     SBTarget sb_target;
6166611103cSGreg Clayton     if (m_opaque_sp)
6172976d00aSJim Ingham         sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
618ceb6b139SCaroline Tice 
619ceb6b139SCaroline Tice     if (log)
620ceb6b139SCaroline Tice     {
621ceb6b139SCaroline Tice         SBStream sstr;
622ceb6b139SCaroline Tice         sb_target.GetDescription (sstr, lldb::eDescriptionLevelBrief);
623*750cd175SCaroline Tice         log->Printf ("SBDebugger::GetSelectedTarget (this.sp=%p) => SBTarget: this.sp=%p, '%s'", m_opaque_sp.get(),
624*750cd175SCaroline Tice                      sb_target.get(), sstr.GetData());
625ceb6b139SCaroline Tice     }
626ceb6b139SCaroline Tice 
62730fdc8d8SChris Lattner     return sb_target;
62830fdc8d8SChris Lattner }
62930fdc8d8SChris Lattner 
63030fdc8d8SChris Lattner void
63130fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
63230fdc8d8SChris Lattner {
633ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
634ceb6b139SCaroline Tice 
635ceb6b139SCaroline Tice     if (log)
636*750cd175SCaroline Tice         log->Printf ("SBDebugger::DispatchInput (this.sp=%p, baton=%p, data='%s', size_t=%d)", m_opaque_sp.get(),
637*750cd175SCaroline Tice                      baton, (const char *) data, (uint32_t) data_len);
638ceb6b139SCaroline Tice 
6396611103cSGreg Clayton     if (m_opaque_sp)
6406611103cSGreg Clayton         m_opaque_sp->DispatchInput ((const char *) data, data_len);
64130fdc8d8SChris Lattner }
64230fdc8d8SChris Lattner 
64330fdc8d8SChris Lattner void
64430fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader)
64530fdc8d8SChris Lattner {
646ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
647ceb6b139SCaroline Tice 
648ceb6b139SCaroline Tice     if (log)
649*750cd175SCaroline Tice         log->Printf ("SBDebugger::PushInputReader (this.sp=%p, reader=%p)", m_opaque_sp.get(), &reader);
650ceb6b139SCaroline Tice 
6516611103cSGreg Clayton     if (m_opaque_sp && reader.IsValid())
65230fdc8d8SChris Lattner     {
65330fdc8d8SChris Lattner         InputReaderSP reader_sp(*reader);
6546611103cSGreg Clayton         m_opaque_sp->PushInputReader (reader_sp);
65530fdc8d8SChris Lattner     }
65630fdc8d8SChris Lattner }
6576611103cSGreg Clayton 
6586611103cSGreg Clayton void
6596611103cSGreg Clayton SBDebugger::reset (const lldb::DebuggerSP &debugger_sp)
6606611103cSGreg Clayton {
6616611103cSGreg Clayton     m_opaque_sp = debugger_sp;
6626611103cSGreg Clayton }
6636611103cSGreg Clayton 
6646611103cSGreg Clayton Debugger *
6656611103cSGreg Clayton SBDebugger::get () const
6666611103cSGreg Clayton {
6676611103cSGreg Clayton     return m_opaque_sp.get();
6686611103cSGreg Clayton }
6696611103cSGreg Clayton 
6706611103cSGreg Clayton Debugger &
6716611103cSGreg Clayton SBDebugger::ref () const
6726611103cSGreg Clayton {
6736611103cSGreg Clayton     assert (m_opaque_sp.get());
6746611103cSGreg Clayton     return *m_opaque_sp;
6756611103cSGreg Clayton }
6766611103cSGreg Clayton 
6776611103cSGreg Clayton 
678ebc1bb27SCaroline Tice SBDebugger
679ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id)
680ebc1bb27SCaroline Tice {
681ebc1bb27SCaroline Tice     SBDebugger sb_debugger;
682ebc1bb27SCaroline Tice     lldb::DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
683ebc1bb27SCaroline Tice     if (debugger_sp)
684ebc1bb27SCaroline Tice         sb_debugger.reset (debugger_sp);
685ebc1bb27SCaroline Tice     return sb_debugger;
686ebc1bb27SCaroline Tice }
687e40e4218SJim Ingham 
688dd759857SCaroline Tice const char *
689dd759857SCaroline Tice SBDebugger::GetInstanceName()
690dd759857SCaroline Tice {
691dd759857SCaroline Tice     if (m_opaque_sp)
692dd759857SCaroline Tice         return m_opaque_sp->GetInstanceName().AsCString();
693dd759857SCaroline Tice     else
694dd759857SCaroline Tice         return NULL;
695dd759857SCaroline Tice }
696dd759857SCaroline Tice 
6973df9a8dfSCaroline Tice SBError
698dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
6993df9a8dfSCaroline Tice {
7003df9a8dfSCaroline Tice     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
7013df9a8dfSCaroline Tice 
7021559a46bSCaroline Tice     Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, true,
703101c7c20SCaroline Tice                                                        debugger_instance_name);
7043df9a8dfSCaroline Tice     SBError sb_error;
7053df9a8dfSCaroline Tice     sb_error.SetError (err);
7063df9a8dfSCaroline Tice 
7073df9a8dfSCaroline Tice     return sb_error;
7083df9a8dfSCaroline Tice }
7093df9a8dfSCaroline Tice 
7103df9a8dfSCaroline Tice lldb::SBStringList
711dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
7123df9a8dfSCaroline Tice {
7133df9a8dfSCaroline Tice     SBStringList ret_value;
714101c7c20SCaroline Tice     lldb::SettableVariableType var_type;
715daccaa9eSCaroline Tice     lldb_private:Error err;
716101c7c20SCaroline Tice 
7173df9a8dfSCaroline Tice     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
7183df9a8dfSCaroline Tice 
719daccaa9eSCaroline Tice     StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
720daccaa9eSCaroline Tice 
721daccaa9eSCaroline Tice     if (err.Success())
722daccaa9eSCaroline Tice     {
723311adf3dSChris Lattner         for (unsigned i = 0; i != value.GetSize(); ++i)
7243df9a8dfSCaroline Tice             ret_value.AppendString (value.GetStringAtIndex(i));
725daccaa9eSCaroline Tice     }
726daccaa9eSCaroline Tice     else
727daccaa9eSCaroline Tice     {
728daccaa9eSCaroline Tice         ret_value.AppendString (err.AsCString());
729daccaa9eSCaroline Tice     }
730daccaa9eSCaroline Tice 
7313df9a8dfSCaroline Tice 
7323df9a8dfSCaroline Tice     return ret_value;
7333df9a8dfSCaroline Tice }
7343df9a8dfSCaroline Tice 
735a7015092SGreg Clayton uint32_t
736a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const
737a7015092SGreg Clayton {
738a7015092SGreg Clayton     if (m_opaque_sp)
739a7015092SGreg Clayton         return m_opaque_sp->GetTerminalWidth ();
740a7015092SGreg Clayton     return 0;
741a7015092SGreg Clayton }
742a7015092SGreg Clayton 
743a7015092SGreg Clayton void
744a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width)
745a7015092SGreg Clayton {
746a7015092SGreg Clayton     if (m_opaque_sp)
747a7015092SGreg Clayton         m_opaque_sp->SetTerminalWidth (term_width);
748a7015092SGreg Clayton }
749a7015092SGreg Clayton 
750a7015092SGreg Clayton const char *
751a7015092SGreg Clayton SBDebugger::GetPrompt() const
752a7015092SGreg Clayton {
753ceb6b139SCaroline Tice     Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
754ceb6b139SCaroline Tice 
755ceb6b139SCaroline Tice     if (log)
756*750cd175SCaroline Tice         log->Printf ("SBDebugger::GetPrompt (this.sp=%p) => '%s'", m_opaque_sp.get(),
757*750cd175SCaroline Tice                      (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
758ceb6b139SCaroline Tice 
759a7015092SGreg Clayton     if (m_opaque_sp)
760a7015092SGreg Clayton         return m_opaque_sp->GetPrompt ();
761a7015092SGreg Clayton     return 0;
762a7015092SGreg Clayton }
763a7015092SGreg Clayton 
764a7015092SGreg Clayton void
765a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt)
766a7015092SGreg Clayton {
767a7015092SGreg Clayton     if (m_opaque_sp)
768a7015092SGreg Clayton         m_opaque_sp->SetPrompt (prompt);
769a7015092SGreg Clayton }
770a7015092SGreg Clayton 
771a7015092SGreg Clayton 
772a7015092SGreg Clayton lldb::ScriptLanguage
773a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const
774a7015092SGreg Clayton {
775a7015092SGreg Clayton     if (m_opaque_sp)
776a7015092SGreg Clayton         return m_opaque_sp->GetScriptLanguage ();
777a7015092SGreg Clayton     return eScriptLanguageNone;
778a7015092SGreg Clayton }
779a7015092SGreg Clayton 
780a7015092SGreg Clayton void
781a7015092SGreg Clayton SBDebugger::SetScriptLanguage (lldb::ScriptLanguage script_lang)
782a7015092SGreg Clayton {
783a7015092SGreg Clayton     if (m_opaque_sp)
784a7015092SGreg Clayton         m_opaque_sp->SetScriptLanguage (script_lang);
785a7015092SGreg Clayton }
786a7015092SGreg Clayton 
787a7015092SGreg Clayton 
788a7015092SGreg Clayton 
789a7015092SGreg Clayton 
790e40e4218SJim Ingham bool
791e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value)
792e40e4218SJim Ingham {
793e40e4218SJim Ingham     if (m_opaque_sp)
794e40e4218SJim Ingham         return m_opaque_sp->SetUseExternalEditor (value);
795e40e4218SJim Ingham     else
796e40e4218SJim Ingham         return false;
797e40e4218SJim Ingham }
798e40e4218SJim Ingham 
799e40e4218SJim Ingham bool
800daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor ()
801e40e4218SJim Ingham {
802e40e4218SJim Ingham     if (m_opaque_sp)
803daccaa9eSCaroline Tice         return m_opaque_sp->GetUseExternalEditor ();
804e40e4218SJim Ingham     else
805e40e4218SJim Ingham         return false;
806e40e4218SJim Ingham }
807e40e4218SJim Ingham 
808dde9cff3SCaroline Tice bool
809dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description)
810dde9cff3SCaroline Tice {
811dde9cff3SCaroline Tice     if (m_opaque_sp)
812dde9cff3SCaroline Tice     {
813dde9cff3SCaroline Tice         const char *name = m_opaque_sp->GetInstanceName().AsCString();
814dde9cff3SCaroline Tice         lldb::user_id_t id = m_opaque_sp->GetID();
815dde9cff3SCaroline Tice         description.Printf ("Debugger (instance: '%s', id: %d)", name, id);
816dde9cff3SCaroline Tice     }
817dde9cff3SCaroline Tice     else
818dde9cff3SCaroline Tice         description.Printf ("No value");
819dde9cff3SCaroline Tice 
820dde9cff3SCaroline Tice     return true;
821dde9cff3SCaroline Tice }
822