blob: 3fa44bb27ae632c524a8f0da81bb341a5dc3d84b [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
Greg Clayton538eb822010-11-05 23:17:00 +0000131SBDebugger::SBDebugger(const SBDebugger &rhs) :
132 m_opaque_sp (rhs.m_opaque_sp)
133{
134}
135
136SBDebugger &
137SBDebugger::operator = (const SBDebugger &rhs)
138{
139 if (this != &rhs)
140 {
141 m_opaque_sp = rhs.m_opaque_sp;
142 }
143 return *this;
144}
145
Greg Clayton63094e02010-06-23 01:19:29 +0000146SBDebugger::~SBDebugger ()
147{
148}
149
150bool
151SBDebugger::IsValid() const
152{
153 return m_opaque_sp.get() != NULL;
154}
155
156
Chris Lattner24943d22010-06-08 16:52:24 +0000157void
158SBDebugger::SetAsync (bool b)
159{
Greg Clayton63094e02010-06-23 01:19:29 +0000160 if (m_opaque_sp)
161 m_opaque_sp->SetAsyncExecution(b);
Chris Lattner24943d22010-06-08 16:52:24 +0000162}
163
Greg Clayton887aa282010-10-11 01:05:37 +0000164void
165SBDebugger::SkipLLDBInitFiles (bool b)
166{
167 if (m_opaque_sp)
168 m_opaque_sp->GetCommandInterpreter().SkipLLDBInitFiles (b);
169}
170
Jim Ingham574c3d62011-08-12 23:34:31 +0000171void
172SBDebugger::SkipAppInitFiles (bool b)
173{
174 if (m_opaque_sp)
175 m_opaque_sp->GetCommandInterpreter().SkipAppInitFiles (b);
176}
177
Chris Lattner24943d22010-06-08 16:52:24 +0000178// Shouldn't really be settable after initialization as this could cause lots of problems; don't want users
179// trying to switch modes in the middle of a debugging session.
180void
181SBDebugger::SetInputFileHandle (FILE *fh, bool transfer_ownership)
182{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000183 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000184
185 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000186 log->Printf ("SBDebugger(%p)::SetInputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
187 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000188
Greg Clayton63094e02010-06-23 01:19:29 +0000189 if (m_opaque_sp)
190 m_opaque_sp->SetInputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000191}
192
193void
194SBDebugger::SetOutputFileHandle (FILE *fh, bool transfer_ownership)
195{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000196 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000197
198
199 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000200 log->Printf ("SBDebugger(%p)::SetOutputFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
201 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000202
Greg Clayton63094e02010-06-23 01:19:29 +0000203 if (m_opaque_sp)
204 m_opaque_sp->SetOutputFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000205}
206
207void
208SBDebugger::SetErrorFileHandle (FILE *fh, bool transfer_ownership)
209{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000210 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000211
212
213 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000214 log->Printf ("SBDebugger(%p)::SetErrorFileHandle (fh=%p, transfer_ownership=%i)", m_opaque_sp.get(),
215 fh, transfer_ownership);
Caroline Tice7826c882010-10-26 03:11:13 +0000216
Greg Clayton63094e02010-06-23 01:19:29 +0000217 if (m_opaque_sp)
218 m_opaque_sp->SetErrorFileHandle (fh, transfer_ownership);
Chris Lattner24943d22010-06-08 16:52:24 +0000219}
220
221FILE *
222SBDebugger::GetInputFileHandle ()
223{
Greg Clayton63094e02010-06-23 01:19:29 +0000224 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000225 return m_opaque_sp->GetInputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000226 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000227}
228
229FILE *
230SBDebugger::GetOutputFileHandle ()
231{
Greg Clayton63094e02010-06-23 01:19:29 +0000232 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000233 return m_opaque_sp->GetOutputFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000234 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000235}
236
237FILE *
238SBDebugger::GetErrorFileHandle ()
239{
Greg Clayton63094e02010-06-23 01:19:29 +0000240 if (m_opaque_sp)
Greg Clayton58928562011-02-09 01:08:52 +0000241 return m_opaque_sp->GetErrorFile().GetStream();
Greg Clayton63094e02010-06-23 01:19:29 +0000242 return NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000243}
244
245SBCommandInterpreter
246SBDebugger::GetCommandInterpreter ()
247{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000248 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000249
Greg Clayton63094e02010-06-23 01:19:29 +0000250 SBCommandInterpreter sb_interpreter;
251 if (m_opaque_sp)
252 sb_interpreter.reset (&m_opaque_sp->GetCommandInterpreter());
Caroline Tice7826c882010-10-26 03:11:13 +0000253
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000254 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000255 log->Printf ("SBDebugger(%p)::GetCommandInterpreter () => SBCommandInterpreter(%p)",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000256 m_opaque_sp.get(), sb_interpreter.get());
257
Chris Lattner24943d22010-06-08 16:52:24 +0000258 return sb_interpreter;
259}
260
261void
262SBDebugger::HandleCommand (const char *command)
263{
Greg Clayton63094e02010-06-23 01:19:29 +0000264 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000265 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000266 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
267 Mutex::Locker api_locker;
268 if (target_sp)
269 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
270
Greg Clayton63094e02010-06-23 01:19:29 +0000271 SBCommandInterpreter sb_interpreter(GetCommandInterpreter ());
272 SBCommandReturnObject result;
273
274 sb_interpreter.HandleCommand (command, result, false);
275
276 if (GetErrorFileHandle() != NULL)
277 result.PutError (GetErrorFileHandle());
278 if (GetOutputFileHandle() != NULL)
279 result.PutOutput (GetOutputFileHandle());
280
281 if (m_opaque_sp->GetAsyncExecution() == false)
Chris Lattner24943d22010-06-08 16:52:24 +0000282 {
Greg Clayton63094e02010-06-23 01:19:29 +0000283 SBProcess process(GetCommandInterpreter().GetProcess ());
284 if (process.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000285 {
Greg Clayton63094e02010-06-23 01:19:29 +0000286 EventSP event_sp;
287 Listener &lldb_listener = m_opaque_sp->GetListener();
288 while (lldb_listener.GetNextEventForBroadcaster (process.get(), event_sp))
289 {
290 SBEvent event(event_sp);
291 HandleProcessEvent (process, event, GetOutputFileHandle(), GetErrorFileHandle());
292 }
Chris Lattner24943d22010-06-08 16:52:24 +0000293 }
294 }
295 }
296}
297
298SBListener
299SBDebugger::GetListener ()
300{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000301 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000302
Greg Clayton63094e02010-06-23 01:19:29 +0000303 SBListener sb_listener;
304 if (m_opaque_sp)
305 sb_listener.reset(&m_opaque_sp->GetListener(), false);
Caroline Tice7826c882010-10-26 03:11:13 +0000306
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000307 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000308 log->Printf ("SBDebugger(%p)::GetListener () => SBListener(%p)", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000309 sb_listener.get());
310
Chris Lattner24943d22010-06-08 16:52:24 +0000311 return sb_listener;
312}
313
314void
315SBDebugger::HandleProcessEvent (const SBProcess &process, const SBEvent &event, FILE *out, FILE *err)
316{
Greg Claytonbdcda462010-12-20 20:49:23 +0000317 if (!process.IsValid())
318 return;
Chris Lattner24943d22010-06-08 16:52:24 +0000319
Greg Claytonbdcda462010-12-20 20:49:23 +0000320 const uint32_t event_type = event.GetType();
321 char stdio_buffer[1024];
322 size_t len;
Chris Lattner24943d22010-06-08 16:52:24 +0000323
Greg Claytonbdcda462010-12-20 20:49:23 +0000324 Mutex::Locker api_locker (process.GetTarget()->GetAPIMutex());
325
326 if (event_type & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitStateChanged))
Chris Lattner24943d22010-06-08 16:52:24 +0000327 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000328 // Drain stdout when we stop just in case we have any bytes
329 while ((len = process.GetSTDOUT (stdio_buffer, sizeof (stdio_buffer))) > 0)
330 if (out != NULL)
331 ::fwrite (stdio_buffer, 1, len, out);
332 }
333
334 if (event_type & (Process::eBroadcastBitSTDERR | Process::eBroadcastBitStateChanged))
335 {
336 // Drain stderr when we stop just in case we have any bytes
337 while ((len = process.GetSTDERR (stdio_buffer, sizeof (stdio_buffer))) > 0)
338 if (err != NULL)
339 ::fwrite (stdio_buffer, 1, len, err);
340 }
341
342 if (event_type & Process::eBroadcastBitStateChanged)
343 {
344 StateType event_state = SBProcess::GetStateFromEvent (event);
345
346 if (event_state == eStateInvalid)
347 return;
348
349 bool is_stopped = StateIsStoppedState (event_state);
350 if (!is_stopped)
351 process.ReportEventState (event, out);
Chris Lattner24943d22010-06-08 16:52:24 +0000352 }
353}
354
Chris Lattner24943d22010-06-08 16:52:24 +0000355SBSourceManager &
356SBDebugger::GetSourceManager ()
357{
358 static SourceManager g_lldb_source_manager;
Greg Clayton538eb822010-11-05 23:17:00 +0000359 static SBSourceManager g_sb_source_manager (&g_lldb_source_manager);
Chris Lattner24943d22010-06-08 16:52:24 +0000360 return g_sb_source_manager;
361}
362
363
364bool
365SBDebugger::GetDefaultArchitecture (char *arch_name, size_t arch_name_len)
366{
367 if (arch_name && arch_name_len)
368 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000369 ArchSpec default_arch = Target::GetDefaultArchitecture ();
Caroline Tice5bc8c972010-09-20 20:44:43 +0000370
Chris Lattner24943d22010-06-08 16:52:24 +0000371 if (default_arch.IsValid())
372 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000373 const std::string &triple_str = default_arch.GetTriple().str();
374 if (!triple_str.empty())
375 ::snprintf (arch_name, arch_name_len, "%s", triple_str.c_str());
376 else
377 ::snprintf (arch_name, arch_name_len, "%s", default_arch.GetArchitectureName());
Chris Lattner24943d22010-06-08 16:52:24 +0000378 return true;
379 }
380 }
381 if (arch_name && arch_name_len)
382 arch_name[0] = '\0';
383 return false;
384}
385
386
387bool
388SBDebugger::SetDefaultArchitecture (const char *arch_name)
389{
390 if (arch_name)
391 {
Greg Claytonf15996e2011-04-07 22:46:35 +0000392 ArchSpec arch (arch_name, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000393 if (arch.IsValid())
394 {
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000395 Target::SetDefaultArchitecture (arch);
Chris Lattner24943d22010-06-08 16:52:24 +0000396 return true;
397 }
398 }
399 return false;
400}
401
402ScriptLanguage
403SBDebugger::GetScriptingLanguage (const char *script_language_name)
404{
Greg Claytonbdcda462010-12-20 20:49:23 +0000405
Chris Lattner24943d22010-06-08 16:52:24 +0000406 return Args::StringToScriptLanguage (script_language_name,
407 eScriptLanguageDefault,
408 NULL);
409}
Chris Lattner24943d22010-06-08 16:52:24 +0000410
411const char *
412SBDebugger::GetVersionString ()
413{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000414 return GetVersion();
Chris Lattner24943d22010-06-08 16:52:24 +0000415}
416
417const char *
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000418SBDebugger::StateAsCString (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000419{
Caroline Ticea2cffd32011-04-25 22:05:51 +0000420 return lldb_private::StateAsCString (state);
Chris Lattner24943d22010-06-08 16:52:24 +0000421}
422
423bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000424SBDebugger::StateIsRunningState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000425{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000426 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000427
Caroline Ticea2cffd32011-04-25 22:05:51 +0000428 const bool result = lldb_private::StateIsRunningState (state);
Greg Claytona66ba462010-10-30 04:51:46 +0000429 if (log)
430 log->Printf ("SBDebugger::StateIsRunningState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000431 StateAsCString (state), result);
Greg Claytona66ba462010-10-30 04:51:46 +0000432
433 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000434}
435
436bool
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000437SBDebugger::StateIsStoppedState (StateType state)
Chris Lattner24943d22010-06-08 16:52:24 +0000438{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000439 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000440
Caroline Ticea2cffd32011-04-25 22:05:51 +0000441 const bool result = lldb_private::StateIsStoppedState (state);
Caroline Tice7826c882010-10-26 03:11:13 +0000442 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000443 log->Printf ("SBDebugger::StateIsStoppedState (state=%s) => %i",
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000444 StateAsCString (state), result);
Caroline Tice7826c882010-10-26 03:11:13 +0000445
Greg Claytona66ba462010-10-30 04:51:46 +0000446 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000447}
448
449
450SBTarget
451SBDebugger::CreateTargetWithFileAndTargetTriple (const char *filename,
452 const char *target_triple)
453{
Greg Clayton63094e02010-06-23 01:19:29 +0000454 SBTarget target;
455 if (m_opaque_sp)
456 {
457 ArchSpec arch;
Greg Clayton537a7a82010-10-20 20:54:39 +0000458 FileSpec file_spec (filename, true);
Greg Claytonf15996e2011-04-07 22:46:35 +0000459 arch.SetTriple (target_triple, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton63094e02010-06-23 01:19:29 +0000460 TargetSP target_sp;
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000461 Error error (m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file_spec, arch, true, target_sp));
Greg Clayton63094e02010-06-23 01:19:29 +0000462 target.reset (target_sp);
463 }
Greg Claytona66ba462010-10-30 04:51:46 +0000464
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000465 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000466 if (log)
467 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000468 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndTargetTriple (filename=\"%s\", triple=%s) => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000469 m_opaque_sp.get(), filename, target_triple, target.get());
470 }
471
Chris Lattner24943d22010-06-08 16:52:24 +0000472 return target;
473}
474
475SBTarget
Greg Clayton940b1032011-02-23 00:35:02 +0000476SBDebugger::CreateTargetWithFileAndArch (const char *filename, const char *arch_cstr)
Chris Lattner24943d22010-06-08 16:52:24 +0000477{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000478 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000479
Greg Clayton63094e02010-06-23 01:19:29 +0000480 SBTarget target;
481 if (m_opaque_sp)
482 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000483 FileSpec file (filename, true);
Greg Clayton940b1032011-02-23 00:35:02 +0000484 ArchSpec arch;
Greg Clayton63094e02010-06-23 01:19:29 +0000485 TargetSP target_sp;
486 Error error;
Chris Lattner24943d22010-06-08 16:52:24 +0000487
Greg Clayton940b1032011-02-23 00:35:02 +0000488 if (arch_cstr)
Greg Claytonf15996e2011-04-07 22:46:35 +0000489 arch.SetTriple (arch_cstr, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton940b1032011-02-23 00:35:02 +0000490
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000491 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000492
493 if (error.Success())
494 {
Jim Inghamc8332952010-08-26 21:32:51 +0000495 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000496 target.reset(target_sp);
497 }
Chris Lattner24943d22010-06-08 16:52:24 +0000498 }
Caroline Tice7826c882010-10-26 03:11:13 +0000499
500 if (log)
501 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000502 log->Printf ("SBDebugger(%p)::CreateTargetWithFileAndArch (filename=\"%s\", arch=%s) => SBTarget(%p)",
Greg Clayton940b1032011-02-23 00:35:02 +0000503 m_opaque_sp.get(), filename, arch_cstr, target.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000504 }
505
Greg Clayton63094e02010-06-23 01:19:29 +0000506 return target;
507}
508
509SBTarget
510SBDebugger::CreateTarget (const char *filename)
511{
512 SBTarget target;
513 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000514 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000515 FileSpec file (filename, true);
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000516 ArchSpec arch = Target::GetDefaultArchitecture ();
Greg Clayton63094e02010-06-23 01:19:29 +0000517 TargetSP target_sp;
518 Error error;
519
Greg Claytone4b9c1f2011-03-08 22:40:15 +0000520 error = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, file, arch, true, target_sp);
Greg Clayton63094e02010-06-23 01:19:29 +0000521
522 if (error.Success())
523 {
Jim Inghamc8332952010-08-26 21:32:51 +0000524 m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get());
Greg Clayton63094e02010-06-23 01:19:29 +0000525 target.reset (target_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000526 }
527 }
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000528 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona66ba462010-10-30 04:51:46 +0000529 if (log)
530 {
Greg Clayton49ce6822010-10-31 03:01:06 +0000531 log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\") => SBTarget(%p)",
Greg Claytona66ba462010-10-30 04:51:46 +0000532 m_opaque_sp.get(), filename, target.get());
533 }
Greg Clayton63094e02010-06-23 01:19:29 +0000534 return target;
Chris Lattner24943d22010-06-08 16:52:24 +0000535}
536
Johnny Chen409646d2011-06-15 21:24:24 +0000537bool
538SBDebugger::DeleteTarget (lldb::SBTarget &target)
539{
540 bool result = false;
541 if (m_opaque_sp)
542 {
543 // No need to lock, the target list is thread safe
544 result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp);
545 }
546
547 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
548 if (log)
549 {
550 log->Printf ("SBDebugger(%p)::DeleteTarget (SBTarget(%p)) => %i", m_opaque_sp.get(), target.m_opaque_sp.get(), result);
551 }
552
553 return result;
554}
Chris Lattner24943d22010-06-08 16:52:24 +0000555SBTarget
556SBDebugger::GetTargetAtIndex (uint32_t idx)
557{
Greg Clayton63094e02010-06-23 01:19:29 +0000558 SBTarget sb_target;
559 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000560 {
561 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000562 sb_target.reset(m_opaque_sp->GetTargetList().GetTargetAtIndex (idx));
Greg Claytonbdcda462010-12-20 20:49:23 +0000563 }
Chris Lattner24943d22010-06-08 16:52:24 +0000564 return sb_target;
565}
566
567SBTarget
568SBDebugger::FindTargetWithProcessID (pid_t pid)
569{
Greg Clayton63094e02010-06-23 01:19:29 +0000570 SBTarget sb_target;
571 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000572 {
573 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000574 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcessID (pid));
Greg Claytonbdcda462010-12-20 20:49:23 +0000575 }
Chris Lattner24943d22010-06-08 16:52:24 +0000576 return sb_target;
577}
578
579SBTarget
580SBDebugger::FindTargetWithFileAndArch (const char *filename, const char *arch_name)
581{
Greg Clayton63094e02010-06-23 01:19:29 +0000582 SBTarget sb_target;
583 if (m_opaque_sp && filename && filename[0])
584 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000585 // No need to lock, the target list is thread safe
Greg Claytonf15996e2011-04-07 22:46:35 +0000586 ArchSpec arch (arch_name, m_opaque_sp->GetPlatformList().GetSelectedPlatform().get());
Greg Clayton537a7a82010-10-20 20:54:39 +0000587 TargetSP target_sp (m_opaque_sp->GetTargetList().FindTargetWithExecutableAndArchitecture (FileSpec(filename, false), arch_name ? &arch : NULL));
Greg Clayton63094e02010-06-23 01:19:29 +0000588 sb_target.reset(target_sp);
589 }
590 return sb_target;
Chris Lattner24943d22010-06-08 16:52:24 +0000591}
592
593SBTarget
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000594SBDebugger::FindTargetWithLLDBProcess (const ProcessSP &process_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000595{
Greg Clayton63094e02010-06-23 01:19:29 +0000596 SBTarget sb_target;
597 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000598 {
599 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000600 sb_target.reset(m_opaque_sp->GetTargetList().FindTargetWithProcess (process_sp.get()));
Greg Claytonbdcda462010-12-20 20:49:23 +0000601 }
Chris Lattner24943d22010-06-08 16:52:24 +0000602 return sb_target;
603}
604
605
606uint32_t
607SBDebugger::GetNumTargets ()
608{
Greg Clayton63094e02010-06-23 01:19:29 +0000609 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000610 {
611 // No need to lock, the target list is thread safe
Greg Clayton63094e02010-06-23 01:19:29 +0000612 return m_opaque_sp->GetTargetList().GetNumTargets ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000613 }
Greg Clayton63094e02010-06-23 01:19:29 +0000614 return 0;
615}
Chris Lattner24943d22010-06-08 16:52:24 +0000616
617SBTarget
Jim Inghamc8332952010-08-26 21:32:51 +0000618SBDebugger::GetSelectedTarget ()
Chris Lattner24943d22010-06-08 16:52:24 +0000619{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000620 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000621
Greg Clayton63094e02010-06-23 01:19:29 +0000622 SBTarget sb_target;
623 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000624 {
625 // No need to lock, the target list is thread safe
Jim Inghamc8332952010-08-26 21:32:51 +0000626 sb_target.reset(m_opaque_sp->GetTargetList().GetSelectedTarget ());
Greg Claytonbdcda462010-12-20 20:49:23 +0000627 }
Caroline Tice7826c882010-10-26 03:11:13 +0000628
629 if (log)
630 {
631 SBStream sstr;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000632 sb_target.GetDescription (sstr, eDescriptionLevelBrief);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000633 log->Printf ("SBDebugger(%p)::GetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000634 sb_target.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000635 }
636
Chris Lattner24943d22010-06-08 16:52:24 +0000637 return sb_target;
638}
639
640void
641SBDebugger::DispatchInput (void *baton, const void *data, size_t data_len)
642{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000643 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000644
645 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000646 log->Printf ("SBDebugger(%p)::DispatchInput (baton=%p, data=\"%.*s\", size_t=%zu)", m_opaque_sp.get(),
647 baton, (int) data_len, (const char *) data, data_len);
Caroline Tice7826c882010-10-26 03:11:13 +0000648
Greg Clayton63094e02010-06-23 01:19:29 +0000649 if (m_opaque_sp)
650 m_opaque_sp->DispatchInput ((const char *) data, data_len);
Chris Lattner24943d22010-06-08 16:52:24 +0000651}
652
653void
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000654SBDebugger::DispatchInputInterrupt ()
655{
656 if (m_opaque_sp)
657 m_opaque_sp->DispatchInputInterrupt ();
658}
659
660void
661SBDebugger::DispatchInputEndOfFile ()
662{
663 if (m_opaque_sp)
664 m_opaque_sp->DispatchInputEndOfFile ();
665}
Caroline Ticeb38df1e2011-05-09 23:06:58 +0000666
667bool
668SBDebugger::InputReaderIsTopReader (const lldb::SBInputReader &reader)
669{
670 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
671
672 if (log)
673 log->Printf ("SBDebugger(%p)::InputReaderIsTopReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
674
675 if (m_opaque_sp && reader.IsValid())
676 {
677 InputReaderSP reader_sp (*reader);
678 return m_opaque_sp->InputReaderIsTopReader (reader_sp);
679 }
680
681 return false;
682}
683
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000684
685void
Chris Lattner24943d22010-06-08 16:52:24 +0000686SBDebugger::PushInputReader (SBInputReader &reader)
687{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000688 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000689
690 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000691 log->Printf ("SBDebugger(%p)::PushInputReader (SBInputReader(%p))", m_opaque_sp.get(), &reader);
Caroline Tice7826c882010-10-26 03:11:13 +0000692
Greg Clayton63094e02010-06-23 01:19:29 +0000693 if (m_opaque_sp && reader.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000694 {
Greg Claytonbdcda462010-12-20 20:49:23 +0000695 TargetSP target_sp (m_opaque_sp->GetSelectedTarget());
696 Mutex::Locker api_locker;
697 if (target_sp)
698 api_locker.Reset(target_sp->GetAPIMutex().GetMutex());
Chris Lattner24943d22010-06-08 16:52:24 +0000699 InputReaderSP reader_sp(*reader);
Greg Clayton63094e02010-06-23 01:19:29 +0000700 m_opaque_sp->PushInputReader (reader_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000701 }
702}
Greg Clayton63094e02010-06-23 01:19:29 +0000703
704void
Caroline Tice4a348082011-05-02 20:41:46 +0000705SBDebugger::NotifyTopInputReader (InputReaderAction notification)
706{
707 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
708
709 if (log)
710 log->Printf ("SBDebugger(%p)::NotifyTopInputReader (%d)", m_opaque_sp.get(), notification);
711
712 if (m_opaque_sp)
713 m_opaque_sp->NotifyTopInputReader (notification);
714}
715
716void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000717SBDebugger::reset (const DebuggerSP &debugger_sp)
Greg Clayton63094e02010-06-23 01:19:29 +0000718{
719 m_opaque_sp = debugger_sp;
720}
721
722Debugger *
723SBDebugger::get () const
724{
725 return m_opaque_sp.get();
726}
727
728Debugger &
729SBDebugger::ref () const
730{
731 assert (m_opaque_sp.get());
732 return *m_opaque_sp;
733}
734
735
Caroline Tice558be582010-06-30 16:22:25 +0000736SBDebugger
737SBDebugger::FindDebuggerWithID (int id)
738{
Greg Claytonbdcda462010-12-20 20:49:23 +0000739 // No need to lock, the debugger list is thread safe
Caroline Tice558be582010-06-30 16:22:25 +0000740 SBDebugger sb_debugger;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000741 DebuggerSP debugger_sp = Debugger::FindDebuggerWithID (id);
Caroline Tice558be582010-06-30 16:22:25 +0000742 if (debugger_sp)
743 sb_debugger.reset (debugger_sp);
744 return sb_debugger;
745}
Jim Ingham74989e82010-08-30 19:44:40 +0000746
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000747const char *
748SBDebugger::GetInstanceName()
749{
750 if (m_opaque_sp)
751 return m_opaque_sp->GetInstanceName().AsCString();
752 else
753 return NULL;
754}
755
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000756SBError
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000757SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000758{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000759 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000760
Greg Claytonb3448432011-03-24 21:19:54 +0000761 Error err = root_settings_controller->SetVariable (var_name,
762 value,
763 eVarSetOperationAssign,
764 true,
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000765 debugger_instance_name);
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000766 SBError sb_error;
767 sb_error.SetError (err);
768
769 return sb_error;
770}
771
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000772SBStringList
Caroline Ticeb8314fe2010-09-09 17:45:09 +0000773SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000774{
775 SBStringList ret_value;
Greg Claytonb3448432011-03-24 21:19:54 +0000776 SettableVariableType var_type;
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000777 Error err;
Caroline Tice1d2aefd2010-09-09 06:25:08 +0000778
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000779 UserSettingsControllerSP root_settings_controller = Debugger::GetSettingsController();
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000780
Caroline Tice5bc8c972010-09-20 20:44:43 +0000781 StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name, err);
782
783 if (err.Success())
784 {
785 for (unsigned i = 0; i != value.GetSize(); ++i)
786 ret_value.AppendString (value.GetStringAtIndex(i));
787 }
788 else
789 {
790 ret_value.AppendString (err.AsCString());
791 }
792
Caroline Tice6e4c5ce2010-09-04 00:03:46 +0000793
794 return ret_value;
795}
796
Greg Clayton238c0a12010-09-18 01:14:36 +0000797uint32_t
798SBDebugger::GetTerminalWidth () const
799{
800 if (m_opaque_sp)
801 return m_opaque_sp->GetTerminalWidth ();
802 return 0;
803}
804
805void
806SBDebugger::SetTerminalWidth (uint32_t term_width)
807{
808 if (m_opaque_sp)
809 m_opaque_sp->SetTerminalWidth (term_width);
810}
811
812const char *
813SBDebugger::GetPrompt() const
814{
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000815 LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000816
817 if (log)
Greg Clayton49ce6822010-10-31 03:01:06 +0000818 log->Printf ("SBDebugger(%p)::GetPrompt () => \"%s\"", m_opaque_sp.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000819 (m_opaque_sp ? m_opaque_sp->GetPrompt() : ""));
Caroline Tice7826c882010-10-26 03:11:13 +0000820
Greg Clayton238c0a12010-09-18 01:14:36 +0000821 if (m_opaque_sp)
822 return m_opaque_sp->GetPrompt ();
823 return 0;
824}
825
826void
827SBDebugger::SetPrompt (const char *prompt)
828{
829 if (m_opaque_sp)
830 m_opaque_sp->SetPrompt (prompt);
831}
832
833
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000834ScriptLanguage
Greg Clayton238c0a12010-09-18 01:14:36 +0000835SBDebugger::GetScriptLanguage() const
836{
837 if (m_opaque_sp)
838 return m_opaque_sp->GetScriptLanguage ();
839 return eScriptLanguageNone;
840}
841
842void
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000843SBDebugger::SetScriptLanguage (ScriptLanguage script_lang)
Greg Clayton238c0a12010-09-18 01:14:36 +0000844{
845 if (m_opaque_sp)
Greg Claytonbdcda462010-12-20 20:49:23 +0000846 {
Greg Clayton238c0a12010-09-18 01:14:36 +0000847 m_opaque_sp->SetScriptLanguage (script_lang);
Greg Claytonbdcda462010-12-20 20:49:23 +0000848 }
Greg Clayton238c0a12010-09-18 01:14:36 +0000849}
850
Jim Ingham74989e82010-08-30 19:44:40 +0000851bool
852SBDebugger::SetUseExternalEditor (bool value)
853{
854 if (m_opaque_sp)
855 return m_opaque_sp->SetUseExternalEditor (value);
Greg Claytonbdcda462010-12-20 20:49:23 +0000856 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000857}
858
859bool
Caroline Tice5bc8c972010-09-20 20:44:43 +0000860SBDebugger::GetUseExternalEditor ()
Jim Ingham74989e82010-08-30 19:44:40 +0000861{
862 if (m_opaque_sp)
Caroline Tice5bc8c972010-09-20 20:44:43 +0000863 return m_opaque_sp->GetUseExternalEditor ();
Greg Claytonbdcda462010-12-20 20:49:23 +0000864 return false;
Jim Ingham74989e82010-08-30 19:44:40 +0000865}
866
Caroline Tice98f930f2010-09-20 05:20:02 +0000867bool
868SBDebugger::GetDescription (SBStream &description)
869{
870 if (m_opaque_sp)
871 {
872 const char *name = m_opaque_sp->GetInstanceName().AsCString();
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000873 user_id_t id = m_opaque_sp->GetID();
Greg Clayton49ce6822010-10-31 03:01:06 +0000874 description.Printf ("Debugger (instance: \"%s\", id: %d)", name, id);
Caroline Tice98f930f2010-09-20 05:20:02 +0000875 }
876 else
877 description.Printf ("No value");
878
879 return true;
880}
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000881
Greg Clayton9ce9c3c2011-04-18 23:15:17 +0000882user_id_t
Caroline Ticec4f55fe2010-11-19 20:47:54 +0000883SBDebugger::GetID()
884{
885 if (m_opaque_sp)
886 return m_opaque_sp->GetID();
887 return LLDB_INVALID_UID;
888}
Greg Clayton180546b2011-04-30 01:09:13 +0000889
890
891SBError
892SBDebugger::SetCurrentPlatform (const char *platform_name)
893{
894 SBError sb_error;
895 if (m_opaque_sp)
896 {
897 PlatformSP platform_sp (Platform::Create (platform_name, sb_error.ref()));
898
899 if (platform_sp)
900 {
901 bool make_selected = true;
902 m_opaque_sp->GetPlatformList().Append (platform_sp, make_selected);
903 }
904 }
905 return sb_error;
906}
907
Greg Clayton421ca502011-05-29 04:06:55 +0000908bool
Greg Clayton604f0d32011-06-17 03:31:01 +0000909SBDebugger::SetCurrentPlatformSDKRoot (const char *sysroot)
910{
911 if (m_opaque_sp)
912 {
913 PlatformSP platform_sp (m_opaque_sp->GetPlatformList().GetSelectedPlatform());
914
915 if (platform_sp)
916 {
917 platform_sp->SetSDKRootDirectory (ConstString (sysroot));
918 return true;
919 }
920 }
921 return false;
922}
923
924bool
Greg Clayton421ca502011-05-29 04:06:55 +0000925SBDebugger::GetCloseInputOnEOF () const
926{
927 if (m_opaque_sp)
928 return m_opaque_sp->GetCloseInputOnEOF ();
929 return false;
930}
931
932void
933SBDebugger::SetCloseInputOnEOF (bool b)
934{
935 if (m_opaque_sp)
936 m_opaque_sp->SetCloseInputOnEOF (b);
937}