blob: acb69faad7048a6d666419917f9b2a0b69d6522f [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBDebugger.cpp ------------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000010#include "lldb/API/SBDebugger.h"
Chris Lattner24943d22010-06-08 16:52:24 +000011
Greg Claytonb3448432011-03-24 21:19:54 +000012#include "lldb/lldb-private.h"
Chris Lattner24943d22010-06-08 16:52:24 +000013
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000014#include "lldb/API/SBListener.h"
15#include "lldb/API/SBBroadcaster.h"
16#include "lldb/API/SBCommandInterpreter.h"
17#include "lldb/API/SBCommandReturnObject.h"
Greg Clayton180546b2011-04-30 01:09:13 +000018#include "lldb/API/SBError.h"
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000019#include "lldb/API/SBEvent.h"
20#include "lldb/API/SBFrame.h"
Eli Friedmand6ec8aa2010-06-09 07:37:52 +000021#include "lldb/API/SBInputReader.h"
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000022#include "lldb/API/SBProcess.h"
23#include "lldb/API/SBSourceManager.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000024#include "lldb/API/SBStream.h"
Caroline Tice6e4c5ce2010-09-04 00:03:46 +000025#include "lldb/API/SBStringList.h"
26#include "lldb/API/SBTarget.h"
27#include "lldb/API/SBThread.h"
Greg Clayton887aa282010-10-11 01:05:37 +000028#include "lldb/Core/Debugger.h"
29#include "lldb/Core/State.h"
30#include "lldb/Interpreter/Args.h"
31#include "lldb/Interpreter/CommandInterpreter.h"
32#include "lldb/Target/Process.h"
33#include "lldb/Target/TargetList.h"
Chris Lattner24943d22010-06-08 16:52:24 +000034
35using namespace lldb;
36using namespace lldb_private;
37
38void
39SBDebugger::Initialize ()
40{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000041 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000042
43 if (log)
44 log->Printf ("SBDebugger::Initialize ()");
45
Greg Claytone86cbb92011-03-22 01:14:58 +000046 SBCommandInterpreter::InitializeSWIG ();
47
Chris Lattner24943d22010-06-08 16:52:24 +000048 Debugger::Initialize();
49}
50
51void
52SBDebugger::Terminate ()
53{
54 Debugger::Terminate();
55}
56
Greg Clayton43490d12010-07-30 20:12:55 +000057void
58SBDebugger::Clear ()
59{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000060 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000061
62 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000063 log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
Caroline Ticec0446862010-12-20 18:35:50 +000064
65 if (m_opaque_sp)
66 m_opaque_sp->CleanUpInputReaders ();
Caroline Tice7826c882010-10-26 03:11:13 +000067
Greg Clayton43490d12010-07-30 20:12:55 +000068 m_opaque_sp.reset();
69}
70
Greg Clayton63094e02010-06-23 01:19:29 +000071SBDebugger
72SBDebugger::Create()
73{
Jim Ingham7bbebaf2011-08-13 00:56:10 +000074 return SBDebugger::Create(false);
Jim Ingham558dd5b2011-08-13 00:22:20 +000075}
76
77SBDebugger
78SBDebugger::Create(bool source_init_files)
79{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000080 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000081
Greg Clayton63094e02010-06-23 01:19:29 +000082 SBDebugger debugger;
83 debugger.reset(Debugger::CreateInstance());
Caroline Tice7826c882010-10-26 03:11:13 +000084
85 if (log)
86 {
87 SBStream sstr;
88 debugger.GetDescription (sstr);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000089 log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000090 }
91
Jim Ingham558dd5b2011-08-13 00:22:20 +000092 SBCommandInterpreter interp = debugger.GetCommandInterpreter();
93 if (source_init_files)
94 {
95 interp.get()->SkipLLDBInitFiles(false);
96 interp.get()->SkipAppInitFiles (false);
97 SBCommandReturnObject result;
98 interp.SourceInitFileInHomeDirectory(result);
99 }
100 else
101 {
102 interp.get()->SkipLLDBInitFiles(true);
103 interp.get()->SkipAppInitFiles (true);
104 }
Greg Clayton63094e02010-06-23 01:19:29 +0000105 return debugger;
106}
107
Caroline Ticec4ed12f2011-01-22 01:02:07 +0000108void
109SBDebugger::Destroy (SBDebugger &debugger)
110{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000111 LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticec4ed12f2011-01-22 01:02:07 +0000112
113 if (log)
114 {
115 SBStream sstr;
116 debugger.GetDescription (sstr);
117 log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
118 }
119
120 Debugger::Destroy (debugger.m_opaque_sp);
121
122 if (debugger.m_opaque_sp.get() != NULL)
123 debugger.m_opaque_sp.reset();
124}
125
Greg Clayton63094e02010-06-23 01:19:29 +0000126SBDebugger::SBDebugger () :
127 m_opaque_sp ()
128{
129}
130
Enrico Granata3370f0c2011-08-19 23:56:34 +0000131SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) :
132 m_opaque_sp(debugger_sp)
133{
134}
135
Greg Clayton538eb822010-11-05 23:17:00 +0000136SBDebugger::SBDebugger(const SBDebugger &rhs) :
137 m_opaque_sp (rhs.m_opaque_sp)
138{
139}
140
141SBDebugger &
142SBDebugger::operator = (const SBDebugger &rhs)
143{
144 if (this != &rhs)
145 {
146 m_opaque_sp = rhs.m_opaque_sp;
147 }
148 return *this;
149}
150
Greg Clayton63094e02010-06-23 01:19:29 +0000151SBDebugger::~SBDebugger ()
152{
153}
154
155bool
156SBDebugger::IsValid() const
157{
158 return m_opaque_sp.get() != NULL;
159}
160
161
Chris Lattner24943d22010-06-08 16:52:24 +0000162void
163SBDebugger::SetAsync (bool b)
164{
Greg Clayton63094e02010-06-23 01:19:29 +0000165 if (m_opaque_sp)
166 m_opaque_sp->SetAsyncExecution(b);
Chris Lattner24943d22010-06-08 16:52:24 +0000167}
168
Jim Ingham83dd2032011-09-13 23:25:31 +0000169bool
170SBDebugger::GetAsync ()
171{
172 if (m_opaque_sp)
173 return m_opaque_sp->GetAsyncExecution();
174 else
175 return false;
176}
177
Greg Clayton887aa282010-10-11 01:05:37 +0000178void
179SBDebugger::SkipLLDBInitFiles (bool b)
180{
181 if (m_opaque_sp)
182 m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
183}
184
Jim Ingham574c3d62011-08-12 23:34:31 +0000185void
186SBDebugger::SkipAppInitFiles (bool b)
187{
188 if (m_opaque_sp)
189 m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
190}
191
Chris Lattner24943d22010-06-08 16:52:24 +0000192// Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
193// trying to switch modes in the middle of a debugging session.
194void
195SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
196{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000197 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000198
199 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000200 log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
201 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000202
Greg Clayton63094e02010-06-23 01:19:29 +0000203 if (m_opaque_sp)
204 m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000205}
206
207void
208SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
209{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000210 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000211
212
213 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000214 log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
215 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000216
Greg Clayton63094e02010-06-23 01:19:29 +0000217 if (m_opaque_sp)
218 m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000219}
220
221void
222SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
223{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000224 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000225
226
227 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000228 log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
229 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000230
Greg Clayton63094e02010-06-23 01:19:29 +0000231 if (m_opaque_sp)
232 m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000233}
234
235FILE *
236SBDebugger::GetInputFileHandle ()
237{
Greg Clayton63094e02010-06-23 01:19:29 +0000238 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000239 return m_opaque_sp->GetInputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000240 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000241}
242
243FILE *
244SBDebugger::GetOutputFileHandle ()
245{
Greg Clayton63094e02010-06-23 01:19:29 +0000246 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000247 return m_opaque_sp->GetOutputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000248 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000249}
250
251FILE *
252SBDebugger::GetErrorFileHandle ()
253{
Greg Clayton63094e02010-06-23 01:19:29 +0000254 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000255 return m_opaque_sp->GetErrorFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000256 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000257}
258
259SBCommandInterpreter
260SBDebugger::GetCommandInterpreter ()
261{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000262 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000263
Greg Clayton63094e02010-06-23 01:19:29 +0000264 SBCommandInterpreter sb_interpreter;
265 if (m_opaque_sp)
266 sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
Caroline Tice7826c882010-10-26 03:11:13 +0000267
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000268 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000269 log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000270 m_opaque_sp.get(), sb_interpreter.get());
271
Chris Lattner24943d22010-06-08 16:52:24 +0000272 return sb_interpreter;
273}
274
275void
276SBDebugger::HandleCommand (const char *command)
277{
Greg Clayton63094e02010-06-23 01:19:29 +0000278 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000279 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000280 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
281 Mutex::Locker api_locker;
282 if (target_sp)
283 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
284
Greg Clayton63094e02010-06-23 01:19:29 +0000285 SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
286 SBCommandReturnObject result;
287
288 sb_interpreter.HandleCommand (command, result, false);
289
290 if (GetErrorFileHandle() != NULL)
291 result.PutError (GetErrorFileHandle());
292 if (GetOutputFileHandle() != NULL)
293 result.PutOutput (GetOutputFileHandle());
294
295 if (m_opaque_sp->GetAsyncExecution() == false)
Chris Lattner24943d22010-06-08 16:52:24 +0000296 {
Greg Clayton63094e02010-06-23 01:19:29 +0000297 SBProcess process(GetCommandInterpreter().GetProcess ());
298 if (process.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000299 {
Greg Clayton63094e02010-06-23 01:19:29 +0000300 EventSP event_sp;
301 Listener &lldb_listener = m_opaque_sp->GetListener();
302 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
303 {
304 SBEvent event(event_sp);
305 HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
306 }
Chris Lattner24943d22010-06-08 16:52:24 +0000307 }
308 }
309 }
310}
311
312SBListener
313SBDebugger::GetListener ()
314{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000315 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000316
Greg Clayton63094e02010-06-23 01:19:29 +0000317 SBListener sb_listener;
318 if (m_opaque_sp)
319 sb_listener.reset(&m_opaque_sp->GetListener(), false);
Caroline Tice7826c882010-10-26 03:11:13 +0000320
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000321 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000322 log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000323 sb_listener.get());
324
Chris Lattner24943d22010-06-08 16:52:24 +0000325 return sb_listener;
326}
327
328void
329SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
330{
Greg Claytonbdcda462010-12-20 20:49:23 +0000331 if (!process.IsValid())
332 return;
Chris Lattner24943d22010-06-08 16:52:24 +0000333
Greg Claytonbdcda462010-12-20 20:49:23 +0000334 const uint32_t event_type = event.GetType();
335 char stdio_buffer[1024];
336 size_t len;
Chris Lattner24943d22010-06-08 16:52:24 +0000337
Greg Claytonbdcda462010-12-20 20:49:23 +0000338 Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex());
339
340 if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
Chris Lattner24943d22010-06-08 16:52:24 +0000341 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000342 // Drain stdout when we stop just in case we have any bytes
343 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
344 if (out != NULL)
345 ::fwrite (stdio_buffer, 1, len, out);
346 }
347
348 if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
349 {
350 // Drain stderr when we stop just in case we have any bytes
351 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
352 if (err != NULL)
353 ::fwrite (stdio_buffer, 1, len, err);
354 }
355
356 if (event_type & Process::eBroadcastBitStateChanged)
357 {
358 StateType event_state = SBProcess::GetStateFromEvent (event);
359
360 if (event_state == eStateInvalid)
361 return;
362
363 bool is_stopped = StateIsStoppedState (event_state);
364 if (!is_stopped)
365 process.ReportEventState (event, out);
Chris Lattner24943d22010-06-08 16:52:24 +0000366 }
367}
368
Jim Inghamcc637462011-09-13 00:29:56 +0000369SBSourceManager
Chris Lattner24943d22010-06-08 16:52:24 +0000370SBDebugger::GetSourceManager ()
371{
Jim Inghamcc637462011-09-13 00:29:56 +0000372 SBSourceManager sb_source_manager (*this);
373 return sb_source_manager;
Chris Lattner24943d22010-06-08 16:52:24 +0000374}
375
376
377bool
378SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
379{
380 if (arch_name && arch_name_len)
381 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000382 ArchSpec default_arch = Target::GetDefaultArchitecture ();
Caroline Tice5bc8c972010-09-20 20:44:43 +0000383
Chris Lattner24943d22010-06-08 16:52:24 +0000384 if (default_arch.IsValid())
385 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000386 const std::string &triple_str = default_arch.GetTriple().str();
387 if (!triple_str.empty())
388 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
389 else
390 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
Chris Lattner24943d22010-06-08 16:52:24 +0000391 return true;
392 }
393 }
394 if (arch_name && arch_name_len)
395 arch_name[0] = '\0';
396 return false;
397}
398
399
400bool
401SBDebugger::SetDefaultArchitecture (const char *arch_name)
402{
403 if (arch_name)
404 {
Greg Claytonf15996e2011-04-07 22:46:35 +0000405 ArchSpec arch (arch_name, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000406 if (arch.IsValid())
407 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000408 Target::SetDefaultArchitecture (arch);
Chris Lattner24943d22010-06-08 16:52:24 +0000409 return true;
410 }
411 }
412 return false;
413}
414
415ScriptLanguage
416SBDebugger::GetScriptingLanguage (const char *script_language_name)
417{
Greg Claytonbdcda462010-12-20 20:49:23 +0000418
Chris Lattner24943d22010-06-08 16:52:24 +0000419 return Args::StringToScriptLanguage (script_language_name,
420 eScriptLanguageDefault,
421 NULL);
422}
Chris Lattner24943d22010-06-08 16:52:24 +0000423
424const char *
425SBDebugger::GetVersionString ()
426{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000427 return GetVersion();
Chris Lattner24943d22010-06-08 16:52:24 +0000428}
429
430const char *
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000431SBDebugger::StateAsCString (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000432{
Caroline Ticea2cffd32011-04-25 22:05:51 +0000433 return lldb_private::StateAsCString (state);
Chris Lattner24943d22010-06-08 16:52:24 +0000434}
435
436bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000437SBDebugger::StateIsRunningState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000438{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000439 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000440
Caroline Ticea2cffd32011-04-25 22:05:51 +0000441 const bool result = lldb_private::StateIsRunningState (state);
Greg Claytona66ba462010-10-30 04:51:46 +0000442 if (log)
443 log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000444 StateAsCString (state), result);
Greg Claytona66ba462010-10-30 04:51:46 +0000445
446 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000447}
448
449bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000450SBDebugger::StateIsStoppedState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000451{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000452 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000453
Caroline Ticea2cffd32011-04-25 22:05:51 +0000454 const bool result = lldb_private::StateIsStoppedState (state);
Caroline Tice7826c882010-10-26 03:11:13 +0000455 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000456 log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000457 StateAsCString (state), result);
Caroline Tice7826c882010-10-26 03:11:13 +0000458
Greg Claytona66ba462010-10-30 04:51:46 +0000459 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000460}
461
462
463SBTarget
464SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
465 const char *target_triple)
466{
Greg Clayton63094e02010-06-23 01:19:29 +0000467 SBTarget target;
468 if (m_opaque_sp)
469 {
470 ArchSpec arch;
Greg Clayton537a7a82010-10-20 20:54:39 +0000471 FileSpec file_spec (filename, true);
Greg Claytonf15996e2011-04-07 22:46:35 +0000472 arch.SetTriple (target_triple, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton63094e02010-06-23 01:19:29 +0000473 TargetSP target_sp;
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000474 Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, true, target_sp));
Greg Clayton63094e02010-06-23 01:19:29 +0000475 target.reset (target_sp);
476 }
Greg Claytona66ba462010-10-30 04:51:46 +0000477
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000478 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000479 if (log)
480 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000481 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000482 m_opaque_sp.get(), filename, target_triple, target.get());
483 }
484
Chris Lattner24943d22010-06-08 16:52:24 +0000485 return target;
486}
487
488SBTarget
Greg Clayton940b1032011-02-23 00:35:02 +0000489SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
Chris Lattner24943d22010-06-08 16:52:24 +0000490{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000491 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000492
Greg Clayton63094e02010-06-23 01:19:29 +0000493 SBTarget target;
494 if (m_opaque_sp)
495 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000496 FileSpec file (filename, true);
Greg Clayton940b1032011-02-23 00:35:02 +0000497 ArchSpec arch;
Greg Clayton63094e02010-06-23 01:19:29 +0000498 TargetSP target_sp;
499 Error error;
Chris Lattner24943d22010-06-08 16:52:24 +0000500
Greg Clayton940b1032011-02-23 00:35:02 +0000501 if (arch_cstr)
Greg Claytonf15996e2011-04-07 22:46:35 +0000502 arch.SetTriple (arch_cstr, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton940b1032011-02-23 00:35:02 +0000503
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000504 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000505
506 if (error.Success())
507 {
Jim Inghamc8332952010-08-26 21:32:51 +0000508 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000509 target.reset(target_sp);
510 }
Chris Lattner24943d22010-06-08 16:52:24 +0000511 }
Caroline Tice7826c882010-10-26 03:11:13 +0000512
513 if (log)
514 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000515 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
Greg Clayton940b1032011-02-23 00:35:02 +0000516 m_opaque_sp.get(), filename, arch_cstr, target.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000517 }
518
Greg Clayton63094e02010-06-23 01:19:29 +0000519 return target;
520}
521
522SBTarget
523SBDebugger::CreateTarget (const char *filename)
524{
525 SBTarget target;
526 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000527 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000528 FileSpec file (filename, true);
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000529 ArchSpec arch = Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000530 TargetSP target_sp;
531 Error error;
532
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000533 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000534
535 if (error.Success())
536 {
Jim Inghamc8332952010-08-26 21:32:51 +0000537 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000538 target.reset (target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000539 }
540 }
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000541 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000542 if (log)
543 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000544 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000545 m_opaque_sp.get(), filename, target.get());
546 }
Greg Clayton63094e02010-06-23 01:19:29 +0000547 return target;
Chris Lattner24943d22010-06-08 16:52:24 +0000548}
549
Johnny Chen409646d2011-06-15 21:24:24 +0000550bool
551SBDebugger::DeleteTarget (lldb::SBTarget &target)
552{
553 bool result = false;
554 if (m_opaque_sp)
555 {
556 // No need to lock, the target list is thread safe
557 result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp);
558 }
559
560 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
561 if (log)
562 {
563 log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
564 }
565
566 return result;
567}
Chris Lattner24943d22010-06-08 16:52:24 +0000568SBTarget
569SBDebugger::GetTargetAtIndex (uint32_t idx)
570{
Greg Clayton63094e02010-06-23 01:19:29 +0000571 SBTarget sb_target;
572 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000573 {
574 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000575 sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
Greg Claytonbdcda462010-12-20 20:49:23 +0000576 }
Chris Lattner24943d22010-06-08 16:52:24 +0000577 return sb_target;
578}
579
580SBTarget
581SBDebugger::FindTargetWithProcessID (pid_t pid)
582{
Greg Clayton63094e02010-06-23 01:19:29 +0000583 SBTarget sb_target;
584 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000585 {
586 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000587 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
Greg Claytonbdcda462010-12-20 20:49:23 +0000588 }
Chris Lattner24943d22010-06-08 16:52:24 +0000589 return sb_target;
590}
591
592SBTarget
593SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
594{
Greg Clayton63094e02010-06-23 01:19:29 +0000595 SBTarget sb_target;
596 if (m_opaque_sp && filename && filename[0])
597 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000598 // No need to lock, the target list is thread safe
Greg Claytonf15996e2011-04-07 22:46:35 +0000599 ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton537a7a82010-10-20 20:54:39 +0000600 TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
Greg Clayton63094e02010-06-23 01:19:29 +0000601 sb_target.reset(target_sp);
602 }
603 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000604}
605
606SBTarget
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000607SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000608{
Greg Clayton63094e02010-06-23 01:19:29 +0000609 SBTarget sb_target;
610 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000611 {
612 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000613 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
Greg Claytonbdcda462010-12-20 20:49:23 +0000614 }
Chris Lattner24943d22010-06-08 16:52:24 +0000615 return sb_target;
616}
617
618
619uint32_t
620SBDebugger::GetNumTargets ()
621{
Greg Clayton63094e02010-06-23 01:19:29 +0000622 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000623 {
624 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000625 return m_opaque_sp->GetTargetList().GetNumTargets ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000626 }
Greg Clayton63094e02010-06-23 01:19:29 +0000627 return 0;
628}
Chris Lattner24943d22010-06-08 16:52:24 +0000629
630SBTarget
Jim Inghamc8332952010-08-26 21:32:51 +0000631SBDebugger::GetSelectedTarget ()
Chris Lattner24943d22010-06-08 16:52:24 +0000632{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000633 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000634
Greg Clayton63094e02010-06-23 01:19:29 +0000635 SBTarget sb_target;
636 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000637 {
638 // No need to lock, the target list is thread safe
Jim Inghamc8332952010-08-26 21:32:51 +0000639 sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
Greg Claytonbdcda462010-12-20 20:49:23 +0000640 }
Caroline Tice7826c882010-10-26 03:11:13 +0000641
642 if (log)
643 {
644 SBStream sstr;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000645 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000646 log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000647 sb_target.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000648 }
649
Chris Lattner24943d22010-06-08 16:52:24 +0000650 return sb_target;
651}
652
653void
Jim Ingham83dd2032011-09-13 23:25:31 +0000654SBDebugger::SetSelectedTarget (SBTarget &sb_target)
655{
656 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
657
658 if (m_opaque_sp)
659 {
660 m_opaque_sp->GetTargetList().SetSelectedTarget (sb_target.get());
661 }
662 if (log)
663 {
664 SBStream sstr;
665 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
666 log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
667 sb_target.get(), sstr.GetData());
668 }
669}
670
671void
Chris Lattner24943d22010-06-08 16:52:24 +0000672SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
673{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000674 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000675
676 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000677 log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
678 baton, (int) data_len, (const char *) data, data_len);
Caroline Tice7826c882010-10-26 03:11:13 +0000679
Greg Clayton63094e02010-06-23 01:19:29 +0000680 if (m_opaque_sp)
681 m_opaque_sp->DispatchInput ((const char *) data, data_len);
Chris Lattner24943d22010-06-08 16:52:24 +0000682}
683
684void
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000685SBDebugger::DispatchInputInterrupt ()
686{
687 if (m_opaque_sp)
688 m_opaque_sp->DispatchInputInterrupt ();
689}
690
691void
692SBDebugger::DispatchInputEndOfFile ()
693{
694 if (m_opaque_sp)
695 m_opaque_sp->DispatchInputEndOfFile ();
696}
Caroline Ticeb38df1e2011-05-09 23:06:58 +0000697
698bool
699SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
700{
701 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
702
703 if (log)
704 log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
705
706 if (m_opaque_sp && reader.IsValid())
707 {
708 InputReaderSP reader_sp (*reader);
709 return m_opaque_sp->InputReaderIsTopReader (reader_sp);
710 }
711
712 return false;
713}
714
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000715
716void
Chris Lattner24943d22010-06-08 16:52:24 +0000717SBDebugger::PushInputReader (SBInputReader &reader)
718{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000719 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000720
721 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000722 log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
Caroline Tice7826c882010-10-26 03:11:13 +0000723
Greg Clayton63094e02010-06-23 01:19:29 +0000724 if (m_opaque_sp && reader.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000725 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000726 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
727 Mutex::Locker api_locker;
728 if (target_sp)
729 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
Chris Lattner24943d22010-06-08 16:52:24 +0000730 InputReaderSP reader_sp(*reader);
Greg Clayton63094e02010-06-23 01:19:29 +0000731 m_opaque_sp->PushInputReader (reader_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000732 }
733}
Greg Clayton63094e02010-06-23 01:19:29 +0000734
735void
Caroline Tice4a348082011-05-02 20:41:46 +0000736SBDebugger::NotifyTopInputReader (InputReaderAction notification)
737{
738 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
739
740 if (log)
741 log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
742
743 if (m_opaque_sp)
744 m_opaque_sp->NotifyTopInputReader (notification);
745}
746
747void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000748SBDebugger::reset (const DebuggerSP &debugger_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000749{
750 m_opaque_sp = debugger_sp;
751}
752
753Debugger *
754SBDebugger::get () const
755{
756 return m_opaque_sp.get();
757}
758
759Debugger &
760SBDebugger::ref () const
761{
762 assert (m_opaque_sp.get());
763 return *m_opaque_sp;
764}
765
766
Caroline Tice558be582010-06-30 16:22:25 +0000767SBDebugger
768SBDebugger::FindDebuggerWithID (int id)
769{
Greg Claytonbdcda462010-12-20 20:49:23 +0000770 // No need to lock, the debugger list is thread safe
Caroline Tice558be582010-06-30 16:22:25 +0000771 SBDebugger sb_debugger;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000772 DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
Caroline Tice558be582010-06-30 16:22:25 +0000773 if (debugger_sp)
774 sb_debugger.reset (debugger_sp);
775 return sb_debugger;
776}
Jim Ingham74989e82010-08-30 19:44:40 +0000777
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000778const char *
779SBDebugger::GetInstanceName()
780{
781 if (m_opaque_sp)
782 return m_opaque_sp->GetInstanceName().AsCString();
783 else
784 return NULL;
785}
786
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000787SBError
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000788SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000789{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000790 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000791
Greg Claytonb3448432011-03-24 21:19:54 +0000792 Error err = root_settings_controller->SetVariable (var_name,
793 value,
794 eVarSetOperationAssign,
795 true,
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000796 debugger_instance_name);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000797 SBError sb_error;
798 sb_error.SetError (err);
799
800 return sb_error;
801}
802
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000803SBStringList
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000804SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000805{
806 SBStringList ret_value;
Greg Claytonb3448432011-03-24 21:19:54 +0000807 SettableVariableType var_type;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000808 Error err;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000809
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000810 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000811
Caroline Tice5bc8c972010-09-20 20:44:43 +0000812 StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
813
814 if (err.Success())
815 {
816 for (unsigned i = 0; i != value.GetSize(); ++i)
817 ret_value.AppendString (value.GetStringAtIndex(i));
818 }
819 else
820 {
821 ret_value.AppendString (err.AsCString());
822 }
823
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000824
825 return ret_value;
826}
827
Greg Clayton238c0a12010-09-18 01:14:36 +0000828uint32_t
829SBDebugger::GetTerminalWidth () const
830{
831 if (m_opaque_sp)
832 return m_opaque_sp->GetTerminalWidth ();
833 return 0;
834}
835
836void
837SBDebugger::SetTerminalWidth (uint32_t term_width)
838{
839 if (m_opaque_sp)
840 m_opaque_sp->SetTerminalWidth (term_width);
841}
842
843const char *
844SBDebugger::GetPrompt() const
845{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000846 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000847
848 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000849 log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000850 (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
Caroline Tice7826c882010-10-26 03:11:13 +0000851
Greg Clayton238c0a12010-09-18 01:14:36 +0000852 if (m_opaque_sp)
853 return m_opaque_sp->GetPrompt ();
854 return 0;
855}
856
857void
858SBDebugger::SetPrompt (const char *prompt)
859{
860 if (m_opaque_sp)
861 m_opaque_sp->SetPrompt (prompt);
862}
863
864
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000865ScriptLanguage
Greg Clayton238c0a12010-09-18 01:14:36 +0000866SBDebugger::GetScriptLanguage() const
867{
868 if (m_opaque_sp)
869 return m_opaque_sp->GetScriptLanguage ();
870 return eScriptLanguageNone;
871}
872
873void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000874SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
Greg Clayton238c0a12010-09-18 01:14:36 +0000875{
876 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000877 {
Greg Clayton238c0a12010-09-18 01:14:36 +0000878 m_opaque_sp->SetScriptLanguage (script_lang);
Greg Claytonbdcda462010-12-20 20:49:23 +0000879 }
Greg Clayton238c0a12010-09-18 01:14:36 +0000880}
881
Jim Ingham74989e82010-08-30 19:44:40 +0000882bool
883SBDebugger::SetUseExternalEditor (bool value)
884{
885 if (m_opaque_sp)
886 return m_opaque_sp->SetUseExternalEditor (value);
Greg Claytonbdcda462010-12-20 20:49:23 +0000887 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000888}
889
890bool
Caroline Tice5bc8c972010-09-20 20:44:43 +0000891SBDebugger::GetUseExternalEditor ()
Jim Ingham74989e82010-08-30 19:44:40 +0000892{
893 if (m_opaque_sp)
Caroline Tice5bc8c972010-09-20 20:44:43 +0000894 return m_opaque_sp->GetUseExternalEditor ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000895 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000896}
897
Caroline Tice98f930f2010-09-20 05:20:02 +0000898bool
899SBDebugger::GetDescription (SBStream &description)
900{
901 if (m_opaque_sp)
902 {
903 const char *name = m_opaque_sp->GetInstanceName().AsCString();
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000904 user_id_t id = m_opaque_sp->GetID();
Greg Clayton49ce6822010-10-31 03:01:06 +0000905 description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id);
Caroline Tice98f930f2010-09-20 05:20:02 +0000906 }
907 else
908 description.Printf ("No value");
909
910 return true;
911}
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000912
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000913user_id_t
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000914SBDebugger::GetID()
915{
916 if (m_opaque_sp)
917 return m_opaque_sp->GetID();
918 return LLDB_INVALID_UID;
919}
Greg Clayton180546b2011-04-30 01:09:13 +0000920
921
922SBError
923SBDebugger::SetCurrentPlatform (const char *platform_name)
924{
925 SBError sb_error;
926 if (m_opaque_sp)
927 {
928 PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
929
930 if (platform_sp)
931 {
932 bool make_selected = true;
933 m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
934 }
935 }
936 return sb_error;
937}
938
Greg Clayton421ca502011-05-29 04:06:55 +0000939bool
Greg Clayton604f0d32011-06-17 03:31:01 +0000940SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
941{
942 if (m_opaque_sp)
943 {
944 PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
945
946 if (platform_sp)
947 {
948 platform_sp->SetSDKRootDirectory (ConstString (sysroot));
949 return true;
950 }
951 }
952 return false;
953}
954
955bool
Greg Clayton421ca502011-05-29 04:06:55 +0000956SBDebugger::GetCloseInputOnEOF () const
957{
958 if (m_opaque_sp)
959 return m_opaque_sp->GetCloseInputOnEOF ();
960 return false;
961}
962
963void
964SBDebugger::SetCloseInputOnEOF (bool b)
965{
966 if (m_opaque_sp)
967 m_opaque_sp->SetCloseInputOnEOF (b);
968}