blob: 65357bb76ad32e0f758f65087224d1e5a5974f59 [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"
Greg Clayton3e8c25f2011-09-24 00:52:29 +000032#include "lldb/Interpreter/OptionGroupPlatform.h"
Greg Clayton887aa282010-10-11 01:05:37 +000033#include "lldb/Target/Process.h"
34#include "lldb/Target/TargetList.h"
Chris Lattner24943d22010-06-08 16:52:24 +000035
36using namespace lldb;
37using namespace lldb_private;
38
39void
40SBDebugger::Initialize ()
41{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000042 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000043
44 if (log)
45 log->Printf ("SBDebugger::Initialize ()");
46
Greg Claytone86cbb92011-03-22 01:14:58 +000047 SBCommandInterpreter::InitializeSWIG ();
48
Chris Lattner24943d22010-06-08 16:52:24 +000049 Debugger::Initialize();
50}
51
52void
53SBDebugger::Terminate ()
54{
55 Debugger::Terminate();
56}
57
Greg Clayton43490d12010-07-30 20:12:55 +000058void
59SBDebugger::Clear ()
60{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000061 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000062
63 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000064 log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get());
Caroline Ticec0446862010-12-20 18:35:50 +000065
66 if (m_opaque_sp)
67 m_opaque_sp->CleanUpInputReaders ();
Caroline Tice7826c882010-10-26 03:11:13 +000068
Greg Clayton43490d12010-07-30 20:12:55 +000069 m_opaque_sp.reset();
70}
71
Greg Clayton63094e02010-06-23 01:19:29 +000072SBDebugger
73SBDebugger::Create()
74{
Jim Ingham7bbebaf2011-08-13 00:56:10 +000075 return SBDebugger::Create(false);
Jim Ingham558dd5b2011-08-13 00:22:20 +000076}
77
78SBDebugger
79SBDebugger::Create(bool source_init_files)
80{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +000081 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000082
Greg Clayton63094e02010-06-23 01:19:29 +000083 SBDebugger debugger;
84 debugger.reset(Debugger::CreateInstance());
Caroline Tice7826c882010-10-26 03:11:13 +000085
86 if (log)
87 {
88 SBStream sstr;
89 debugger.GetDescription (sstr);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000090 log->Printf ("SBDebugger::Create () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000091 }
92
Jim Ingham558dd5b2011-08-13 00:22:20 +000093 SBCommandInterpreter interp = debugger.GetCommandInterpreter();
94 if (source_init_files)
95 {
96 interp.get()->SkipLLDBInitFiles(false);
97 interp.get()->SkipAppInitFiles (false);
98 SBCommandReturnObject result;
99 interp.SourceInitFileInHomeDirectory(result);
100 }
101 else
102 {
103 interp.get()->SkipLLDBInitFiles(true);
104 interp.get()->SkipAppInitFiles (true);
105 }
Greg Clayton63094e02010-06-23 01:19:29 +0000106 return debugger;
107}
108
Caroline Ticec4ed12f2011-01-22 01:02:07 +0000109void
110SBDebugger::Destroy (SBDebugger &debugger)
111{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000112 LogSP log (GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticec4ed12f2011-01-22 01:02:07 +0000113
114 if (log)
115 {
116 SBStream sstr;
117 debugger.GetDescription (sstr);
118 log->Printf ("SBDebugger::Destroy () => SBDebugger(%p): %s", debugger.m_opaque_sp.get(), sstr.GetData());
119 }
120
121 Debugger::Destroy (debugger.m_opaque_sp);
122
123 if (debugger.m_opaque_sp.get() != NULL)
124 debugger.m_opaque_sp.reset();
125}
126
Greg Claytonc5486872011-12-15 04:38:41 +0000127void
128SBDebugger::MemoryPressureDetected ()
129{
130 ModuleList::RemoveOrphanSharedModules();
131}
132
Greg Clayton63094e02010-06-23 01:19:29 +0000133SBDebugger::SBDebugger () :
134 m_opaque_sp ()
135{
136}
137
Enrico Granata3370f0c2011-08-19 23:56:34 +0000138SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) :
139 m_opaque_sp(debugger_sp)
140{
141}
142
Greg Clayton538eb822010-11-05 23:17:00 +0000143SBDebugger::SBDebugger(const SBDebugger &rhs) :
144 m_opaque_sp (rhs.m_opaque_sp)
145{
146}
147
148SBDebugger &
149SBDebugger::operator = (const SBDebugger &rhs)
150{
151 if (this != &rhs)
152 {
153 m_opaque_sp = rhs.m_opaque_sp;
154 }
155 return *this;
156}
157
Greg Clayton63094e02010-06-23 01:19:29 +0000158SBDebugger::~SBDebugger ()
159{
160}
161
162bool
163SBDebugger::IsValid() const
164{
165 return m_opaque_sp.get() != NULL;
166}
167
168
Chris Lattner24943d22010-06-08 16:52:24 +0000169void
170SBDebugger::SetAsync (bool b)
171{
Greg Clayton63094e02010-06-23 01:19:29 +0000172 if (m_opaque_sp)
173 m_opaque_sp->SetAsyncExecution(b);
Chris Lattner24943d22010-06-08 16:52:24 +0000174}
175
Jim Ingham83dd2032011-09-13 23:25:31 +0000176bool
177SBDebugger::GetAsync ()
178{
179 if (m_opaque_sp)
180 return m_opaque_sp->GetAsyncExecution();
181 else
182 return false;
183}
184
Greg Clayton887aa282010-10-11 01:05:37 +0000185void
186SBDebugger::SkipLLDBInitFiles (bool b)
187{
188 if (m_opaque_sp)
189 m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
190}
191
Jim Ingham574c3d62011-08-12 23:34:31 +0000192void
193SBDebugger::SkipAppInitFiles (bool b)
194{
195 if (m_opaque_sp)
196 m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
197}
198
Chris Lattner24943d22010-06-08 16:52:24 +0000199// Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
200// trying to switch modes in the middle of a debugging session.
201void
202SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
203{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000204 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000205
206 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000207 log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
208 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000209
Greg Clayton63094e02010-06-23 01:19:29 +0000210 if (m_opaque_sp)
211 m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000212}
213
214void
215SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
216{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000217 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000218
219
220 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000221 log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
222 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000223
Greg Clayton63094e02010-06-23 01:19:29 +0000224 if (m_opaque_sp)
225 m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000226}
227
228void
229SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
230{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000231 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000232
233
234 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000235 log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
236 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000237
Greg Clayton63094e02010-06-23 01:19:29 +0000238 if (m_opaque_sp)
239 m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000240}
241
242FILE *
243SBDebugger::GetInputFileHandle ()
244{
Greg Clayton63094e02010-06-23 01:19:29 +0000245 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000246 return m_opaque_sp->GetInputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000247 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000248}
249
250FILE *
251SBDebugger::GetOutputFileHandle ()
252{
Greg Clayton63094e02010-06-23 01:19:29 +0000253 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000254 return m_opaque_sp->GetOutputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000255 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000256}
257
258FILE *
259SBDebugger::GetErrorFileHandle ()
260{
Greg Clayton63094e02010-06-23 01:19:29 +0000261 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000262 return m_opaque_sp->GetErrorFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000263 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000264}
265
266SBCommandInterpreter
267SBDebugger::GetCommandInterpreter ()
268{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000269 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000270
Greg Clayton63094e02010-06-23 01:19:29 +0000271 SBCommandInterpreter sb_interpreter;
272 if (m_opaque_sp)
273 sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
Caroline Tice7826c882010-10-26 03:11:13 +0000274
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000275 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000276 log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000277 m_opaque_sp.get(), sb_interpreter.get());
278
Chris Lattner24943d22010-06-08 16:52:24 +0000279 return sb_interpreter;
280}
281
282void
283SBDebugger::HandleCommand (const char *command)
284{
Greg Clayton63094e02010-06-23 01:19:29 +0000285 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000286 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000287 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
288 Mutex::Locker api_locker;
289 if (target_sp)
290 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
291
Greg Clayton63094e02010-06-23 01:19:29 +0000292 SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
293 SBCommandReturnObject result;
294
295 sb_interpreter.HandleCommand (command, result, false);
296
297 if (GetErrorFileHandle() != NULL)
298 result.PutError (GetErrorFileHandle());
299 if (GetOutputFileHandle() != NULL)
300 result.PutOutput (GetOutputFileHandle());
301
302 if (m_opaque_sp->GetAsyncExecution() == false)
Chris Lattner24943d22010-06-08 16:52:24 +0000303 {
Greg Clayton63094e02010-06-23 01:19:29 +0000304 SBProcess process(GetCommandInterpreter().GetProcess ());
305 if (process.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000306 {
Greg Clayton63094e02010-06-23 01:19:29 +0000307 EventSP event_sp;
308 Listener &lldb_listener = m_opaque_sp->GetListener();
309 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
310 {
311 SBEvent event(event_sp);
312 HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
313 }
Chris Lattner24943d22010-06-08 16:52:24 +0000314 }
315 }
316 }
317}
318
319SBListener
320SBDebugger::GetListener ()
321{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000322 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000323
Greg Clayton63094e02010-06-23 01:19:29 +0000324 SBListener sb_listener;
325 if (m_opaque_sp)
326 sb_listener.reset(&m_opaque_sp->GetListener(), false);
Caroline Tice7826c882010-10-26 03:11:13 +0000327
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000328 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000329 log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000330 sb_listener.get());
331
Chris Lattner24943d22010-06-08 16:52:24 +0000332 return sb_listener;
333}
334
335void
336SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
337{
Greg Claytonbdcda462010-12-20 20:49:23 +0000338 if (!process.IsValid())
339 return;
Chris Lattner24943d22010-06-08 16:52:24 +0000340
Greg Claytonbdcda462010-12-20 20:49:23 +0000341 const uint32_t event_type = event.GetType();
342 char stdio_buffer[1024];
343 size_t len;
Chris Lattner24943d22010-06-08 16:52:24 +0000344
Greg Claytonbdcda462010-12-20 20:49:23 +0000345 Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex());
346
347 if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
Chris Lattner24943d22010-06-08 16:52:24 +0000348 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000349 // Drain stdout when we stop just in case we have any bytes
350 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
351 if (out != NULL)
352 ::fwrite (stdio_buffer, 1, len, out);
353 }
354
355 if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
356 {
357 // Drain stderr when we stop just in case we have any bytes
358 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
359 if (err != NULL)
360 ::fwrite (stdio_buffer, 1, len, err);
361 }
362
363 if (event_type & Process::eBroadcastBitStateChanged)
364 {
365 StateType event_state = SBProcess::GetStateFromEvent (event);
366
367 if (event_state == eStateInvalid)
368 return;
369
370 bool is_stopped = StateIsStoppedState (event_state);
371 if (!is_stopped)
372 process.ReportEventState (event, out);
Chris Lattner24943d22010-06-08 16:52:24 +0000373 }
374}
375
Jim Inghamcc637462011-09-13 00:29:56 +0000376SBSourceManager
Chris Lattner24943d22010-06-08 16:52:24 +0000377SBDebugger::GetSourceManager ()
378{
Jim Inghamcc637462011-09-13 00:29:56 +0000379 SBSourceManager sb_source_manager (*this);
380 return sb_source_manager;
Chris Lattner24943d22010-06-08 16:52:24 +0000381}
382
383
384bool
385SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
386{
387 if (arch_name && arch_name_len)
388 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000389 ArchSpec default_arch = Target::GetDefaultArchitecture ();
Caroline Tice5bc8c972010-09-20 20:44:43 +0000390
Chris Lattner24943d22010-06-08 16:52:24 +0000391 if (default_arch.IsValid())
392 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000393 const std::string &triple_str = default_arch.GetTriple().str();
394 if (!triple_str.empty())
395 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
396 else
397 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
Chris Lattner24943d22010-06-08 16:52:24 +0000398 return true;
399 }
400 }
401 if (arch_name && arch_name_len)
402 arch_name[0] = '\0';
403 return false;
404}
405
406
407bool
408SBDebugger::SetDefaultArchitecture (const char *arch_name)
409{
410 if (arch_name)
411 {
Greg Claytonf15996e2011-04-07 22:46:35 +0000412 ArchSpec arch (arch_name, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000413 if (arch.IsValid())
414 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000415 Target::SetDefaultArchitecture (arch);
Chris Lattner24943d22010-06-08 16:52:24 +0000416 return true;
417 }
418 }
419 return false;
420}
421
422ScriptLanguage
423SBDebugger::GetScriptingLanguage (const char *script_language_name)
424{
Greg Claytonbdcda462010-12-20 20:49:23 +0000425
Chris Lattner24943d22010-06-08 16:52:24 +0000426 return Args::StringToScriptLanguage (script_language_name,
427 eScriptLanguageDefault,
428 NULL);
429}
Chris Lattner24943d22010-06-08 16:52:24 +0000430
431const char *
432SBDebugger::GetVersionString ()
433{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000434 return GetVersion();
Chris Lattner24943d22010-06-08 16:52:24 +0000435}
436
437const char *
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000438SBDebugger::StateAsCString (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000439{
Caroline Ticea2cffd32011-04-25 22:05:51 +0000440 return lldb_private::StateAsCString (state);
Chris Lattner24943d22010-06-08 16:52:24 +0000441}
442
443bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000444SBDebugger::StateIsRunningState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000445{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000446 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000447
Caroline Ticea2cffd32011-04-25 22:05:51 +0000448 const bool result = lldb_private::StateIsRunningState (state);
Greg Claytona66ba462010-10-30 04:51:46 +0000449 if (log)
450 log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000451 StateAsCString (state), result);
Greg Claytona66ba462010-10-30 04:51:46 +0000452
453 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000454}
455
456bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000457SBDebugger::StateIsStoppedState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000458{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000459 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000460
Greg Clayton20206082011-11-17 01:23:07 +0000461 const bool result = lldb_private::StateIsStoppedState (state, false);
Caroline Tice7826c882010-10-26 03:11:13 +0000462 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000463 log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000464 StateAsCString (state), result);
Caroline Tice7826c882010-10-26 03:11:13 +0000465
Greg Claytona66ba462010-10-30 04:51:46 +0000466 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000467}
468
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000469lldb::SBTarget
470SBDebugger::CreateTarget (const char *filename,
471 const char *target_triple,
472 const char *platform_name,
473 bool add_dependent_modules,
474 lldb::SBError& sb_error)
475{
476 SBTarget sb_target;
477 if (m_opaque_sp)
478 {
479 sb_error.Clear();
480 FileSpec filename_spec (filename, true);
481 OptionGroupPlatform platform_options (false);
482 platform_options.SetPlatformName (platform_name);
483
484 TargetSP target_sp;
485 sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
486 filename_spec,
487 target_triple,
488 add_dependent_modules,
489 &platform_options,
490 target_sp);
491
492 if (sb_error.Success())
493 sb_target.reset (target_sp);
494 }
495 else
496 {
497 sb_error.SetErrorString("invalid target");
498 }
499
500 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
501 if (log)
502 {
503 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)",
504 m_opaque_sp.get(),
505 filename,
506 target_triple,
507 platform_name,
508 add_dependent_modules,
509 sb_error.GetCString(),
510 sb_target.get());
511 }
512
513 return sb_target;
514}
Chris Lattner24943d22010-06-08 16:52:24 +0000515
516SBTarget
517SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
518 const char *target_triple)
519{
Greg Clayton63094e02010-06-23 01:19:29 +0000520 SBTarget target;
521 if (m_opaque_sp)
522 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000523 FileSpec file_spec (filename, true);
Greg Clayton63094e02010-06-23 01:19:29 +0000524 TargetSP target_sp;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000525 const bool add_dependent_modules = true;
526 Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
527 file_spec,
528 target_triple,
529 add_dependent_modules,
530 NULL,
531 target_sp));
Greg Clayton63094e02010-06-23 01:19:29 +0000532 target.reset (target_sp);
533 }
Greg Claytona66ba462010-10-30 04:51:46 +0000534
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000535 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000536 if (log)
537 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000538 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000539 m_opaque_sp.get(), filename, target_triple, target.get());
540 }
541
Chris Lattner24943d22010-06-08 16:52:24 +0000542 return target;
543}
544
545SBTarget
Greg Clayton940b1032011-02-23 00:35:02 +0000546SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
Chris Lattner24943d22010-06-08 16:52:24 +0000547{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000548 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000549
Greg Clayton63094e02010-06-23 01:19:29 +0000550 SBTarget target;
551 if (m_opaque_sp)
552 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000553 FileSpec file (filename, true);
Greg Clayton63094e02010-06-23 01:19:29 +0000554 TargetSP target_sp;
555 Error error;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000556 const bool add_dependent_modules = true;
Chris Lattner24943d22010-06-08 16:52:24 +0000557
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000558 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
559 file,
560 arch_cstr,
561 add_dependent_modules,
562 NULL,
563 target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000564
565 if (error.Success())
566 {
Jim Inghamc8332952010-08-26 21:32:51 +0000567 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000568 target.reset(target_sp);
569 }
Chris Lattner24943d22010-06-08 16:52:24 +0000570 }
Caroline Tice7826c882010-10-26 03:11:13 +0000571
572 if (log)
573 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000574 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
Greg Clayton940b1032011-02-23 00:35:02 +0000575 m_opaque_sp.get(), filename, arch_cstr, target.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000576 }
577
Greg Clayton63094e02010-06-23 01:19:29 +0000578 return target;
579}
580
581SBTarget
582SBDebugger::CreateTarget (const char *filename)
583{
584 SBTarget target;
585 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000586 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000587 FileSpec file (filename, true);
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000588 ArchSpec arch = Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000589 TargetSP target_sp;
590 Error error;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000591 const bool add_dependent_modules = true;
Greg Clayton63094e02010-06-23 01:19:29 +0000592
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000593 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
594 file,
595 arch,
596 add_dependent_modules,
597 m_opaque_sp->GetPlatformList().GetSelectedPlatform(),
598 target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000599
600 if (error.Success())
601 {
Jim Inghamc8332952010-08-26 21:32:51 +0000602 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000603 target.reset (target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000604 }
605 }
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000606 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000607 if (log)
608 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000609 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000610 m_opaque_sp.get(), filename, target.get());
611 }
Greg Clayton63094e02010-06-23 01:19:29 +0000612 return target;
Chris Lattner24943d22010-06-08 16:52:24 +0000613}
614
Johnny Chen409646d2011-06-15 21:24:24 +0000615bool
616SBDebugger::DeleteTarget (lldb::SBTarget &target)
617{
618 bool result = false;
619 if (m_opaque_sp)
620 {
621 // No need to lock, the target list is thread safe
622 result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp);
Greg Claytonf29d7f22011-09-30 04:14:52 +0000623 target->Destroy();
Greg Claytond65593d2011-09-30 03:29:05 +0000624 target.Clear();
625 ModuleList::RemoveOrphanSharedModules();
Johnny Chen409646d2011-06-15 21:24:24 +0000626 }
627
628 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
629 if (log)
630 {
631 log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
632 }
633
634 return result;
635}
Chris Lattner24943d22010-06-08 16:52:24 +0000636SBTarget
637SBDebugger::GetTargetAtIndex (uint32_t idx)
638{
Greg Clayton63094e02010-06-23 01:19:29 +0000639 SBTarget sb_target;
640 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000641 {
642 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000643 sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
Greg Claytonbdcda462010-12-20 20:49:23 +0000644 }
Chris Lattner24943d22010-06-08 16:52:24 +0000645 return sb_target;
646}
647
648SBTarget
649SBDebugger::FindTargetWithProcessID (pid_t pid)
650{
Greg Clayton63094e02010-06-23 01:19:29 +0000651 SBTarget sb_target;
652 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000653 {
654 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000655 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
Greg Claytonbdcda462010-12-20 20:49:23 +0000656 }
Chris Lattner24943d22010-06-08 16:52:24 +0000657 return sb_target;
658}
659
660SBTarget
661SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
662{
Greg Clayton63094e02010-06-23 01:19:29 +0000663 SBTarget sb_target;
664 if (m_opaque_sp && filename && filename[0])
665 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000666 // No need to lock, the target list is thread safe
Greg Claytonf15996e2011-04-07 22:46:35 +0000667 ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton537a7a82010-10-20 20:54:39 +0000668 TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
Greg Clayton63094e02010-06-23 01:19:29 +0000669 sb_target.reset(target_sp);
670 }
671 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000672}
673
674SBTarget
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000675SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000676{
Greg Clayton63094e02010-06-23 01:19:29 +0000677 SBTarget sb_target;
678 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000679 {
680 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000681 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
Greg Claytonbdcda462010-12-20 20:49:23 +0000682 }
Chris Lattner24943d22010-06-08 16:52:24 +0000683 return sb_target;
684}
685
686
687uint32_t
688SBDebugger::GetNumTargets ()
689{
Greg Clayton63094e02010-06-23 01:19:29 +0000690 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000691 {
692 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000693 return m_opaque_sp->GetTargetList().GetNumTargets ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000694 }
Greg Clayton63094e02010-06-23 01:19:29 +0000695 return 0;
696}
Chris Lattner24943d22010-06-08 16:52:24 +0000697
698SBTarget
Jim Inghamc8332952010-08-26 21:32:51 +0000699SBDebugger::GetSelectedTarget ()
Chris Lattner24943d22010-06-08 16:52:24 +0000700{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000701 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000702
Greg Clayton63094e02010-06-23 01:19:29 +0000703 SBTarget sb_target;
704 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000705 {
706 // No need to lock, the target list is thread safe
Jim Inghamc8332952010-08-26 21:32:51 +0000707 sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
Greg Claytonbdcda462010-12-20 20:49:23 +0000708 }
Caroline Tice7826c882010-10-26 03:11:13 +0000709
710 if (log)
711 {
712 SBStream sstr;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000713 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000714 log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000715 sb_target.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000716 }
717
Chris Lattner24943d22010-06-08 16:52:24 +0000718 return sb_target;
719}
720
721void
Jim Ingham83dd2032011-09-13 23:25:31 +0000722SBDebugger::SetSelectedTarget (SBTarget &sb_target)
723{
724 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
725
726 if (m_opaque_sp)
727 {
728 m_opaque_sp->GetTargetList().SetSelectedTarget (sb_target.get());
729 }
730 if (log)
731 {
732 SBStream sstr;
733 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
734 log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
735 sb_target.get(), sstr.GetData());
736 }
737}
738
739void
Chris Lattner24943d22010-06-08 16:52:24 +0000740SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
741{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000742 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000743
744 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000745 log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
746 baton, (int) data_len, (const char *) data, data_len);
Caroline Tice7826c882010-10-26 03:11:13 +0000747
Greg Clayton63094e02010-06-23 01:19:29 +0000748 if (m_opaque_sp)
749 m_opaque_sp->DispatchInput ((const char *) data, data_len);
Chris Lattner24943d22010-06-08 16:52:24 +0000750}
751
752void
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000753SBDebugger::DispatchInputInterrupt ()
754{
755 if (m_opaque_sp)
756 m_opaque_sp->DispatchInputInterrupt ();
757}
758
759void
760SBDebugger::DispatchInputEndOfFile ()
761{
762 if (m_opaque_sp)
763 m_opaque_sp->DispatchInputEndOfFile ();
764}
Caroline Ticeb38df1e2011-05-09 23:06:58 +0000765
766bool
767SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
768{
769 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
770
771 if (log)
772 log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
773
774 if (m_opaque_sp && reader.IsValid())
775 {
776 InputReaderSP reader_sp (*reader);
777 return m_opaque_sp->InputReaderIsTopReader (reader_sp);
778 }
779
780 return false;
781}
782
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000783
784void
Chris Lattner24943d22010-06-08 16:52:24 +0000785SBDebugger::PushInputReader (SBInputReader &reader)
786{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000787 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000788
789 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000790 log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
Caroline Tice7826c882010-10-26 03:11:13 +0000791
Greg Clayton63094e02010-06-23 01:19:29 +0000792 if (m_opaque_sp && reader.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000793 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000794 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
795 Mutex::Locker api_locker;
796 if (target_sp)
797 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
Chris Lattner24943d22010-06-08 16:52:24 +0000798 InputReaderSP reader_sp(*reader);
Greg Clayton63094e02010-06-23 01:19:29 +0000799 m_opaque_sp->PushInputReader (reader_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000800 }
801}
Greg Clayton63094e02010-06-23 01:19:29 +0000802
803void
Caroline Tice4a348082011-05-02 20:41:46 +0000804SBDebugger::NotifyTopInputReader (InputReaderAction notification)
805{
806 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
807
808 if (log)
809 log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
810
811 if (m_opaque_sp)
812 m_opaque_sp->NotifyTopInputReader (notification);
813}
814
815void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000816SBDebugger::reset (const DebuggerSP &debugger_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000817{
818 m_opaque_sp = debugger_sp;
819}
820
821Debugger *
822SBDebugger::get () const
823{
824 return m_opaque_sp.get();
825}
826
827Debugger &
828SBDebugger::ref () const
829{
830 assert (m_opaque_sp.get());
831 return *m_opaque_sp;
832}
833
Greg Clayton15afa9f2011-10-01 02:59:24 +0000834const lldb::DebuggerSP &
835SBDebugger::get_sp () const
836{
837 return m_opaque_sp;
838}
Greg Clayton63094e02010-06-23 01:19:29 +0000839
Caroline Tice558be582010-06-30 16:22:25 +0000840SBDebugger
841SBDebugger::FindDebuggerWithID (int id)
842{
Greg Claytonbdcda462010-12-20 20:49:23 +0000843 // No need to lock, the debugger list is thread safe
Caroline Tice558be582010-06-30 16:22:25 +0000844 SBDebugger sb_debugger;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000845 DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
Caroline Tice558be582010-06-30 16:22:25 +0000846 if (debugger_sp)
847 sb_debugger.reset (debugger_sp);
848 return sb_debugger;
849}
Jim Ingham74989e82010-08-30 19:44:40 +0000850
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000851const char *
852SBDebugger::GetInstanceName()
853{
854 if (m_opaque_sp)
855 return m_opaque_sp->GetInstanceName().AsCString();
856 else
857 return NULL;
858}
859
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000860SBError
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000861SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000862{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000863 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000864
Greg Claytonb3448432011-03-24 21:19:54 +0000865 Error err = root_settings_controller->SetVariable (var_name,
866 value,
867 eVarSetOperationAssign,
868 true,
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000869 debugger_instance_name);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000870 SBError sb_error;
871 sb_error.SetError (err);
872
873 return sb_error;
874}
875
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000876SBStringList
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000877SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000878{
879 SBStringList ret_value;
Greg Claytonb3448432011-03-24 21:19:54 +0000880 SettableVariableType var_type;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000881 Error err;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000882
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000883 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000884
Caroline Tice5bc8c972010-09-20 20:44:43 +0000885 StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
886
887 if (err.Success())
888 {
889 for (unsigned i = 0; i != value.GetSize(); ++i)
890 ret_value.AppendString (value.GetStringAtIndex(i));
891 }
892 else
893 {
894 ret_value.AppendString (err.AsCString());
895 }
896
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000897
898 return ret_value;
899}
900
Greg Clayton238c0a12010-09-18 01:14:36 +0000901uint32_t
902SBDebugger::GetTerminalWidth () const
903{
904 if (m_opaque_sp)
905 return m_opaque_sp->GetTerminalWidth ();
906 return 0;
907}
908
909void
910SBDebugger::SetTerminalWidth (uint32_t term_width)
911{
912 if (m_opaque_sp)
913 m_opaque_sp->SetTerminalWidth (term_width);
914}
915
916const char *
917SBDebugger::GetPrompt() const
918{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000919 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000920
921 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000922 log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000923 (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
Caroline Tice7826c882010-10-26 03:11:13 +0000924
Greg Clayton238c0a12010-09-18 01:14:36 +0000925 if (m_opaque_sp)
926 return m_opaque_sp->GetPrompt ();
927 return 0;
928}
929
930void
931SBDebugger::SetPrompt (const char *prompt)
932{
933 if (m_opaque_sp)
934 m_opaque_sp->SetPrompt (prompt);
935}
936
937
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000938ScriptLanguage
Greg Clayton238c0a12010-09-18 01:14:36 +0000939SBDebugger::GetScriptLanguage() const
940{
941 if (m_opaque_sp)
942 return m_opaque_sp->GetScriptLanguage ();
943 return eScriptLanguageNone;
944}
945
946void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000947SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
Greg Clayton238c0a12010-09-18 01:14:36 +0000948{
949 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000950 {
Greg Clayton238c0a12010-09-18 01:14:36 +0000951 m_opaque_sp->SetScriptLanguage (script_lang);
Greg Claytonbdcda462010-12-20 20:49:23 +0000952 }
Greg Clayton238c0a12010-09-18 01:14:36 +0000953}
954
Jim Ingham74989e82010-08-30 19:44:40 +0000955bool
956SBDebugger::SetUseExternalEditor (bool value)
957{
958 if (m_opaque_sp)
959 return m_opaque_sp->SetUseExternalEditor (value);
Greg Claytonbdcda462010-12-20 20:49:23 +0000960 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000961}
962
963bool
Caroline Tice5bc8c972010-09-20 20:44:43 +0000964SBDebugger::GetUseExternalEditor ()
Jim Ingham74989e82010-08-30 19:44:40 +0000965{
966 if (m_opaque_sp)
Caroline Tice5bc8c972010-09-20 20:44:43 +0000967 return m_opaque_sp->GetUseExternalEditor ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000968 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000969}
970
Caroline Tice98f930f2010-09-20 05:20:02 +0000971bool
972SBDebugger::GetDescription (SBStream &description)
973{
Greg Clayton96154be2011-11-13 06:57:31 +0000974 Stream &strm = description.ref();
975
Caroline Tice98f930f2010-09-20 05:20:02 +0000976 if (m_opaque_sp)
977 {
978 const char *name = m_opaque_sp->GetInstanceName().AsCString();
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000979 user_id_t id = m_opaque_sp->GetID();
Greg Clayton96154be2011-11-13 06:57:31 +0000980 strm.Printf ("Debugger (instance: \"%s\", id: %llu)", name, id);
Caroline Tice98f930f2010-09-20 05:20:02 +0000981 }
982 else
Greg Clayton96154be2011-11-13 06:57:31 +0000983 strm.PutCString ("No value");
Caroline Tice98f930f2010-09-20 05:20:02 +0000984
985 return true;
986}
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000987
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000988user_id_t
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000989SBDebugger::GetID()
990{
991 if (m_opaque_sp)
992 return m_opaque_sp->GetID();
993 return LLDB_INVALID_UID;
994}
Greg Clayton180546b2011-04-30 01:09:13 +0000995
996
997SBError
998SBDebugger::SetCurrentPlatform (const char *platform_name)
999{
1000 SBError sb_error;
1001 if (m_opaque_sp)
1002 {
1003 PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
1004
1005 if (platform_sp)
1006 {
1007 bool make_selected = true;
1008 m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
1009 }
1010 }
1011 return sb_error;
1012}
1013
Greg Clayton421ca502011-05-29 04:06:55 +00001014bool
Greg Clayton604f0d32011-06-17 03:31:01 +00001015SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
1016{
1017 if (m_opaque_sp)
1018 {
1019 PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1020
1021 if (platform_sp)
1022 {
1023 platform_sp->SetSDKRootDirectory (ConstString (sysroot));
1024 return true;
1025 }
1026 }
1027 return false;
1028}
1029
1030bool
Greg Clayton421ca502011-05-29 04:06:55 +00001031SBDebugger::GetCloseInputOnEOF () const
1032{
1033 if (m_opaque_sp)
1034 return m_opaque_sp->GetCloseInputOnEOF ();
1035 return false;
1036}
1037
1038void
1039SBDebugger::SetCloseInputOnEOF (bool b)
1040{
1041 if (m_opaque_sp)
1042 m_opaque_sp->SetCloseInputOnEOF (b);
1043}