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 {
146f9322415SGreg Clayton     ModuleList::RemoveOrphanSharedModules();
147f9322415SGreg Clayton }
148f9322415SGreg Clayton 
1496611103cSGreg Clayton SBDebugger::SBDebugger () :
1506611103cSGreg Clayton     m_opaque_sp ()
1516611103cSGreg Clayton {
1526611103cSGreg Clayton }
1536611103cSGreg Clayton 
154274fd6e9SEnrico Granata SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) :
155274fd6e9SEnrico Granata     m_opaque_sp(debugger_sp)
156274fd6e9SEnrico Granata {
157274fd6e9SEnrico Granata }
158274fd6e9SEnrico Granata 
159efabb123SGreg Clayton SBDebugger::SBDebugger(const SBDebugger &rhs) :
160efabb123SGreg Clayton     m_opaque_sp (rhs.m_opaque_sp)
161efabb123SGreg Clayton {
162efabb123SGreg Clayton }
163efabb123SGreg Clayton 
164efabb123SGreg Clayton SBDebugger &
165efabb123SGreg Clayton SBDebugger::operator = (const SBDebugger &rhs)
166efabb123SGreg Clayton {
167efabb123SGreg Clayton     if (this != &rhs)
168efabb123SGreg Clayton     {
169efabb123SGreg Clayton         m_opaque_sp = rhs.m_opaque_sp;
170efabb123SGreg Clayton     }
171efabb123SGreg Clayton     return *this;
172efabb123SGreg Clayton }
173efabb123SGreg Clayton 
1746611103cSGreg Clayton SBDebugger::~SBDebugger ()
1756611103cSGreg Clayton {
1766611103cSGreg Clayton }
1776611103cSGreg Clayton 
1786611103cSGreg Clayton bool
1796611103cSGreg Clayton SBDebugger::IsValid() const
1806611103cSGreg Clayton {
1816611103cSGreg Clayton     return m_opaque_sp.get() != NULL;
1826611103cSGreg Clayton }
1836611103cSGreg Clayton 
1846611103cSGreg Clayton 
18530fdc8d8SChris Lattner void
18630fdc8d8SChris Lattner SBDebugger::SetAsync (bool b)
18730fdc8d8SChris Lattner {
1886611103cSGreg Clayton     if (m_opaque_sp)
1896611103cSGreg Clayton         m_opaque_sp->SetAsyncExecution(b);
19030fdc8d8SChris Lattner }
19130fdc8d8SChris Lattner 
192e64f0dc7SJim Ingham bool
193e64f0dc7SJim Ingham SBDebugger::GetAsync ()
194e64f0dc7SJim Ingham {
195e64f0dc7SJim Ingham     if (m_opaque_sp)
196e64f0dc7SJim Ingham         return m_opaque_sp->GetAsyncExecution();
197e64f0dc7SJim Ingham     else
198e64f0dc7SJim Ingham         return false;
199e64f0dc7SJim Ingham }
200e64f0dc7SJim Ingham 
2016eee5aa0SGreg Clayton void
2026eee5aa0SGreg Clayton SBDebugger::SkipLLDBInitFiles (bool b)
2036eee5aa0SGreg Clayton {
2046eee5aa0SGreg Clayton     if (m_opaque_sp)
2056eee5aa0SGreg Clayton         m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
2066eee5aa0SGreg Clayton }
2076eee5aa0SGreg Clayton 
20816e0c686SJim Ingham void
20916e0c686SJim Ingham SBDebugger::SkipAppInitFiles (bool b)
21016e0c686SJim Ingham {
21116e0c686SJim Ingham     if (m_opaque_sp)
21216e0c686SJim Ingham         m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
21316e0c686SJim Ingham }
21416e0c686SJim Ingham 
21530fdc8d8SChris Lattner // Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
21630fdc8d8SChris Lattner // trying to switch modes in the middle of a debugging session.
21730fdc8d8SChris Lattner void
21830fdc8d8SChris Lattner SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
21930fdc8d8SChris Lattner {
220431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
221ceb6b139SCaroline Tice 
222ceb6b139SCaroline Tice     if (log)
223cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
224cfd1acedSGreg Clayton                      fh, transfer_ownership);
225ceb6b139SCaroline Tice 
2266611103cSGreg Clayton     if (m_opaque_sp)
2276611103cSGreg Clayton         m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
22830fdc8d8SChris Lattner }
22930fdc8d8SChris Lattner 
23030fdc8d8SChris Lattner void
23130fdc8d8SChris Lattner SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
23230fdc8d8SChris Lattner {
233431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
234ceb6b139SCaroline Tice 
235ceb6b139SCaroline Tice 
236ceb6b139SCaroline Tice     if (log)
237cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetOutputFileHandle (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->SetOutputFileHandle (fh, transfer_ownership);
24230fdc8d8SChris Lattner }
24330fdc8d8SChris Lattner 
24430fdc8d8SChris Lattner void
24530fdc8d8SChris Lattner SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
24630fdc8d8SChris Lattner {
247431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
248ceb6b139SCaroline Tice 
249ceb6b139SCaroline Tice 
250ceb6b139SCaroline Tice     if (log)
251cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::SetErrorFileHandle (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->SetErrorFileHandle (fh, transfer_ownership);
25630fdc8d8SChris Lattner }
25730fdc8d8SChris Lattner 
25830fdc8d8SChris Lattner FILE *
25930fdc8d8SChris Lattner SBDebugger::GetInputFileHandle ()
26030fdc8d8SChris Lattner {
2616611103cSGreg Clayton     if (m_opaque_sp)
26251b1e2d2SGreg Clayton         return m_opaque_sp->GetInputFile().GetStream();
2636611103cSGreg Clayton     return NULL;
26430fdc8d8SChris Lattner }
26530fdc8d8SChris Lattner 
26630fdc8d8SChris Lattner FILE *
26730fdc8d8SChris Lattner SBDebugger::GetOutputFileHandle ()
26830fdc8d8SChris Lattner {
2696611103cSGreg Clayton     if (m_opaque_sp)
27051b1e2d2SGreg Clayton         return m_opaque_sp->GetOutputFile().GetStream();
2716611103cSGreg Clayton     return NULL;
27230fdc8d8SChris Lattner }
27330fdc8d8SChris Lattner 
27430fdc8d8SChris Lattner FILE *
27530fdc8d8SChris Lattner SBDebugger::GetErrorFileHandle ()
27630fdc8d8SChris Lattner {
2776611103cSGreg Clayton     if (m_opaque_sp)
27851b1e2d2SGreg Clayton         return m_opaque_sp->GetErrorFile().GetStream();
2796611103cSGreg Clayton     return NULL;
28030fdc8d8SChris Lattner }
28130fdc8d8SChris Lattner 
28230fdc8d8SChris Lattner SBCommandInterpreter
28330fdc8d8SChris Lattner SBDebugger::GetCommandInterpreter ()
28430fdc8d8SChris Lattner {
285431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
286ceb6b139SCaroline Tice 
2876611103cSGreg Clayton     SBCommandInterpreter sb_interpreter;
2886611103cSGreg Clayton     if (m_opaque_sp)
2896611103cSGreg Clayton         sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
290ceb6b139SCaroline Tice 
291750cd175SCaroline Tice     if (log)
29293aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
293750cd175SCaroline Tice                      m_opaque_sp.get(), sb_interpreter.get());
294750cd175SCaroline Tice 
29530fdc8d8SChris Lattner     return sb_interpreter;
29630fdc8d8SChris Lattner }
29730fdc8d8SChris Lattner 
29830fdc8d8SChris Lattner void
29930fdc8d8SChris Lattner SBDebugger::HandleCommand (const char *command)
30030fdc8d8SChris Lattner {
3016611103cSGreg Clayton     if (m_opaque_sp)
3026611103cSGreg Clayton     {
303af67cecdSGreg Clayton         TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
304af67cecdSGreg Clayton         Mutex::Locker api_locker;
305af67cecdSGreg Clayton         if (target_sp)
306af67cecdSGreg Clayton             api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
307af67cecdSGreg Clayton 
3086611103cSGreg Clayton         SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
30930fdc8d8SChris Lattner         SBCommandReturnObject result;
31030fdc8d8SChris Lattner 
31130fdc8d8SChris Lattner         sb_interpreter.HandleCommand (command, result, false);
31230fdc8d8SChris Lattner 
31330fdc8d8SChris Lattner         if (GetErrorFileHandle() != NULL)
31430fdc8d8SChris Lattner             result.PutError (GetErrorFileHandle());
31530fdc8d8SChris Lattner         if (GetOutputFileHandle() != NULL)
31630fdc8d8SChris Lattner             result.PutOutput (GetOutputFileHandle());
31730fdc8d8SChris Lattner 
3186611103cSGreg Clayton         if (m_opaque_sp->GetAsyncExecution() == false)
31930fdc8d8SChris Lattner         {
3206611103cSGreg Clayton             SBProcess process(GetCommandInterpreter().GetProcess ());
321b9556accSGreg Clayton             ProcessSP process_sp (process.GetSP());
322b9556accSGreg Clayton             if (process_sp)
32330fdc8d8SChris Lattner             {
32430fdc8d8SChris Lattner                 EventSP event_sp;
3256611103cSGreg Clayton                 Listener &lldb_listener = m_opaque_sp->GetListener();
326b9556accSGreg Clayton                 while (lldb_listener.GetNextEventForBroadcaster (process_sp.get(), event_sp))
32730fdc8d8SChris Lattner                 {
32830fdc8d8SChris Lattner                     SBEvent event(event_sp);
32930fdc8d8SChris Lattner                     HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
33030fdc8d8SChris Lattner                 }
33130fdc8d8SChris Lattner             }
33230fdc8d8SChris Lattner         }
33330fdc8d8SChris Lattner     }
3346611103cSGreg Clayton }
33530fdc8d8SChris Lattner 
33630fdc8d8SChris Lattner SBListener
33730fdc8d8SChris Lattner SBDebugger::GetListener ()
33830fdc8d8SChris Lattner {
339431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
340ceb6b139SCaroline Tice 
3416611103cSGreg Clayton     SBListener sb_listener;
3426611103cSGreg Clayton     if (m_opaque_sp)
3436611103cSGreg Clayton         sb_listener.reset(&m_opaque_sp->GetListener(), false);
344ceb6b139SCaroline Tice 
345750cd175SCaroline Tice     if (log)
34693aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
347750cd175SCaroline Tice                      sb_listener.get());
348750cd175SCaroline Tice 
34930fdc8d8SChris Lattner     return sb_listener;
35030fdc8d8SChris Lattner }
35130fdc8d8SChris Lattner 
35230fdc8d8SChris Lattner void
35330fdc8d8SChris Lattner SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
35430fdc8d8SChris Lattner {
355af67cecdSGreg Clayton     if (!process.IsValid())
356af67cecdSGreg Clayton         return;
357af67cecdSGreg Clayton 
358b9556accSGreg Clayton     TargetSP target_sp (process.GetTarget().GetSP());
359b9556accSGreg Clayton     if (!target_sp)
360b9556accSGreg Clayton         return;
361b9556accSGreg Clayton 
36230fdc8d8SChris Lattner     const uint32_t event_type = event.GetType();
36330fdc8d8SChris Lattner     char stdio_buffer[1024];
36430fdc8d8SChris Lattner     size_t len;
36530fdc8d8SChris Lattner 
366b9556accSGreg Clayton     Mutex::Locker api_locker (target_sp->GetAPIMutex());
367af67cecdSGreg Clayton 
368af67cecdSGreg Clayton     if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
36930fdc8d8SChris Lattner     {
370af67cecdSGreg Clayton         // Drain stdout when we stop just in case we have any bytes
37130fdc8d8SChris Lattner         while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
37230fdc8d8SChris Lattner             if (out != NULL)
37330fdc8d8SChris Lattner                 ::fwrite (stdio_buffer, 1, len, out);
37430fdc8d8SChris Lattner     }
375af67cecdSGreg Clayton 
376af67cecdSGreg Clayton     if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
37730fdc8d8SChris Lattner     {
378af67cecdSGreg Clayton         // Drain stderr when we stop just in case we have any bytes
37930fdc8d8SChris Lattner         while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
380af67cecdSGreg Clayton             if (err != NULL)
381af67cecdSGreg Clayton                 ::fwrite (stdio_buffer, 1, len, err);
38230fdc8d8SChris Lattner     }
383af67cecdSGreg Clayton 
384af67cecdSGreg Clayton     if (event_type & Process::eBroadcastBitStateChanged)
38530fdc8d8SChris Lattner     {
38630fdc8d8SChris Lattner         StateType event_state = SBProcess::GetStateFromEvent (event);
38730fdc8d8SChris Lattner 
38830fdc8d8SChris Lattner         if (event_state == eStateInvalid)
38930fdc8d8SChris Lattner             return;
39030fdc8d8SChris Lattner 
39130fdc8d8SChris Lattner         bool is_stopped = StateIsStoppedState (event_state);
39230fdc8d8SChris Lattner         if (!is_stopped)
3932976d00aSJim Ingham             process.ReportEventState (event, out);
39430fdc8d8SChris Lattner     }
39530fdc8d8SChris Lattner }
39630fdc8d8SChris Lattner 
397e37d605eSJim Ingham SBSourceManager
39830fdc8d8SChris Lattner SBDebugger::GetSourceManager ()
39930fdc8d8SChris Lattner {
400e37d605eSJim Ingham     SBSourceManager sb_source_manager (*this);
401e37d605eSJim Ingham     return sb_source_manager;
40230fdc8d8SChris Lattner }
40330fdc8d8SChris Lattner 
40430fdc8d8SChris Lattner 
40530fdc8d8SChris Lattner bool
40630fdc8d8SChris Lattner SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
40730fdc8d8SChris Lattner {
40830fdc8d8SChris Lattner     if (arch_name && arch_name_len)
40930fdc8d8SChris Lattner     {
410431ce678SGreg Clayton         ArchSpec default_arch = Target::GetDefaultArchitecture ();
411daccaa9eSCaroline Tice 
41230fdc8d8SChris Lattner         if (default_arch.IsValid())
41330fdc8d8SChris Lattner         {
414431ce678SGreg Clayton             const std::string &triple_str = default_arch.GetTriple().str();
415431ce678SGreg Clayton             if (!triple_str.empty())
416431ce678SGreg Clayton                 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
417431ce678SGreg Clayton             else
41864195a2cSGreg Clayton                 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
41930fdc8d8SChris Lattner             return true;
42030fdc8d8SChris Lattner         }
42130fdc8d8SChris Lattner     }
42230fdc8d8SChris Lattner     if (arch_name && arch_name_len)
42330fdc8d8SChris Lattner         arch_name[0] = '\0';
42430fdc8d8SChris Lattner     return false;
42530fdc8d8SChris Lattner }
42630fdc8d8SChris Lattner 
42730fdc8d8SChris Lattner 
42830fdc8d8SChris Lattner bool
42930fdc8d8SChris Lattner SBDebugger::SetDefaultArchitecture (const char *arch_name)
43030fdc8d8SChris Lattner {
43130fdc8d8SChris Lattner     if (arch_name)
43230fdc8d8SChris Lattner     {
433eb0103f2SGreg Clayton         ArchSpec arch (arch_name, NULL);
43430fdc8d8SChris Lattner         if (arch.IsValid())
43530fdc8d8SChris Lattner         {
436431ce678SGreg Clayton             Target::SetDefaultArchitecture (arch);
43730fdc8d8SChris Lattner             return true;
43830fdc8d8SChris Lattner         }
43930fdc8d8SChris Lattner     }
44030fdc8d8SChris Lattner     return false;
44130fdc8d8SChris Lattner }
44230fdc8d8SChris Lattner 
44330fdc8d8SChris Lattner ScriptLanguage
44430fdc8d8SChris Lattner SBDebugger::GetScriptingLanguage (const char *script_language_name)
44530fdc8d8SChris Lattner {
446af67cecdSGreg Clayton 
44730fdc8d8SChris Lattner     return Args::StringToScriptLanguage (script_language_name,
44830fdc8d8SChris Lattner                                          eScriptLanguageDefault,
44930fdc8d8SChris Lattner                                          NULL);
45030fdc8d8SChris Lattner }
45130fdc8d8SChris Lattner 
45230fdc8d8SChris Lattner const char *
45330fdc8d8SChris Lattner SBDebugger::GetVersionString ()
45430fdc8d8SChris Lattner {
455431ce678SGreg Clayton     return GetVersion();
45630fdc8d8SChris Lattner }
45730fdc8d8SChris Lattner 
45830fdc8d8SChris Lattner const char *
459431ce678SGreg Clayton SBDebugger::StateAsCString (StateType state)
46030fdc8d8SChris Lattner {
461c2bbb49aSCaroline Tice     return lldb_private::StateAsCString (state);
46230fdc8d8SChris Lattner }
46330fdc8d8SChris Lattner 
46430fdc8d8SChris Lattner bool
465431ce678SGreg Clayton SBDebugger::StateIsRunningState (StateType state)
46630fdc8d8SChris Lattner {
467431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4684838131bSGreg Clayton 
469c2bbb49aSCaroline Tice     const bool result = lldb_private::StateIsRunningState (state);
4704838131bSGreg Clayton     if (log)
4714838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
472431ce678SGreg Clayton                      StateAsCString (state), result);
4734838131bSGreg Clayton 
4744838131bSGreg Clayton     return result;
47530fdc8d8SChris Lattner }
47630fdc8d8SChris Lattner 
47730fdc8d8SChris Lattner bool
478431ce678SGreg Clayton SBDebugger::StateIsStoppedState (StateType state)
47930fdc8d8SChris Lattner {
480431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
481ceb6b139SCaroline Tice 
4822637f825SGreg Clayton     const bool result = lldb_private::StateIsStoppedState (state, false);
483ceb6b139SCaroline Tice     if (log)
4844838131bSGreg Clayton         log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
485431ce678SGreg Clayton                      StateAsCString (state), result);
486ceb6b139SCaroline Tice 
4874838131bSGreg Clayton     return result;
48830fdc8d8SChris Lattner }
48930fdc8d8SChris Lattner 
490cac9c5f9SGreg Clayton lldb::SBTarget
491cac9c5f9SGreg Clayton SBDebugger::CreateTarget (const char *filename,
492cac9c5f9SGreg Clayton                           const char *target_triple,
493cac9c5f9SGreg Clayton                           const char *platform_name,
494cac9c5f9SGreg Clayton                           bool add_dependent_modules,
495cac9c5f9SGreg Clayton                           lldb::SBError& sb_error)
496cac9c5f9SGreg Clayton {
497cac9c5f9SGreg Clayton     SBTarget sb_target;
498b9556accSGreg Clayton     TargetSP target_sp;
499cac9c5f9SGreg Clayton     if (m_opaque_sp)
500cac9c5f9SGreg Clayton     {
501cac9c5f9SGreg Clayton         sb_error.Clear();
502cac9c5f9SGreg Clayton         FileSpec filename_spec (filename, true);
503cac9c5f9SGreg Clayton         OptionGroupPlatform platform_options (false);
504cac9c5f9SGreg Clayton         platform_options.SetPlatformName (platform_name);
505cac9c5f9SGreg Clayton 
506cac9c5f9SGreg Clayton         sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
507cac9c5f9SGreg Clayton                                                                     filename_spec,
508cac9c5f9SGreg Clayton                                                                     target_triple,
509cac9c5f9SGreg Clayton                                                                     add_dependent_modules,
510cac9c5f9SGreg Clayton                                                                     &platform_options,
511cac9c5f9SGreg Clayton                                                                     target_sp);
512cac9c5f9SGreg Clayton 
513cac9c5f9SGreg Clayton         if (sb_error.Success())
514b9556accSGreg Clayton             sb_target.SetSP (target_sp);
515cac9c5f9SGreg Clayton     }
516cac9c5f9SGreg Clayton     else
517cac9c5f9SGreg Clayton     {
518cac9c5f9SGreg Clayton         sb_error.SetErrorString("invalid target");
519cac9c5f9SGreg Clayton     }
520cac9c5f9SGreg Clayton 
521cac9c5f9SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
522cac9c5f9SGreg Clayton     if (log)
523cac9c5f9SGreg Clayton     {
524cac9c5f9SGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)",
525cac9c5f9SGreg Clayton                      m_opaque_sp.get(),
526cac9c5f9SGreg Clayton                      filename,
527cac9c5f9SGreg Clayton                      target_triple,
528cac9c5f9SGreg Clayton                      platform_name,
529cac9c5f9SGreg Clayton                      add_dependent_modules,
530cac9c5f9SGreg Clayton                      sb_error.GetCString(),
531b9556accSGreg Clayton                      target_sp.get());
532cac9c5f9SGreg Clayton     }
533cac9c5f9SGreg Clayton 
534cac9c5f9SGreg Clayton     return sb_target;
535cac9c5f9SGreg Clayton }
53630fdc8d8SChris Lattner 
53730fdc8d8SChris Lattner SBTarget
53830fdc8d8SChris Lattner SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
53930fdc8d8SChris Lattner                                                  const char *target_triple)
54030fdc8d8SChris Lattner {
541b9556accSGreg Clayton     SBTarget sb_target;
542b9556accSGreg Clayton     TargetSP target_sp;
5436611103cSGreg Clayton     if (m_opaque_sp)
5446611103cSGreg Clayton     {
545274060b6SGreg Clayton         FileSpec file_spec (filename, true);
54630fdc8d8SChris Lattner         TargetSP target_sp;
547cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
548cac9c5f9SGreg Clayton         Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
549cac9c5f9SGreg Clayton                                                                 file_spec,
550cac9c5f9SGreg Clayton                                                                 target_triple,
551cac9c5f9SGreg Clayton                                                                 add_dependent_modules,
552cac9c5f9SGreg Clayton                                                                 NULL,
553cac9c5f9SGreg Clayton                                                                 target_sp));
554b9556accSGreg Clayton         sb_target.SetSP (target_sp);
5556611103cSGreg Clayton     }
5564838131bSGreg Clayton 
557431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5584838131bSGreg Clayton     if (log)
5594838131bSGreg Clayton     {
560cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
561b9556accSGreg Clayton                      m_opaque_sp.get(), filename, target_triple, target_sp.get());
5624838131bSGreg Clayton     }
5634838131bSGreg Clayton 
564b9556accSGreg Clayton     return sb_target;
56530fdc8d8SChris Lattner }
56630fdc8d8SChris Lattner 
56730fdc8d8SChris Lattner SBTarget
56864195a2cSGreg Clayton SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
56930fdc8d8SChris Lattner {
570431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
571ceb6b139SCaroline Tice 
572b9556accSGreg Clayton     SBTarget sb_target;
573b9556accSGreg Clayton     TargetSP target_sp;
5746611103cSGreg Clayton     if (m_opaque_sp)
5756611103cSGreg Clayton     {
576274060b6SGreg Clayton         FileSpec file (filename, true);
57730fdc8d8SChris Lattner         Error error;
578cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
57930fdc8d8SChris Lattner 
580cac9c5f9SGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
581cac9c5f9SGreg Clayton                                                            file,
582cac9c5f9SGreg Clayton                                                            arch_cstr,
583cac9c5f9SGreg Clayton                                                            add_dependent_modules,
584cac9c5f9SGreg Clayton                                                            NULL,
585cac9c5f9SGreg Clayton                                                            target_sp);
58630fdc8d8SChris Lattner 
58730fdc8d8SChris Lattner         if (error.Success())
5886611103cSGreg Clayton         {
5892976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
590b9556accSGreg Clayton             sb_target.SetSP (target_sp);
5916611103cSGreg Clayton         }
5926611103cSGreg Clayton     }
593ceb6b139SCaroline Tice 
594ceb6b139SCaroline Tice     if (log)
595ceb6b139SCaroline Tice     {
596cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
597b9556accSGreg Clayton                      m_opaque_sp.get(), filename, arch_cstr, target_sp.get());
598ceb6b139SCaroline Tice     }
599ceb6b139SCaroline Tice 
600b9556accSGreg Clayton     return sb_target;
60130fdc8d8SChris Lattner }
60230fdc8d8SChris Lattner 
60330fdc8d8SChris Lattner SBTarget
60430fdc8d8SChris Lattner SBDebugger::CreateTarget (const char *filename)
60530fdc8d8SChris Lattner {
606b9556accSGreg Clayton     SBTarget sb_target;
607b9556accSGreg Clayton     TargetSP target_sp;
6086611103cSGreg Clayton     if (m_opaque_sp)
6096611103cSGreg Clayton     {
610274060b6SGreg Clayton         FileSpec file (filename, true);
611431ce678SGreg Clayton         ArchSpec arch = Target::GetDefaultArchitecture ();
61230fdc8d8SChris Lattner         Error error;
613cac9c5f9SGreg Clayton         const bool add_dependent_modules = true;
61430fdc8d8SChris Lattner 
615*b3a40ba8SGreg Clayton         PlatformSP platform_sp(m_opaque_sp->GetPlatformList().GetSelectedPlatform());
616cac9c5f9SGreg Clayton         error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
617cac9c5f9SGreg Clayton                                                            file,
618cac9c5f9SGreg Clayton                                                            arch,
619cac9c5f9SGreg Clayton                                                            add_dependent_modules,
620*b3a40ba8SGreg Clayton                                                            platform_sp,
621cac9c5f9SGreg Clayton                                                            target_sp);
62230fdc8d8SChris Lattner 
6236611103cSGreg Clayton         if (error.Success())
6246611103cSGreg Clayton         {
6252976d00aSJim Ingham             m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
626b9556accSGreg Clayton             sb_target.SetSP (target_sp);
6276611103cSGreg Clayton         }
6286611103cSGreg Clayton     }
629431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6304838131bSGreg Clayton     if (log)
6314838131bSGreg Clayton     {
632cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
633b9556accSGreg Clayton                      m_opaque_sp.get(), filename, target_sp.get());
6344838131bSGreg Clayton     }
635b9556accSGreg Clayton     return sb_target;
63630fdc8d8SChris Lattner }
63730fdc8d8SChris Lattner 
6383794ad95SJohnny Chen bool
6393794ad95SJohnny Chen SBDebugger::DeleteTarget (lldb::SBTarget &target)
6403794ad95SJohnny Chen {
6413794ad95SJohnny Chen     bool result = false;
642b9556accSGreg Clayton     if (m_opaque_sp)
643b9556accSGreg Clayton     {
644b9556accSGreg Clayton         TargetSP target_sp(target.GetSP());
645b9556accSGreg Clayton         if (target_sp)
6463794ad95SJohnny Chen         {
6473794ad95SJohnny Chen             // No need to lock, the target list is thread safe
648b9556accSGreg Clayton             result = m_opaque_sp->GetTargetList().DeleteTarget (target_sp);
649b9556accSGreg Clayton             target_sp->Destroy();
65075340622SGreg Clayton             target.Clear();
65175340622SGreg Clayton             ModuleList::RemoveOrphanSharedModules();
6523794ad95SJohnny Chen         }
653b9556accSGreg Clayton     }
6543794ad95SJohnny Chen 
6553794ad95SJohnny Chen     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6563794ad95SJohnny Chen     if (log)
6573794ad95SJohnny Chen     {
6583794ad95SJohnny Chen         log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
6593794ad95SJohnny Chen     }
6603794ad95SJohnny Chen 
6613794ad95SJohnny Chen     return result;
6623794ad95SJohnny Chen }
66330fdc8d8SChris Lattner SBTarget
66430fdc8d8SChris Lattner SBDebugger::GetTargetAtIndex (uint32_t idx)
66530fdc8d8SChris Lattner {
6666611103cSGreg Clayton     SBTarget sb_target;
6676611103cSGreg Clayton     if (m_opaque_sp)
668af67cecdSGreg Clayton     {
669af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
670b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
671af67cecdSGreg Clayton     }
67230fdc8d8SChris Lattner     return sb_target;
67330fdc8d8SChris Lattner }
67430fdc8d8SChris Lattner 
67530fdc8d8SChris Lattner SBTarget
67630fdc8d8SChris Lattner SBDebugger::FindTargetWithProcessID (pid_t pid)
67730fdc8d8SChris Lattner {
6786611103cSGreg Clayton     SBTarget sb_target;
6796611103cSGreg Clayton     if (m_opaque_sp)
680af67cecdSGreg Clayton     {
681af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
682b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
683af67cecdSGreg Clayton     }
68430fdc8d8SChris Lattner     return sb_target;
68530fdc8d8SChris Lattner }
68630fdc8d8SChris Lattner 
68730fdc8d8SChris Lattner SBTarget
68830fdc8d8SChris Lattner SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
68930fdc8d8SChris Lattner {
6906611103cSGreg Clayton     SBTarget sb_target;
6916611103cSGreg Clayton     if (m_opaque_sp && filename && filename[0])
6926611103cSGreg Clayton     {
693af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
694eb0103f2SGreg Clayton         ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
695274060b6SGreg Clayton         TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
696b9556accSGreg Clayton         sb_target.SetSP (target_sp);
6976611103cSGreg Clayton     }
6986611103cSGreg Clayton     return sb_target;
69930fdc8d8SChris Lattner }
70030fdc8d8SChris Lattner 
70130fdc8d8SChris Lattner SBTarget
702431ce678SGreg Clayton SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
70330fdc8d8SChris Lattner {
7046611103cSGreg Clayton     SBTarget sb_target;
7056611103cSGreg Clayton     if (m_opaque_sp)
706af67cecdSGreg Clayton     {
707af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
708b9556accSGreg Clayton         sb_target.SetSP (m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
709af67cecdSGreg Clayton     }
71030fdc8d8SChris Lattner     return sb_target;
71130fdc8d8SChris Lattner }
71230fdc8d8SChris Lattner 
71330fdc8d8SChris Lattner 
71430fdc8d8SChris Lattner uint32_t
71530fdc8d8SChris Lattner SBDebugger::GetNumTargets ()
71630fdc8d8SChris Lattner {
7176611103cSGreg Clayton     if (m_opaque_sp)
718af67cecdSGreg Clayton     {
719af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
7206611103cSGreg Clayton         return m_opaque_sp->GetTargetList().GetNumTargets ();
721af67cecdSGreg Clayton     }
7226611103cSGreg Clayton     return 0;
7236611103cSGreg Clayton }
72430fdc8d8SChris Lattner 
72530fdc8d8SChris Lattner SBTarget
7262976d00aSJim Ingham SBDebugger::GetSelectedTarget ()
72730fdc8d8SChris Lattner {
728431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
729ceb6b139SCaroline Tice 
7306611103cSGreg Clayton     SBTarget sb_target;
731b9556accSGreg Clayton     TargetSP target_sp;
7326611103cSGreg Clayton     if (m_opaque_sp)
733af67cecdSGreg Clayton     {
734af67cecdSGreg Clayton         // No need to lock, the target list is thread safe
735b9556accSGreg Clayton         target_sp = m_opaque_sp->GetTargetList().GetSelectedTarget ();
736b9556accSGreg Clayton         sb_target.SetSP (target_sp);
737af67cecdSGreg Clayton     }
738ceb6b139SCaroline Tice 
739ceb6b139SCaroline Tice     if (log)
740ceb6b139SCaroline Tice     {
741ceb6b139SCaroline Tice         SBStream sstr;
742431ce678SGreg Clayton         sb_target.GetDescription (sstr, eDescriptionLevelBrief);
74393aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
744b9556accSGreg Clayton                      target_sp.get(), sstr.GetData());
745ceb6b139SCaroline Tice     }
746ceb6b139SCaroline Tice 
74730fdc8d8SChris Lattner     return sb_target;
74830fdc8d8SChris Lattner }
74930fdc8d8SChris Lattner 
75030fdc8d8SChris Lattner void
751e64f0dc7SJim Ingham SBDebugger::SetSelectedTarget (SBTarget &sb_target)
752e64f0dc7SJim Ingham {
753e64f0dc7SJim Ingham     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
754e64f0dc7SJim Ingham 
755b9556accSGreg Clayton     TargetSP target_sp (sb_target.GetSP());
756e64f0dc7SJim Ingham     if (m_opaque_sp)
757e64f0dc7SJim Ingham     {
758b9556accSGreg Clayton         m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
759e64f0dc7SJim Ingham     }
760e64f0dc7SJim Ingham     if (log)
761e64f0dc7SJim Ingham     {
762e64f0dc7SJim Ingham         SBStream sstr;
763e64f0dc7SJim Ingham         sb_target.GetDescription (sstr, eDescriptionLevelBrief);
764e64f0dc7SJim Ingham         log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
765b9556accSGreg Clayton                      target_sp.get(), sstr.GetData());
766e64f0dc7SJim Ingham     }
767e64f0dc7SJim Ingham }
768e64f0dc7SJim Ingham 
769e64f0dc7SJim Ingham void
77030fdc8d8SChris Lattner SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
77130fdc8d8SChris Lattner {
772431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
773ceb6b139SCaroline Tice 
774ceb6b139SCaroline Tice     if (log)
775cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
776cfd1acedSGreg Clayton                      baton, (int) data_len, (const char *) data, data_len);
777ceb6b139SCaroline Tice 
7786611103cSGreg Clayton     if (m_opaque_sp)
7796611103cSGreg Clayton         m_opaque_sp->DispatchInput ((const char *) data, data_len);
78030fdc8d8SChris Lattner }
78130fdc8d8SChris Lattner 
78230fdc8d8SChris Lattner void
783efed6131SCaroline Tice SBDebugger::DispatchInputInterrupt ()
784efed6131SCaroline Tice {
785efed6131SCaroline Tice     if (m_opaque_sp)
786efed6131SCaroline Tice         m_opaque_sp->DispatchInputInterrupt ();
787efed6131SCaroline Tice }
788efed6131SCaroline Tice 
789efed6131SCaroline Tice void
790efed6131SCaroline Tice SBDebugger::DispatchInputEndOfFile ()
791efed6131SCaroline Tice {
792efed6131SCaroline Tice     if (m_opaque_sp)
793efed6131SCaroline Tice         m_opaque_sp->DispatchInputEndOfFile ();
794efed6131SCaroline Tice }
7959088b068SCaroline Tice 
7969088b068SCaroline Tice bool
7979088b068SCaroline Tice SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
7989088b068SCaroline Tice {
7999088b068SCaroline Tice     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
8009088b068SCaroline Tice 
8019088b068SCaroline Tice     if (log)
8029088b068SCaroline Tice         log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
8039088b068SCaroline Tice 
8049088b068SCaroline Tice     if (m_opaque_sp && reader.IsValid())
8059088b068SCaroline Tice     {
8069088b068SCaroline Tice         InputReaderSP reader_sp (*reader);
8079088b068SCaroline Tice         return m_opaque_sp->InputReaderIsTopReader (reader_sp);
8089088b068SCaroline Tice     }
8099088b068SCaroline Tice 
8109088b068SCaroline Tice     return false;
8119088b068SCaroline Tice }
8129088b068SCaroline Tice 
813efed6131SCaroline Tice 
814efed6131SCaroline Tice void
81530fdc8d8SChris Lattner SBDebugger::PushInputReader (SBInputReader &reader)
81630fdc8d8SChris Lattner {
817431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
818ceb6b139SCaroline Tice 
819ceb6b139SCaroline Tice     if (log)
82093aa84e8SGreg Clayton         log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
821ceb6b139SCaroline Tice 
8226611103cSGreg Clayton     if (m_opaque_sp && reader.IsValid())
82330fdc8d8SChris Lattner     {
824af67cecdSGreg Clayton         TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
825af67cecdSGreg Clayton         Mutex::Locker api_locker;
826af67cecdSGreg Clayton         if (target_sp)
827af67cecdSGreg Clayton             api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
82830fdc8d8SChris Lattner         InputReaderSP reader_sp(*reader);
8296611103cSGreg Clayton         m_opaque_sp->PushInputReader (reader_sp);
83030fdc8d8SChris Lattner     }
83130fdc8d8SChris Lattner }
8326611103cSGreg Clayton 
8336611103cSGreg Clayton void
834969ed3d1SCaroline Tice SBDebugger::NotifyTopInputReader (InputReaderAction notification)
835969ed3d1SCaroline Tice {
836969ed3d1SCaroline Tice     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
837969ed3d1SCaroline Tice 
838969ed3d1SCaroline Tice     if (log)
839969ed3d1SCaroline Tice         log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
840969ed3d1SCaroline Tice 
841969ed3d1SCaroline Tice     if (m_opaque_sp)
842969ed3d1SCaroline Tice         m_opaque_sp->NotifyTopInputReader (notification);
843969ed3d1SCaroline Tice }
844969ed3d1SCaroline Tice 
845969ed3d1SCaroline Tice void
846431ce678SGreg Clayton SBDebugger::reset (const DebuggerSP &debugger_sp)
8476611103cSGreg Clayton {
8486611103cSGreg Clayton     m_opaque_sp = debugger_sp;
8496611103cSGreg Clayton }
8506611103cSGreg Clayton 
8516611103cSGreg Clayton Debugger *
8526611103cSGreg Clayton SBDebugger::get () const
8536611103cSGreg Clayton {
8546611103cSGreg Clayton     return m_opaque_sp.get();
8556611103cSGreg Clayton }
8566611103cSGreg Clayton 
8576611103cSGreg Clayton Debugger &
8586611103cSGreg Clayton SBDebugger::ref () const
8596611103cSGreg Clayton {
8606611103cSGreg Clayton     assert (m_opaque_sp.get());
8616611103cSGreg Clayton     return *m_opaque_sp;
8626611103cSGreg Clayton }
8636611103cSGreg Clayton 
8649a37766eSGreg Clayton const lldb::DebuggerSP &
8659a37766eSGreg Clayton SBDebugger::get_sp () const
8669a37766eSGreg Clayton {
8679a37766eSGreg Clayton     return m_opaque_sp;
8689a37766eSGreg Clayton }
8696611103cSGreg Clayton 
870ebc1bb27SCaroline Tice SBDebugger
871ebc1bb27SCaroline Tice SBDebugger::FindDebuggerWithID (int id)
872ebc1bb27SCaroline Tice {
873af67cecdSGreg Clayton     // No need to lock, the debugger list is thread safe
874ebc1bb27SCaroline Tice     SBDebugger sb_debugger;
875431ce678SGreg Clayton     DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
876ebc1bb27SCaroline Tice     if (debugger_sp)
877ebc1bb27SCaroline Tice         sb_debugger.reset (debugger_sp);
878ebc1bb27SCaroline Tice     return sb_debugger;
879ebc1bb27SCaroline Tice }
880e40e4218SJim Ingham 
881dd759857SCaroline Tice const char *
882dd759857SCaroline Tice SBDebugger::GetInstanceName()
883dd759857SCaroline Tice {
884dd759857SCaroline Tice     if (m_opaque_sp)
885dd759857SCaroline Tice         return m_opaque_sp->GetInstanceName().AsCString();
886dd759857SCaroline Tice     else
887dd759857SCaroline Tice         return NULL;
888dd759857SCaroline Tice }
889dd759857SCaroline Tice 
8903df9a8dfSCaroline Tice SBError
891dd759857SCaroline Tice SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
8923df9a8dfSCaroline Tice {
893431ce678SGreg Clayton     UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
8943df9a8dfSCaroline Tice 
895e0d378b3SGreg Clayton     Error err = root_settings_controller->SetVariable (var_name,
896e0d378b3SGreg Clayton                                                        value,
897e0d378b3SGreg Clayton                                                        eVarSetOperationAssign,
898e0d378b3SGreg Clayton                                                        true,
899101c7c20SCaroline Tice                                                        debugger_instance_name);
9003df9a8dfSCaroline Tice     SBError sb_error;
9013df9a8dfSCaroline Tice     sb_error.SetError (err);
9023df9a8dfSCaroline Tice 
9033df9a8dfSCaroline Tice     return sb_error;
9043df9a8dfSCaroline Tice }
9053df9a8dfSCaroline Tice 
906431ce678SGreg Clayton SBStringList
907dd759857SCaroline Tice SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
9083df9a8dfSCaroline Tice {
9093df9a8dfSCaroline Tice     SBStringList ret_value;
910e0d378b3SGreg Clayton     SettableVariableType var_type;
911431ce678SGreg Clayton     Error err;
912101c7c20SCaroline Tice 
913431ce678SGreg Clayton     UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
9143df9a8dfSCaroline Tice 
915daccaa9eSCaroline Tice     StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
916daccaa9eSCaroline Tice 
917daccaa9eSCaroline Tice     if (err.Success())
918daccaa9eSCaroline Tice     {
919311adf3dSChris Lattner         for (unsigned i = 0; i != value.GetSize(); ++i)
9203df9a8dfSCaroline Tice             ret_value.AppendString (value.GetStringAtIndex(i));
921daccaa9eSCaroline Tice     }
922daccaa9eSCaroline Tice     else
923daccaa9eSCaroline Tice     {
924daccaa9eSCaroline Tice         ret_value.AppendString (err.AsCString());
925daccaa9eSCaroline Tice     }
926daccaa9eSCaroline Tice 
9273df9a8dfSCaroline Tice 
9283df9a8dfSCaroline Tice     return ret_value;
9293df9a8dfSCaroline Tice }
9303df9a8dfSCaroline Tice 
931a7015092SGreg Clayton uint32_t
932a7015092SGreg Clayton SBDebugger::GetTerminalWidth () const
933a7015092SGreg Clayton {
934a7015092SGreg Clayton     if (m_opaque_sp)
935a7015092SGreg Clayton         return m_opaque_sp->GetTerminalWidth ();
936a7015092SGreg Clayton     return 0;
937a7015092SGreg Clayton }
938a7015092SGreg Clayton 
939a7015092SGreg Clayton void
940a7015092SGreg Clayton SBDebugger::SetTerminalWidth (uint32_t term_width)
941a7015092SGreg Clayton {
942a7015092SGreg Clayton     if (m_opaque_sp)
943a7015092SGreg Clayton         m_opaque_sp->SetTerminalWidth (term_width);
944a7015092SGreg Clayton }
945a7015092SGreg Clayton 
946a7015092SGreg Clayton const char *
947a7015092SGreg Clayton SBDebugger::GetPrompt() const
948a7015092SGreg Clayton {
949431ce678SGreg Clayton     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
950ceb6b139SCaroline Tice 
951ceb6b139SCaroline Tice     if (log)
952cfd1acedSGreg Clayton         log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
953750cd175SCaroline Tice                      (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
954ceb6b139SCaroline Tice 
955a7015092SGreg Clayton     if (m_opaque_sp)
956a7015092SGreg Clayton         return m_opaque_sp->GetPrompt ();
957a7015092SGreg Clayton     return 0;
958a7015092SGreg Clayton }
959a7015092SGreg Clayton 
960a7015092SGreg Clayton void
961a7015092SGreg Clayton SBDebugger::SetPrompt (const char *prompt)
962a7015092SGreg Clayton {
963a7015092SGreg Clayton     if (m_opaque_sp)
964a7015092SGreg Clayton         m_opaque_sp->SetPrompt (prompt);
965a7015092SGreg Clayton }
966a7015092SGreg Clayton 
967a7015092SGreg Clayton 
968431ce678SGreg Clayton ScriptLanguage
969a7015092SGreg Clayton SBDebugger::GetScriptLanguage() const
970a7015092SGreg Clayton {
971a7015092SGreg Clayton     if (m_opaque_sp)
972a7015092SGreg Clayton         return m_opaque_sp->GetScriptLanguage ();
973a7015092SGreg Clayton     return eScriptLanguageNone;
974a7015092SGreg Clayton }
975a7015092SGreg Clayton 
976a7015092SGreg Clayton void
977431ce678SGreg Clayton SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
978a7015092SGreg Clayton {
979a7015092SGreg Clayton     if (m_opaque_sp)
980af67cecdSGreg Clayton     {
981a7015092SGreg Clayton         m_opaque_sp->SetScriptLanguage (script_lang);
982a7015092SGreg Clayton     }
983af67cecdSGreg Clayton }
984a7015092SGreg Clayton 
985e40e4218SJim Ingham bool
986e40e4218SJim Ingham SBDebugger::SetUseExternalEditor (bool value)
987e40e4218SJim Ingham {
988e40e4218SJim Ingham     if (m_opaque_sp)
989e40e4218SJim Ingham         return m_opaque_sp->SetUseExternalEditor (value);
990e40e4218SJim Ingham     return false;
991e40e4218SJim Ingham }
992e40e4218SJim Ingham 
993e40e4218SJim Ingham bool
994daccaa9eSCaroline Tice SBDebugger::GetUseExternalEditor ()
995e40e4218SJim Ingham {
996e40e4218SJim Ingham     if (m_opaque_sp)
997daccaa9eSCaroline Tice         return m_opaque_sp->GetUseExternalEditor ();
998e40e4218SJim Ingham     return false;
999e40e4218SJim Ingham }
1000e40e4218SJim Ingham 
1001dde9cff3SCaroline Tice bool
1002dde9cff3SCaroline Tice SBDebugger::GetDescription (SBStream &description)
1003dde9cff3SCaroline Tice {
1004da7bc7d0SGreg Clayton     Stream &strm = description.ref();
1005da7bc7d0SGreg Clayton 
1006dde9cff3SCaroline Tice     if (m_opaque_sp)
1007dde9cff3SCaroline Tice     {
1008dde9cff3SCaroline Tice         const char *name = m_opaque_sp->GetInstanceName().AsCString();
1009431ce678SGreg Clayton         user_id_t id = m_opaque_sp->GetID();
1010da7bc7d0SGreg Clayton         strm.Printf ("Debugger (instance: \"%s\", id: %llu)", name, id);
1011dde9cff3SCaroline Tice     }
1012dde9cff3SCaroline Tice     else
1013da7bc7d0SGreg Clayton         strm.PutCString ("No value");
1014dde9cff3SCaroline Tice 
1015dde9cff3SCaroline Tice     return true;
1016dde9cff3SCaroline Tice }
1017efed6131SCaroline Tice 
1018431ce678SGreg Clayton user_id_t
1019efed6131SCaroline Tice SBDebugger::GetID()
1020efed6131SCaroline Tice {
1021efed6131SCaroline Tice     if (m_opaque_sp)
1022efed6131SCaroline Tice         return m_opaque_sp->GetID();
1023efed6131SCaroline Tice     return LLDB_INVALID_UID;
1024efed6131SCaroline Tice }
10252289fa48SGreg Clayton 
10262289fa48SGreg Clayton 
10272289fa48SGreg Clayton SBError
10282289fa48SGreg Clayton SBDebugger::SetCurrentPlatform (const char *platform_name)
10292289fa48SGreg Clayton {
10302289fa48SGreg Clayton     SBError sb_error;
10312289fa48SGreg Clayton     if (m_opaque_sp)
10322289fa48SGreg Clayton     {
10332289fa48SGreg Clayton         PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
10342289fa48SGreg Clayton 
10352289fa48SGreg Clayton         if (platform_sp)
10362289fa48SGreg Clayton         {
10372289fa48SGreg Clayton             bool make_selected = true;
10382289fa48SGreg Clayton             m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
10392289fa48SGreg Clayton         }
10402289fa48SGreg Clayton     }
10412289fa48SGreg Clayton     return sb_error;
10422289fa48SGreg Clayton }
10432289fa48SGreg Clayton 
1044fc3f027dSGreg Clayton bool
1045f3dd93c8SGreg Clayton SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
1046f3dd93c8SGreg Clayton {
1047f3dd93c8SGreg Clayton     if (m_opaque_sp)
1048f3dd93c8SGreg Clayton     {
1049f3dd93c8SGreg Clayton         PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1050f3dd93c8SGreg Clayton 
1051f3dd93c8SGreg Clayton         if (platform_sp)
1052f3dd93c8SGreg Clayton         {
1053f3dd93c8SGreg Clayton             platform_sp->SetSDKRootDirectory (ConstString (sysroot));
1054f3dd93c8SGreg Clayton             return true;
1055f3dd93c8SGreg Clayton         }
1056f3dd93c8SGreg Clayton     }
1057f3dd93c8SGreg Clayton     return false;
1058f3dd93c8SGreg Clayton }
1059f3dd93c8SGreg Clayton 
1060f3dd93c8SGreg Clayton bool
1061fc3f027dSGreg Clayton SBDebugger::GetCloseInputOnEOF () const
1062fc3f027dSGreg Clayton {
1063fc3f027dSGreg Clayton     if (m_opaque_sp)
1064fc3f027dSGreg Clayton         return m_opaque_sp->GetCloseInputOnEOF ();
1065fc3f027dSGreg Clayton     return false;
1066fc3f027dSGreg Clayton }
1067fc3f027dSGreg Clayton 
1068fc3f027dSGreg Clayton void
1069fc3f027dSGreg Clayton SBDebugger::SetCloseInputOnEOF (bool b)
1070fc3f027dSGreg Clayton {
1071fc3f027dSGreg Clayton     if (m_opaque_sp)
1072fc3f027dSGreg Clayton         m_opaque_sp->SetCloseInputOnEOF (b);
1073fc3f027dSGreg Clayton }
1074061858ceSEnrico Granata 
1075061858ceSEnrico Granata SBTypeCategory
1076061858ceSEnrico Granata SBDebugger::GetCategory (const char* category_name)
1077061858ceSEnrico Granata {
1078061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1079061858ceSEnrico Granata         return SBTypeCategory();
1080061858ceSEnrico Granata 
1081061858ceSEnrico Granata     TypeCategoryImplSP category_sp;
1082061858ceSEnrico Granata 
1083061858ceSEnrico Granata     if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, false))
1084061858ceSEnrico Granata         return SBTypeCategory(category_sp);
1085061858ceSEnrico Granata     else
1086061858ceSEnrico Granata         return SBTypeCategory();
1087061858ceSEnrico Granata }
1088061858ceSEnrico Granata 
1089061858ceSEnrico Granata SBTypeCategory
1090061858ceSEnrico Granata SBDebugger::CreateCategory (const char* category_name)
1091061858ceSEnrico Granata {
1092061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1093061858ceSEnrico Granata         return SBTypeCategory();
1094061858ceSEnrico Granata 
1095061858ceSEnrico Granata     TypeCategoryImplSP category_sp;
1096061858ceSEnrico Granata 
1097061858ceSEnrico Granata     if (DataVisualization::Categories::GetCategory(ConstString(category_name), category_sp, true))
1098061858ceSEnrico Granata         return SBTypeCategory(category_sp);
1099061858ceSEnrico Granata     else
1100061858ceSEnrico Granata         return SBTypeCategory();
1101061858ceSEnrico Granata }
1102061858ceSEnrico Granata 
1103061858ceSEnrico Granata bool
1104061858ceSEnrico Granata SBDebugger::DeleteCategory (const char* category_name)
1105061858ceSEnrico Granata {
1106061858ceSEnrico Granata     if (!category_name || *category_name == 0)
1107061858ceSEnrico Granata         return false;
1108061858ceSEnrico Granata 
1109061858ceSEnrico Granata     return DataVisualization::Categories::Delete(ConstString(category_name));
1110061858ceSEnrico Granata }
1111061858ceSEnrico Granata 
1112061858ceSEnrico Granata uint32_t
1113061858ceSEnrico Granata SBDebugger::GetNumCategories()
1114061858ceSEnrico Granata {
1115061858ceSEnrico Granata     return DataVisualization::Categories::GetCount();
1116061858ceSEnrico Granata }
1117061858ceSEnrico Granata 
1118061858ceSEnrico Granata SBTypeCategory
1119061858ceSEnrico Granata SBDebugger::GetCategoryAtIndex (uint32_t index)
1120061858ceSEnrico Granata {
1121061858ceSEnrico Granata     return SBTypeCategory(DataVisualization::Categories::GetCategoryAtIndex(index));
1122061858ceSEnrico Granata }
1123061858ceSEnrico Granata 
1124061858ceSEnrico Granata SBTypeCategory
1125061858ceSEnrico Granata SBDebugger::GetDefaultCategory()
1126061858ceSEnrico Granata {
1127061858ceSEnrico Granata     return GetCategory("default");
1128061858ceSEnrico Granata }
1129061858ceSEnrico Granata 
1130061858ceSEnrico Granata SBTypeFormat
1131061858ceSEnrico Granata SBDebugger::GetFormatForType (SBTypeNameSpecifier type_name)
1132061858ceSEnrico Granata {
1133061858ceSEnrico Granata     SBTypeCategory default_category_sb = GetDefaultCategory();
1134061858ceSEnrico Granata     if (default_category_sb.GetEnabled())
1135061858ceSEnrico Granata         return default_category_sb.GetFormatForType(type_name);
1136061858ceSEnrico Granata     return SBTypeFormat();
1137061858ceSEnrico Granata }
1138061858ceSEnrico Granata 
1139cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON
1140061858ceSEnrico Granata SBTypeSummary
1141061858ceSEnrico Granata SBDebugger::GetSummaryForType (SBTypeNameSpecifier type_name)
1142061858ceSEnrico Granata {
1143061858ceSEnrico Granata     SBTypeSummary summary_chosen;
1144061858ceSEnrico Granata     uint32_t num_categories = GetNumCategories();
1145061858ceSEnrico Granata     SBTypeCategory category_sb;
1146061858ceSEnrico Granata     uint32_t prio_category = UINT32_MAX;
1147061858ceSEnrico Granata     for (uint32_t category_id = 0;
1148061858ceSEnrico Granata          category_id < num_categories;
1149061858ceSEnrico Granata          category_id++)
1150061858ceSEnrico Granata     {
1151061858ceSEnrico Granata         category_sb = GetCategoryAtIndex(category_id);
1152061858ceSEnrico Granata         if (category_sb.GetEnabled() == false)
1153061858ceSEnrico Granata             continue;
1154061858ceSEnrico Granata         SBTypeSummary summary_current = category_sb.GetSummaryForType(type_name);
1155061858ceSEnrico Granata         if (summary_current.IsValid() && (summary_chosen.IsValid() == false || (prio_category > category_sb.m_opaque_sp->GetEnabledPosition())))
1156061858ceSEnrico Granata         {
1157061858ceSEnrico Granata             prio_category = category_sb.m_opaque_sp->GetEnabledPosition();
1158061858ceSEnrico Granata             summary_chosen = summary_current;
1159061858ceSEnrico Granata         }
1160061858ceSEnrico Granata     }
1161061858ceSEnrico Granata     return summary_chosen;
1162061858ceSEnrico Granata }
1163cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON
1164061858ceSEnrico Granata 
1165061858ceSEnrico Granata SBTypeFilter
1166061858ceSEnrico Granata SBDebugger::GetFilterForType (SBTypeNameSpecifier type_name)
1167061858ceSEnrico Granata {
1168061858ceSEnrico Granata     SBTypeFilter filter_chosen;
1169061858ceSEnrico Granata     uint32_t num_categories = GetNumCategories();
1170061858ceSEnrico Granata     SBTypeCategory category_sb;
1171061858ceSEnrico Granata     uint32_t prio_category = UINT32_MAX;
1172061858ceSEnrico Granata     for (uint32_t category_id = 0;
1173061858ceSEnrico Granata          category_id < num_categories;
1174061858ceSEnrico Granata          category_id++)
1175061858ceSEnrico Granata     {
1176061858ceSEnrico Granata         category_sb = GetCategoryAtIndex(category_id);
1177061858ceSEnrico Granata         if (category_sb.GetEnabled() == false)
1178061858ceSEnrico Granata             continue;
1179061858ceSEnrico Granata         SBTypeFilter filter_current = category_sb.GetFilterForType(type_name);
1180061858ceSEnrico Granata         if (filter_current.IsValid() && (filter_chosen.IsValid() == false || (prio_category > category_sb.m_opaque_sp->GetEnabledPosition())))
1181061858ceSEnrico Granata         {
1182061858ceSEnrico Granata             prio_category = category_sb.m_opaque_sp->GetEnabledPosition();
1183061858ceSEnrico Granata             filter_chosen = filter_current;
1184061858ceSEnrico Granata         }
1185061858ceSEnrico Granata     }
1186061858ceSEnrico Granata     return filter_chosen;
1187061858ceSEnrico Granata }
1188061858ceSEnrico Granata 
1189cf7e2dc0SJason Molenda #ifndef LLDB_DISABLE_PYTHON
1190061858ceSEnrico Granata SBTypeSynthetic
1191061858ceSEnrico Granata SBDebugger::GetSyntheticForType (SBTypeNameSpecifier type_name)
1192061858ceSEnrico Granata {
1193061858ceSEnrico Granata     SBTypeSynthetic synth_chosen;
1194061858ceSEnrico Granata     uint32_t num_categories = GetNumCategories();
1195061858ceSEnrico Granata     SBTypeCategory category_sb;
1196061858ceSEnrico Granata     uint32_t prio_category = UINT32_MAX;
1197061858ceSEnrico Granata     for (uint32_t category_id = 0;
1198061858ceSEnrico Granata          category_id < num_categories;
1199061858ceSEnrico Granata          category_id++)
1200061858ceSEnrico Granata     {
1201061858ceSEnrico Granata         category_sb = GetCategoryAtIndex(category_id);
1202061858ceSEnrico Granata         if (category_sb.GetEnabled() == false)
1203061858ceSEnrico Granata             continue;
1204061858ceSEnrico Granata         SBTypeSynthetic synth_current = category_sb.GetSyntheticForType(type_name);
1205061858ceSEnrico Granata         if (synth_current.IsValid() && (synth_chosen.IsValid() == false || (prio_category > category_sb.m_opaque_sp->GetEnabledPosition())))
1206061858ceSEnrico Granata         {
1207061858ceSEnrico Granata             prio_category = category_sb.m_opaque_sp->GetEnabledPosition();
1208061858ceSEnrico Granata             synth_chosen = synth_current;
1209061858ceSEnrico Granata         }
1210061858ceSEnrico Granata     }
1211061858ceSEnrico Granata     return synth_chosen;
1212061858ceSEnrico Granata }
1213cf7e2dc0SJason Molenda #endif // LLDB_DISABLE_PYTHON
1214061858ceSEnrico Granata 
1215228063cdSJim Ingham bool
1216228063cdSJim Ingham SBDebugger::EnableLog (const char *channel, const char **categories)
1217228063cdSJim Ingham {
1218228063cdSJim Ingham     if (m_opaque_sp)
1219228063cdSJim Ingham     {
1220228063cdSJim Ingham         uint32_t log_options = LLDB_LOG_OPTION_PREPEND_TIMESTAMP | LLDB_LOG_OPTION_PREPEND_THREAD_NAME;
1221228063cdSJim Ingham         StreamString errors;
1222228063cdSJim Ingham         return m_opaque_sp->EnableLog (channel, categories, NULL, log_options, errors);
1223228063cdSJim Ingham 
1224228063cdSJim Ingham     }
1225228063cdSJim Ingham     else
1226228063cdSJim Ingham         return false;
1227228063cdSJim Ingham }
12284f02b22dSJim Ingham 
12294f02b22dSJim Ingham void
12304f02b22dSJim Ingham SBDebugger::SetLoggingCallback (lldb::LogOutputCallback log_callback, void *baton)
12314f02b22dSJim Ingham {
12324f02b22dSJim Ingham     if (m_opaque_sp)
12334f02b22dSJim Ingham     {
12344f02b22dSJim Ingham         return m_opaque_sp->SetLoggingCallback (log_callback, baton);
12354f02b22dSJim Ingham     }
12364f02b22dSJim Ingham }
12374f02b22dSJim Ingham 
12384f02b22dSJim Ingham 
1239