130fdc8d8SChris Lattner //===-- SBDebugger.cpp ------------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
10ca93cc1dSEli Friedman #include "lldb/API/SBDebugger.h"
1130fdc8d8SChris Lattner 
12e0d378b3SGreg Clayton #include "lldb/lldb-private.h"
1330fdc8d8SChris Lattner 
14ca93cc1dSEli Friedman #include "lldb/API/SBListener.h"
15ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h"
16ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h"
17ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h"
182289fa48SGreg Clayton #include "lldb/API/SBError.h"
19ca93cc1dSEli Friedman #include "lldb/API/SBEvent.h"
20ca93cc1dSEli Friedman #include "lldb/API/SBFrame.h"
21ca93cc1dSEli Friedman #include "lldb/API/SBInputReader.h"
223df9a8dfSCaroline Tice #include "lldb/API/SBProcess.h"
233df9a8dfSCaroline Tice #include "lldb/API/SBSourceManager.h"
24dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
253df9a8dfSCaroline Tice #include "lldb/API/SBStringList.h"
263df9a8dfSCaroline Tice #include "lldb/API/SBTarget.h"
273df9a8dfSCaroline Tice #include "lldb/API/SBThread.h"
28061858ceSEnrico Granata #include "lldb/API/SBTypeCategory.h"
29061858ceSEnrico Granata #include "lldb/API/SBTypeFormat.h"
30061858ceSEnrico Granata #include "lldb/API/SBTypeFilter.h"
31061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h"
32061858ceSEnrico Granata #include "lldb/API/SBTypeSummary.h"
33061858ceSEnrico Granata #include "lldb/API/SBTypeSynthetic.h"
34061858ceSEnrico Granata 
35061858ceSEnrico Granata 
36061858ceSEnrico Granata #include "lldb/Core/DataVisualization.h"
376eee5aa0SGreg Clayton #include "lldb/Core/Debugger.h"
386eee5aa0SGreg Clayton #include "lldb/Core/State.h"
396eee5aa0SGreg Clayton #include "lldb/Interpreter/Args.h"
406eee5aa0SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
41cac9c5f9SGreg Clayton #include "lldb/Interpreter/OptionGroupPlatform.h"
426eee5aa0SGreg Clayton #include "lldb/Target/Process.h"
436eee5aa0SGreg Clayton #include "lldb/Target/TargetList.h"
4430fdc8d8SChris Lattner 
4530fdc8d8SChris Lattner using namespace lldb;
4630fdc8d8SChris Lattner using namespace lldb_private;
4730fdc8d8SChris Lattner 
4830fdc8d8SChris Lattner void
4930fdc8d8SChris Lattner SBDebugger::Initialize ()
5030fdc8d8SChris Lattner {
51431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
52ceb6b139SCaroline Tice 
53ceb6b139SCaroline Tice     if (log)
54ceb6b139SCaroline Tice         log->Printf ("SBDebugger::Initialize ()");
55ceb6b139SCaroline Tice 
56fc36f791SGreg Clayton     SBCommandInterpreter::InitializeSWIG ();
57fc36f791SGreg Clayton 
5830fdc8d8SChris Lattner     Debugger::Initialize();
5930fdc8d8SChris Lattner }
6030fdc8d8SChris Lattner 
6130fdc8d8SChris Lattner void
6230fdc8d8SChris Lattner SBDebugger::Terminate ()
6330fdc8d8SChris Lattner {
6430fdc8d8SChris Lattner     Debugger::Terminate();
6530fdc8d8SChris Lattner }
6630fdc8d8SChris Lattner 
6748e42549SGreg Clayton void
6848e42549SGreg Clayton SBDebugger::Clear ()
6948e42549SGreg Clayton {
70431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
71ceb6b139SCaroline Tice 
72ceb6b139SCaroline Tice     if (log)
7393aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
743d6086f6SCaroline Tice 
753d6086f6SCaroline Tice     if (m_opaque_sp)
763d6086f6SCaroline Tice         m_opaque_sp->CleanUpInputReaders ();
77ceb6b139SCaroline Tice 
7848e42549SGreg Clayton     m_opaque_sp.reset();
7948e42549SGreg Clayton }
8048e42549SGreg Clayton 
816611103cSGreg Clayton SBDebugger
826611103cSGreg Clayton SBDebugger::Create()
836611103cSGreg Clayton {
84228063cdSJim Ingham     return SBDebugger::Create(false, NULL, NULL);
8506942690SJim Ingham }
8606942690SJim Ingham 
8706942690SJim Ingham SBDebugger
8806942690SJim Ingham SBDebugger::Create(bool source_init_files)
8906942690SJim Ingham {
90228063cdSJim Ingham     return SBDebugger::Create (source_init_files, NULL, NULL);
91228063cdSJim Ingham }
92228063cdSJim Ingham 
93228063cdSJim Ingham SBDebugger
94228063cdSJim Ingham SBDebugger::Create(bool source_init_files, lldb::LogOutputCallback callback, void *baton)
95228063cdSJim Ingham 
96228063cdSJim Ingham {
97431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
98ceb6b139SCaroline Tice 
996611103cSGreg Clayton     SBDebugger debugger;
100228063cdSJim Ingham     debugger.reset(Debugger::CreateInstance(callback, baton));
101ceb6b139SCaroline Tice 
102ceb6b139SCaroline Tice     if (log)
103ceb6b139SCaroline Tice     {
104ceb6b139SCaroline Tice         SBStream sstr;
105ceb6b139SCaroline Tice         debugger.GetDescription (sstr);
10693aa84e8SGreg Clayton         log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
107ceb6b139SCaroline Tice     }
108ceb6b139SCaroline Tice 
10906942690SJim Ingham     SBCommandInterpreter interp = debugger.GetCommandInterpreter();
11006942690SJim Ingham     if (source_init_files)
11106942690SJim Ingham     {
11206942690SJim Ingham         interp.get()->SkipLLDBInitFiles(false);
11306942690SJim Ingham         interp.get()->SkipAppInitFiles (false);
11406942690SJim Ingham         SBCommandReturnObject result;
11506942690SJim Ingham         interp.SourceInitFileInHomeDirectory(result);
11606942690SJim Ingham     }
11706942690SJim Ingham     else
11806942690SJim Ingham     {
11906942690SJim Ingham         interp.get()->SkipLLDBInitFiles(true);
12006942690SJim Ingham         interp.get()->SkipAppInitFiles (true);
12106942690SJim Ingham     }
1226611103cSGreg Clayton     return debugger;
1236611103cSGreg Clayton }
1246611103cSGreg Clayton 
125e02657b1SCaroline Tice void
126e02657b1SCaroline Tice SBDebugger::Destroy (SBDebugger &debugger)
127e02657b1SCaroline Tice {
128431ce678SGreg Clayton     LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
129e02657b1SCaroline Tice 
130e02657b1SCaroline Tice     if (log)
131e02657b1SCaroline Tice     {
132e02657b1SCaroline Tice         SBStream sstr;
133e02657b1SCaroline Tice         debugger.GetDescription (sstr);
134e02657b1SCaroline Tice         log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
135e02657b1SCaroline Tice     }
136e02657b1SCaroline Tice 
137e02657b1SCaroline Tice     Debugger::Destroy (debugger.m_opaque_sp);
138e02657b1SCaroline Tice 
139e02657b1SCaroline Tice     if (debugger.m_opaque_sp.get() != NULL)
140e02657b1SCaroline Tice         debugger.m_opaque_sp.reset();
141e02657b1SCaroline Tice }
142e02657b1SCaroline Tice 
143f9322415SGreg Clayton void
144f9322415SGreg Clayton SBDebugger::MemoryPressureDetected ()
145f9322415SGreg Clayton {
1460cd70866SGreg Clayton     // Since this function can be call asynchronously, we allow it to be
1470cd70866SGreg Clayton     // non-mandatory. We have seen deadlocks with this function when called
1480cd70866SGreg Clayton     // so we need to safeguard against this until we can determine what is
1490cd70866SGreg Clayton     // causing the deadlocks.
150aebdf1beSJim Ingham     LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
151aebdf1beSJim Ingham 
1520cd70866SGreg Clayton     const bool mandatory = false;
153aebdf1beSJim Ingham     if (log)
154aebdf1beSJim Ingham     {
155aebdf1beSJim Ingham         log->Printf ("SBDebugger::MemoryPressureDetected (), mandatory = %d", mandatory);
156aebdf1beSJim Ingham     }
157aebdf1beSJim Ingham 
1580cd70866SGreg Clayton     ModuleList::RemoveOrphanSharedModules(mandatory);
159f9322415SGreg Clayton }
160f9322415SGreg Clayton 
1616611103cSGreg Clayton SBDebugger::SBDebugger () :
1626611103cSGreg Clayton     m_opaque_sp ()
1636611103cSGreg Clayton {
1646611103cSGreg Clayton }
1656611103cSGreg Clayton 
166274fd6e9SEnrico Granata SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) :
167274fd6e9SEnrico Granata     m_opaque_sp(debugger_sp)
168274fd6e9SEnrico Granata {
169274fd6e9SEnrico Granata }
170274fd6e9SEnrico Granata 
171efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) :
172efabb123SGreg Clayton     m_opaque_sp (rhs.m_opaque_sp)
173efabb123SGreg Clayton {
174efabb123SGreg Clayton }
175efabb123SGreg Clayton 
176efabb123SGreg Clayton SBDebugger &
177efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs)
178efabb123SGreg Clayton {
179efabb123SGreg Clayton     if (this != &rhs)
180efabb123SGreg Clayton     {
181efabb123SGreg Clayton         m_opaque_sp = rhs.m_opaque_sp;
182efabb123SGreg Clayton     }
183efabb123SGreg Clayton     return *this;
184efabb123SGreg Clayton }
185efabb123SGreg Clayton 
1866611103cSGreg Clayton SBDebugger::~SBDebugger ()
1876611103cSGreg Clayton {
1886611103cSGreg Clayton }
1896611103cSGreg Clayton 
1906611103cSGreg Clayton bool
1916611103cSGreg Clayton SBDebugger::IsValid() const
1926611103cSGreg Clayton {
1936611103cSGreg Clayton     return m_opaque_sp.get() != NULL;
1946611103cSGreg Clayton }
1956611103cSGreg Clayton 
1966611103cSGreg Clayton 
19730fdc8d8SChris Lattner void
19830fdc8d8SChris Lattner SBDebugger::SetAsync (bool b)
19930fdc8d8SChris Lattner {
2006611103cSGreg Clayton     if (m_opaque_sp)
2016611103cSGreg Clayton         m_opaque_sp->SetAsyncExecution(b);
20230fdc8d8SChris Lattner }
20330fdc8d8SChris Lattner 
204e64f0dc7SJim Ingham bool
205e64f0dc7SJim Ingham SBDebugger::GetAsync ()
206e64f0dc7SJim Ingham {
207e64f0dc7SJim Ingham     if (m_opaque_sp)
208e64f0dc7SJim Ingham         return m_opaque_sp->GetAsyncExecution();
209e64f0dc7SJim Ingham     else
210e64f0dc7SJim Ingham         return false;
211e64f0dc7SJim Ingham }
212e64f0dc7SJim Ingham 
2136eee5aa0SGreg Clayton void
2146eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b)
2156eee5aa0SGreg Clayton {
2166eee5aa0SGreg Clayton     if (m_opaque_sp)
2176eee5aa0SGreg Clayton         m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
2186eee5aa0SGreg Clayton }
2196eee5aa0SGreg Clayton 
22016e0c686SJim Ingham void
22116e0c686SJim Ingham SBDebugger::SkipAppInitFiles (bool b)
22216e0c686SJim Ingham {
22316e0c686SJim Ingham     if (m_opaque_sp)
22416e0c686SJim Ingham         m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
22516e0c686SJim Ingham }
22616e0c686SJim Ingham 
22730fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
22830fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session.
22930fdc8d8SChris Lattner void
23030fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
23130fdc8d8SChris Lattner {
232431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
233ceb6b139SCaroline Tice 
234ceb6b139SCaroline Tice     if (log)
235cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
236cfd1acedSGreg Clayton                      fh, transfer_ownership);
237ceb6b139SCaroline Tice 
2386611103cSGreg Clayton     if (m_opaque_sp)
2396611103cSGreg Clayton         m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
24030fdc8d8SChris Lattner }
24130fdc8d8SChris Lattner 
24230fdc8d8SChris Lattner void
24330fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
24430fdc8d8SChris Lattner {
245431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
246ceb6b139SCaroline Tice 
247ceb6b139SCaroline Tice 
248ceb6b139SCaroline Tice     if (log)
249cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
250cfd1acedSGreg Clayton                      fh, transfer_ownership);
251ceb6b139SCaroline Tice 
2526611103cSGreg Clayton     if (m_opaque_sp)
2536611103cSGreg Clayton         m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
25430fdc8d8SChris Lattner }
25530fdc8d8SChris Lattner 
25630fdc8d8SChris Lattner void
25730fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
25830fdc8d8SChris Lattner {
259431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
260ceb6b139SCaroline Tice 
261ceb6b139SCaroline Tice 
262ceb6b139SCaroline Tice     if (log)
263cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
264cfd1acedSGreg Clayton                      fh, transfer_ownership);
265ceb6b139SCaroline Tice 
2666611103cSGreg Clayton     if (m_opaque_sp)
2676611103cSGreg Clayton         m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
26830fdc8d8SChris Lattner }
26930fdc8d8SChris Lattner 
27030fdc8d8SChris Lattner FILE *
27130fdc8d8SChris Lattner SBDebugger::GetInputFileHandle ()
27230fdc8d8SChris Lattner {
2736611103cSGreg Clayton     if (m_opaque_sp)
27451b1e2d2SGreg Clayton         return m_opaque_sp->GetInputFile().GetStream();
2756611103cSGreg Clayton     return NULL;
27630fdc8d8SChris Lattner }
27730fdc8d8SChris Lattner 
27830fdc8d8SChris Lattner FILE *
27930fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle ()
28030fdc8d8SChris Lattner {
2816611103cSGreg Clayton     if (m_opaque_sp)
28251b1e2d2SGreg Clayton         return m_opaque_sp->GetOutputFile().GetStream();
2836611103cSGreg Clayton     return NULL;
28430fdc8d8SChris Lattner }
28530fdc8d8SChris Lattner 
28630fdc8d8SChris Lattner FILE *
28730fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle ()
28830fdc8d8SChris Lattner {
2896611103cSGreg Clayton     if (m_opaque_sp)
29051b1e2d2SGreg Clayton         return m_opaque_sp->GetErrorFile().GetStream();
2916611103cSGreg Clayton     return NULL;
29230fdc8d8SChris Lattner }
29330fdc8d8SChris Lattner 
29430fdc8d8SChris Lattner SBCommandInterpreter
29530fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter ()
29630fdc8d8SChris Lattner {
297431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
298ceb6b139SCaroline Tice 
2996611103cSGreg Clayton     SBCommandInterpreter sb_interpreter;
3006611103cSGreg Clayton     if (m_opaque_sp)
3016611103cSGreg Clayton         sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
302ceb6b139SCaroline Tice 
303750cd175SCaroline Tice     if (log)
30493aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
305750cd175SCaroline Tice                      m_opaque_sp.get(), sb_interpreter.get());
306750cd175SCaroline Tice 
30730fdc8d8SChris Lattner     return sb_interpreter;
30830fdc8d8SChris Lattner }
30930fdc8d8SChris Lattner 
31030fdc8d8SChris Lattner void
31130fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command)
31230fdc8d8SChris Lattner {
3136611103cSGreg Clayton     if (m_opaque_sp)
3146611103cSGreg Clayton     {
315af67cecdSGreg Clayton         TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
316af67cecdSGreg Clayton         Mutex::Locker api_locker;
317af67cecdSGreg Clayton         if (target_sp)
31810ebffa4SJim Ingham             api_locker.Lock(target_sp->GetAPIMutex());
319af67cecdSGreg Clayton 
3206611103cSGreg Clayton         SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
32130fdc8d8SChris Lattner         SBCommandReturnObject result;
32230fdc8d8SChris Lattner 
32330fdc8d8SChris Lattner         sb_interpreter.HandleCommand (command, result, false);
32430fdc8d8SChris Lattner 
32530fdc8d8SChris Lattner         if (GetErrorFileHandle() != NULL)
32630fdc8d8SChris Lattner             result.PutError (GetErrorFileHandle());
32730fdc8d8SChris Lattner         if (GetOutputFileHandle() != NULL)
32830fdc8d8SChris Lattner             result.PutOutput (GetOutputFileHandle());
32930fdc8d8SChris Lattner 
3306611103cSGreg Clayton         if (m_opaque_sp->GetAsyncExecution() == false)
33130fdc8d8SChris Lattner         {
3326611103cSGreg Clayton             SBProcess process(GetCommandInterpreter().GetProcess ());
333b9556accSGreg Clayton             ProcessSP process_sp (process.GetSP());
334b9556accSGreg Clayton             if (process_sp)
33530fdc8d8SChris Lattner             {
33630fdc8d8SChris Lattner                 EventSP event_sp;
3376611103cSGreg Clayton                 Listener &lldb_listener = m_opaque_sp->GetListener();
338b9556accSGreg Clayton                 while (lldb_listener.GetNextEventForBroadcaster (process_sp.get(), event_sp))
33930fdc8d8SChris Lattner                 {
34030fdc8d8SChris Lattner                     SBEvent event(event_sp);
34130fdc8d8SChris Lattner                     HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
34230fdc8d8SChris Lattner                 }
34330fdc8d8SChris Lattner             }
34430fdc8d8SChris Lattner         }
34530fdc8d8SChris Lattner     }
3466611103cSGreg Clayton }
34730fdc8d8SChris Lattner 
34830fdc8d8SChris Lattner SBListener
34930fdc8d8SChris Lattner SBDebugger::GetListener ()
35030fdc8d8SChris Lattner {
351431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
352ceb6b139SCaroline Tice 
3536611103cSGreg Clayton     SBListener sb_listener;
3546611103cSGreg Clayton     if (m_opaque_sp)
3556611103cSGreg Clayton         sb_listener.reset(&m_opaque_sp->GetListener(), false);
356ceb6b139SCaroline Tice 
357750cd175SCaroline Tice     if (log)
35893aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
359750cd175SCaroline Tice                      sb_listener.get());
360750cd175SCaroline Tice 
36130fdc8d8SChris Lattner     return sb_listener;
36230fdc8d8SChris Lattner }
36330fdc8d8SChris Lattner 
36430fdc8d8SChris Lattner void
36530fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
36630fdc8d8SChris Lattner {
367af67cecdSGreg Clayton     if (!process.IsValid())
368af67cecdSGreg Clayton         return;
369af67cecdSGreg Clayton 
370b9556accSGreg Clayton     TargetSP target_sp (process.GetTarget().GetSP());
371b9556accSGreg Clayton     if (!target_sp)
372b9556accSGreg Clayton         return;
373b9556accSGreg Clayton 
37430fdc8d8SChris Lattner     const uint32_t event_type = event.GetType();
37530fdc8d8SChris Lattner     char stdio_buffer[1024];
37630fdc8d8SChris Lattner     size_t len;
37730fdc8d8SChris Lattner 
378b9556accSGreg Clayton     Mutex::Locker api_locker (target_sp->GetAPIMutex());
379af67cecdSGreg Clayton 
380af67cecdSGreg Clayton     if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
38130fdc8d8SChris Lattner     {
382af67cecdSGreg Clayton         // Drain stdout when we stop just in case we have any bytes
38330fdc8d8SChris Lattner         while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
38430fdc8d8SChris Lattner             if (out != NULL)
38530fdc8d8SChris Lattner                 ::fwrite (stdio_buffer, 1, len, out);
38630fdc8d8SChris Lattner     }
387af67cecdSGreg Clayton 
388af67cecdSGreg Clayton     if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
38930fdc8d8SChris Lattner     {
390af67cecdSGreg Clayton         // Drain stderr when we stop just in case we have any bytes
39130fdc8d8SChris Lattner         while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
392af67cecdSGreg Clayton             if (err != NULL)
393af67cecdSGreg Clayton                 ::fwrite (stdio_buffer, 1, len, err);
39430fdc8d8SChris Lattner     }
395af67cecdSGreg Clayton 
396af67cecdSGreg Clayton     if (event_type & Process::eBroadcastBitStateChanged)
39730fdc8d8SChris Lattner     {
39830fdc8d8SChris Lattner         StateType event_state = SBProcess::GetStateFromEvent (event);
39930fdc8d8SChris Lattner 
40030fdc8d8SChris Lattner         if (event_state == eStateInvalid)
40130fdc8d8SChris Lattner             return;
40230fdc8d8SChris Lattner 
40330fdc8d8SChris Lattner         bool is_stopped = StateIsStoppedState (event_state);
40430fdc8d8SChris Lattner         if (!is_stopped)
4052976d00aSJim Ingham             process.ReportEventState (event, out);
40630fdc8d8SChris Lattner     }
40730fdc8d8SChris Lattner }
40830fdc8d8SChris Lattner 
409e37d605eSJim Ingham SBSourceManager
41030fdc8d8SChris Lattner SBDebugger::GetSourceManager ()
41130fdc8d8SChris Lattner {
412e37d605eSJim Ingham     SBSourceManager sb_source_manager (*this);
413e37d605eSJim Ingham     return sb_source_manager;
41430fdc8d8SChris Lattner }
41530fdc8d8SChris Lattner 
41630fdc8d8SChris Lattner 
41730fdc8d8SChris Lattner bool
41830fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
41930fdc8d8SChris Lattner {
42030fdc8d8SChris Lattner     if (arch_name && arch_name_len)
42130fdc8d8SChris Lattner     {
422431ce678SGreg Clayton         ArchSpec default_arch = Target::GetDefaultArchitecture ();
423daccaa9eSCaroline Tice 
42430fdc8d8SChris Lattner         if (default_arch.IsValid())
42530fdc8d8SChris Lattner         {
426431ce678SGreg Clayton             const std::string &triple_str = default_arch.GetTriple().str();
427431ce678SGreg Clayton             if (!triple_str.empty())
428431ce678SGreg Clayton                 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
429431ce678SGreg Clayton             else
43064195a2cSGreg Clayton                 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
43130fdc8d8SChris Lattner             return true;
43230fdc8d8SChris Lattner         }
43330fdc8d8SChris Lattner     }
43430fdc8d8SChris Lattner     if (arch_name && arch_name_len)
43530fdc8d8SChris Lattner         arch_name[0] = '\0';
43630fdc8d8SChris Lattner     return false;
43730fdc8d8SChris Lattner }
43830fdc8d8SChris Lattner 
43930fdc8d8SChris Lattner 
44030fdc8d8SChris Lattner bool
44130fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name)
44230fdc8d8SChris Lattner {
44330fdc8d8SChris Lattner     if (arch_name)
44430fdc8d8SChris Lattner     {
44570512317SGreg Clayton         ArchSpec arch (arch_name);
44630fdc8d8SChris Lattner         if (arch.IsValid())
44730fdc8d8SChris Lattner         {
448431ce678SGreg Clayton             Target::SetDefaultArchitecture (arch);
44930fdc8d8SChris Lattner             return true;
45030fdc8d8SChris Lattner         }
45130fdc8d8SChris Lattner     }
45230fdc8d8SChris Lattner     return false;
45330fdc8d8SChris Lattner }
45430fdc8d8SChris Lattner 
45530fdc8d8SChris Lattner ScriptLanguage
45630fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name)
45730fdc8d8SChris Lattner {
458af67cecdSGreg Clayton 
45930fdc8d8SChris Lattner     return Args::StringToScriptLanguage (script_language_name,
46030fdc8d8SChris Lattner                                          eScriptLanguageDefault,
46130fdc8d8SChris Lattner                                          NULL);
46230fdc8d8SChris Lattner }
46330fdc8d8SChris Lattner 
46430fdc8d8SChris Lattner const char *
46530fdc8d8SChris Lattner SBDebugger::GetVersionString ()
46630fdc8d8SChris Lattner {
467431ce678SGreg Clayton     return GetVersion();
46830fdc8d8SChris Lattner }
46930fdc8d8SChris Lattner 
47030fdc8d8SChris Lattner const char *
471431ce678SGreg Clayton SBDebugger::StateAsCString (StateType state)
47230fdc8d8SChris Lattner {
473c2bbb49aSCaroline Tice     return lldb_private::StateAsCString (state);
47430fdc8d8SChris Lattner }
47530fdc8d8SChris Lattner 
47630fdc8d8SChris Lattner bool
477431ce678SGreg Clayton SBDebugger::StateIsRunningState (StateType state)
47830fdc8d8SChris Lattner {
479431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4804838131bSGreg Clayton 
481c2bbb49aSCaroline Tice     const bool result = lldb_private::StateIsRunningState (state);
4824838131bSGreg Clayton     if (log)
4834838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
484431ce678SGreg Clayton                      StateAsCString (state), result);
4854838131bSGreg Clayton 
4864838131bSGreg Clayton     return result;
48730fdc8d8SChris Lattner }
48830fdc8d8SChris Lattner 
48930fdc8d8SChris Lattner bool
490431ce678SGreg Clayton SBDebugger::StateIsStoppedState (StateType state)
49130fdc8d8SChris Lattner {
492431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
493ceb6b139SCaroline Tice 
4942637f825SGreg Clayton     const bool result = lldb_private::StateIsStoppedState (state, false);
495ceb6b139SCaroline Tice     if (log)
4964838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
497431ce678SGreg Clayton                      StateAsCString (state), result);
498ceb6b139SCaroline Tice 
4994838131bSGreg Clayton     return result;
50030fdc8d8SChris Lattner }
50130fdc8d8SChris Lattner 
502cac9c5f9SGreg Clayton lldb::SBTarget
503cac9c5f9SGreg Clayton SBDebugger::CreateTarget (const char *filename,
504cac9c5f9SGreg Clayton                           const char *target_triple,
505cac9c5f9SGreg Clayton                           const char *platform_name,
506cac9c5f9SGreg Clayton                           bool add_dependent_modules,
507cac9c5f9SGreg Clayton                           lldb::SBError& sb_error)
508cac9c5f9SGreg Clayton {
509cac9c5f9SGreg Clayton     SBTarget sb_target;
510b9556accSGreg Clayton     TargetSP target_sp;
511cac9c5f9SGreg Clayton     if (m_opaque_sp)
512cac9c5f9SGreg Clayton     {
513cac9c5f9SGreg Clayton         sb_error.Clear();
514cac9c5f9SGreg Clayton         FileSpec filename_spec (filename, true);
515cac9c5f9SGreg Clayton         OptionGroupPlatform platform_options (false);
516cac9c5f9SGreg Clayton         platform_options.SetPlatformName (platform_name);
517cac9c5f9SGreg Clayton 
518cac9c5f9SGreg Clayton         sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
519cac9c5f9SGreg Clayton                                                                     filename_spec,
520cac9c5f9SGreg Clayton                                                                     target_triple,
521cac9c5f9SGreg Clayton                                                                     add_dependent_modules,
522cac9c5f9SGreg Clayton                                                                     &platform_options,
523cac9c5f9SGreg Clayton                                                                     target_sp);
524cac9c5f9SGreg Clayton 
525cac9c5f9SGreg Clayton         if (sb_error.Success())
526b9556accSGreg Clayton             sb_target.SetSP (target_sp);
527cac9c5f9SGreg Clayton     }
528cac9c5f9SGreg Clayton     else
529cac9c5f9SGreg Clayton     {
530cac9c5f9SGreg Clayton         sb_error.SetErrorString("invalid target");
531cac9c5f9SGreg Clayton     }
532cac9c5f9SGreg Clayton 
533cac9c5f9SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
534cac9c5f9SGreg Clayton     if (log)
535cac9c5f9SGreg Clayton     {
536cac9c5f9SGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)",
537cac9c5f9SGreg Clayton                      m_opaque_sp.get(),
538cac9c5f9SGreg Clayton                      filename,
539cac9c5f9SGreg Clayton                      target_triple,
540cac9c5f9SGreg Clayton                      platform_name,
541cac9c5f9SGreg Clayton                      add_dependent_modules,
542cac9c5f9SGreg Clayton                      sb_error.GetCString(),
543b9556accSGreg Clayton                      target_sp.get());
544cac9c5f9SGreg Clayton     }
545cac9c5f9SGreg Clayton 
546cac9c5f9SGreg Clayton     return sb_target;
547cac9c5f9SGreg Clayton }
54830fdc8d8SChris Lattner 
54930fdc8d8SChris Lattner SBTarget
55030fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
55130fdc8d8SChris Lattner                                                  const char *target_triple)
55230fdc8d8SChris Lattner {
553b9556accSGreg Clayton     SBTarget sb_target;
554b9556accSGreg Clayton     TargetSP target_sp;
5556611103cSGreg Clayton     if (m_opaque_sp)
5566611103cSGreg Clayton     {
557274060b6SGreg Clayton         FileSpec file_spec (filename, true);
55830fdc8d8SChris Lattner         TargetSP target_sp;
559cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
560cac9c5f9SGreg Clayton         Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
561cac9c5f9SGreg Clayton                                                                 file_spec,
562cac9c5f9SGreg Clayton                                                                 target_triple,
563cac9c5f9SGreg Clayton                                                                 add_dependent_modules,
564cac9c5f9SGreg Clayton                                                                 NULL,
565cac9c5f9SGreg Clayton                                                                 target_sp));
566b9556accSGreg Clayton         sb_target.SetSP (target_sp);
5676611103cSGreg Clayton     }
5684838131bSGreg Clayton 
569431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5704838131bSGreg Clayton     if (log)
5714838131bSGreg Clayton     {
572cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
573b9556accSGreg Clayton                      m_opaque_sp.get(), filename, target_triple, target_sp.get());
5744838131bSGreg Clayton     }
5754838131bSGreg Clayton 
576b9556accSGreg Clayton     return sb_target;
57730fdc8d8SChris Lattner }
57830fdc8d8SChris Lattner 
57930fdc8d8SChris Lattner SBTarget
58064195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
58130fdc8d8SChris Lattner {
582431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
583ceb6b139SCaroline Tice 
584b9556accSGreg Clayton     SBTarget sb_target;
585b9556accSGreg Clayton     TargetSP target_sp;
5866611103cSGreg Clayton     if (m_opaque_sp)
5876611103cSGreg Clayton     {
588274060b6SGreg Clayton         FileSpec file (filename, true);
58930fdc8d8SChris Lattner         Error error;
590cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
59130fdc8d8SChris Lattner 
592cac9c5f9SGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
593cac9c5f9SGreg Clayton                                                            file,
594cac9c5f9SGreg Clayton                                                            arch_cstr,
595cac9c5f9SGreg Clayton                                                            add_dependent_modules,
596cac9c5f9SGreg Clayton                                                            NULL,
597cac9c5f9SGreg Clayton                                                            target_sp);
59830fdc8d8SChris Lattner 
59930fdc8d8SChris Lattner         if (error.Success())
6006611103cSGreg Clayton         {
6012976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
602b9556accSGreg Clayton             sb_target.SetSP (target_sp);
6036611103cSGreg Clayton         }
6046611103cSGreg Clayton     }
605ceb6b139SCaroline Tice 
606ceb6b139SCaroline Tice     if (log)
607ceb6b139SCaroline Tice     {
608cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
609b9556accSGreg Clayton                      m_opaque_sp.get(), filename, arch_cstr, target_sp.get());
610ceb6b139SCaroline Tice     }
611ceb6b139SCaroline Tice 
612b9556accSGreg Clayton     return sb_target;
61330fdc8d8SChris Lattner }
61430fdc8d8SChris Lattner 
61530fdc8d8SChris Lattner SBTarget
61630fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename)
61730fdc8d8SChris Lattner {
618b9556accSGreg Clayton     SBTarget sb_target;
619b9556accSGreg Clayton     TargetSP target_sp;
6206611103cSGreg Clayton     if (m_opaque_sp)
6216611103cSGreg Clayton     {
622274060b6SGreg Clayton         FileSpec file (filename, true);
623431ce678SGreg Clayton         ArchSpec arch = Target::GetDefaultArchitecture ();
62430fdc8d8SChris Lattner         Error error;
625cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
62630fdc8d8SChris Lattner 
627b3a40ba8SGreg Clayton         PlatformSP platform_sp(m_opaque_sp->GetPlatformList().GetSelectedPlatform());
628cac9c5f9SGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
629cac9c5f9SGreg Clayton                                                            file,
630cac9c5f9SGreg Clayton                                                            arch,
631cac9c5f9SGreg Clayton                                                            add_dependent_modules,
632b3a40ba8SGreg Clayton                                                            platform_sp,
633cac9c5f9SGreg Clayton                                                            target_sp);
63430fdc8d8SChris Lattner 
6356611103cSGreg Clayton         if (error.Success())
6366611103cSGreg Clayton         {
6372976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
638b9556accSGreg Clayton             sb_target.SetSP (target_sp);
6396611103cSGreg Clayton         }
6406611103cSGreg Clayton     }
641431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6424838131bSGreg Clayton     if (log)
6434838131bSGreg Clayton     {
644cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
645b9556accSGreg Clayton                      m_opaque_sp.get(), filename, target_sp.get());
6464838131bSGreg Clayton     }
647b9556accSGreg Clayton     return sb_target;
64830fdc8d8SChris Lattner }
64930fdc8d8SChris Lattner 
6503794ad95SJohnny Chen bool
6513794ad95SJohnny Chen SBDebugger::DeleteTarget (lldb::SBTarget &target)
6523794ad95SJohnny Chen {
6533794ad95SJohnny Chen     bool result = false;
654b9556accSGreg Clayton     if (m_opaque_sp)
655b9556accSGreg Clayton     {
656b9556accSGreg Clayton         TargetSP target_sp(target.GetSP());
657b9556accSGreg Clayton         if (target_sp)
6583794ad95SJohnny Chen         {
6593794ad95SJohnny Chen             // No need to lock, the target list is thread safe
660b9556accSGreg Clayton             result = m_opaque_sp->GetTargetList().DeleteTarget (target_sp);
661b9556accSGreg Clayton             target_sp->Destroy();
66275340622SGreg Clayton             target.Clear();
6630cd70866SGreg Clayton             const bool mandatory = true;
6640cd70866SGreg Clayton             ModuleList::RemoveOrphanSharedModules(mandatory);
6653794ad95SJohnny Chen         }
666b9556accSGreg Clayton     }
6673794ad95SJohnny Chen 
6683794ad95SJohnny Chen     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6693794ad95SJohnny Chen     if (log)
6703794ad95SJohnny Chen     {
6713794ad95SJohnny Chen         log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
6723794ad95SJohnny Chen     }
6733794ad95SJohnny Chen 
6743794ad95SJohnny Chen     return result;
6753794ad95SJohnny Chen }
67630fdc8d8SChris Lattner SBTarget
67730fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx)
67830fdc8d8SChris Lattner {
6796611103cSGreg Clayton     SBTarget sb_target;
6806611103cSGreg Clayton     if (m_opaque_sp)
681af67cecdSGreg Clayton     {
682af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
683b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
684af67cecdSGreg Clayton     }
68530fdc8d8SChris Lattner     return sb_target;
68630fdc8d8SChris Lattner }
68730fdc8d8SChris Lattner 
6888499e1a4SJim Ingham uint32_t
6898499e1a4SJim Ingham SBDebugger::GetIndexOfTarget (lldb::SBTarget target)
6908499e1a4SJim Ingham {
6918499e1a4SJim Ingham 
6928499e1a4SJim Ingham     lldb::TargetSP target_sp = target.GetSP();
6938499e1a4SJim Ingham     if (!target_sp)
6948499e1a4SJim Ingham         return UINT32_MAX;
6958499e1a4SJim Ingham 
6968499e1a4SJim Ingham     if (!m_opaque_sp)
6978499e1a4SJim Ingham         return UINT32_MAX;
6988499e1a4SJim Ingham 
6998499e1a4SJim Ingham     return m_opaque_sp->GetTargetList().GetIndexOfTarget (target.GetSP());
7008499e1a4SJim Ingham }
7018499e1a4SJim Ingham 
70230fdc8d8SChris Lattner SBTarget
70330fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid)
70430fdc8d8SChris Lattner {
7056611103cSGreg Clayton     SBTarget sb_target;
7066611103cSGreg Clayton     if (m_opaque_sp)
707af67cecdSGreg Clayton     {
708af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
709b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
710af67cecdSGreg Clayton     }
71130fdc8d8SChris Lattner     return sb_target;
71230fdc8d8SChris Lattner }
71330fdc8d8SChris Lattner 
71430fdc8d8SChris Lattner SBTarget
71530fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
71630fdc8d8SChris Lattner {
7176611103cSGreg Clayton     SBTarget sb_target;
7186611103cSGreg Clayton     if (m_opaque_sp && filename && filename[0])
7196611103cSGreg Clayton     {
720af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
721eb0103f2SGreg Clayton         ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
722274060b6SGreg Clayton         TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
723b9556accSGreg Clayton         sb_target.SetSP (target_sp);
7246611103cSGreg Clayton     }
7256611103cSGreg Clayton     return sb_target;
72630fdc8d8SChris Lattner }
72730fdc8d8SChris Lattner 
72830fdc8d8SChris Lattner SBTarget
729431ce678SGreg Clayton SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
73030fdc8d8SChris Lattner {
7316611103cSGreg Clayton     SBTarget sb_target;
7326611103cSGreg Clayton     if (m_opaque_sp)
733af67cecdSGreg Clayton     {
734af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
735b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
736af67cecdSGreg Clayton     }
73730fdc8d8SChris Lattner     return sb_target;
73830fdc8d8SChris Lattner }
73930fdc8d8SChris Lattner 
74030fdc8d8SChris Lattner 
74130fdc8d8SChris Lattner uint32_t
74230fdc8d8SChris Lattner SBDebugger::GetNumTargets ()
74330fdc8d8SChris Lattner {
7446611103cSGreg Clayton     if (m_opaque_sp)
745af67cecdSGreg Clayton     {
746af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
7476611103cSGreg Clayton         return m_opaque_sp->GetTargetList().GetNumTargets ();
748af67cecdSGreg Clayton     }
7496611103cSGreg Clayton     return 0;
7506611103cSGreg Clayton }
75130fdc8d8SChris Lattner 
75230fdc8d8SChris Lattner SBTarget
7532976d00aSJim Ingham SBDebugger::GetSelectedTarget ()
75430fdc8d8SChris Lattner {
755431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
756ceb6b139SCaroline Tice 
7576611103cSGreg Clayton     SBTarget sb_target;
758b9556accSGreg Clayton     TargetSP target_sp;
7596611103cSGreg Clayton     if (m_opaque_sp)
760af67cecdSGreg Clayton     {
761af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
762b9556accSGreg Clayton         target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget ();
763b9556accSGreg Clayton         sb_target.SetSP (target_sp);
764af67cecdSGreg Clayton     }
765ceb6b139SCaroline Tice 
766ceb6b139SCaroline Tice     if (log)
767ceb6b139SCaroline Tice     {
768ceb6b139SCaroline Tice         SBStream sstr;
769431ce678SGreg Clayton         sb_target.GetDescription (sstr, eDescriptionLevelBrief);
77093aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
771b9556accSGreg Clayton                      target_sp.get(), sstr.GetData());
772ceb6b139SCaroline Tice     }
773ceb6b139SCaroline Tice 
77430fdc8d8SChris Lattner     return sb_target;
77530fdc8d8SChris Lattner }
77630fdc8d8SChris Lattner 
77730fdc8d8SChris Lattner void
778e64f0dc7SJim Ingham SBDebugger::SetSelectedTarget (SBTarget &sb_target)
779e64f0dc7SJim Ingham {
780e64f0dc7SJim Ingham     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
781e64f0dc7SJim Ingham 
782b9556accSGreg Clayton     TargetSP target_sp (sb_target.GetSP());
783e64f0dc7SJim Ingham     if (m_opaque_sp)
784e64f0dc7SJim Ingham     {
785b9556accSGreg Clayton         m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
786e64f0dc7SJim Ingham     }
787e64f0dc7SJim Ingham     if (log)
788e64f0dc7SJim Ingham     {
789e64f0dc7SJim Ingham         SBStream sstr;
790e64f0dc7SJim Ingham         sb_target.GetDescription (sstr, eDescriptionLevelBrief);
791e64f0dc7SJim Ingham         log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
792b9556accSGreg Clayton                      target_sp.get(), sstr.GetData());
793e64f0dc7SJim Ingham     }
794e64f0dc7SJim Ingham }
795e64f0dc7SJim Ingham 
796e64f0dc7SJim Ingham void
797*c30a73adSEnrico Granata SBDebugger::DispatchInput (void* baton, const void *data, size_t data_len)
7986b09d423SEnrico Granata {
7996b09d423SEnrico Granata     DispatchInput (data,data_len);
8006b09d423SEnrico Granata }
8016b09d423SEnrico Granata 
8026b09d423SEnrico Granata void
803c3019991SFilipe Cabecinhas SBDebugger::DispatchInput (const void *data, size_t data_len)
80430fdc8d8SChris Lattner {
805431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
806ceb6b139SCaroline Tice 
807ceb6b139SCaroline Tice     if (log)
808c3019991SFilipe Cabecinhas         log->Printf ("SBDebugger(%p)::DispatchInput (data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
809c3019991SFilipe Cabecinhas                      (int) data_len, (const char *) data, data_len);
810ceb6b139SCaroline Tice 
8116611103cSGreg Clayton     if (m_opaque_sp)
8126611103cSGreg Clayton         m_opaque_sp->DispatchInput ((const char *) data, data_len);
81330fdc8d8SChris Lattner }
81430fdc8d8SChris Lattner 
81530fdc8d8SChris Lattner void
816efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt ()
817efed6131SCaroline Tice {
818efed6131SCaroline Tice     if (m_opaque_sp)
819efed6131SCaroline Tice         m_opaque_sp->DispatchInputInterrupt ();
820efed6131SCaroline Tice }
821efed6131SCaroline Tice 
822efed6131SCaroline Tice void
823efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile ()
824efed6131SCaroline Tice {
825efed6131SCaroline Tice     if (m_opaque_sp)
826efed6131SCaroline Tice         m_opaque_sp->DispatchInputEndOfFile ();
827efed6131SCaroline Tice }
8289088b068SCaroline Tice 
8299088b068SCaroline Tice bool
8309088b068SCaroline Tice SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
8319088b068SCaroline Tice {
8329088b068SCaroline Tice     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
8339088b068SCaroline Tice 
8349088b068SCaroline Tice     if (log)
8359088b068SCaroline Tice         log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
8369088b068SCaroline Tice 
8379088b068SCaroline Tice     if (m_opaque_sp && reader.IsValid())
8389088b068SCaroline Tice     {
8399088b068SCaroline Tice         InputReaderSP reader_sp (*reader);
8409088b068SCaroline Tice         return m_opaque_sp->InputReaderIsTopReader (reader_sp);
8419088b068SCaroline Tice     }
8429088b068SCaroline Tice 
8439088b068SCaroline Tice     return false;
8449088b068SCaroline Tice }
8459088b068SCaroline Tice 
846efed6131SCaroline Tice 
847efed6131SCaroline Tice void
84830fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader)
84930fdc8d8SChris Lattner {
850431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
851ceb6b139SCaroline Tice 
852ceb6b139SCaroline Tice     if (log)
85393aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
854ceb6b139SCaroline Tice 
8556611103cSGreg Clayton     if (m_opaque_sp && reader.IsValid())
85630fdc8d8SChris Lattner     {
857af67cecdSGreg Clayton         TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
858af67cecdSGreg Clayton         Mutex::Locker api_locker;
859af67cecdSGreg Clayton         if (target_sp)
86010ebffa4SJim Ingham             api_locker.Lock(target_sp->GetAPIMutex());
86130fdc8d8SChris Lattner         InputReaderSP reader_sp(*reader);
8626611103cSGreg Clayton         m_opaque_sp->PushInputReader (reader_sp);
86330fdc8d8SChris Lattner     }
86430fdc8d8SChris Lattner }
8656611103cSGreg Clayton 
8666611103cSGreg Clayton void
867969ed3d1SCaroline Tice SBDebugger::NotifyTopInputReader (InputReaderAction notification)
868969ed3d1SCaroline Tice {
869969ed3d1SCaroline Tice     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
870969ed3d1SCaroline Tice 
871969ed3d1SCaroline Tice     if (log)
872969ed3d1SCaroline Tice         log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
873969ed3d1SCaroline Tice 
874969ed3d1SCaroline Tice     if (m_opaque_sp)
875969ed3d1SCaroline Tice         m_opaque_sp->NotifyTopInputReader (notification);
876969ed3d1SCaroline Tice }
877969ed3d1SCaroline Tice 
878969ed3d1SCaroline Tice void
879431ce678SGreg Clayton SBDebugger::reset (const DebuggerSP &debugger_sp)
8806611103cSGreg Clayton {
8816611103cSGreg Clayton     m_opaque_sp = debugger_sp;
8826611103cSGreg Clayton }
8836611103cSGreg Clayton 
8846611103cSGreg Clayton Debugger *
8856611103cSGreg Clayton SBDebugger::get () const
8866611103cSGreg Clayton {
8876611103cSGreg Clayton     return m_opaque_sp.get();
8886611103cSGreg Clayton }
8896611103cSGreg Clayton 
8906611103cSGreg Clayton Debugger &
8916611103cSGreg Clayton SBDebugger::ref () const
8926611103cSGreg Clayton {
8936611103cSGreg Clayton     assert (m_opaque_sp.get());
8946611103cSGreg Clayton     return *m_opaque_sp;
8956611103cSGreg Clayton }
8966611103cSGreg Clayton 
8979a37766eSGreg Clayton const lldb::DebuggerSP &
8989a37766eSGreg Clayton SBDebugger::get_sp () const
8999a37766eSGreg Clayton {
9009a37766eSGreg Clayton     return m_opaque_sp;
9019a37766eSGreg Clayton }
9026611103cSGreg Clayton 
903ebc1bb27SCaroline Tice SBDebugger
904ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id)
905ebc1bb27SCaroline Tice {
906af67cecdSGreg Clayton     // No need to lock, the debugger list is thread safe
907ebc1bb27SCaroline Tice     SBDebugger sb_debugger;
908431ce678SGreg Clayton     DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
909ebc1bb27SCaroline Tice     if (debugger_sp)
910ebc1bb27SCaroline Tice         sb_debugger.reset (debugger_sp);
911ebc1bb27SCaroline Tice     return sb_debugger;
912ebc1bb27SCaroline Tice }
913e40e4218SJim Ingham 
914dd759857SCaroline Tice const char *
915dd759857SCaroline Tice SBDebugger::GetInstanceName()
916dd759857SCaroline Tice {
9176920b52bSGreg Clayton     if (m_opaque_sp)
9186920b52bSGreg Clayton         return m_opaque_sp->GetInstanceName().AsCString();
9196920b52bSGreg Clayton     else
920dd759857SCaroline Tice         return NULL;
921dd759857SCaroline Tice }
922dd759857SCaroline Tice 
9233df9a8dfSCaroline Tice SBError
924dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
9253df9a8dfSCaroline Tice {
9266920b52bSGreg Clayton     SBError sb_error;
9276920b52bSGreg Clayton     DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName (ConstString(debugger_instance_name)));
9286920b52bSGreg Clayton     Error error;
9296920b52bSGreg Clayton     if (debugger_sp)
9306920b52bSGreg Clayton     {
9316920b52bSGreg Clayton         ExecutionContext exe_ctx (debugger_sp->GetCommandInterpreter().GetExecutionContext());
9326920b52bSGreg Clayton         error = debugger_sp->SetPropertyValue (&exe_ctx,
9336920b52bSGreg Clayton                                                eVarSetOperationAssign,
9346920b52bSGreg Clayton                                                var_name,
9356920b52bSGreg Clayton                                                value);
9366920b52bSGreg Clayton     }
9376920b52bSGreg Clayton     else
9386920b52bSGreg Clayton     {
9396920b52bSGreg Clayton         error.SetErrorStringWithFormat ("invalid debugger instance name '%s'", debugger_instance_name);
9406920b52bSGreg Clayton     }
9416920b52bSGreg Clayton     if (error.Fail())
9426920b52bSGreg Clayton         sb_error.SetError(error);
9436920b52bSGreg Clayton     return sb_error;
9443df9a8dfSCaroline Tice }
9453df9a8dfSCaroline Tice 
946431ce678SGreg Clayton SBStringList
947dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
9483df9a8dfSCaroline Tice {
9493df9a8dfSCaroline Tice     SBStringList ret_value;
9506920b52bSGreg Clayton     DebuggerSP debugger_sp(Debugger::FindDebuggerWithInstanceName (ConstString(debugger_instance_name)));
9516920b52bSGreg Clayton     Error error;
9526920b52bSGreg Clayton     if (debugger_sp)
9536920b52bSGreg Clayton     {
9546920b52bSGreg Clayton         ExecutionContext exe_ctx (debugger_sp->GetCommandInterpreter().GetExecutionContext());
9556920b52bSGreg Clayton         lldb::OptionValueSP value_sp (debugger_sp->GetPropertyValue (&exe_ctx,
9566920b52bSGreg Clayton                                                                      var_name,
9576920b52bSGreg Clayton                                                                      false,
9586920b52bSGreg Clayton                                                                      error));
9596920b52bSGreg Clayton         if (value_sp)
9606920b52bSGreg Clayton         {
9616920b52bSGreg Clayton             StreamString value_strm;
9626920b52bSGreg Clayton             value_sp->DumpValue (&exe_ctx, value_strm, OptionValue::eDumpOptionValue);
9636920b52bSGreg Clayton             const std::string &value_str = value_strm.GetString();
9646920b52bSGreg Clayton             if (!value_str.empty())
9656920b52bSGreg Clayton             {
9666920b52bSGreg Clayton                 StringList string_list;
9676920b52bSGreg Clayton                 string_list.SplitIntoLines(value_str.c_str(), value_str.size());
9686920b52bSGreg Clayton                 return SBStringList(&string_list);
9696920b52bSGreg Clayton             }
9706920b52bSGreg Clayton         }
9716920b52bSGreg Clayton     }
9726920b52bSGreg Clayton     return SBStringList();
9733df9a8dfSCaroline Tice }
9743df9a8dfSCaroline Tice 
975a7015092SGreg Clayton uint32_t
976a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const
977a7015092SGreg Clayton {
978a7015092SGreg Clayton     if (m_opaque_sp)
979a7015092SGreg Clayton         return m_opaque_sp->GetTerminalWidth ();
980a7015092SGreg Clayton     return 0;
981a7015092SGreg Clayton }
982a7015092SGreg Clayton 
983a7015092SGreg Clayton void
984a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width)
985a7015092SGreg Clayton {
986a7015092SGreg Clayton     if (m_opaque_sp)
987a7015092SGreg Clayton         m_opaque_sp->SetTerminalWidth (term_width);
988a7015092SGreg Clayton }
989a7015092SGreg Clayton 
990a7015092SGreg Clayton const char *
991a7015092SGreg Clayton SBDebugger::GetPrompt() const
992a7015092SGreg Clayton {
993431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
994ceb6b139SCaroline Tice 
995ceb6b139SCaroline Tice     if (log)
996cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
997750cd175SCaroline Tice                      (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
998ceb6b139SCaroline Tice 
999a7015092SGreg Clayton     if (m_opaque_sp)
1000a7015092SGreg Clayton         return m_opaque_sp->GetPrompt ();
1001a7015092SGreg Clayton     return 0;
1002a7015092SGreg Clayton }
1003a7015092SGreg Clayton 
1004a7015092SGreg Clayton void
1005a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt)
1006a7015092SGreg Clayton {
1007a7015092SGreg Clayton     if (m_opaque_sp)
1008a7015092SGreg Clayton         m_opaque_sp->SetPrompt (prompt);
1009a7015092SGreg Clayton }
1010a7015092SGreg Clayton 
1011a7015092SGreg Clayton 
1012431ce678SGreg Clayton ScriptLanguage
1013a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const
1014a7015092SGreg Clayton {
1015a7015092SGreg Clayton     if (m_opaque_sp)
1016a7015092SGreg Clayton         return m_opaque_sp->GetScriptLanguage ();
1017a7015092SGreg Clayton     return eScriptLanguageNone;
1018a7015092SGreg Clayton }
1019a7015092SGreg Clayton 
1020a7015092SGreg Clayton void
1021431ce678SGreg Clayton SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
1022a7015092SGreg Clayton {
1023a7015092SGreg Clayton     if (m_opaque_sp)
1024af67cecdSGreg Clayton     {
1025a7015092SGreg Clayton         m_opaque_sp->SetScriptLanguage (script_lang);
1026a7015092SGreg Clayton     }
1027af67cecdSGreg Clayton }
1028a7015092SGreg Clayton 
1029e40e4218SJim Ingham bool
1030e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value)
1031e40e4218SJim Ingham {
1032e40e4218SJim Ingham     if (m_opaque_sp)
1033e40e4218SJim Ingham         return m_opaque_sp->SetUseExternalEditor (value);
1034e40e4218SJim Ingham     return false;
1035e40e4218SJim Ingham }
1036e40e4218SJim Ingham 
1037e40e4218SJim Ingham bool
1038daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor ()
1039e40e4218SJim Ingham {
1040e40e4218SJim Ingham     if (m_opaque_sp)
1041daccaa9eSCaroline Tice         return m_opaque_sp->GetUseExternalEditor ();
1042e40e4218SJim Ingham     return false;
1043e40e4218SJim Ingham }
1044e40e4218SJim Ingham 
1045dde9cff3SCaroline Tice bool
1046dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description)
1047dde9cff3SCaroline Tice {
1048da7bc7d0SGreg Clayton     Stream &strm = description.ref();
1049da7bc7d0SGreg Clayton 
1050dde9cff3SCaroline Tice     if (m_opaque_sp)
1051dde9cff3SCaroline Tice     {
1052dde9cff3SCaroline Tice         const char *name = m_opaque_sp->GetInstanceName().AsCString();
1053431ce678SGreg Clayton         user_id_t id = m_opaque_sp->GetID();
1054da7bc7d0SGreg Clayton         strm.Printf ("Debugger (instance: \"%s\", id: %llu)", name, id);
1055dde9cff3SCaroline Tice     }
1056dde9cff3SCaroline Tice     else
1057da7bc7d0SGreg Clayton         strm.PutCString ("No value");
1058dde9cff3SCaroline Tice 
1059dde9cff3SCaroline Tice     return true;
1060dde9cff3SCaroline Tice }
1061efed6131SCaroline Tice 
1062431ce678SGreg Clayton user_id_t
1063efed6131SCaroline Tice SBDebugger::GetID()
1064efed6131SCaroline Tice {
1065efed6131SCaroline Tice     if (m_opaque_sp)
1066efed6131SCaroline Tice         return m_opaque_sp->GetID();
1067efed6131SCaroline Tice     return LLDB_INVALID_UID;
1068efed6131SCaroline Tice }
10692289fa48SGreg Clayton 
10702289fa48SGreg Clayton 
10712289fa48SGreg Clayton SBError
10722289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name)
10732289fa48SGreg Clayton {
10742289fa48SGreg Clayton     SBError sb_error;
10752289fa48SGreg Clayton     if (m_opaque_sp)
10762289fa48SGreg Clayton     {
10772289fa48SGreg Clayton         PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
10782289fa48SGreg Clayton 
10792289fa48SGreg Clayton         if (platform_sp)
10802289fa48SGreg Clayton         {
10812289fa48SGreg Clayton             bool make_selected = true;
10822289fa48SGreg Clayton             m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
10832289fa48SGreg Clayton         }
10842289fa48SGreg Clayton     }
10852289fa48SGreg Clayton     return sb_error;
10862289fa48SGreg Clayton }
10872289fa48SGreg Clayton 
1088fc3f027dSGreg Clayton bool
1089f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
1090f3dd93c8SGreg Clayton {
1091f3dd93c8SGreg Clayton     if (m_opaque_sp)
1092f3dd93c8SGreg Clayton     {
1093f3dd93c8SGreg Clayton         PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1094f3dd93c8SGreg Clayton 
1095f3dd93c8SGreg Clayton         if (platform_sp)
1096f3dd93c8SGreg Clayton         {
1097f3dd93c8SGreg Clayton             platform_sp->SetSDKRootDirectory (ConstString (sysroot));
1098f3dd93c8SGreg Clayton             return true;
1099f3dd93c8SGreg Clayton         }
1100f3dd93c8SGreg Clayton     }
1101f3dd93c8SGreg Clayton     return false;
1102f3dd93c8SGreg Clayton }
1103f3dd93c8SGreg Clayton 
1104f3dd93c8SGreg Clayton bool
1105fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const
1106fc3f027dSGreg Clayton {
1107fc3f027dSGreg Clayton     if (m_opaque_sp)
1108fc3f027dSGreg Clayton         return m_opaque_sp->GetCloseInputOnEOF ();
1109fc3f027dSGreg Clayton     return false;
1110fc3f027dSGreg Clayton }
1111fc3f027dSGreg Clayton 
1112fc3f027dSGreg Clayton void
1113fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b)
1114fc3f027dSGreg Clayton {
1115fc3f027dSGreg Clayton     if (m_opaque_sp)
1116fc3f027dSGreg Clayton         m_opaque_sp->SetCloseInputOnEOF (b);
1117fc3f027dSGreg Clayton }
1118061858ceSEnrico Granata 
1119061858ceSEnrico Granata SBTypeCategory
1120061858ceSEnrico Granata SBDebugger::GetCategory (const char* category_name)
1121061858ceSEnrico Granata {
1122061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1123061858ceSEnrico Granata         return SBTypeCategory();
1124061858ceSEnrico Granata 
1125061858ceSEnrico Granata     TypeCategoryImplSP category_sp;
1126061858ceSEnrico Granata 
1127061858ceSEnrico Granata     if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, false))
1128061858ceSEnrico Granata         return SBTypeCategory(category_sp);
1129061858ceSEnrico Granata     else
1130061858ceSEnrico Granata         return SBTypeCategory();
1131061858ceSEnrico Granata }
1132061858ceSEnrico Granata 
1133061858ceSEnrico Granata SBTypeCategory
1134061858ceSEnrico Granata SBDebugger::CreateCategory (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, true))
1142061858ceSEnrico Granata         return SBTypeCategory(category_sp);
1143061858ceSEnrico Granata     else
1144061858ceSEnrico Granata         return SBTypeCategory();
1145061858ceSEnrico Granata }
1146061858ceSEnrico Granata 
1147061858ceSEnrico Granata bool
1148061858ceSEnrico Granata SBDebugger::DeleteCategory (const char* category_name)
1149061858ceSEnrico Granata {
1150061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1151061858ceSEnrico Granata         return false;
1152061858ceSEnrico Granata 
1153061858ceSEnrico Granata     return DataVisualization::Categories::Delete(ConstString(category_name));
1154061858ceSEnrico Granata }
1155061858ceSEnrico Granata 
1156061858ceSEnrico Granata uint32_t
1157061858ceSEnrico Granata SBDebugger::GetNumCategories()
1158061858ceSEnrico Granata {
1159061858ceSEnrico Granata     return DataVisualization::Categories::GetCount();
1160061858ceSEnrico Granata }
1161061858ceSEnrico Granata 
1162061858ceSEnrico Granata SBTypeCategory
1163061858ceSEnrico Granata SBDebugger::GetCategoryAtIndex (uint32_t index)
1164061858ceSEnrico Granata {
1165061858ceSEnrico Granata     return SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index));
1166061858ceSEnrico Granata }
1167061858ceSEnrico Granata 
1168061858ceSEnrico Granata SBTypeCategory
1169061858ceSEnrico Granata SBDebugger::GetDefaultCategory()
1170061858ceSEnrico Granata {
1171061858ceSEnrico Granata     return GetCategory("default");
1172061858ceSEnrico Granata }
1173061858ceSEnrico Granata 
1174061858ceSEnrico Granata SBTypeFormat
1175061858ceSEnrico Granata SBDebugger::GetFormatForType (SBTypeNameSpecifier type_name)
1176061858ceSEnrico Granata {
1177061858ceSEnrico Granata     SBTypeCategory default_category_sb = GetDefaultCategory();
1178061858ceSEnrico Granata     if (default_category_sb.GetEnabled())
1179061858ceSEnrico Granata         return default_category_sb.GetFormatForType(type_name);
1180061858ceSEnrico Granata     return SBTypeFormat();
1181061858ceSEnrico Granata }
1182061858ceSEnrico Granata 
1183cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON
1184061858ceSEnrico Granata SBTypeSummary
1185061858ceSEnrico Granata SBDebugger::GetSummaryForType (SBTypeNameSpecifier type_name)
1186061858ceSEnrico Granata {
1187a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1188a777dc2aSEnrico Granata         return SBTypeSummary();
1189a777dc2aSEnrico Granata     return SBTypeSummary(DataVisualization::GetSummaryForType(type_name.GetSP()));
1190061858ceSEnrico Granata }
1191cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON
1192061858ceSEnrico Granata 
1193061858ceSEnrico Granata SBTypeFilter
1194061858ceSEnrico Granata SBDebugger::GetFilterForType (SBTypeNameSpecifier type_name)
1195061858ceSEnrico Granata {
1196a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1197a777dc2aSEnrico Granata         return SBTypeFilter();
1198a777dc2aSEnrico Granata     return SBTypeFilter(DataVisualization::GetFilterForType(type_name.GetSP()));
1199061858ceSEnrico Granata }
1200061858ceSEnrico Granata 
1201cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON
1202061858ceSEnrico Granata SBTypeSynthetic
1203061858ceSEnrico Granata SBDebugger::GetSyntheticForType (SBTypeNameSpecifier type_name)
1204061858ceSEnrico Granata {
1205a777dc2aSEnrico Granata     if (type_name.IsValid() == false)
1206a777dc2aSEnrico Granata         return SBTypeSynthetic();
1207a777dc2aSEnrico Granata     return SBTypeSynthetic(DataVisualization::GetSyntheticForType(type_name.GetSP()));
1208061858ceSEnrico Granata }
1209cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON
1210061858ceSEnrico Granata 
1211228063cdSJim Ingham bool
1212228063cdSJim Ingham SBDebugger::EnableLog (const char *channel, const char **categories)
1213228063cdSJim Ingham {
1214228063cdSJim Ingham     if (m_opaque_sp)
1215228063cdSJim Ingham     {
1216228063cdSJim Ingham         uint32_t log_options = LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
1217228063cdSJim Ingham         StreamString errors;
1218228063cdSJim Ingham         return m_opaque_sp->EnableLog (channel, categories, NULL, log_options, errors);
1219228063cdSJim Ingham 
1220228063cdSJim Ingham     }
1221228063cdSJim Ingham     else
1222228063cdSJim Ingham         return false;
1223228063cdSJim Ingham }
12244f02b22dSJim Ingham 
12254f02b22dSJim Ingham void
12264f02b22dSJim Ingham SBDebugger::SetLoggingCallback (lldb::LogOutputCallback log_callback, void *baton)
12274f02b22dSJim Ingham {
12284f02b22dSJim Ingham     if (m_opaque_sp)
12294f02b22dSJim Ingham     {
12304f02b22dSJim Ingham         return m_opaque_sp->SetLoggingCallback (log_callback, baton);
12314f02b22dSJim Ingham     }
12324f02b22dSJim Ingham }
12334f02b22dSJim Ingham 
12344f02b22dSJim Ingham 
1235