blob: b8be227f557f1f6a1f8188e07ed8b4bef4a7b60b [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 Clayton63094e02010-06-23 01:19:29 +0000127SBDebugger::SBDebugger () :
128 m_opaque_sp ()
129{
130}
131
Enrico Granata3370f0c2011-08-19 23:56:34 +0000132SBDebugger::SBDebugger(const lldb::DebuggerSP &debugger_sp) :
133 m_opaque_sp(debugger_sp)
134{
135}
136
Greg Clayton538eb822010-11-05 23:17:00 +0000137SBDebugger::SBDebugger(const SBDebugger &rhs) :
138 m_opaque_sp (rhs.m_opaque_sp)
139{
140}
141
142SBDebugger &
143SBDebugger::operator = (const SBDebugger &rhs)
144{
145 if (this != &rhs)
146 {
147 m_opaque_sp = rhs.m_opaque_sp;
148 }
149 return *this;
150}
151
Greg Clayton63094e02010-06-23 01:19:29 +0000152SBDebugger::~SBDebugger ()
153{
154}
155
156bool
157SBDebugger::IsValid() const
158{
159 return m_opaque_sp.get() != NULL;
160}
161
162
Chris Lattner24943d22010-06-08 16:52:24 +0000163void
164SBDebugger::SetAsync (bool b)
165{
Greg Clayton63094e02010-06-23 01:19:29 +0000166 if (m_opaque_sp)
167 m_opaque_sp->SetAsyncExecution(b);
Chris Lattner24943d22010-06-08 16:52:24 +0000168}
169
Jim Ingham83dd2032011-09-13 23:25:31 +0000170bool
171SBDebugger::GetAsync ()
172{
173 if (m_opaque_sp)
174 return m_opaque_sp->GetAsyncExecution();
175 else
176 return false;
177}
178
Greg Clayton887aa282010-10-11 01:05:37 +0000179void
180SBDebugger::SkipLLDBInitFiles (bool b)
181{
182 if (m_opaque_sp)
183 m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
184}
185
Jim Ingham574c3d62011-08-12 23:34:31 +0000186void
187SBDebugger::SkipAppInitFiles (bool b)
188{
189 if (m_opaque_sp)
190 m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
191}
192
Chris Lattner24943d22010-06-08 16:52:24 +0000193// Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
194// trying to switch modes in the middle of a debugging session.
195void
196SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
197{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000198 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000199
200 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000201 log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
202 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000203
Greg Clayton63094e02010-06-23 01:19:29 +0000204 if (m_opaque_sp)
205 m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000206}
207
208void
209SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
210{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000211 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000212
213
214 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000215 log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
216 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000217
Greg Clayton63094e02010-06-23 01:19:29 +0000218 if (m_opaque_sp)
219 m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000220}
221
222void
223SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
224{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000225 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000226
227
228 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000229 log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
230 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000231
Greg Clayton63094e02010-06-23 01:19:29 +0000232 if (m_opaque_sp)
233 m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000234}
235
236FILE *
237SBDebugger::GetInputFileHandle ()
238{
Greg Clayton63094e02010-06-23 01:19:29 +0000239 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000240 return m_opaque_sp->GetInputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000241 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000242}
243
244FILE *
245SBDebugger::GetOutputFileHandle ()
246{
Greg Clayton63094e02010-06-23 01:19:29 +0000247 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000248 return m_opaque_sp->GetOutputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000249 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000250}
251
252FILE *
253SBDebugger::GetErrorFileHandle ()
254{
Greg Clayton63094e02010-06-23 01:19:29 +0000255 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000256 return m_opaque_sp->GetErrorFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000257 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000258}
259
260SBCommandInterpreter
261SBDebugger::GetCommandInterpreter ()
262{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000263 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000264
Greg Clayton63094e02010-06-23 01:19:29 +0000265 SBCommandInterpreter sb_interpreter;
266 if (m_opaque_sp)
267 sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
Caroline Tice7826c882010-10-26 03:11:13 +0000268
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000269 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000270 log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000271 m_opaque_sp.get(), sb_interpreter.get());
272
Chris Lattner24943d22010-06-08 16:52:24 +0000273 return sb_interpreter;
274}
275
276void
277SBDebugger::HandleCommand (const char *command)
278{
Greg Clayton63094e02010-06-23 01:19:29 +0000279 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000280 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000281 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
282 Mutex::Locker api_locker;
283 if (target_sp)
284 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
285
Greg Clayton63094e02010-06-23 01:19:29 +0000286 SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
287 SBCommandReturnObject result;
288
289 sb_interpreter.HandleCommand (command, result, false);
290
291 if (GetErrorFileHandle() != NULL)
292 result.PutError (GetErrorFileHandle());
293 if (GetOutputFileHandle() != NULL)
294 result.PutOutput (GetOutputFileHandle());
295
296 if (m_opaque_sp->GetAsyncExecution() == false)
Chris Lattner24943d22010-06-08 16:52:24 +0000297 {
Greg Clayton63094e02010-06-23 01:19:29 +0000298 SBProcess process(GetCommandInterpreter().GetProcess ());
299 if (process.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000300 {
Greg Clayton63094e02010-06-23 01:19:29 +0000301 EventSP event_sp;
302 Listener &lldb_listener = m_opaque_sp->GetListener();
303 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
304 {
305 SBEvent event(event_sp);
306 HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
307 }
Chris Lattner24943d22010-06-08 16:52:24 +0000308 }
309 }
310 }
311}
312
313SBListener
314SBDebugger::GetListener ()
315{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000316 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000317
Greg Clayton63094e02010-06-23 01:19:29 +0000318 SBListener sb_listener;
319 if (m_opaque_sp)
320 sb_listener.reset(&m_opaque_sp->GetListener(), false);
Caroline Tice7826c882010-10-26 03:11:13 +0000321
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000322 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000323 log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000324 sb_listener.get());
325
Chris Lattner24943d22010-06-08 16:52:24 +0000326 return sb_listener;
327}
328
329void
330SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
331{
Greg Claytonbdcda462010-12-20 20:49:23 +0000332 if (!process.IsValid())
333 return;
Chris Lattner24943d22010-06-08 16:52:24 +0000334
Greg Claytonbdcda462010-12-20 20:49:23 +0000335 const uint32_t event_type = event.GetType();
336 char stdio_buffer[1024];
337 size_t len;
Chris Lattner24943d22010-06-08 16:52:24 +0000338
Greg Claytonbdcda462010-12-20 20:49:23 +0000339 Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex());
340
341 if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
Chris Lattner24943d22010-06-08 16:52:24 +0000342 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000343 // Drain stdout when we stop just in case we have any bytes
344 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
345 if (out != NULL)
346 ::fwrite (stdio_buffer, 1, len, out);
347 }
348
349 if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
350 {
351 // Drain stderr when we stop just in case we have any bytes
352 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
353 if (err != NULL)
354 ::fwrite (stdio_buffer, 1, len, err);
355 }
356
357 if (event_type & Process::eBroadcastBitStateChanged)
358 {
359 StateType event_state = SBProcess::GetStateFromEvent (event);
360
361 if (event_state == eStateInvalid)
362 return;
363
364 bool is_stopped = StateIsStoppedState (event_state);
365 if (!is_stopped)
366 process.ReportEventState (event, out);
Chris Lattner24943d22010-06-08 16:52:24 +0000367 }
368}
369
Jim Inghamcc637462011-09-13 00:29:56 +0000370SBSourceManager
Chris Lattner24943d22010-06-08 16:52:24 +0000371SBDebugger::GetSourceManager ()
372{
Jim Inghamcc637462011-09-13 00:29:56 +0000373 SBSourceManager sb_source_manager (*this);
374 return sb_source_manager;
Chris Lattner24943d22010-06-08 16:52:24 +0000375}
376
377
378bool
379SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
380{
381 if (arch_name && arch_name_len)
382 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000383 ArchSpec default_arch = Target::GetDefaultArchitecture ();
Caroline Tice5bc8c972010-09-20 20:44:43 +0000384
Chris Lattner24943d22010-06-08 16:52:24 +0000385 if (default_arch.IsValid())
386 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000387 const std::string &triple_str = default_arch.GetTriple().str();
388 if (!triple_str.empty())
389 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
390 else
391 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
Chris Lattner24943d22010-06-08 16:52:24 +0000392 return true;
393 }
394 }
395 if (arch_name && arch_name_len)
396 arch_name[0] = '\0';
397 return false;
398}
399
400
401bool
402SBDebugger::SetDefaultArchitecture (const char *arch_name)
403{
404 if (arch_name)
405 {
Greg Claytonf15996e2011-04-07 22:46:35 +0000406 ArchSpec arch (arch_name, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000407 if (arch.IsValid())
408 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000409 Target::SetDefaultArchitecture (arch);
Chris Lattner24943d22010-06-08 16:52:24 +0000410 return true;
411 }
412 }
413 return false;
414}
415
416ScriptLanguage
417SBDebugger::GetScriptingLanguage (const char *script_language_name)
418{
Greg Claytonbdcda462010-12-20 20:49:23 +0000419
Chris Lattner24943d22010-06-08 16:52:24 +0000420 return Args::StringToScriptLanguage (script_language_name,
421 eScriptLanguageDefault,
422 NULL);
423}
Chris Lattner24943d22010-06-08 16:52:24 +0000424
425const char *
426SBDebugger::GetVersionString ()
427{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000428 return GetVersion();
Chris Lattner24943d22010-06-08 16:52:24 +0000429}
430
431const char *
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000432SBDebugger::StateAsCString (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000433{
Caroline Ticea2cffd32011-04-25 22:05:51 +0000434 return lldb_private::StateAsCString (state);
Chris Lattner24943d22010-06-08 16:52:24 +0000435}
436
437bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000438SBDebugger::StateIsRunningState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000439{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000440 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000441
Caroline Ticea2cffd32011-04-25 22:05:51 +0000442 const bool result = lldb_private::StateIsRunningState (state);
Greg Claytona66ba462010-10-30 04:51:46 +0000443 if (log)
444 log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000445 StateAsCString (state), result);
Greg Claytona66ba462010-10-30 04:51:46 +0000446
447 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000448}
449
450bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000451SBDebugger::StateIsStoppedState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000452{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000453 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000454
Greg Clayton20206082011-11-17 01:23:07 +0000455 const bool result = lldb_private::StateIsStoppedState (state, false);
Caroline Tice7826c882010-10-26 03:11:13 +0000456 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000457 log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000458 StateAsCString (state), result);
Caroline Tice7826c882010-10-26 03:11:13 +0000459
Greg Claytona66ba462010-10-30 04:51:46 +0000460 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000461}
462
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000463lldb::SBTarget
464SBDebugger::CreateTarget (const char *filename,
465 const char *target_triple,
466 const char *platform_name,
467 bool add_dependent_modules,
468 lldb::SBError& sb_error)
469{
470 SBTarget sb_target;
471 if (m_opaque_sp)
472 {
473 sb_error.Clear();
474 FileSpec filename_spec (filename, true);
475 OptionGroupPlatform platform_options (false);
476 platform_options.SetPlatformName (platform_name);
477
478 TargetSP target_sp;
479 sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
480 filename_spec,
481 target_triple,
482 add_dependent_modules,
483 &platform_options,
484 target_sp);
485
486 if (sb_error.Success())
487 sb_target.reset (target_sp);
488 }
489 else
490 {
491 sb_error.SetErrorString("invalid target");
492 }
493
494 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
495 if (log)
496 {
497 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)",
498 m_opaque_sp.get(),
499 filename,
500 target_triple,
501 platform_name,
502 add_dependent_modules,
503 sb_error.GetCString(),
504 sb_target.get());
505 }
506
507 return sb_target;
508}
Chris Lattner24943d22010-06-08 16:52:24 +0000509
510SBTarget
511SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
512 const char *target_triple)
513{
Greg Clayton63094e02010-06-23 01:19:29 +0000514 SBTarget target;
515 if (m_opaque_sp)
516 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000517 FileSpec file_spec (filename, true);
Greg Clayton63094e02010-06-23 01:19:29 +0000518 TargetSP target_sp;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000519 const bool add_dependent_modules = true;
520 Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
521 file_spec,
522 target_triple,
523 add_dependent_modules,
524 NULL,
525 target_sp));
Greg Clayton63094e02010-06-23 01:19:29 +0000526 target.reset (target_sp);
527 }
Greg Claytona66ba462010-10-30 04:51:46 +0000528
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000529 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000530 if (log)
531 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000532 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000533 m_opaque_sp.get(), filename, target_triple, target.get());
534 }
535
Chris Lattner24943d22010-06-08 16:52:24 +0000536 return target;
537}
538
539SBTarget
Greg Clayton940b1032011-02-23 00:35:02 +0000540SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
Chris Lattner24943d22010-06-08 16:52:24 +0000541{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000542 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000543
Greg Clayton63094e02010-06-23 01:19:29 +0000544 SBTarget target;
545 if (m_opaque_sp)
546 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000547 FileSpec file (filename, true);
Greg Clayton63094e02010-06-23 01:19:29 +0000548 TargetSP target_sp;
549 Error error;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000550 const bool add_dependent_modules = true;
Chris Lattner24943d22010-06-08 16:52:24 +0000551
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000552 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
553 file,
554 arch_cstr,
555 add_dependent_modules,
556 NULL,
557 target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000558
559 if (error.Success())
560 {
Jim Inghamc8332952010-08-26 21:32:51 +0000561 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000562 target.reset(target_sp);
563 }
Chris Lattner24943d22010-06-08 16:52:24 +0000564 }
Caroline Tice7826c882010-10-26 03:11:13 +0000565
566 if (log)
567 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000568 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
Greg Clayton940b1032011-02-23 00:35:02 +0000569 m_opaque_sp.get(), filename, arch_cstr, target.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000570 }
571
Greg Clayton63094e02010-06-23 01:19:29 +0000572 return target;
573}
574
575SBTarget
576SBDebugger::CreateTarget (const char *filename)
577{
578 SBTarget target;
579 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000580 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000581 FileSpec file (filename, true);
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000582 ArchSpec arch = Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000583 TargetSP target_sp;
584 Error error;
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000585 const bool add_dependent_modules = true;
Greg Clayton63094e02010-06-23 01:19:29 +0000586
Greg Clayton3e8c25f2011-09-24 00:52:29 +0000587 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp,
588 file,
589 arch,
590 add_dependent_modules,
591 m_opaque_sp->GetPlatformList().GetSelectedPlatform(),
592 target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000593
594 if (error.Success())
595 {
Jim Inghamc8332952010-08-26 21:32:51 +0000596 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000597 target.reset (target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000598 }
599 }
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000600 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000601 if (log)
602 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000603 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000604 m_opaque_sp.get(), filename, target.get());
605 }
Greg Clayton63094e02010-06-23 01:19:29 +0000606 return target;
Chris Lattner24943d22010-06-08 16:52:24 +0000607}
608
Johnny Chen409646d2011-06-15 21:24:24 +0000609bool
610SBDebugger::DeleteTarget (lldb::SBTarget &target)
611{
612 bool result = false;
613 if (m_opaque_sp)
614 {
615 // No need to lock, the target list is thread safe
616 result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp);
Greg Claytonf29d7f22011-09-30 04:14:52 +0000617 target->Destroy();
Greg Claytond65593d2011-09-30 03:29:05 +0000618 target.Clear();
619 ModuleList::RemoveOrphanSharedModules();
Johnny Chen409646d2011-06-15 21:24:24 +0000620 }
621
622 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
623 if (log)
624 {
625 log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
626 }
627
628 return result;
629}
Chris Lattner24943d22010-06-08 16:52:24 +0000630SBTarget
631SBDebugger::GetTargetAtIndex (uint32_t idx)
632{
Greg Clayton63094e02010-06-23 01:19:29 +0000633 SBTarget sb_target;
634 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000635 {
636 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000637 sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
Greg Claytonbdcda462010-12-20 20:49:23 +0000638 }
Chris Lattner24943d22010-06-08 16:52:24 +0000639 return sb_target;
640}
641
642SBTarget
643SBDebugger::FindTargetWithProcessID (pid_t pid)
644{
Greg Clayton63094e02010-06-23 01:19:29 +0000645 SBTarget sb_target;
646 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000647 {
648 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000649 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
Greg Claytonbdcda462010-12-20 20:49:23 +0000650 }
Chris Lattner24943d22010-06-08 16:52:24 +0000651 return sb_target;
652}
653
654SBTarget
655SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
656{
Greg Clayton63094e02010-06-23 01:19:29 +0000657 SBTarget sb_target;
658 if (m_opaque_sp && filename && filename[0])
659 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000660 // No need to lock, the target list is thread safe
Greg Claytonf15996e2011-04-07 22:46:35 +0000661 ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton537a7a82010-10-20 20:54:39 +0000662 TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
Greg Clayton63094e02010-06-23 01:19:29 +0000663 sb_target.reset(target_sp);
664 }
665 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000666}
667
668SBTarget
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000669SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000670{
Greg Clayton63094e02010-06-23 01:19:29 +0000671 SBTarget sb_target;
672 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000673 {
674 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000675 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
Greg Claytonbdcda462010-12-20 20:49:23 +0000676 }
Chris Lattner24943d22010-06-08 16:52:24 +0000677 return sb_target;
678}
679
680
681uint32_t
682SBDebugger::GetNumTargets ()
683{
Greg Clayton63094e02010-06-23 01:19:29 +0000684 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000685 {
686 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000687 return m_opaque_sp->GetTargetList().GetNumTargets ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000688 }
Greg Clayton63094e02010-06-23 01:19:29 +0000689 return 0;
690}
Chris Lattner24943d22010-06-08 16:52:24 +0000691
692SBTarget
Jim Inghamc8332952010-08-26 21:32:51 +0000693SBDebugger::GetSelectedTarget ()
Chris Lattner24943d22010-06-08 16:52:24 +0000694{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000695 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000696
Greg Clayton63094e02010-06-23 01:19:29 +0000697 SBTarget sb_target;
698 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000699 {
700 // No need to lock, the target list is thread safe
Jim Inghamc8332952010-08-26 21:32:51 +0000701 sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
Greg Claytonbdcda462010-12-20 20:49:23 +0000702 }
Caroline Tice7826c882010-10-26 03:11:13 +0000703
704 if (log)
705 {
706 SBStream sstr;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000707 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000708 log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000709 sb_target.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000710 }
711
Chris Lattner24943d22010-06-08 16:52:24 +0000712 return sb_target;
713}
714
715void
Jim Ingham83dd2032011-09-13 23:25:31 +0000716SBDebugger::SetSelectedTarget (SBTarget &sb_target)
717{
718 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
719
720 if (m_opaque_sp)
721 {
722 m_opaque_sp->GetTargetList().SetSelectedTarget (sb_target.get());
723 }
724 if (log)
725 {
726 SBStream sstr;
727 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
728 log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
729 sb_target.get(), sstr.GetData());
730 }
731}
732
733void
Chris Lattner24943d22010-06-08 16:52:24 +0000734SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
735{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000736 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000737
738 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000739 log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
740 baton, (int) data_len, (const char *) data, data_len);
Caroline Tice7826c882010-10-26 03:11:13 +0000741
Greg Clayton63094e02010-06-23 01:19:29 +0000742 if (m_opaque_sp)
743 m_opaque_sp->DispatchInput ((const char *) data, data_len);
Chris Lattner24943d22010-06-08 16:52:24 +0000744}
745
746void
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000747SBDebugger::DispatchInputInterrupt ()
748{
749 if (m_opaque_sp)
750 m_opaque_sp->DispatchInputInterrupt ();
751}
752
753void
754SBDebugger::DispatchInputEndOfFile ()
755{
756 if (m_opaque_sp)
757 m_opaque_sp->DispatchInputEndOfFile ();
758}
Caroline Ticeb38df1e2011-05-09 23:06:58 +0000759
760bool
761SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
762{
763 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
764
765 if (log)
766 log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
767
768 if (m_opaque_sp && reader.IsValid())
769 {
770 InputReaderSP reader_sp (*reader);
771 return m_opaque_sp->InputReaderIsTopReader (reader_sp);
772 }
773
774 return false;
775}
776
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000777
778void
Chris Lattner24943d22010-06-08 16:52:24 +0000779SBDebugger::PushInputReader (SBInputReader &reader)
780{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000781 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000782
783 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000784 log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
Caroline Tice7826c882010-10-26 03:11:13 +0000785
Greg Clayton63094e02010-06-23 01:19:29 +0000786 if (m_opaque_sp && reader.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000787 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000788 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
789 Mutex::Locker api_locker;
790 if (target_sp)
791 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
Chris Lattner24943d22010-06-08 16:52:24 +0000792 InputReaderSP reader_sp(*reader);
Greg Clayton63094e02010-06-23 01:19:29 +0000793 m_opaque_sp->PushInputReader (reader_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000794 }
795}
Greg Clayton63094e02010-06-23 01:19:29 +0000796
797void
Caroline Tice4a348082011-05-02 20:41:46 +0000798SBDebugger::NotifyTopInputReader (InputReaderAction notification)
799{
800 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
801
802 if (log)
803 log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
804
805 if (m_opaque_sp)
806 m_opaque_sp->NotifyTopInputReader (notification);
807}
808
809void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000810SBDebugger::reset (const DebuggerSP &debugger_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000811{
812 m_opaque_sp = debugger_sp;
813}
814
815Debugger *
816SBDebugger::get () const
817{
818 return m_opaque_sp.get();
819}
820
821Debugger &
822SBDebugger::ref () const
823{
824 assert (m_opaque_sp.get());
825 return *m_opaque_sp;
826}
827
Greg Clayton15afa9f2011-10-01 02:59:24 +0000828const lldb::DebuggerSP &
829SBDebugger::get_sp () const
830{
831 return m_opaque_sp;
832}
Greg Clayton63094e02010-06-23 01:19:29 +0000833
Caroline Tice558be582010-06-30 16:22:25 +0000834SBDebugger
835SBDebugger::FindDebuggerWithID (int id)
836{
Greg Claytonbdcda462010-12-20 20:49:23 +0000837 // No need to lock, the debugger list is thread safe
Caroline Tice558be582010-06-30 16:22:25 +0000838 SBDebugger sb_debugger;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000839 DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
Caroline Tice558be582010-06-30 16:22:25 +0000840 if (debugger_sp)
841 sb_debugger.reset (debugger_sp);
842 return sb_debugger;
843}
Jim Ingham74989e82010-08-30 19:44:40 +0000844
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000845const char *
846SBDebugger::GetInstanceName()
847{
848 if (m_opaque_sp)
849 return m_opaque_sp->GetInstanceName().AsCString();
850 else
851 return NULL;
852}
853
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000854SBError
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000855SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000856{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000857 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000858
Greg Claytonb3448432011-03-24 21:19:54 +0000859 Error err = root_settings_controller->SetVariable (var_name,
860 value,
861 eVarSetOperationAssign,
862 true,
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000863 debugger_instance_name);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000864 SBError sb_error;
865 sb_error.SetError (err);
866
867 return sb_error;
868}
869
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000870SBStringList
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000871SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000872{
873 SBStringList ret_value;
Greg Claytonb3448432011-03-24 21:19:54 +0000874 SettableVariableType var_type;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000875 Error err;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000876
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000877 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000878
Caroline Tice5bc8c972010-09-20 20:44:43 +0000879 StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
880
881 if (err.Success())
882 {
883 for (unsigned i = 0; i != value.GetSize(); ++i)
884 ret_value.AppendString (value.GetStringAtIndex(i));
885 }
886 else
887 {
888 ret_value.AppendString (err.AsCString());
889 }
890
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000891
892 return ret_value;
893}
894
Greg Clayton238c0a12010-09-18 01:14:36 +0000895uint32_t
896SBDebugger::GetTerminalWidth () const
897{
898 if (m_opaque_sp)
899 return m_opaque_sp->GetTerminalWidth ();
900 return 0;
901}
902
903void
904SBDebugger::SetTerminalWidth (uint32_t term_width)
905{
906 if (m_opaque_sp)
907 m_opaque_sp->SetTerminalWidth (term_width);
908}
909
910const char *
911SBDebugger::GetPrompt() const
912{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000913 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000914
915 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000916 log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000917 (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
Caroline Tice7826c882010-10-26 03:11:13 +0000918
Greg Clayton238c0a12010-09-18 01:14:36 +0000919 if (m_opaque_sp)
920 return m_opaque_sp->GetPrompt ();
921 return 0;
922}
923
924void
925SBDebugger::SetPrompt (const char *prompt)
926{
927 if (m_opaque_sp)
928 m_opaque_sp->SetPrompt (prompt);
929}
930
931
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000932ScriptLanguage
Greg Clayton238c0a12010-09-18 01:14:36 +0000933SBDebugger::GetScriptLanguage() const
934{
935 if (m_opaque_sp)
936 return m_opaque_sp->GetScriptLanguage ();
937 return eScriptLanguageNone;
938}
939
940void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000941SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
Greg Clayton238c0a12010-09-18 01:14:36 +0000942{
943 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000944 {
Greg Clayton238c0a12010-09-18 01:14:36 +0000945 m_opaque_sp->SetScriptLanguage (script_lang);
Greg Claytonbdcda462010-12-20 20:49:23 +0000946 }
Greg Clayton238c0a12010-09-18 01:14:36 +0000947}
948
Jim Ingham74989e82010-08-30 19:44:40 +0000949bool
950SBDebugger::SetUseExternalEditor (bool value)
951{
952 if (m_opaque_sp)
953 return m_opaque_sp->SetUseExternalEditor (value);
Greg Claytonbdcda462010-12-20 20:49:23 +0000954 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000955}
956
957bool
Caroline Tice5bc8c972010-09-20 20:44:43 +0000958SBDebugger::GetUseExternalEditor ()
Jim Ingham74989e82010-08-30 19:44:40 +0000959{
960 if (m_opaque_sp)
Caroline Tice5bc8c972010-09-20 20:44:43 +0000961 return m_opaque_sp->GetUseExternalEditor ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000962 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000963}
964
Caroline Tice98f930f2010-09-20 05:20:02 +0000965bool
966SBDebugger::GetDescription (SBStream &description)
967{
Greg Clayton96154be2011-11-13 06:57:31 +0000968 Stream &strm = description.ref();
969
Caroline Tice98f930f2010-09-20 05:20:02 +0000970 if (m_opaque_sp)
971 {
972 const char *name = m_opaque_sp->GetInstanceName().AsCString();
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000973 user_id_t id = m_opaque_sp->GetID();
Greg Clayton96154be2011-11-13 06:57:31 +0000974 strm.Printf ("Debugger (instance: \"%s\", id: %llu)", name, id);
Caroline Tice98f930f2010-09-20 05:20:02 +0000975 }
976 else
Greg Clayton96154be2011-11-13 06:57:31 +0000977 strm.PutCString ("No value");
Caroline Tice98f930f2010-09-20 05:20:02 +0000978
979 return true;
980}
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000981
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000982user_id_t
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000983SBDebugger::GetID()
984{
985 if (m_opaque_sp)
986 return m_opaque_sp->GetID();
987 return LLDB_INVALID_UID;
988}
Greg Clayton180546b2011-04-30 01:09:13 +0000989
990
991SBError
992SBDebugger::SetCurrentPlatform (const char *platform_name)
993{
994 SBError sb_error;
995 if (m_opaque_sp)
996 {
997 PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
998
999 if (platform_sp)
1000 {
1001 bool make_selected = true;
1002 m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
1003 }
1004 }
1005 return sb_error;
1006}
1007
Greg Clayton421ca502011-05-29 04:06:55 +00001008bool
Greg Clayton604f0d32011-06-17 03:31:01 +00001009SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
1010{
1011 if (m_opaque_sp)
1012 {
1013 PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
1014
1015 if (platform_sp)
1016 {
1017 platform_sp->SetSDKRootDirectory (ConstString (sysroot));
1018 return true;
1019 }
1020 }
1021 return false;
1022}
1023
1024bool
Greg Clayton421ca502011-05-29 04:06:55 +00001025SBDebugger::GetCloseInputOnEOF () const
1026{
1027 if (m_opaque_sp)
1028 return m_opaque_sp->GetCloseInputOnEOF ();
1029 return false;
1030}
1031
1032void
1033SBDebugger::SetCloseInputOnEOF (bool b)
1034{
1035 if (m_opaque_sp)
1036 m_opaque_sp->SetCloseInputOnEOF (b);
1037}