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 
1093a64300SDaniel Malea #include "lldb/lldb-python.h"
1193a64300SDaniel Malea 
12ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h"
1330fdc8d8SChris Lattner 
14e0d378b3SGreg Clayton #include "lldb/lldb-private.h"
1530fdc8d8SChris Lattner 
16ca93cc1dSEli Friedman #include "lldb/API/SBListener.h"
17ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h"
18ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h"
19ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h"
202289fa48SGreg Clayton #include "lldb/API/SBError.h"
21ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
22ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h"
23ca93cc1dSEli Friedman #include "lldb/API/SBInputReader.h"
243df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h"
253df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h"
26dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
273df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h"
283df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h"
293df9a8dfSCaroline Tice #include "lldb/API/SBThread.h"
30061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h"
31061858ceSEnrico Granata #include "lldb/API/SBTypeFormat.h"
32061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h"
33061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h"
34061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h"
35061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h"
36061858ceSEnrico Granata 
37061858ceSEnrico Granata 
386eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h"
396eee5aa0SGreg Clayton #include "lldb/Core/State.h"
405548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h"
416eee5aa0SGreg Clayton #include "lldb/Interpreter/Args.h"
426eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
43cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h"
446eee5aa0SGreg Clayton #include "lldb/Target/Process.h"
456eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h"
4630fdc8d8SChris Lattner 
4730fdc8d8SChris Lattner using namespace lldb;
4830fdc8d8SChris Lattner using namespace lldb_private;
4930fdc8d8SChris Lattner 
5030fdc8d8SChris Lattner void
5130fdc8d8SChris Lattner SBDebugger::Initialize ()
5230fdc8d8SChris Lattner {
535160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
54ceb6b139SCaroline Tice 
55ceb6b139SCaroline Tice     if (log)
56ceb6b139SCaroline Tice         log->Printf ("SBDebugger::Initialize ()");
57ceb6b139SCaroline Tice 
58fc36f791SGreg Clayton     SBCommandInterpreter::InitializeSWIG ();
59fc36f791SGreg Clayton 
6030fdc8d8SChris Lattner     Debugger::Initialize();
6130fdc8d8SChris Lattner }
6230fdc8d8SChris Lattner 
6330fdc8d8SChris Lattner void
6430fdc8d8SChris Lattner SBDebugger::Terminate ()
6530fdc8d8SChris Lattner {
6630fdc8d8SChris Lattner     Debugger::Terminate();
6730fdc8d8SChris Lattner }
6830fdc8d8SChris Lattner 
6948e42549SGreg Clayton void
7048e42549SGreg Clayton SBDebugger::Clear ()
7148e42549SGreg Clayton {
725160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
73ceb6b139SCaroline Tice 
74ceb6b139SCaroline Tice     if (log)
7593aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
763d6086f6SCaroline Tice 
773d6086f6SCaroline Tice     if (m_opaque_sp)
783d6086f6SCaroline Tice         m_opaque_sp->CleanUpInputReaders ();
79ceb6b139SCaroline Tice 
8048e42549SGreg Clayton     m_opaque_sp.reset();
8148e42549SGreg Clayton }
8248e42549SGreg Clayton 
836611103cSGreg Clayton SBDebugger
846611103cSGreg Clayton SBDebugger::Create()
856611103cSGreg Clayton {
86228063cdSJim Ingham     return SBDebugger::Create(false, NULL, NULL);
8706942690SJim Ingham }
8806942690SJim Ingham 
8906942690SJim Ingham SBDebugger
9006942690SJim Ingham SBDebugger::Create(bool source_init_files)
9106942690SJim Ingham {
92228063cdSJim Ingham     return SBDebugger::Create (source_init_files, NULL, NULL);
93228063cdSJim Ingham }
94228063cdSJim Ingham 
95228063cdSJim Ingham SBDebugger
96228063cdSJim Ingham SBDebugger::Create(bool source_init_files, lldb::LogOutputCallback callback, void *baton)
97228063cdSJim Ingham 
98228063cdSJim Ingham {
995160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
100ceb6b139SCaroline Tice 
1016611103cSGreg Clayton     SBDebugger debugger;
102228063cdSJim Ingham     debugger.reset(Debugger::CreateInstance(callback, baton));
103ceb6b139SCaroline Tice 
104ceb6b139SCaroline Tice     if (log)
105ceb6b139SCaroline Tice     {
106ceb6b139SCaroline Tice         SBStream sstr;
107ceb6b139SCaroline Tice         debugger.GetDescription (sstr);
10893aa84e8SGreg Clayton         log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
109ceb6b139SCaroline Tice     }
110ceb6b139SCaroline Tice 
11106942690SJim Ingham     SBCommandInterpreter interp = debugger.GetCommandInterpreter();
11206942690SJim Ingham     if (source_init_files)
11306942690SJim Ingham     {
11406942690SJim Ingham         interp.get()->SkipLLDBInitFiles(false);
11506942690SJim Ingham         interp.get()->SkipAppInitFiles (false);
11606942690SJim Ingham         SBCommandReturnObject result;
11706942690SJim Ingham         interp.SourceInitFileInHomeDirectory(result);
11806942690SJim Ingham     }
11906942690SJim Ingham     else
12006942690SJim Ingham     {
12106942690SJim Ingham         interp.get()->SkipLLDBInitFiles(true);
12206942690SJim Ingham         interp.get()->SkipAppInitFiles (true);
12306942690SJim Ingham     }
1246611103cSGreg Clayton     return debugger;
1256611103cSGreg Clayton }
1266611103cSGreg Clayton 
127e02657b1SCaroline Tice void
128e02657b1SCaroline Tice SBDebugger::Destroy (SBDebugger &debugger)
129e02657b1SCaroline Tice {
1305160ce5cSGreg Clayton     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
131e02657b1SCaroline Tice 
132e02657b1SCaroline Tice     if (log)
133e02657b1SCaroline Tice     {
134e02657b1SCaroline Tice         SBStream sstr;
135e02657b1SCaroline Tice         debugger.GetDescription (sstr);
136e02657b1SCaroline Tice         log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
137e02657b1SCaroline Tice     }
138e02657b1SCaroline Tice 
139e02657b1SCaroline Tice     Debugger::Destroy (debugger.m_opaque_sp);
140e02657b1SCaroline Tice 
141e02657b1SCaroline Tice     if (debugger.m_opaque_sp.get() != NULL)
142e02657b1SCaroline Tice         debugger.m_opaque_sp.reset();
143e02657b1SCaroline Tice }
144e02657b1SCaroline Tice 
145f9322415SGreg Clayton void
146f9322415SGreg Clayton SBDebugger::MemoryPressureDetected ()
147f9322415SGreg Clayton {
1480cd70866SGreg Clayton     // Since this function can be call asynchronously, we allow it to be
1490cd70866SGreg Clayton     // non-mandatory. We have seen deadlocks with this function when called
1500cd70866SGreg Clayton     // so we need to safeguard against this until we can determine what is
1510cd70866SGreg Clayton     // causing the deadlocks.
1525160ce5cSGreg Clayton     Log *log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
153aebdf1beSJim Ingham 
1540cd70866SGreg Clayton     const bool mandatory = false;
155aebdf1beSJim Ingham     if (log)
156aebdf1beSJim Ingham     {
157aebdf1beSJim Ingham         log->Printf ("SBDebugger::MemoryPressureDetected (), mandatory = %d", mandatory);
158aebdf1beSJim Ingham     }
159aebdf1beSJim Ingham 
1600cd70866SGreg Clayton     ModuleList::RemoveOrphanSharedModules(mandatory);
161f9322415SGreg Clayton }
162f9322415SGreg Clayton 
1636611103cSGreg Clayton SBDebugger::SBDebugger () :
1646611103cSGreg Clayton     m_opaque_sp ()
1656611103cSGreg Clayton {
1666611103cSGreg Clayton }
1676611103cSGreg Clayton 
168274fd6e9SEnrico Granata SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) :
169274fd6e9SEnrico Granata     m_opaque_sp(debugger_sp)
170274fd6e9SEnrico Granata {
171274fd6e9SEnrico Granata }
172274fd6e9SEnrico Granata 
173efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) :
174efabb123SGreg Clayton     m_opaque_sp (rhs.m_opaque_sp)
175efabb123SGreg Clayton {
176efabb123SGreg Clayton }
177efabb123SGreg Clayton 
178efabb123SGreg Clayton SBDebugger &
179efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs)
180efabb123SGreg Clayton {
181efabb123SGreg Clayton     if (this != &rhs)
182efabb123SGreg Clayton     {
183efabb123SGreg Clayton         m_opaque_sp = rhs.m_opaque_sp;
184efabb123SGreg Clayton     }
185efabb123SGreg Clayton     return *this;
186efabb123SGreg Clayton }
187efabb123SGreg Clayton 
1886611103cSGreg Clayton SBDebugger::~SBDebugger ()
1896611103cSGreg Clayton {
1906611103cSGreg Clayton }
1916611103cSGreg Clayton 
1926611103cSGreg Clayton bool
1936611103cSGreg Clayton SBDebugger::IsValid() const
1946611103cSGreg Clayton {
1956611103cSGreg Clayton     return m_opaque_sp.get() != NULL;
1966611103cSGreg Clayton }
1976611103cSGreg Clayton 
1986611103cSGreg Clayton 
19930fdc8d8SChris Lattner void
20030fdc8d8SChris Lattner SBDebugger::SetAsync (bool b)
20130fdc8d8SChris Lattner {
2026611103cSGreg Clayton     if (m_opaque_sp)
2036611103cSGreg Clayton         m_opaque_sp->SetAsyncExecution(b);
20430fdc8d8SChris Lattner }
20530fdc8d8SChris Lattner 
206e64f0dc7SJim Ingham bool
207e64f0dc7SJim Ingham SBDebugger::GetAsync ()
208e64f0dc7SJim Ingham {
209e64f0dc7SJim Ingham     if (m_opaque_sp)
210e64f0dc7SJim Ingham         return m_opaque_sp->GetAsyncExecution();
211e64f0dc7SJim Ingham     else
212e64f0dc7SJim Ingham         return false;
213e64f0dc7SJim Ingham }
214e64f0dc7SJim Ingham 
2156eee5aa0SGreg Clayton void
2166eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b)
2176eee5aa0SGreg Clayton {
2186eee5aa0SGreg Clayton     if (m_opaque_sp)
2196eee5aa0SGreg Clayton         m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
2206eee5aa0SGreg Clayton }
2216eee5aa0SGreg Clayton 
22216e0c686SJim Ingham void
22316e0c686SJim Ingham SBDebugger::SkipAppInitFiles (bool b)
22416e0c686SJim Ingham {
22516e0c686SJim Ingham     if (m_opaque_sp)
22616e0c686SJim Ingham         m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
22716e0c686SJim Ingham }
22816e0c686SJim Ingham 
22930fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
23030fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session.
23130fdc8d8SChris Lattner void
23230fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
23330fdc8d8SChris Lattner {
2345160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
235ceb6b139SCaroline Tice 
236ceb6b139SCaroline Tice     if (log)
237cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
238cfd1acedSGreg Clayton                      fh, transfer_ownership);
239ceb6b139SCaroline Tice 
2406611103cSGreg Clayton     if (m_opaque_sp)
2416611103cSGreg Clayton         m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
24230fdc8d8SChris Lattner }
24330fdc8d8SChris Lattner 
24430fdc8d8SChris Lattner void
24530fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
24630fdc8d8SChris Lattner {
2475160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
248ceb6b139SCaroline Tice 
249ceb6b139SCaroline Tice 
250ceb6b139SCaroline Tice     if (log)
251cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
252cfd1acedSGreg Clayton                      fh, transfer_ownership);
253ceb6b139SCaroline Tice 
2546611103cSGreg Clayton     if (m_opaque_sp)
2556611103cSGreg Clayton         m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
25630fdc8d8SChris Lattner }
25730fdc8d8SChris Lattner 
25830fdc8d8SChris Lattner void
25930fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
26030fdc8d8SChris Lattner {
2615160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
262ceb6b139SCaroline Tice 
263ceb6b139SCaroline Tice 
264ceb6b139SCaroline Tice     if (log)
265cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
266cfd1acedSGreg Clayton                      fh, transfer_ownership);
267ceb6b139SCaroline Tice 
2686611103cSGreg Clayton     if (m_opaque_sp)
2696611103cSGreg Clayton         m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
27030fdc8d8SChris Lattner }
27130fdc8d8SChris Lattner 
27230fdc8d8SChris Lattner FILE *
27330fdc8d8SChris Lattner SBDebugger::GetInputFileHandle ()
27430fdc8d8SChris Lattner {
2756611103cSGreg Clayton     if (m_opaque_sp)
27651b1e2d2SGreg Clayton         return m_opaque_sp->GetInputFile().GetStream();
2776611103cSGreg Clayton     return NULL;
27830fdc8d8SChris Lattner }
27930fdc8d8SChris Lattner 
28030fdc8d8SChris Lattner FILE *
28130fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle ()
28230fdc8d8SChris Lattner {
2836611103cSGreg Clayton     if (m_opaque_sp)
28451b1e2d2SGreg Clayton         return m_opaque_sp->GetOutputFile().GetStream();
2856611103cSGreg Clayton     return NULL;
28630fdc8d8SChris Lattner }
28730fdc8d8SChris Lattner 
28830fdc8d8SChris Lattner FILE *
28930fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle ()
29030fdc8d8SChris Lattner {
2916611103cSGreg Clayton     if (m_opaque_sp)
29251b1e2d2SGreg Clayton         return m_opaque_sp->GetErrorFile().GetStream();
2936611103cSGreg Clayton     return NULL;
29430fdc8d8SChris Lattner }
29530fdc8d8SChris Lattner 
296c5917d9aSJim Ingham void
297c5917d9aSJim Ingham SBDebugger::SaveInputTerminalState()
298c5917d9aSJim Ingham {
299c5917d9aSJim Ingham     if (m_opaque_sp)
300c5917d9aSJim Ingham         m_opaque_sp->SaveInputTerminalState();
301c5917d9aSJim Ingham }
302c5917d9aSJim Ingham 
303c5917d9aSJim Ingham void
304c5917d9aSJim Ingham SBDebugger::RestoreInputTerminalState()
305c5917d9aSJim Ingham {
306c5917d9aSJim Ingham     if (m_opaque_sp)
307c5917d9aSJim Ingham         m_opaque_sp->RestoreInputTerminalState();
308c5917d9aSJim Ingham 
309c5917d9aSJim Ingham }
31030fdc8d8SChris Lattner SBCommandInterpreter
31130fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter ()
31230fdc8d8SChris Lattner {
3135160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
314ceb6b139SCaroline Tice 
3156611103cSGreg Clayton     SBCommandInterpreter sb_interpreter;
3166611103cSGreg Clayton     if (m_opaque_sp)
3176611103cSGreg Clayton         sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
318ceb6b139SCaroline Tice 
319750cd175SCaroline Tice     if (log)
32093aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
321750cd175SCaroline Tice                      m_opaque_sp.get(), sb_interpreter.get());
322750cd175SCaroline Tice 
32330fdc8d8SChris Lattner     return sb_interpreter;
32430fdc8d8SChris Lattner }
32530fdc8d8SChris Lattner 
32630fdc8d8SChris Lattner void
32730fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command)
32830fdc8d8SChris Lattner {
3296611103cSGreg Clayton     if (m_opaque_sp)
3306611103cSGreg Clayton     {
331af67cecdSGreg Clayton         TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
332af67cecdSGreg Clayton         Mutex::Locker api_locker;
333af67cecdSGreg Clayton         if (target_sp)
33410ebffa4SJim Ingham             api_locker.Lock(target_sp->GetAPIMutex());
335af67cecdSGreg Clayton 
3366611103cSGreg Clayton         SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
33730fdc8d8SChris Lattner         SBCommandReturnObject result;
33830fdc8d8SChris Lattner 
33930fdc8d8SChris Lattner         sb_interpreter.HandleCommand (command, result, false);
34030fdc8d8SChris Lattner 
34130fdc8d8SChris Lattner         if (GetErrorFileHandle() != NULL)
34230fdc8d8SChris Lattner             result.PutError (GetErrorFileHandle());
34330fdc8d8SChris Lattner         if (GetOutputFileHandle() != NULL)
34430fdc8d8SChris Lattner             result.PutOutput (GetOutputFileHandle());
34530fdc8d8SChris Lattner 
3466611103cSGreg Clayton         if (m_opaque_sp->GetAsyncExecution() == false)
34730fdc8d8SChris Lattner         {
3486611103cSGreg Clayton             SBProcess process(GetCommandInterpreter().GetProcess ());
349b9556accSGreg Clayton             ProcessSP process_sp (process.GetSP());
350b9556accSGreg Clayton             if (process_sp)
35130fdc8d8SChris Lattner             {
35230fdc8d8SChris Lattner                 EventSP event_sp;
3536611103cSGreg Clayton                 Listener &lldb_listener = m_opaque_sp->GetListener();
354b9556accSGreg Clayton                 while (lldb_listener.GetNextEventForBroadcaster (process_sp.get(), event_sp))
35530fdc8d8SChris Lattner                 {
35630fdc8d8SChris Lattner                     SBEvent event(event_sp);
35730fdc8d8SChris Lattner                     HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
35830fdc8d8SChris Lattner                 }
35930fdc8d8SChris Lattner             }
36030fdc8d8SChris Lattner         }
36130fdc8d8SChris Lattner     }
3626611103cSGreg Clayton }
36330fdc8d8SChris Lattner 
36430fdc8d8SChris Lattner SBListener
36530fdc8d8SChris Lattner SBDebugger::GetListener ()
36630fdc8d8SChris Lattner {
3675160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
368ceb6b139SCaroline Tice 
3696611103cSGreg Clayton     SBListener sb_listener;
3706611103cSGreg Clayton     if (m_opaque_sp)
3716611103cSGreg Clayton         sb_listener.reset(&m_opaque_sp->GetListener(), false);
372ceb6b139SCaroline Tice 
373750cd175SCaroline Tice     if (log)
37493aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
375750cd175SCaroline Tice                      sb_listener.get());
376750cd175SCaroline Tice 
37730fdc8d8SChris Lattner     return sb_listener;
37830fdc8d8SChris Lattner }
37930fdc8d8SChris Lattner 
38030fdc8d8SChris Lattner void
38130fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
38230fdc8d8SChris Lattner {
383af67cecdSGreg Clayton     if (!process.IsValid())
384af67cecdSGreg Clayton         return;
385af67cecdSGreg Clayton 
386b9556accSGreg Clayton     TargetSP target_sp (process.GetTarget().GetSP());
387b9556accSGreg Clayton     if (!target_sp)
388b9556accSGreg Clayton         return;
389b9556accSGreg Clayton 
39030fdc8d8SChris Lattner     const uint32_t event_type = event.GetType();
39130fdc8d8SChris Lattner     char stdio_buffer[1024];
39230fdc8d8SChris Lattner     size_t len;
39330fdc8d8SChris Lattner 
394b9556accSGreg Clayton     Mutex::Locker api_locker (target_sp->GetAPIMutex());
395af67cecdSGreg Clayton 
396af67cecdSGreg Clayton     if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
39730fdc8d8SChris Lattner     {
398af67cecdSGreg Clayton         // Drain stdout when we stop just in case we have any bytes
39930fdc8d8SChris Lattner         while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
40030fdc8d8SChris Lattner             if (out != NULL)
40130fdc8d8SChris Lattner                 ::fwrite (stdio_buffer, 1, len, out);
40230fdc8d8SChris Lattner     }
403af67cecdSGreg Clayton 
404af67cecdSGreg Clayton     if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
40530fdc8d8SChris Lattner     {
406af67cecdSGreg Clayton         // Drain stderr when we stop just in case we have any bytes
40730fdc8d8SChris Lattner         while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
408af67cecdSGreg Clayton             if (err != NULL)
409af67cecdSGreg Clayton                 ::fwrite (stdio_buffer, 1, len, err);
41030fdc8d8SChris Lattner     }
411af67cecdSGreg Clayton 
412af67cecdSGreg Clayton     if (event_type & Process::eBroadcastBitStateChanged)
41330fdc8d8SChris Lattner     {
41430fdc8d8SChris Lattner         StateType event_state = SBProcess::GetStateFromEvent (event);
41530fdc8d8SChris Lattner 
41630fdc8d8SChris Lattner         if (event_state == eStateInvalid)
41730fdc8d8SChris Lattner             return;
41830fdc8d8SChris Lattner 
41930fdc8d8SChris Lattner         bool is_stopped = StateIsStoppedState (event_state);
42030fdc8d8SChris Lattner         if (!is_stopped)
4212976d00aSJim Ingham             process.ReportEventState (event, out);
42230fdc8d8SChris Lattner     }
42330fdc8d8SChris Lattner }
42430fdc8d8SChris Lattner 
425e37d605eSJim Ingham SBSourceManager
42630fdc8d8SChris Lattner SBDebugger::GetSourceManager ()
42730fdc8d8SChris Lattner {
428e37d605eSJim Ingham     SBSourceManager sb_source_manager (*this);
429e37d605eSJim Ingham     return sb_source_manager;
43030fdc8d8SChris Lattner }
43130fdc8d8SChris Lattner 
43230fdc8d8SChris Lattner 
43330fdc8d8SChris Lattner bool
43430fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
43530fdc8d8SChris Lattner {
43630fdc8d8SChris Lattner     if (arch_name && arch_name_len)
43730fdc8d8SChris Lattner     {
438431ce678SGreg Clayton         ArchSpec default_arch = Target::GetDefaultArchitecture ();
439daccaa9eSCaroline Tice 
44030fdc8d8SChris Lattner         if (default_arch.IsValid())
44130fdc8d8SChris Lattner         {
442431ce678SGreg Clayton             const std::string &triple_str = default_arch.GetTriple().str();
443431ce678SGreg Clayton             if (!triple_str.empty())
444431ce678SGreg Clayton                 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
445431ce678SGreg Clayton             else
44664195a2cSGreg Clayton                 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
44730fdc8d8SChris Lattner             return true;
44830fdc8d8SChris Lattner         }
44930fdc8d8SChris Lattner     }
45030fdc8d8SChris Lattner     if (arch_name && arch_name_len)
45130fdc8d8SChris Lattner         arch_name[0] = '\0';
45230fdc8d8SChris Lattner     return false;
45330fdc8d8SChris Lattner }
45430fdc8d8SChris Lattner 
45530fdc8d8SChris Lattner 
45630fdc8d8SChris Lattner bool
45730fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name)
45830fdc8d8SChris Lattner {
45930fdc8d8SChris Lattner     if (arch_name)
46030fdc8d8SChris Lattner     {
46170512317SGreg Clayton         ArchSpec arch (arch_name);
46230fdc8d8SChris Lattner         if (arch.IsValid())
46330fdc8d8SChris Lattner         {
464431ce678SGreg Clayton             Target::SetDefaultArchitecture (arch);
46530fdc8d8SChris Lattner             return true;
46630fdc8d8SChris Lattner         }
46730fdc8d8SChris Lattner     }
46830fdc8d8SChris Lattner     return false;
46930fdc8d8SChris Lattner }
47030fdc8d8SChris Lattner 
47130fdc8d8SChris Lattner ScriptLanguage
47230fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name)
47330fdc8d8SChris Lattner {
474af67cecdSGreg Clayton 
47530fdc8d8SChris Lattner     return Args::StringToScriptLanguage (script_language_name,
47630fdc8d8SChris Lattner                                          eScriptLanguageDefault,
47730fdc8d8SChris Lattner                                          NULL);
47830fdc8d8SChris Lattner }
47930fdc8d8SChris Lattner 
48030fdc8d8SChris Lattner const char *
48130fdc8d8SChris Lattner SBDebugger::GetVersionString ()
48230fdc8d8SChris Lattner {
483b2f1fb29SVirgile Bello     return lldb_private::GetVersion();
48430fdc8d8SChris Lattner }
48530fdc8d8SChris Lattner 
48630fdc8d8SChris Lattner const char *
487431ce678SGreg Clayton SBDebugger::StateAsCString (StateType state)
48830fdc8d8SChris Lattner {
489c2bbb49aSCaroline Tice     return lldb_private::StateAsCString (state);
49030fdc8d8SChris Lattner }
49130fdc8d8SChris Lattner 
49230fdc8d8SChris Lattner bool
493431ce678SGreg Clayton SBDebugger::StateIsRunningState (StateType state)
49430fdc8d8SChris Lattner {
4955160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4964838131bSGreg Clayton 
497c2bbb49aSCaroline Tice     const bool result = lldb_private::StateIsRunningState (state);
4984838131bSGreg Clayton     if (log)
4994838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
500431ce678SGreg Clayton                      StateAsCString (state), result);
5014838131bSGreg Clayton 
5024838131bSGreg Clayton     return result;
50330fdc8d8SChris Lattner }
50430fdc8d8SChris Lattner 
50530fdc8d8SChris Lattner bool
506431ce678SGreg Clayton SBDebugger::StateIsStoppedState (StateType state)
50730fdc8d8SChris Lattner {
5085160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
509ceb6b139SCaroline Tice 
5102637f825SGreg Clayton     const bool result = lldb_private::StateIsStoppedState (state, false);
511ceb6b139SCaroline Tice     if (log)
5124838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
513431ce678SGreg Clayton                      StateAsCString (state), result);
514ceb6b139SCaroline Tice 
5154838131bSGreg Clayton     return result;
51630fdc8d8SChris Lattner }
51730fdc8d8SChris Lattner 
518cac9c5f9SGreg Clayton lldb::SBTarget
519cac9c5f9SGreg Clayton SBDebugger::CreateTarget (const char *filename,
520cac9c5f9SGreg Clayton                           const char *target_triple,
521cac9c5f9SGreg Clayton                           const char *platform_name,
522cac9c5f9SGreg Clayton                           bool add_dependent_modules,
523cac9c5f9SGreg Clayton                           lldb::SBError& sb_error)
524cac9c5f9SGreg Clayton {
525cac9c5f9SGreg Clayton     SBTarget sb_target;
526b9556accSGreg Clayton     TargetSP target_sp;
527cac9c5f9SGreg Clayton     if (m_opaque_sp)
528cac9c5f9SGreg Clayton     {
529cac9c5f9SGreg Clayton         sb_error.Clear();
530cac9c5f9SGreg Clayton         OptionGroupPlatform platform_options (false);
531cac9c5f9SGreg Clayton         platform_options.SetPlatformName (platform_name);
532cac9c5f9SGreg Clayton 
533cac9c5f9SGreg Clayton         sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
534a0ca6601SGreg Clayton                                                                     filename,
535cac9c5f9SGreg Clayton                                                                     target_triple,
536cac9c5f9SGreg Clayton                                                                     add_dependent_modules,
537cac9c5f9SGreg Clayton                                                                     &platform_options,
538cac9c5f9SGreg Clayton                                                                     target_sp);
539cac9c5f9SGreg Clayton 
540cac9c5f9SGreg Clayton         if (sb_error.Success())
541b9556accSGreg Clayton             sb_target.SetSP (target_sp);
542cac9c5f9SGreg Clayton     }
543cac9c5f9SGreg Clayton     else
544cac9c5f9SGreg Clayton     {
545cac9c5f9SGreg Clayton         sb_error.SetErrorString("invalid target");
546cac9c5f9SGreg Clayton     }
547cac9c5f9SGreg Clayton 
5485160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
549cac9c5f9SGreg Clayton     if (log)
550cac9c5f9SGreg Clayton     {
551cac9c5f9SGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)",
552cac9c5f9SGreg Clayton                      m_opaque_sp.get(),
553cac9c5f9SGreg Clayton                      filename,
554cac9c5f9SGreg Clayton                      target_triple,
555cac9c5f9SGreg Clayton                      platform_name,
556cac9c5f9SGreg Clayton                      add_dependent_modules,
557cac9c5f9SGreg Clayton                      sb_error.GetCString(),
558b9556accSGreg Clayton                      target_sp.get());
559cac9c5f9SGreg Clayton     }
560cac9c5f9SGreg Clayton 
561cac9c5f9SGreg Clayton     return sb_target;
562cac9c5f9SGreg Clayton }
56330fdc8d8SChris Lattner 
56430fdc8d8SChris Lattner SBTarget
56530fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
56630fdc8d8SChris Lattner                                                  const char *target_triple)
56730fdc8d8SChris Lattner {
568b9556accSGreg Clayton     SBTarget sb_target;
569b9556accSGreg Clayton     TargetSP target_sp;
5706611103cSGreg Clayton     if (m_opaque_sp)
5716611103cSGreg Clayton     {
572cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
573cac9c5f9SGreg Clayton         Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
574a0ca6601SGreg Clayton                                                                 filename,
575cac9c5f9SGreg Clayton                                                                 target_triple,
576cac9c5f9SGreg Clayton                                                                 add_dependent_modules,
577cac9c5f9SGreg Clayton                                                                 NULL,
578cac9c5f9SGreg Clayton                                                                 target_sp));
579b9556accSGreg Clayton         sb_target.SetSP (target_sp);
5806611103cSGreg Clayton     }
5814838131bSGreg Clayton 
5825160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5834838131bSGreg Clayton     if (log)
5844838131bSGreg Clayton     {
585cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
586b9556accSGreg Clayton                      m_opaque_sp.get(), filename, target_triple, target_sp.get());
5874838131bSGreg Clayton     }
5884838131bSGreg Clayton 
589b9556accSGreg Clayton     return sb_target;
59030fdc8d8SChris Lattner }
59130fdc8d8SChris Lattner 
59230fdc8d8SChris Lattner SBTarget
59364195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
59430fdc8d8SChris Lattner {
5955160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
596ceb6b139SCaroline Tice 
597b9556accSGreg Clayton     SBTarget sb_target;
598b9556accSGreg Clayton     TargetSP target_sp;
5996611103cSGreg Clayton     if (m_opaque_sp)
6006611103cSGreg Clayton     {
60130fdc8d8SChris Lattner         Error error;
602cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
60330fdc8d8SChris Lattner 
604cac9c5f9SGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
605a0ca6601SGreg Clayton                                                            filename,
606cac9c5f9SGreg Clayton                                                            arch_cstr,
607cac9c5f9SGreg Clayton                                                            add_dependent_modules,
608cac9c5f9SGreg Clayton                                                            NULL,
609cac9c5f9SGreg Clayton                                                            target_sp);
61030fdc8d8SChris Lattner 
61130fdc8d8SChris Lattner         if (error.Success())
6126611103cSGreg Clayton         {
6132976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
614b9556accSGreg Clayton             sb_target.SetSP (target_sp);
6156611103cSGreg Clayton         }
6166611103cSGreg Clayton     }
617ceb6b139SCaroline Tice 
618ceb6b139SCaroline Tice     if (log)
619ceb6b139SCaroline Tice     {
620cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
621b9556accSGreg Clayton                      m_opaque_sp.get(), filename, arch_cstr, target_sp.get());
622ceb6b139SCaroline Tice     }
623ceb6b139SCaroline Tice 
624b9556accSGreg Clayton     return sb_target;
62530fdc8d8SChris Lattner }
62630fdc8d8SChris Lattner 
62730fdc8d8SChris Lattner SBTarget
62830fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename)
62930fdc8d8SChris Lattner {
630b9556accSGreg Clayton     SBTarget sb_target;
631b9556accSGreg Clayton     TargetSP target_sp;
6326611103cSGreg Clayton     if (m_opaque_sp)
6336611103cSGreg Clayton     {
634431ce678SGreg Clayton         ArchSpec arch = Target::GetDefaultArchitecture ();
63530fdc8d8SChris Lattner         Error error;
636cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
63730fdc8d8SChris Lattner 
638b3a40ba8SGreg Clayton         PlatformSP platform_sp(m_opaque_sp->GetPlatformList().GetSelectedPlatform());
639cac9c5f9SGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
640a0ca6601SGreg Clayton                                                            filename,
641cac9c5f9SGreg Clayton                                                            arch,
642cac9c5f9SGreg Clayton                                                            add_dependent_modules,
643b3a40ba8SGreg Clayton                                                            platform_sp,
644cac9c5f9SGreg Clayton                                                            target_sp);
64530fdc8d8SChris Lattner 
6466611103cSGreg Clayton         if (error.Success())
6476611103cSGreg Clayton         {
6482976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
649b9556accSGreg Clayton             sb_target.SetSP (target_sp);
6506611103cSGreg Clayton         }
6516611103cSGreg Clayton     }
6525160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6534838131bSGreg Clayton     if (log)
6544838131bSGreg Clayton     {
655cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
656b9556accSGreg Clayton                      m_opaque_sp.get(), filename, target_sp.get());
6574838131bSGreg Clayton     }
658b9556accSGreg Clayton     return sb_target;
65930fdc8d8SChris Lattner }
66030fdc8d8SChris Lattner 
6613794ad95SJohnny Chen bool
6623794ad95SJohnny Chen SBDebugger::DeleteTarget (lldb::SBTarget &target)
6633794ad95SJohnny Chen {
6643794ad95SJohnny Chen     bool result = false;
665b9556accSGreg Clayton     if (m_opaque_sp)
666b9556accSGreg Clayton     {
667b9556accSGreg Clayton         TargetSP target_sp(target.GetSP());
668b9556accSGreg Clayton         if (target_sp)
6693794ad95SJohnny Chen         {
6703794ad95SJohnny Chen             // No need to lock, the target list is thread safe
671b9556accSGreg Clayton             result = m_opaque_sp->GetTargetList().DeleteTarget (target_sp);
672b9556accSGreg Clayton             target_sp->Destroy();
67375340622SGreg Clayton             target.Clear();
6740cd70866SGreg Clayton             const bool mandatory = true;
6750cd70866SGreg Clayton             ModuleList::RemoveOrphanSharedModules(mandatory);
6763794ad95SJohnny Chen         }
677b9556accSGreg Clayton     }
6783794ad95SJohnny Chen 
6795160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6803794ad95SJohnny Chen     if (log)
6813794ad95SJohnny Chen     {
6823794ad95SJohnny Chen         log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
6833794ad95SJohnny Chen     }
6843794ad95SJohnny Chen 
6853794ad95SJohnny Chen     return result;
6863794ad95SJohnny Chen }
68730fdc8d8SChris Lattner SBTarget
68830fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx)
68930fdc8d8SChris Lattner {
6906611103cSGreg Clayton     SBTarget sb_target;
6916611103cSGreg Clayton     if (m_opaque_sp)
692af67cecdSGreg Clayton     {
693af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
694b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
695af67cecdSGreg Clayton     }
69630fdc8d8SChris Lattner     return sb_target;
69730fdc8d8SChris Lattner }
69830fdc8d8SChris Lattner 
6998499e1a4SJim Ingham uint32_t
7008499e1a4SJim Ingham SBDebugger::GetIndexOfTarget (lldb::SBTarget target)
7018499e1a4SJim Ingham {
7028499e1a4SJim Ingham 
7038499e1a4SJim Ingham     lldb::TargetSP target_sp = target.GetSP();
7048499e1a4SJim Ingham     if (!target_sp)
7058499e1a4SJim Ingham         return UINT32_MAX;
7068499e1a4SJim Ingham 
7078499e1a4SJim Ingham     if (!m_opaque_sp)
7088499e1a4SJim Ingham         return UINT32_MAX;
7098499e1a4SJim Ingham 
7108499e1a4SJim Ingham     return m_opaque_sp->GetTargetList().GetIndexOfTarget (target.GetSP());
7118499e1a4SJim Ingham }
7128499e1a4SJim Ingham 
71330fdc8d8SChris Lattner SBTarget
714*997f6f7bSVirgile Bello SBDebugger::FindTargetWithProcessID (lldb::pid_t pid)
71530fdc8d8SChris Lattner {
7166611103cSGreg Clayton     SBTarget sb_target;
7176611103cSGreg Clayton     if (m_opaque_sp)
718af67cecdSGreg Clayton     {
719af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
720b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
721af67cecdSGreg Clayton     }
72230fdc8d8SChris Lattner     return sb_target;
72330fdc8d8SChris Lattner }
72430fdc8d8SChris Lattner 
72530fdc8d8SChris Lattner SBTarget
72630fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
72730fdc8d8SChris Lattner {
7286611103cSGreg Clayton     SBTarget sb_target;
7296611103cSGreg Clayton     if (m_opaque_sp && filename && filename[0])
7306611103cSGreg Clayton     {
731af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
732eb0103f2SGreg Clayton         ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
733274060b6SGreg Clayton         TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
734b9556accSGreg Clayton         sb_target.SetSP (target_sp);
7356611103cSGreg Clayton     }
7366611103cSGreg Clayton     return sb_target;
73730fdc8d8SChris Lattner }
73830fdc8d8SChris Lattner 
73930fdc8d8SChris Lattner SBTarget
740431ce678SGreg Clayton SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
74130fdc8d8SChris Lattner {
7426611103cSGreg Clayton     SBTarget sb_target;
7436611103cSGreg Clayton     if (m_opaque_sp)
744af67cecdSGreg Clayton     {
745af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
746b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
747af67cecdSGreg Clayton     }
74830fdc8d8SChris Lattner     return sb_target;
74930fdc8d8SChris Lattner }
75030fdc8d8SChris Lattner 
75130fdc8d8SChris Lattner 
75230fdc8d8SChris Lattner uint32_t
75330fdc8d8SChris Lattner SBDebugger::GetNumTargets ()
75430fdc8d8SChris Lattner {
7556611103cSGreg Clayton     if (m_opaque_sp)
756af67cecdSGreg Clayton     {
757af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
7586611103cSGreg Clayton         return m_opaque_sp->GetTargetList().GetNumTargets ();
759af67cecdSGreg Clayton     }
7606611103cSGreg Clayton     return 0;
7616611103cSGreg Clayton }
76230fdc8d8SChris Lattner 
76330fdc8d8SChris Lattner SBTarget
7642976d00aSJim Ingham SBDebugger::GetSelectedTarget ()
76530fdc8d8SChris Lattner {
7665160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
767ceb6b139SCaroline Tice 
7686611103cSGreg Clayton     SBTarget sb_target;
769b9556accSGreg Clayton     TargetSP target_sp;
7706611103cSGreg Clayton     if (m_opaque_sp)
771af67cecdSGreg Clayton     {
772af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
773b9556accSGreg Clayton         target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget ();
774b9556accSGreg Clayton         sb_target.SetSP (target_sp);
775af67cecdSGreg Clayton     }
776ceb6b139SCaroline Tice 
777ceb6b139SCaroline Tice     if (log)
778ceb6b139SCaroline Tice     {
779ceb6b139SCaroline Tice         SBStream sstr;
780431ce678SGreg Clayton         sb_target.GetDescription (sstr, eDescriptionLevelBrief);
78193aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
782b9556accSGreg Clayton                      target_sp.get(), sstr.GetData());
783ceb6b139SCaroline Tice     }
784ceb6b139SCaroline Tice 
78530fdc8d8SChris Lattner     return sb_target;
78630fdc8d8SChris Lattner }
78730fdc8d8SChris Lattner 
78830fdc8d8SChris Lattner void
789e64f0dc7SJim Ingham SBDebugger::SetSelectedTarget (SBTarget &sb_target)
790e64f0dc7SJim Ingham {
7915160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
792e64f0dc7SJim Ingham 
793b9556accSGreg Clayton     TargetSP target_sp (sb_target.GetSP());
794e64f0dc7SJim Ingham     if (m_opaque_sp)
795e64f0dc7SJim Ingham     {
796b9556accSGreg Clayton         m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
797e64f0dc7SJim Ingham     }
798e64f0dc7SJim Ingham     if (log)
799e64f0dc7SJim Ingham     {
800e64f0dc7SJim Ingham         SBStream sstr;
801e64f0dc7SJim Ingham         sb_target.GetDescription (sstr, eDescriptionLevelBrief);
802e64f0dc7SJim Ingham         log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
803b9556accSGreg Clayton                      target_sp.get(), sstr.GetData());
804e64f0dc7SJim Ingham     }
805e64f0dc7SJim Ingham }
806e64f0dc7SJim Ingham 
807e64f0dc7SJim Ingham void
808c30a73adSEnrico Granata SBDebugger::DispatchInput (void* baton, const void *data, size_t data_len)
8096b09d423SEnrico Granata {
8106b09d423SEnrico Granata     DispatchInput (data,data_len);
8116b09d423SEnrico Granata }
8126b09d423SEnrico Granata 
8136b09d423SEnrico Granata void
814c3019991SFilipe Cabecinhas SBDebugger::DispatchInput (const void *data, size_t data_len)
81530fdc8d8SChris Lattner {
8165160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
817ceb6b139SCaroline Tice 
818ceb6b139SCaroline Tice     if (log)
819d01b2953SDaniel Malea         log->Printf ("SBDebugger(%p)::DispatchInput (data=\"%.*s\", size_t=%" PRIu64 ")",
82043e0af06SGreg Clayton                      m_opaque_sp.get(),
82143e0af06SGreg Clayton                      (int) data_len,
82243e0af06SGreg Clayton                      (const char *) data,
82343e0af06SGreg Clayton                      (uint64_t)data_len);
824ceb6b139SCaroline Tice 
8256611103cSGreg Clayton     if (m_opaque_sp)
8266611103cSGreg Clayton         m_opaque_sp->DispatchInput ((const char *) data, data_len);
82730fdc8d8SChris Lattner }
82830fdc8d8SChris Lattner 
82930fdc8d8SChris Lattner void
830efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt ()
831efed6131SCaroline Tice {
832efed6131SCaroline Tice     if (m_opaque_sp)
833efed6131SCaroline Tice         m_opaque_sp->DispatchInputInterrupt ();
834efed6131SCaroline Tice }
835efed6131SCaroline Tice 
836efed6131SCaroline Tice void
837efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile ()
838efed6131SCaroline Tice {
839efed6131SCaroline Tice     if (m_opaque_sp)
840efed6131SCaroline Tice         m_opaque_sp->DispatchInputEndOfFile ();
841efed6131SCaroline Tice }
8429088b068SCaroline Tice 
8439088b068SCaroline Tice bool
8449088b068SCaroline Tice SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
8459088b068SCaroline Tice {
8465160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
8479088b068SCaroline Tice 
8489088b068SCaroline Tice     if (log)
8499088b068SCaroline Tice         log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
8509088b068SCaroline Tice 
8519088b068SCaroline Tice     if (m_opaque_sp && reader.IsValid())
8529088b068SCaroline Tice     {
8539088b068SCaroline Tice         InputReaderSP reader_sp (*reader);
8549088b068SCaroline Tice         return m_opaque_sp->InputReaderIsTopReader (reader_sp);
8559088b068SCaroline Tice     }
8569088b068SCaroline Tice 
8579088b068SCaroline Tice     return false;
8589088b068SCaroline Tice }
8599088b068SCaroline Tice 
860efed6131SCaroline Tice 
861efed6131SCaroline Tice void
86230fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader)
86330fdc8d8SChris Lattner {
8645160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
865ceb6b139SCaroline Tice 
866ceb6b139SCaroline Tice     if (log)
86793aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
868ceb6b139SCaroline Tice 
8696611103cSGreg Clayton     if (m_opaque_sp && reader.IsValid())
87030fdc8d8SChris Lattner     {
871af67cecdSGreg Clayton         TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
872af67cecdSGreg Clayton         Mutex::Locker api_locker;
873af67cecdSGreg Clayton         if (target_sp)
87410ebffa4SJim Ingham             api_locker.Lock(target_sp->GetAPIMutex());
87530fdc8d8SChris Lattner         InputReaderSP reader_sp(*reader);
8766611103cSGreg Clayton         m_opaque_sp->PushInputReader (reader_sp);
87730fdc8d8SChris Lattner     }
87830fdc8d8SChris Lattner }
8796611103cSGreg Clayton 
8806611103cSGreg Clayton void
881969ed3d1SCaroline Tice SBDebugger::NotifyTopInputReader (InputReaderAction notification)
882969ed3d1SCaroline Tice {
8835160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
884969ed3d1SCaroline Tice 
885969ed3d1SCaroline Tice     if (log)
886969ed3d1SCaroline Tice         log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
887969ed3d1SCaroline Tice 
888969ed3d1SCaroline Tice     if (m_opaque_sp)
889969ed3d1SCaroline Tice         m_opaque_sp->NotifyTopInputReader (notification);
890969ed3d1SCaroline Tice }
891969ed3d1SCaroline Tice 
892969ed3d1SCaroline Tice void
893431ce678SGreg Clayton SBDebugger::reset (const DebuggerSP &debugger_sp)
8946611103cSGreg Clayton {
8956611103cSGreg Clayton     m_opaque_sp = debugger_sp;
8966611103cSGreg Clayton }
8976611103cSGreg Clayton 
8986611103cSGreg Clayton Debugger *
8996611103cSGreg Clayton SBDebugger::get () const
9006611103cSGreg Clayton {
9016611103cSGreg Clayton     return m_opaque_sp.get();
9026611103cSGreg Clayton }
9036611103cSGreg Clayton 
9046611103cSGreg Clayton Debugger &
9056611103cSGreg Clayton SBDebugger::ref () const
9066611103cSGreg Clayton {
9076611103cSGreg Clayton     assert (m_opaque_sp.get());
9086611103cSGreg Clayton     return *m_opaque_sp;
9096611103cSGreg Clayton }
9106611103cSGreg Clayton 
9119a37766eSGreg Clayton const lldb::DebuggerSP &
9129a37766eSGreg Clayton SBDebugger::get_sp () const
9139a37766eSGreg Clayton {
9149a37766eSGreg Clayton     return m_opaque_sp;
9159a37766eSGreg Clayton }
9166611103cSGreg Clayton 
917ebc1bb27SCaroline Tice SBDebugger
918ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id)
919ebc1bb27SCaroline Tice {
920af67cecdSGreg Clayton     // No need to lock, the debugger list is thread safe
921ebc1bb27SCaroline Tice     SBDebugger sb_debugger;
922431ce678SGreg Clayton     DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
923ebc1bb27SCaroline Tice     if (debugger_sp)
924ebc1bb27SCaroline Tice         sb_debugger.reset (debugger_sp);
925ebc1bb27SCaroline Tice     return sb_debugger;
926ebc1bb27SCaroline Tice }
927e40e4218SJim Ingham 
928dd759857SCaroline Tice const char *
929dd759857SCaroline Tice SBDebugger::GetInstanceName()
930dd759857SCaroline Tice {
9316920b52bSGreg Clayton     if (m_opaque_sp)
9326920b52bSGreg Clayton         return m_opaque_sp->GetInstanceName().AsCString();
9336920b52bSGreg Clayton     else
934dd759857SCaroline Tice         return NULL;
935dd759857SCaroline Tice }
936dd759857SCaroline Tice 
9373df9a8dfSCaroline Tice SBError
938dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
9393df9a8dfSCaroline Tice {
9406920b52bSGreg Clayton     SBError sb_error;
9416920b52bSGreg Clayton     DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName (ConstString(debugger_instance_name)));
9426920b52bSGreg Clayton     Error error;
9436920b52bSGreg Clayton     if (debugger_sp)
9446920b52bSGreg Clayton     {
9456920b52bSGreg Clayton         ExecutionContext exe_ctx (debugger_sp->GetCommandInterpreter().GetExecutionContext());
9466920b52bSGreg Clayton         error = debugger_sp->SetPropertyValue (&exe_ctx,
9476920b52bSGreg Clayton                                                eVarSetOperationAssign,
9486920b52bSGreg Clayton                                                var_name,
9496920b52bSGreg Clayton                                                value);
9506920b52bSGreg Clayton     }
9516920b52bSGreg Clayton     else
9526920b52bSGreg Clayton     {
9536920b52bSGreg Clayton         error.SetErrorStringWithFormat ("invalid debugger instance name '%s'", debugger_instance_name);
9546920b52bSGreg Clayton     }
9556920b52bSGreg Clayton     if (error.Fail())
9566920b52bSGreg Clayton         sb_error.SetError(error);
9576920b52bSGreg Clayton     return sb_error;
9583df9a8dfSCaroline Tice }
9593df9a8dfSCaroline Tice 
960431ce678SGreg Clayton SBStringList
961dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
9623df9a8dfSCaroline Tice {
9633df9a8dfSCaroline Tice     SBStringList ret_value;
9646920b52bSGreg Clayton     DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName (ConstString(debugger_instance_name)));
9656920b52bSGreg Clayton     Error error;
9666920b52bSGreg Clayton     if (debugger_sp)
9676920b52bSGreg Clayton     {
9686920b52bSGreg Clayton         ExecutionContext exe_ctx (debugger_sp->GetCommandInterpreter().GetExecutionContext());
9696920b52bSGreg Clayton         lldb::OptionValueSP value_sp (debugger_sp->GetPropertyValue (&exe_ctx,
9706920b52bSGreg Clayton                                                                      var_name,
9716920b52bSGreg Clayton                                                                      false,
9726920b52bSGreg Clayton                                                                      error));
9736920b52bSGreg Clayton         if (value_sp)
9746920b52bSGreg Clayton         {
9756920b52bSGreg Clayton             StreamString value_strm;
9766920b52bSGreg Clayton             value_sp->DumpValue (&exe_ctx, value_strm, OptionValue::eDumpOptionValue);
9776920b52bSGreg Clayton             const std::string &value_str = value_strm.GetString();
9786920b52bSGreg Clayton             if (!value_str.empty())
9796920b52bSGreg Clayton             {
9806920b52bSGreg Clayton                 StringList string_list;
9816920b52bSGreg Clayton                 string_list.SplitIntoLines(value_str.c_str(), value_str.size());
9826920b52bSGreg Clayton                 return SBStringList(&string_list);
9836920b52bSGreg Clayton             }
9846920b52bSGreg Clayton         }
9856920b52bSGreg Clayton     }
9866920b52bSGreg Clayton     return SBStringList();
9873df9a8dfSCaroline Tice }
9883df9a8dfSCaroline Tice 
989a7015092SGreg Clayton uint32_t
990a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const
991a7015092SGreg Clayton {
992a7015092SGreg Clayton     if (m_opaque_sp)
993a7015092SGreg Clayton         return m_opaque_sp->GetTerminalWidth ();
994a7015092SGreg Clayton     return 0;
995a7015092SGreg Clayton }
996a7015092SGreg Clayton 
997a7015092SGreg Clayton void
998a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width)
999a7015092SGreg Clayton {
1000a7015092SGreg Clayton     if (m_opaque_sp)
1001a7015092SGreg Clayton         m_opaque_sp->SetTerminalWidth (term_width);
1002a7015092SGreg Clayton }
1003a7015092SGreg Clayton 
1004a7015092SGreg Clayton const char *
1005a7015092SGreg Clayton SBDebugger::GetPrompt() const
1006a7015092SGreg Clayton {
10075160ce5cSGreg Clayton     Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1008ceb6b139SCaroline Tice 
1009ceb6b139SCaroline Tice     if (log)
1010cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
1011750cd175SCaroline Tice                      (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
1012ceb6b139SCaroline Tice 
1013a7015092SGreg Clayton     if (m_opaque_sp)
1014a7015092SGreg Clayton         return m_opaque_sp->GetPrompt ();
1015a7015092SGreg Clayton     return 0;
1016a7015092SGreg Clayton }
1017a7015092SGreg Clayton 
1018a7015092SGreg Clayton void
1019a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt)
1020a7015092SGreg Clayton {
1021a7015092SGreg Clayton     if (m_opaque_sp)
1022a7015092SGreg Clayton         m_opaque_sp->SetPrompt (prompt);
1023a7015092SGreg Clayton }
1024a7015092SGreg Clayton 
1025a7015092SGreg Clayton 
1026431ce678SGreg Clayton ScriptLanguage
1027a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const
1028a7015092SGreg Clayton {
1029a7015092SGreg Clayton     if (m_opaque_sp)
1030a7015092SGreg Clayton         return m_opaque_sp->GetScriptLanguage ();
1031a7015092SGreg Clayton     return eScriptLanguageNone;
1032a7015092SGreg Clayton }
1033a7015092SGreg Clayton 
1034a7015092SGreg Clayton void
1035431ce678SGreg Clayton SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
1036a7015092SGreg Clayton {
1037a7015092SGreg Clayton     if (m_opaque_sp)
1038af67cecdSGreg Clayton     {
1039a7015092SGreg Clayton         m_opaque_sp->SetScriptLanguage (script_lang);
1040a7015092SGreg Clayton     }
1041af67cecdSGreg Clayton }
1042a7015092SGreg Clayton 
1043e40e4218SJim Ingham bool
1044e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value)
1045e40e4218SJim Ingham {
1046e40e4218SJim Ingham     if (m_opaque_sp)
1047e40e4218SJim Ingham         return m_opaque_sp->SetUseExternalEditor (value);
1048e40e4218SJim Ingham     return false;
1049e40e4218SJim Ingham }
1050e40e4218SJim Ingham 
1051e40e4218SJim Ingham bool
1052daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor ()
1053e40e4218SJim Ingham {
1054e40e4218SJim Ingham     if (m_opaque_sp)
1055daccaa9eSCaroline Tice         return m_opaque_sp->GetUseExternalEditor ();
1056e40e4218SJim Ingham     return false;
1057e40e4218SJim Ingham }
1058e40e4218SJim Ingham 
1059dde9cff3SCaroline Tice bool
1060c3ce7f27SMichael Sartain SBDebugger::SetUseColor (bool value)
1061c3ce7f27SMichael Sartain {
1062c3ce7f27SMichael Sartain     if (m_opaque_sp)
1063c3ce7f27SMichael Sartain         return m_opaque_sp->SetUseColor (value);
1064c3ce7f27SMichael Sartain     return false;
1065c3ce7f27SMichael Sartain }
1066c3ce7f27SMichael Sartain 
1067c3ce7f27SMichael Sartain bool
1068c3ce7f27SMichael Sartain SBDebugger::GetUseColor () const
1069c3ce7f27SMichael Sartain {
1070c3ce7f27SMichael Sartain     if (m_opaque_sp)
1071c3ce7f27SMichael Sartain         return m_opaque_sp->GetUseColor ();
1072c3ce7f27SMichael Sartain     return false;
1073c3ce7f27SMichael Sartain }
1074c3ce7f27SMichael Sartain 
1075c3ce7f27SMichael Sartain bool
1076dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description)
1077dde9cff3SCaroline Tice {
1078da7bc7d0SGreg Clayton     Stream &strm = description.ref();
1079da7bc7d0SGreg Clayton 
1080dde9cff3SCaroline Tice     if (m_opaque_sp)
1081dde9cff3SCaroline Tice     {
1082dde9cff3SCaroline Tice         const char *name = m_opaque_sp->GetInstanceName().AsCString();
1083431ce678SGreg Clayton         user_id_t id = m_opaque_sp->GetID();
1084d01b2953SDaniel Malea         strm.Printf ("Debugger (instance: \"%s\", id: %" PRIu64 ")", name, id);
1085dde9cff3SCaroline Tice     }
1086dde9cff3SCaroline Tice     else
1087da7bc7d0SGreg Clayton         strm.PutCString ("No value");
1088dde9cff3SCaroline Tice 
1089dde9cff3SCaroline Tice     return true;
1090dde9cff3SCaroline Tice }
1091efed6131SCaroline Tice 
1092431ce678SGreg Clayton user_id_t
1093efed6131SCaroline Tice SBDebugger::GetID()
1094efed6131SCaroline Tice {
1095efed6131SCaroline Tice     if (m_opaque_sp)
1096efed6131SCaroline Tice         return m_opaque_sp->GetID();
1097efed6131SCaroline Tice     return LLDB_INVALID_UID;
1098efed6131SCaroline Tice }
10992289fa48SGreg Clayton 
11002289fa48SGreg Clayton 
11012289fa48SGreg Clayton SBError
11022289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name)
11032289fa48SGreg Clayton {
11042289fa48SGreg Clayton     SBError sb_error;
11052289fa48SGreg Clayton     if (m_opaque_sp)
11062289fa48SGreg Clayton     {
11072289fa48SGreg Clayton         PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
11082289fa48SGreg Clayton 
11092289fa48SGreg Clayton         if (platform_sp)
11102289fa48SGreg Clayton         {
11112289fa48SGreg Clayton             bool make_selected = true;
11122289fa48SGreg Clayton             m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
11132289fa48SGreg Clayton         }
11142289fa48SGreg Clayton     }
11152289fa48SGreg Clayton     return sb_error;
11162289fa48SGreg Clayton }
11172289fa48SGreg Clayton 
1118fc3f027dSGreg Clayton bool
1119f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
1120f3dd93c8SGreg Clayton {
1121f3dd93c8SGreg Clayton     if (m_opaque_sp)
1122f3dd93c8SGreg Clayton     {
1123f3dd93c8SGreg Clayton         PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1124f3dd93c8SGreg Clayton 
1125f3dd93c8SGreg Clayton         if (platform_sp)
1126f3dd93c8SGreg Clayton         {
1127f3dd93c8SGreg Clayton             platform_sp->SetSDKRootDirectory (ConstString (sysroot));
1128f3dd93c8SGreg Clayton             return true;
1129f3dd93c8SGreg Clayton         }
1130f3dd93c8SGreg Clayton     }
1131f3dd93c8SGreg Clayton     return false;
1132f3dd93c8SGreg Clayton }
1133f3dd93c8SGreg Clayton 
1134f3dd93c8SGreg Clayton bool
1135fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const
1136fc3f027dSGreg Clayton {
1137fc3f027dSGreg Clayton     if (m_opaque_sp)
1138fc3f027dSGreg Clayton         return m_opaque_sp->GetCloseInputOnEOF ();
1139fc3f027dSGreg Clayton     return false;
1140fc3f027dSGreg Clayton }
1141fc3f027dSGreg Clayton 
1142fc3f027dSGreg Clayton void
1143fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b)
1144fc3f027dSGreg Clayton {
1145fc3f027dSGreg Clayton     if (m_opaque_sp)
1146fc3f027dSGreg Clayton         m_opaque_sp->SetCloseInputOnEOF (b);
1147fc3f027dSGreg Clayton }
1148061858ceSEnrico Granata 
1149061858ceSEnrico Granata SBTypeCategory
1150061858ceSEnrico Granata SBDebugger::GetCategory (const char* category_name)
1151061858ceSEnrico Granata {
1152061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1153061858ceSEnrico Granata         return SBTypeCategory();
1154061858ceSEnrico Granata 
1155061858ceSEnrico Granata     TypeCategoryImplSP category_sp;
1156061858ceSEnrico Granata 
1157061858ceSEnrico Granata     if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, false))
1158061858ceSEnrico Granata         return SBTypeCategory(category_sp);
1159061858ceSEnrico Granata     else
1160061858ceSEnrico Granata         return SBTypeCategory();
1161061858ceSEnrico Granata }
1162061858ceSEnrico Granata 
1163061858ceSEnrico Granata SBTypeCategory
1164061858ceSEnrico Granata SBDebugger::CreateCategory (const char* category_name)
1165061858ceSEnrico Granata {
1166061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1167061858ceSEnrico Granata         return SBTypeCategory();
1168061858ceSEnrico Granata 
1169061858ceSEnrico Granata     TypeCategoryImplSP category_sp;
1170061858ceSEnrico Granata 
1171061858ceSEnrico Granata     if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, true))
1172061858ceSEnrico Granata         return SBTypeCategory(category_sp);
1173061858ceSEnrico Granata     else
1174061858ceSEnrico Granata         return SBTypeCategory();
1175061858ceSEnrico Granata }
1176061858ceSEnrico Granata 
1177061858ceSEnrico Granata bool
1178061858ceSEnrico Granata SBDebugger::DeleteCategory (const char* category_name)
1179061858ceSEnrico Granata {
1180061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1181061858ceSEnrico Granata         return false;
1182061858ceSEnrico Granata 
1183061858ceSEnrico Granata     return DataVisualization::Categories::Delete(ConstString(category_name));
1184061858ceSEnrico Granata }
1185061858ceSEnrico Granata 
1186061858ceSEnrico Granata uint32_t
1187061858ceSEnrico Granata SBDebugger::GetNumCategories()
1188061858ceSEnrico Granata {
1189061858ceSEnrico Granata     return DataVisualization::Categories::GetCount();
1190061858ceSEnrico Granata }
1191061858ceSEnrico Granata 
1192061858ceSEnrico Granata SBTypeCategory
1193061858ceSEnrico Granata SBDebugger::GetCategoryAtIndex (uint32_t index)
1194061858ceSEnrico Granata {
1195061858ceSEnrico Granata     return SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index));
1196061858ceSEnrico Granata }
1197061858ceSEnrico Granata 
1198061858ceSEnrico Granata SBTypeCategory
1199061858ceSEnrico Granata SBDebugger::GetDefaultCategory()
1200061858ceSEnrico Granata {
1201061858ceSEnrico Granata     return GetCategory("default");
1202061858ceSEnrico Granata }
1203061858ceSEnrico Granata 
1204061858ceSEnrico Granata SBTypeFormat
1205061858ceSEnrico Granata SBDebugger::GetFormatForType (SBTypeNameSpecifier type_name)
1206061858ceSEnrico Granata {
1207061858ceSEnrico Granata     SBTypeCategory default_category_sb = GetDefaultCategory();
1208061858ceSEnrico Granata     if (default_category_sb.GetEnabled())
1209061858ceSEnrico Granata         return default_category_sb.GetFormatForType(type_name);
1210061858ceSEnrico Granata     return SBTypeFormat();
1211061858ceSEnrico Granata }
1212061858ceSEnrico Granata 
1213cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON
1214061858ceSEnrico Granata SBTypeSummary
1215061858ceSEnrico Granata SBDebugger::GetSummaryForType (SBTypeNameSpecifier type_name)
1216061858ceSEnrico Granata {
1217a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1218a777dc2aSEnrico Granata         return SBTypeSummary();
1219a777dc2aSEnrico Granata     return SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP()));
1220061858ceSEnrico Granata }
1221cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON
1222061858ceSEnrico Granata 
1223061858ceSEnrico Granata SBTypeFilter
1224061858ceSEnrico Granata SBDebugger::GetFilterForType (SBTypeNameSpecifier type_name)
1225061858ceSEnrico Granata {
1226a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1227a777dc2aSEnrico Granata         return SBTypeFilter();
1228a777dc2aSEnrico Granata     return SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP()));
1229061858ceSEnrico Granata }
1230061858ceSEnrico Granata 
1231cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON
1232061858ceSEnrico Granata SBTypeSynthetic
1233061858ceSEnrico Granata SBDebugger::GetSyntheticForType (SBTypeNameSpecifier type_name)
1234061858ceSEnrico Granata {
1235a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1236a777dc2aSEnrico Granata         return SBTypeSynthetic();
1237a777dc2aSEnrico Granata     return SBTypeSynthetic(DataVisualization::GetSyntheticForType(type_name.GetSP()));
1238061858ceSEnrico Granata }
1239cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON
1240061858ceSEnrico Granata 
1241228063cdSJim Ingham bool
1242228063cdSJim Ingham SBDebugger::EnableLog (const char *channel, const char **categories)
1243228063cdSJim Ingham {
1244228063cdSJim Ingham     if (m_opaque_sp)
1245228063cdSJim Ingham     {
1246228063cdSJim Ingham         uint32_t log_options = LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
1247228063cdSJim Ingham         StreamString errors;
1248228063cdSJim Ingham         return m_opaque_sp->EnableLog (channel, categories, NULL, log_options, errors);
1249228063cdSJim Ingham 
1250228063cdSJim Ingham     }
1251228063cdSJim Ingham     else
1252228063cdSJim Ingham         return false;
1253228063cdSJim Ingham }
12544f02b22dSJim Ingham 
12554f02b22dSJim Ingham void
12564f02b22dSJim Ingham SBDebugger::SetLoggingCallback (lldb::LogOutputCallback log_callback, void *baton)
12574f02b22dSJim Ingham {
12584f02b22dSJim Ingham     if (m_opaque_sp)
12594f02b22dSJim Ingham     {
12604f02b22dSJim Ingham         return m_opaque_sp->SetLoggingCallback (log_callback, baton);
12614f02b22dSJim Ingham     }
12624f02b22dSJim Ingham }
12634f02b22dSJim Ingham 
12644f02b22dSJim Ingham 
1265