blob: 70ca8b286dba606ebd1053c29725cb0d1991c184 [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
Greg Clayton887aa282010-10-11 01:05:37 +0000169void
170SBDebugger::SkipLLDBInitFiles (bool b)
171{
172 if (m_opaque_sp)
173 m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
174}
175
Jim Ingham574c3d62011-08-12 23:34:31 +0000176void
177SBDebugger::SkipAppInitFiles (bool b)
178{
179 if (m_opaque_sp)
180 m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
181}
182
Chris Lattner24943d22010-06-08 16:52:24 +0000183// Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
184// trying to switch modes in the middle of a debugging session.
185void
186SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
187{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000188 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000189
190 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000191 log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
192 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000193
Greg Clayton63094e02010-06-23 01:19:29 +0000194 if (m_opaque_sp)
195 m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000196}
197
198void
199SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
200{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000201 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000202
203
204 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000205 log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
206 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000207
Greg Clayton63094e02010-06-23 01:19:29 +0000208 if (m_opaque_sp)
209 m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000210}
211
212void
213SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
214{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000215 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000216
217
218 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000219 log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
220 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000221
Greg Clayton63094e02010-06-23 01:19:29 +0000222 if (m_opaque_sp)
223 m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000224}
225
226FILE *
227SBDebugger::GetInputFileHandle ()
228{
Greg Clayton63094e02010-06-23 01:19:29 +0000229 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000230 return m_opaque_sp->GetInputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000231 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000232}
233
234FILE *
235SBDebugger::GetOutputFileHandle ()
236{
Greg Clayton63094e02010-06-23 01:19:29 +0000237 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000238 return m_opaque_sp->GetOutputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000239 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000240}
241
242FILE *
243SBDebugger::GetErrorFileHandle ()
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->GetErrorFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000247 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000248}
249
250SBCommandInterpreter
251SBDebugger::GetCommandInterpreter ()
252{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000253 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000254
Greg Clayton63094e02010-06-23 01:19:29 +0000255 SBCommandInterpreter sb_interpreter;
256 if (m_opaque_sp)
257 sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
Caroline Tice7826c882010-10-26 03:11:13 +0000258
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000259 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000260 log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000261 m_opaque_sp.get(), sb_interpreter.get());
262
Chris Lattner24943d22010-06-08 16:52:24 +0000263 return sb_interpreter;
264}
265
266void
267SBDebugger::HandleCommand (const char *command)
268{
Greg Clayton63094e02010-06-23 01:19:29 +0000269 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000270 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000271 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
272 Mutex::Locker api_locker;
273 if (target_sp)
274 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
275
Greg Clayton63094e02010-06-23 01:19:29 +0000276 SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
277 SBCommandReturnObject result;
278
279 sb_interpreter.HandleCommand (command, result, false);
280
281 if (GetErrorFileHandle() != NULL)
282 result.PutError (GetErrorFileHandle());
283 if (GetOutputFileHandle() != NULL)
284 result.PutOutput (GetOutputFileHandle());
285
286 if (m_opaque_sp->GetAsyncExecution() == false)
Chris Lattner24943d22010-06-08 16:52:24 +0000287 {
Greg Clayton63094e02010-06-23 01:19:29 +0000288 SBProcess process(GetCommandInterpreter().GetProcess ());
289 if (process.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000290 {
Greg Clayton63094e02010-06-23 01:19:29 +0000291 EventSP event_sp;
292 Listener &lldb_listener = m_opaque_sp->GetListener();
293 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
294 {
295 SBEvent event(event_sp);
296 HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
297 }
Chris Lattner24943d22010-06-08 16:52:24 +0000298 }
299 }
300 }
301}
302
303SBListener
304SBDebugger::GetListener ()
305{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000306 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000307
Greg Clayton63094e02010-06-23 01:19:29 +0000308 SBListener sb_listener;
309 if (m_opaque_sp)
310 sb_listener.reset(&m_opaque_sp->GetListener(), false);
Caroline Tice7826c882010-10-26 03:11:13 +0000311
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000312 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000313 log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000314 sb_listener.get());
315
Chris Lattner24943d22010-06-08 16:52:24 +0000316 return sb_listener;
317}
318
319void
320SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
321{
Greg Claytonbdcda462010-12-20 20:49:23 +0000322 if (!process.IsValid())
323 return;
Chris Lattner24943d22010-06-08 16:52:24 +0000324
Greg Claytonbdcda462010-12-20 20:49:23 +0000325 const uint32_t event_type = event.GetType();
326 char stdio_buffer[1024];
327 size_t len;
Chris Lattner24943d22010-06-08 16:52:24 +0000328
Greg Claytonbdcda462010-12-20 20:49:23 +0000329 Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex());
330
331 if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
Chris Lattner24943d22010-06-08 16:52:24 +0000332 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000333 // Drain stdout when we stop just in case we have any bytes
334 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
335 if (out != NULL)
336 ::fwrite (stdio_buffer, 1, len, out);
337 }
338
339 if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
340 {
341 // Drain stderr when we stop just in case we have any bytes
342 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
343 if (err != NULL)
344 ::fwrite (stdio_buffer, 1, len, err);
345 }
346
347 if (event_type & Process::eBroadcastBitStateChanged)
348 {
349 StateType event_state = SBProcess::GetStateFromEvent (event);
350
351 if (event_state == eStateInvalid)
352 return;
353
354 bool is_stopped = StateIsStoppedState (event_state);
355 if (!is_stopped)
356 process.ReportEventState (event, out);
Chris Lattner24943d22010-06-08 16:52:24 +0000357 }
358}
359
Chris Lattner24943d22010-06-08 16:52:24 +0000360SBSourceManager &
361SBDebugger::GetSourceManager ()
362{
363 static SourceManager g_lldb_source_manager;
Greg Clayton538eb822010-11-05 23:17:00 +0000364 static SBSourceManager g_sb_source_manager (&g_lldb_source_manager);
Chris Lattner24943d22010-06-08 16:52:24 +0000365 return g_sb_source_manager;
366}
367
368
369bool
370SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
371{
372 if (arch_name && arch_name_len)
373 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000374 ArchSpec default_arch = Target::GetDefaultArchitecture ();
Caroline Tice5bc8c972010-09-20 20:44:43 +0000375
Chris Lattner24943d22010-06-08 16:52:24 +0000376 if (default_arch.IsValid())
377 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000378 const std::string &triple_str = default_arch.GetTriple().str();
379 if (!triple_str.empty())
380 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
381 else
382 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
Chris Lattner24943d22010-06-08 16:52:24 +0000383 return true;
384 }
385 }
386 if (arch_name && arch_name_len)
387 arch_name[0] = '\0';
388 return false;
389}
390
391
392bool
393SBDebugger::SetDefaultArchitecture (const char *arch_name)
394{
395 if (arch_name)
396 {
Greg Claytonf15996e2011-04-07 22:46:35 +0000397 ArchSpec arch (arch_name, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000398 if (arch.IsValid())
399 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000400 Target::SetDefaultArchitecture (arch);
Chris Lattner24943d22010-06-08 16:52:24 +0000401 return true;
402 }
403 }
404 return false;
405}
406
407ScriptLanguage
408SBDebugger::GetScriptingLanguage (const char *script_language_name)
409{
Greg Claytonbdcda462010-12-20 20:49:23 +0000410
Chris Lattner24943d22010-06-08 16:52:24 +0000411 return Args::StringToScriptLanguage (script_language_name,
412 eScriptLanguageDefault,
413 NULL);
414}
Chris Lattner24943d22010-06-08 16:52:24 +0000415
416const char *
417SBDebugger::GetVersionString ()
418{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000419 return GetVersion();
Chris Lattner24943d22010-06-08 16:52:24 +0000420}
421
422const char *
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000423SBDebugger::StateAsCString (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000424{
Caroline Ticea2cffd32011-04-25 22:05:51 +0000425 return lldb_private::StateAsCString (state);
Chris Lattner24943d22010-06-08 16:52:24 +0000426}
427
428bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000429SBDebugger::StateIsRunningState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000430{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000431 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000432
Caroline Ticea2cffd32011-04-25 22:05:51 +0000433 const bool result = lldb_private::StateIsRunningState (state);
Greg Claytona66ba462010-10-30 04:51:46 +0000434 if (log)
435 log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000436 StateAsCString (state), result);
Greg Claytona66ba462010-10-30 04:51:46 +0000437
438 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000439}
440
441bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000442SBDebugger::StateIsStoppedState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000443{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000444 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000445
Caroline Ticea2cffd32011-04-25 22:05:51 +0000446 const bool result = lldb_private::StateIsStoppedState (state);
Caroline Tice7826c882010-10-26 03:11:13 +0000447 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000448 log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000449 StateAsCString (state), result);
Caroline Tice7826c882010-10-26 03:11:13 +0000450
Greg Claytona66ba462010-10-30 04:51:46 +0000451 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000452}
453
454
455SBTarget
456SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
457 const char *target_triple)
458{
Greg Clayton63094e02010-06-23 01:19:29 +0000459 SBTarget target;
460 if (m_opaque_sp)
461 {
462 ArchSpec arch;
Greg Clayton537a7a82010-10-20 20:54:39 +0000463 FileSpec file_spec (filename, true);
Greg Claytonf15996e2011-04-07 22:46:35 +0000464 arch.SetTriple (target_triple, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton63094e02010-06-23 01:19:29 +0000465 TargetSP target_sp;
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000466 Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, true, target_sp));
Greg Clayton63094e02010-06-23 01:19:29 +0000467 target.reset (target_sp);
468 }
Greg Claytona66ba462010-10-30 04:51:46 +0000469
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000470 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000471 if (log)
472 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000473 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000474 m_opaque_sp.get(), filename, target_triple, target.get());
475 }
476
Chris Lattner24943d22010-06-08 16:52:24 +0000477 return target;
478}
479
480SBTarget
Greg Clayton940b1032011-02-23 00:35:02 +0000481SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
Chris Lattner24943d22010-06-08 16:52:24 +0000482{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000483 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000484
Greg Clayton63094e02010-06-23 01:19:29 +0000485 SBTarget target;
486 if (m_opaque_sp)
487 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000488 FileSpec file (filename, true);
Greg Clayton940b1032011-02-23 00:35:02 +0000489 ArchSpec arch;
Greg Clayton63094e02010-06-23 01:19:29 +0000490 TargetSP target_sp;
491 Error error;
Chris Lattner24943d22010-06-08 16:52:24 +0000492
Greg Clayton940b1032011-02-23 00:35:02 +0000493 if (arch_cstr)
Greg Claytonf15996e2011-04-07 22:46:35 +0000494 arch.SetTriple (arch_cstr, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton940b1032011-02-23 00:35:02 +0000495
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000496 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000497
498 if (error.Success())
499 {
Jim Inghamc8332952010-08-26 21:32:51 +0000500 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000501 target.reset(target_sp);
502 }
Chris Lattner24943d22010-06-08 16:52:24 +0000503 }
Caroline Tice7826c882010-10-26 03:11:13 +0000504
505 if (log)
506 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000507 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
Greg Clayton940b1032011-02-23 00:35:02 +0000508 m_opaque_sp.get(), filename, arch_cstr, target.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000509 }
510
Greg Clayton63094e02010-06-23 01:19:29 +0000511 return target;
512}
513
514SBTarget
515SBDebugger::CreateTarget (const char *filename)
516{
517 SBTarget target;
518 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000519 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000520 FileSpec file (filename, true);
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000521 ArchSpec arch = Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000522 TargetSP target_sp;
523 Error error;
524
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000525 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000526
527 if (error.Success())
528 {
Jim Inghamc8332952010-08-26 21:32:51 +0000529 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000530 target.reset (target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000531 }
532 }
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000533 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000534 if (log)
535 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000536 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000537 m_opaque_sp.get(), filename, target.get());
538 }
Greg Clayton63094e02010-06-23 01:19:29 +0000539 return target;
Chris Lattner24943d22010-06-08 16:52:24 +0000540}
541
Johnny Chen409646d2011-06-15 21:24:24 +0000542bool
543SBDebugger::DeleteTarget (lldb::SBTarget &target)
544{
545 bool result = false;
546 if (m_opaque_sp)
547 {
548 // No need to lock, the target list is thread safe
549 result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp);
550 }
551
552 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
553 if (log)
554 {
555 log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
556 }
557
558 return result;
559}
Chris Lattner24943d22010-06-08 16:52:24 +0000560SBTarget
561SBDebugger::GetTargetAtIndex (uint32_t idx)
562{
Greg Clayton63094e02010-06-23 01:19:29 +0000563 SBTarget sb_target;
564 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000565 {
566 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000567 sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
Greg Claytonbdcda462010-12-20 20:49:23 +0000568 }
Chris Lattner24943d22010-06-08 16:52:24 +0000569 return sb_target;
570}
571
572SBTarget
573SBDebugger::FindTargetWithProcessID (pid_t pid)
574{
Greg Clayton63094e02010-06-23 01:19:29 +0000575 SBTarget sb_target;
576 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000577 {
578 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000579 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
Greg Claytonbdcda462010-12-20 20:49:23 +0000580 }
Chris Lattner24943d22010-06-08 16:52:24 +0000581 return sb_target;
582}
583
584SBTarget
585SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
586{
Greg Clayton63094e02010-06-23 01:19:29 +0000587 SBTarget sb_target;
588 if (m_opaque_sp && filename && filename[0])
589 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000590 // No need to lock, the target list is thread safe
Greg Claytonf15996e2011-04-07 22:46:35 +0000591 ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton537a7a82010-10-20 20:54:39 +0000592 TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
Greg Clayton63094e02010-06-23 01:19:29 +0000593 sb_target.reset(target_sp);
594 }
595 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000596}
597
598SBTarget
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000599SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000600{
Greg Clayton63094e02010-06-23 01:19:29 +0000601 SBTarget sb_target;
602 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000603 {
604 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000605 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
Greg Claytonbdcda462010-12-20 20:49:23 +0000606 }
Chris Lattner24943d22010-06-08 16:52:24 +0000607 return sb_target;
608}
609
610
611uint32_t
612SBDebugger::GetNumTargets ()
613{
Greg Clayton63094e02010-06-23 01:19:29 +0000614 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000615 {
616 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000617 return m_opaque_sp->GetTargetList().GetNumTargets ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000618 }
Greg Clayton63094e02010-06-23 01:19:29 +0000619 return 0;
620}
Chris Lattner24943d22010-06-08 16:52:24 +0000621
622SBTarget
Jim Inghamc8332952010-08-26 21:32:51 +0000623SBDebugger::GetSelectedTarget ()
Chris Lattner24943d22010-06-08 16:52:24 +0000624{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000625 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000626
Greg Clayton63094e02010-06-23 01:19:29 +0000627 SBTarget sb_target;
628 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000629 {
630 // No need to lock, the target list is thread safe
Jim Inghamc8332952010-08-26 21:32:51 +0000631 sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
Greg Claytonbdcda462010-12-20 20:49:23 +0000632 }
Caroline Tice7826c882010-10-26 03:11:13 +0000633
634 if (log)
635 {
636 SBStream sstr;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000637 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000638 log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000639 sb_target.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000640 }
641
Chris Lattner24943d22010-06-08 16:52:24 +0000642 return sb_target;
643}
644
645void
646SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
647{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000648 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000649
650 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000651 log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
652 baton, (int) data_len, (const char *) data, data_len);
Caroline Tice7826c882010-10-26 03:11:13 +0000653
Greg Clayton63094e02010-06-23 01:19:29 +0000654 if (m_opaque_sp)
655 m_opaque_sp->DispatchInput ((const char *) data, data_len);
Chris Lattner24943d22010-06-08 16:52:24 +0000656}
657
658void
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000659SBDebugger::DispatchInputInterrupt ()
660{
661 if (m_opaque_sp)
662 m_opaque_sp->DispatchInputInterrupt ();
663}
664
665void
666SBDebugger::DispatchInputEndOfFile ()
667{
668 if (m_opaque_sp)
669 m_opaque_sp->DispatchInputEndOfFile ();
670}
Caroline Ticeb38df1e2011-05-09 23:06:58 +0000671
672bool
673SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
674{
675 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
676
677 if (log)
678 log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
679
680 if (m_opaque_sp && reader.IsValid())
681 {
682 InputReaderSP reader_sp (*reader);
683 return m_opaque_sp->InputReaderIsTopReader (reader_sp);
684 }
685
686 return false;
687}
688
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000689
690void
Chris Lattner24943d22010-06-08 16:52:24 +0000691SBDebugger::PushInputReader (SBInputReader &reader)
692{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000693 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000694
695 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000696 log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
Caroline Tice7826c882010-10-26 03:11:13 +0000697
Greg Clayton63094e02010-06-23 01:19:29 +0000698 if (m_opaque_sp && reader.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000699 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000700 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
701 Mutex::Locker api_locker;
702 if (target_sp)
703 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
Chris Lattner24943d22010-06-08 16:52:24 +0000704 InputReaderSP reader_sp(*reader);
Greg Clayton63094e02010-06-23 01:19:29 +0000705 m_opaque_sp->PushInputReader (reader_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000706 }
707}
Greg Clayton63094e02010-06-23 01:19:29 +0000708
709void
Caroline Tice4a348082011-05-02 20:41:46 +0000710SBDebugger::NotifyTopInputReader (InputReaderAction notification)
711{
712 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
713
714 if (log)
715 log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
716
717 if (m_opaque_sp)
718 m_opaque_sp->NotifyTopInputReader (notification);
719}
720
721void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000722SBDebugger::reset (const DebuggerSP &debugger_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000723{
724 m_opaque_sp = debugger_sp;
725}
726
727Debugger *
728SBDebugger::get () const
729{
730 return m_opaque_sp.get();
731}
732
733Debugger &
734SBDebugger::ref () const
735{
736 assert (m_opaque_sp.get());
737 return *m_opaque_sp;
738}
739
740
Caroline Tice558be582010-06-30 16:22:25 +0000741SBDebugger
742SBDebugger::FindDebuggerWithID (int id)
743{
Greg Claytonbdcda462010-12-20 20:49:23 +0000744 // No need to lock, the debugger list is thread safe
Caroline Tice558be582010-06-30 16:22:25 +0000745 SBDebugger sb_debugger;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000746 DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
Caroline Tice558be582010-06-30 16:22:25 +0000747 if (debugger_sp)
748 sb_debugger.reset (debugger_sp);
749 return sb_debugger;
750}
Jim Ingham74989e82010-08-30 19:44:40 +0000751
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000752const char *
753SBDebugger::GetInstanceName()
754{
755 if (m_opaque_sp)
756 return m_opaque_sp->GetInstanceName().AsCString();
757 else
758 return NULL;
759}
760
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000761SBError
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000762SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000763{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000764 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000765
Greg Claytonb3448432011-03-24 21:19:54 +0000766 Error err = root_settings_controller->SetVariable (var_name,
767 value,
768 eVarSetOperationAssign,
769 true,
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000770 debugger_instance_name);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000771 SBError sb_error;
772 sb_error.SetError (err);
773
774 return sb_error;
775}
776
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000777SBStringList
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000778SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000779{
780 SBStringList ret_value;
Greg Claytonb3448432011-03-24 21:19:54 +0000781 SettableVariableType var_type;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000782 Error err;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000783
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000784 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000785
Caroline Tice5bc8c972010-09-20 20:44:43 +0000786 StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
787
788 if (err.Success())
789 {
790 for (unsigned i = 0; i != value.GetSize(); ++i)
791 ret_value.AppendString (value.GetStringAtIndex(i));
792 }
793 else
794 {
795 ret_value.AppendString (err.AsCString());
796 }
797
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000798
799 return ret_value;
800}
801
Greg Clayton238c0a12010-09-18 01:14:36 +0000802uint32_t
803SBDebugger::GetTerminalWidth () const
804{
805 if (m_opaque_sp)
806 return m_opaque_sp->GetTerminalWidth ();
807 return 0;
808}
809
810void
811SBDebugger::SetTerminalWidth (uint32_t term_width)
812{
813 if (m_opaque_sp)
814 m_opaque_sp->SetTerminalWidth (term_width);
815}
816
817const char *
818SBDebugger::GetPrompt() const
819{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000820 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000821
822 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000823 log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000824 (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
Caroline Tice7826c882010-10-26 03:11:13 +0000825
Greg Clayton238c0a12010-09-18 01:14:36 +0000826 if (m_opaque_sp)
827 return m_opaque_sp->GetPrompt ();
828 return 0;
829}
830
831void
832SBDebugger::SetPrompt (const char *prompt)
833{
834 if (m_opaque_sp)
835 m_opaque_sp->SetPrompt (prompt);
836}
837
838
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000839ScriptLanguage
Greg Clayton238c0a12010-09-18 01:14:36 +0000840SBDebugger::GetScriptLanguage() const
841{
842 if (m_opaque_sp)
843 return m_opaque_sp->GetScriptLanguage ();
844 return eScriptLanguageNone;
845}
846
847void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000848SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
Greg Clayton238c0a12010-09-18 01:14:36 +0000849{
850 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000851 {
Greg Clayton238c0a12010-09-18 01:14:36 +0000852 m_opaque_sp->SetScriptLanguage (script_lang);
Greg Claytonbdcda462010-12-20 20:49:23 +0000853 }
Greg Clayton238c0a12010-09-18 01:14:36 +0000854}
855
Jim Ingham74989e82010-08-30 19:44:40 +0000856bool
857SBDebugger::SetUseExternalEditor (bool value)
858{
859 if (m_opaque_sp)
860 return m_opaque_sp->SetUseExternalEditor (value);
Greg Claytonbdcda462010-12-20 20:49:23 +0000861 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000862}
863
864bool
Caroline Tice5bc8c972010-09-20 20:44:43 +0000865SBDebugger::GetUseExternalEditor ()
Jim Ingham74989e82010-08-30 19:44:40 +0000866{
867 if (m_opaque_sp)
Caroline Tice5bc8c972010-09-20 20:44:43 +0000868 return m_opaque_sp->GetUseExternalEditor ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000869 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000870}
871
Caroline Tice98f930f2010-09-20 05:20:02 +0000872bool
873SBDebugger::GetDescription (SBStream &description)
874{
875 if (m_opaque_sp)
876 {
877 const char *name = m_opaque_sp->GetInstanceName().AsCString();
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000878 user_id_t id = m_opaque_sp->GetID();
Greg Clayton49ce6822010-10-31 03:01:06 +0000879 description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id);
Caroline Tice98f930f2010-09-20 05:20:02 +0000880 }
881 else
882 description.Printf ("No value");
883
884 return true;
885}
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000886
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000887user_id_t
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000888SBDebugger::GetID()
889{
890 if (m_opaque_sp)
891 return m_opaque_sp->GetID();
892 return LLDB_INVALID_UID;
893}
Greg Clayton180546b2011-04-30 01:09:13 +0000894
895
896SBError
897SBDebugger::SetCurrentPlatform (const char *platform_name)
898{
899 SBError sb_error;
900 if (m_opaque_sp)
901 {
902 PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
903
904 if (platform_sp)
905 {
906 bool make_selected = true;
907 m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
908 }
909 }
910 return sb_error;
911}
912
Greg Clayton421ca502011-05-29 04:06:55 +0000913bool
Greg Clayton604f0d32011-06-17 03:31:01 +0000914SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
915{
916 if (m_opaque_sp)
917 {
918 PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
919
920 if (platform_sp)
921 {
922 platform_sp->SetSDKRootDirectory (ConstString (sysroot));
923 return true;
924 }
925 }
926 return false;
927}
928
929bool
Greg Clayton421ca502011-05-29 04:06:55 +0000930SBDebugger::GetCloseInputOnEOF () const
931{
932 if (m_opaque_sp)
933 return m_opaque_sp->GetCloseInputOnEOF ();
934 return false;
935}
936
937void
938SBDebugger::SetCloseInputOnEOF (bool b)
939{
940 if (m_opaque_sp)
941 m_opaque_sp->SetCloseInputOnEOF (b);
942}