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 {
53*5160ce5cSGreg 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 {
72*5160ce5cSGreg 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 {
99*5160ce5cSGreg 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 {
130*5160ce5cSGreg 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.
152*5160ce5cSGreg 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 {
234*5160ce5cSGreg 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 {
247*5160ce5cSGreg 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 {
261*5160ce5cSGreg 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 {
313*5160ce5cSGreg 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 {
367*5160ce5cSGreg 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 {
483431ce678SGreg Clayton     return 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 {
495*5160ce5cSGreg 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 {
508*5160ce5cSGreg 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 
548*5160ce5cSGreg 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 
582*5160ce5cSGreg 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 {
595*5160ce5cSGreg 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     }
652*5160ce5cSGreg 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 
679*5160ce5cSGreg 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
71430fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (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 {
766*5160ce5cSGreg 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 {
791*5160ce5cSGreg 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 {
816*5160ce5cSGreg 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 {
846*5160ce5cSGreg 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 {
864*5160ce5cSGreg 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 {
883*5160ce5cSGreg 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 {
1007*5160ce5cSGreg 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
1060dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description)
1061dde9cff3SCaroline Tice {
1062da7bc7d0SGreg Clayton     Stream &strm = description.ref();
1063da7bc7d0SGreg Clayton 
1064dde9cff3SCaroline Tice     if (m_opaque_sp)
1065dde9cff3SCaroline Tice     {
1066dde9cff3SCaroline Tice         const char *name = m_opaque_sp->GetInstanceName().AsCString();
1067431ce678SGreg Clayton         user_id_t id = m_opaque_sp->GetID();
1068d01b2953SDaniel Malea         strm.Printf ("Debugger (instance: \"%s\", id: %" PRIu64 ")", name, id);
1069dde9cff3SCaroline Tice     }
1070dde9cff3SCaroline Tice     else
1071da7bc7d0SGreg Clayton         strm.PutCString ("No value");
1072dde9cff3SCaroline Tice 
1073dde9cff3SCaroline Tice     return true;
1074dde9cff3SCaroline Tice }
1075efed6131SCaroline Tice 
1076431ce678SGreg Clayton user_id_t
1077efed6131SCaroline Tice SBDebugger::GetID()
1078efed6131SCaroline Tice {
1079efed6131SCaroline Tice     if (m_opaque_sp)
1080efed6131SCaroline Tice         return m_opaque_sp->GetID();
1081efed6131SCaroline Tice     return LLDB_INVALID_UID;
1082efed6131SCaroline Tice }
10832289fa48SGreg Clayton 
10842289fa48SGreg Clayton 
10852289fa48SGreg Clayton SBError
10862289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name)
10872289fa48SGreg Clayton {
10882289fa48SGreg Clayton     SBError sb_error;
10892289fa48SGreg Clayton     if (m_opaque_sp)
10902289fa48SGreg Clayton     {
10912289fa48SGreg Clayton         PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
10922289fa48SGreg Clayton 
10932289fa48SGreg Clayton         if (platform_sp)
10942289fa48SGreg Clayton         {
10952289fa48SGreg Clayton             bool make_selected = true;
10962289fa48SGreg Clayton             m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
10972289fa48SGreg Clayton         }
10982289fa48SGreg Clayton     }
10992289fa48SGreg Clayton     return sb_error;
11002289fa48SGreg Clayton }
11012289fa48SGreg Clayton 
1102fc3f027dSGreg Clayton bool
1103f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
1104f3dd93c8SGreg Clayton {
1105f3dd93c8SGreg Clayton     if (m_opaque_sp)
1106f3dd93c8SGreg Clayton     {
1107f3dd93c8SGreg Clayton         PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1108f3dd93c8SGreg Clayton 
1109f3dd93c8SGreg Clayton         if (platform_sp)
1110f3dd93c8SGreg Clayton         {
1111f3dd93c8SGreg Clayton             platform_sp->SetSDKRootDirectory (ConstString (sysroot));
1112f3dd93c8SGreg Clayton             return true;
1113f3dd93c8SGreg Clayton         }
1114f3dd93c8SGreg Clayton     }
1115f3dd93c8SGreg Clayton     return false;
1116f3dd93c8SGreg Clayton }
1117f3dd93c8SGreg Clayton 
1118f3dd93c8SGreg Clayton bool
1119fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const
1120fc3f027dSGreg Clayton {
1121fc3f027dSGreg Clayton     if (m_opaque_sp)
1122fc3f027dSGreg Clayton         return m_opaque_sp->GetCloseInputOnEOF ();
1123fc3f027dSGreg Clayton     return false;
1124fc3f027dSGreg Clayton }
1125fc3f027dSGreg Clayton 
1126fc3f027dSGreg Clayton void
1127fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b)
1128fc3f027dSGreg Clayton {
1129fc3f027dSGreg Clayton     if (m_opaque_sp)
1130fc3f027dSGreg Clayton         m_opaque_sp->SetCloseInputOnEOF (b);
1131fc3f027dSGreg Clayton }
1132061858ceSEnrico Granata 
1133061858ceSEnrico Granata SBTypeCategory
1134061858ceSEnrico Granata SBDebugger::GetCategory (const char* category_name)
1135061858ceSEnrico Granata {
1136061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1137061858ceSEnrico Granata         return SBTypeCategory();
1138061858ceSEnrico Granata 
1139061858ceSEnrico Granata     TypeCategoryImplSP category_sp;
1140061858ceSEnrico Granata 
1141061858ceSEnrico Granata     if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, false))
1142061858ceSEnrico Granata         return SBTypeCategory(category_sp);
1143061858ceSEnrico Granata     else
1144061858ceSEnrico Granata         return SBTypeCategory();
1145061858ceSEnrico Granata }
1146061858ceSEnrico Granata 
1147061858ceSEnrico Granata SBTypeCategory
1148061858ceSEnrico Granata SBDebugger::CreateCategory (const char* category_name)
1149061858ceSEnrico Granata {
1150061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1151061858ceSEnrico Granata         return SBTypeCategory();
1152061858ceSEnrico Granata 
1153061858ceSEnrico Granata     TypeCategoryImplSP category_sp;
1154061858ceSEnrico Granata 
1155061858ceSEnrico Granata     if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, true))
1156061858ceSEnrico Granata         return SBTypeCategory(category_sp);
1157061858ceSEnrico Granata     else
1158061858ceSEnrico Granata         return SBTypeCategory();
1159061858ceSEnrico Granata }
1160061858ceSEnrico Granata 
1161061858ceSEnrico Granata bool
1162061858ceSEnrico Granata SBDebugger::DeleteCategory (const char* category_name)
1163061858ceSEnrico Granata {
1164061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1165061858ceSEnrico Granata         return false;
1166061858ceSEnrico Granata 
1167061858ceSEnrico Granata     return DataVisualization::Categories::Delete(ConstString(category_name));
1168061858ceSEnrico Granata }
1169061858ceSEnrico Granata 
1170061858ceSEnrico Granata uint32_t
1171061858ceSEnrico Granata SBDebugger::GetNumCategories()
1172061858ceSEnrico Granata {
1173061858ceSEnrico Granata     return DataVisualization::Categories::GetCount();
1174061858ceSEnrico Granata }
1175061858ceSEnrico Granata 
1176061858ceSEnrico Granata SBTypeCategory
1177061858ceSEnrico Granata SBDebugger::GetCategoryAtIndex (uint32_t index)
1178061858ceSEnrico Granata {
1179061858ceSEnrico Granata     return SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index));
1180061858ceSEnrico Granata }
1181061858ceSEnrico Granata 
1182061858ceSEnrico Granata SBTypeCategory
1183061858ceSEnrico Granata SBDebugger::GetDefaultCategory()
1184061858ceSEnrico Granata {
1185061858ceSEnrico Granata     return GetCategory("default");
1186061858ceSEnrico Granata }
1187061858ceSEnrico Granata 
1188061858ceSEnrico Granata SBTypeFormat
1189061858ceSEnrico Granata SBDebugger::GetFormatForType (SBTypeNameSpecifier type_name)
1190061858ceSEnrico Granata {
1191061858ceSEnrico Granata     SBTypeCategory default_category_sb = GetDefaultCategory();
1192061858ceSEnrico Granata     if (default_category_sb.GetEnabled())
1193061858ceSEnrico Granata         return default_category_sb.GetFormatForType(type_name);
1194061858ceSEnrico Granata     return SBTypeFormat();
1195061858ceSEnrico Granata }
1196061858ceSEnrico Granata 
1197cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON
1198061858ceSEnrico Granata SBTypeSummary
1199061858ceSEnrico Granata SBDebugger::GetSummaryForType (SBTypeNameSpecifier type_name)
1200061858ceSEnrico Granata {
1201a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1202a777dc2aSEnrico Granata         return SBTypeSummary();
1203a777dc2aSEnrico Granata     return SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP()));
1204061858ceSEnrico Granata }
1205cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON
1206061858ceSEnrico Granata 
1207061858ceSEnrico Granata SBTypeFilter
1208061858ceSEnrico Granata SBDebugger::GetFilterForType (SBTypeNameSpecifier type_name)
1209061858ceSEnrico Granata {
1210a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1211a777dc2aSEnrico Granata         return SBTypeFilter();
1212a777dc2aSEnrico Granata     return SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP()));
1213061858ceSEnrico Granata }
1214061858ceSEnrico Granata 
1215cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON
1216061858ceSEnrico Granata SBTypeSynthetic
1217061858ceSEnrico Granata SBDebugger::GetSyntheticForType (SBTypeNameSpecifier type_name)
1218061858ceSEnrico Granata {
1219a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1220a777dc2aSEnrico Granata         return SBTypeSynthetic();
1221a777dc2aSEnrico Granata     return SBTypeSynthetic(DataVisualization::GetSyntheticForType(type_name.GetSP()));
1222061858ceSEnrico Granata }
1223cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON
1224061858ceSEnrico Granata 
1225228063cdSJim Ingham bool
1226228063cdSJim Ingham SBDebugger::EnableLog (const char *channel, const char **categories)
1227228063cdSJim Ingham {
1228228063cdSJim Ingham     if (m_opaque_sp)
1229228063cdSJim Ingham     {
1230228063cdSJim Ingham         uint32_t log_options = LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
1231228063cdSJim Ingham         StreamString errors;
1232228063cdSJim Ingham         return m_opaque_sp->EnableLog (channel, categories, NULL, log_options, errors);
1233228063cdSJim Ingham 
1234228063cdSJim Ingham     }
1235228063cdSJim Ingham     else
1236228063cdSJim Ingham         return false;
1237228063cdSJim Ingham }
12384f02b22dSJim Ingham 
12394f02b22dSJim Ingham void
12404f02b22dSJim Ingham SBDebugger::SetLoggingCallback (lldb::LogOutputCallback log_callback, void *baton)
12414f02b22dSJim Ingham {
12424f02b22dSJim Ingham     if (m_opaque_sp)
12434f02b22dSJim Ingham     {
12444f02b22dSJim Ingham         return m_opaque_sp->SetLoggingCallback (log_callback, baton);
12454f02b22dSJim Ingham     }
12464f02b22dSJim Ingham }
12474f02b22dSJim Ingham 
12484f02b22dSJim Ingham 
1249