blob: 9705ebcaa12ac1359372adb63af6f821aba2859c [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBTarget.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 Friedman7a62c8b2010-06-09 07:44:37 +000010#include "lldb/API/SBTarget.h"
Chris Lattner24943d22010-06-08 16:52:24 +000011
12#include "lldb/lldb-include.h"
13
14#include "lldb/API/SBFileSpec.h"
15#include "lldb/API/SBModule.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000016#include "lldb/API/SBStream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000017#include "lldb/Breakpoint/BreakpointID.h"
18#include "lldb/Breakpoint/BreakpointIDList.h"
19#include "lldb/Breakpoint/BreakpointList.h"
20#include "lldb/Breakpoint/BreakpointLocation.h"
21#include "lldb/Core/Address.h"
22#include "lldb/Core/AddressResolver.h"
23#include "lldb/Core/AddressResolverName.h"
Jim Ingham84cdc152010-06-15 19:49:27 +000024#include "lldb/Interpreter/Args.h"
Chris Lattner24943d22010-06-08 16:52:24 +000025#include "lldb/Core/ArchSpec.h"
26#include "lldb/Core/Debugger.h"
27#include "lldb/Core/Disassembler.h"
28#include "lldb/Core/FileSpec.h"
Caroline Tice7826c882010-10-26 03:11:13 +000029#include "lldb/Core/Log.h"
Chris Lattner24943d22010-06-08 16:52:24 +000030#include "lldb/Core/RegularExpression.h"
31#include "lldb/Core/SearchFilter.h"
32#include "lldb/Core/STLUtils.h"
33#include "lldb/Target/Process.h"
34#include "lldb/Target/Target.h"
35#include "lldb/Target/TargetList.h"
36
37#include "lldb/Interpreter/CommandReturnObject.h"
38#include "../source/Commands/CommandObjectBreakpoint.h"
39
Eli Friedman7a62c8b2010-06-09 07:44:37 +000040#include "lldb/API/SBDebugger.h"
41#include "lldb/API/SBProcess.h"
42#include "lldb/API/SBListener.h"
43#include "lldb/API/SBBreakpoint.h"
Chris Lattner24943d22010-06-08 16:52:24 +000044
45using namespace lldb;
46using namespace lldb_private;
47
48#define DEFAULT_DISASM_BYTE_SIZE 32
49
50//----------------------------------------------------------------------
51// SBTarget constructor
52//----------------------------------------------------------------------
53SBTarget::SBTarget ()
54{
55}
56
57SBTarget::SBTarget (const SBTarget& rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000058 m_opaque_sp (rhs.m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000059{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000060 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000061
62 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000063 log->Printf ("SBTarget::SBTarget (rhs.sp=%p) => this.sp = %p",
64 rhs.m_opaque_sp.get(), m_opaque_sp.get());
Chris Lattner24943d22010-06-08 16:52:24 +000065}
66
67SBTarget::SBTarget(const TargetSP& target_sp) :
Greg Clayton63094e02010-06-23 01:19:29 +000068 m_opaque_sp (target_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000069{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000070 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000071
72 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000073 {
74 SBStream sstr;
75 GetDescription (sstr, lldb::eDescriptionLevelBrief);
76 log->Printf ("SBTarget::SBTarget (target_sp=%p) => this.sp = %p ('%s')",
77 target_sp.get(), m_opaque_sp.get(), sstr.GetData());
78 }
Chris Lattner24943d22010-06-08 16:52:24 +000079}
80
81const SBTarget&
82SBTarget::Assign (const SBTarget& rhs)
83{
Caroline Tice7826c882010-10-26 03:11:13 +000084 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
85
86 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000087 log->Printf ("SBTarget::Assign (this.sp=%p, rhs.sp=%p)", m_opaque_sp.get(), rhs.m_opaque_sp.get());
Caroline Tice7826c882010-10-26 03:11:13 +000088
Chris Lattner24943d22010-06-08 16:52:24 +000089 if (this != &rhs)
90 {
Greg Clayton63094e02010-06-23 01:19:29 +000091 m_opaque_sp = rhs.m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +000092 }
Caroline Tice7826c882010-10-26 03:11:13 +000093
Caroline Tice61ba7ec2010-10-26 23:49:36 +000094 //if (log)
95 // log->Printf ("SBTarget::Assign => SBTarget (this = %p, m_opaque_sp.get() = %p)", this, m_opaque_sp.get());
Caroline Tice7826c882010-10-26 03:11:13 +000096
Chris Lattner24943d22010-06-08 16:52:24 +000097 return *this;
98}
99
100
101//----------------------------------------------------------------------
102// Destructor
103//----------------------------------------------------------------------
104SBTarget::~SBTarget()
105{
106}
107
108bool
109SBTarget::IsValid () const
110{
Greg Clayton63094e02010-06-23 01:19:29 +0000111 return m_opaque_sp.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000112}
113
114SBProcess
115SBTarget::GetProcess ()
116{
Caroline Tice7826c882010-10-26 03:11:13 +0000117 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
118
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000119 //if (log)
120 // log->Printf ("SBTarget::GetProcess ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000121
Chris Lattner24943d22010-06-08 16:52:24 +0000122 SBProcess sb_process;
Greg Clayton63094e02010-06-23 01:19:29 +0000123 if (m_opaque_sp)
124 sb_process.SetProcess (m_opaque_sp->GetProcessSP());
Caroline Tice7826c882010-10-26 03:11:13 +0000125
126 if (log)
127 {
128 SBStream sstr;
129 sb_process.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000130 log->Printf ("SBTarget::GetProcess (this.sp=%p) => SBProcess : this.sp = %p, '%s'", m_opaque_sp.get(),
131 sb_process.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000132 }
133
Chris Lattner24943d22010-06-08 16:52:24 +0000134 return sb_process;
135}
136
Greg Clayton63094e02010-06-23 01:19:29 +0000137SBDebugger
138SBTarget::GetDebugger () const
139{
140 SBDebugger debugger;
141 if (m_opaque_sp)
142 debugger.reset (m_opaque_sp->GetDebugger().GetSP());
143 return debugger;
144}
145
Greg Clayton992ce262010-10-06 18:44:26 +0000146
147// DEPRECATED
148SBProcess
149SBTarget::CreateProcess ()
150{
Caroline Tice7826c882010-10-26 03:11:13 +0000151 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
152
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000153 //if (log)
154 // log->Printf ("SBTarget::CreateProcess ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000155
Greg Clayton992ce262010-10-06 18:44:26 +0000156 SBProcess sb_process;
157
158 if (m_opaque_sp)
159 sb_process.SetProcess (m_opaque_sp->CreateProcess (m_opaque_sp->GetDebugger().GetListener()));
160
Caroline Tice7826c882010-10-26 03:11:13 +0000161 if (log)
162 {
163 SBStream sstr;
164 sb_process.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000165 log->Printf ("SBTarget::CreateProcess (this.sp=%p) => SBProcess this.sp = %p, '%s'", m_opaque_sp.get(),
166 sb_process.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000167 }
168
Greg Clayton992ce262010-10-06 18:44:26 +0000169 return sb_process;
170}
171
172
Greg Claytonc5f728c2010-10-06 22:10:17 +0000173SBProcess
174SBTarget::LaunchProcess
175(
176 char const **argv,
177 char const **envp,
178 const char *tty,
179 uint32_t launch_flags,
Greg Claytond8c62532010-10-07 04:19:01 +0000180 bool stop_at_entry
181)
182{
Caroline Tice7826c882010-10-26 03:11:13 +0000183 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
184
185 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000186 log->Printf ("SBTarget::LaunchProcess (this.sp=%p, argv=%p, envp=%p, tty='%s', launch_flags=%d, "
187 "stop_at_entry='%s')",
188 m_opaque_sp.get(), argv, envp, tty, launch_flags, (stop_at_entry ? "true" : "false"));
Caroline Tice7826c882010-10-26 03:11:13 +0000189
Greg Claytond8c62532010-10-07 04:19:01 +0000190 SBError sb_error;
Caroline Tice7826c882010-10-26 03:11:13 +0000191 SBProcess sb_process = Launch (argv, envp, tty, launch_flags, stop_at_entry, sb_error);
192
193 if (log)
194 {
195 SBStream sstr;
196 sb_process.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000197 log->Printf ("SBTarget::LaunchProcess (this.sp=%p, ...) => SBProcess : this.sp = %p, '%s'", m_opaque_sp.get(),
198 sb_process.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000199 }
200
201 return sb_process;
Greg Claytond8c62532010-10-07 04:19:01 +0000202}
203
204SBProcess
205SBTarget::Launch
206(
207 char const **argv,
208 char const **envp,
209 const char *tty,
210 uint32_t launch_flags,
Greg Claytonc5f728c2010-10-06 22:10:17 +0000211 bool stop_at_entry,
212 SBError &error
213)
214{
Caroline Tice7826c882010-10-26 03:11:13 +0000215 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
216
217 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000218 log->Printf ("SBTarget::Launch (this.sp=%p, argv=%p, envp=%p, tty='%s', launch_flags=%d, stop_at_entry=%s, "
219 "error.ap=%p)",
220 m_opaque_sp.get(), argv, envp, tty, launch_flags, (stop_at_entry ? "true" : "false"),
221 error.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000222
Greg Clayton1a3083a2010-10-06 03:53:16 +0000223 SBProcess sb_process;
224 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000225 {
Greg Clayton992ce262010-10-06 18:44:26 +0000226 // DEPRECATED, this will change when CreateProcess is removed...
227 if (m_opaque_sp->GetProcessSP())
228 {
229 sb_process.SetProcess(m_opaque_sp->GetProcessSP());
230 }
231 else
232 {
233 // When launching, we always want to create a new process When
234 // SBTarget::CreateProcess is removed, this will always happen.
235 sb_process.SetProcess (m_opaque_sp->CreateProcess (m_opaque_sp->GetDebugger().GetListener()));
236 }
Greg Clayton1a3083a2010-10-06 03:53:16 +0000237
238 if (sb_process.IsValid())
Chris Lattner24943d22010-06-08 16:52:24 +0000239 {
Greg Claytonc5f728c2010-10-06 22:10:17 +0000240 error.SetError (sb_process->Launch (argv, envp, launch_flags, tty, tty, tty));
Greg Clayton1a3083a2010-10-06 03:53:16 +0000241 if (error.Success())
Chris Lattner24943d22010-06-08 16:52:24 +0000242 {
Sean Callanan451ee7c2010-10-07 22:51:14 +0000243 // We we are stopping at the entry point, we can return now!
244 if (stop_at_entry)
245 return sb_process;
246
Greg Clayton1a3083a2010-10-06 03:53:16 +0000247 // Make sure we are stopped at the entry
248 StateType state = sb_process->WaitForProcessToStop (NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000249 if (state == eStateStopped)
Greg Clayton1a3083a2010-10-06 03:53:16 +0000250 {
251 // resume the process to skip the entry point
Greg Claytonc5f728c2010-10-06 22:10:17 +0000252 error.SetError (sb_process->Resume());
Greg Clayton1a3083a2010-10-06 03:53:16 +0000253 if (error.Success())
254 {
255 // If we are doing synchronous mode, then wait for the
256 // process to stop yet again!
257 if (m_opaque_sp->GetDebugger().GetAsyncExecution () == false)
258 sb_process->WaitForProcessToStop (NULL);
259 }
260 }
Chris Lattner24943d22010-06-08 16:52:24 +0000261 }
262 }
Greg Claytonc5f728c2010-10-06 22:10:17 +0000263 else
264 {
265 error.SetErrorString ("unable to create lldb_private::Process");
266 }
267 }
268 else
269 {
270 error.SetErrorString ("SBTarget is invalid");
Chris Lattner24943d22010-06-08 16:52:24 +0000271 }
Caroline Tice7826c882010-10-26 03:11:13 +0000272
273 if (log)
274 {
275 SBStream sstr;
276 sb_process.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000277 log->Printf ("SBTarget::Launch (this.sp=%p, ...) => SBProceess : this.sp = %p, '%s'", m_opaque_sp.get(),
278 sb_process.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000279 }
280
Greg Clayton1a3083a2010-10-06 03:53:16 +0000281 return sb_process;
Chris Lattner24943d22010-06-08 16:52:24 +0000282}
283
Greg Claytonc5f728c2010-10-06 22:10:17 +0000284
285lldb::SBProcess
Greg Claytond8c62532010-10-07 04:19:01 +0000286SBTarget::AttachToProcessWithID
Greg Claytonc5f728c2010-10-06 22:10:17 +0000287(
288 lldb::pid_t pid,// The process ID to attach to
289 SBError& error // An error explaining what went wrong if attach fails
290)
291{
292 SBProcess sb_process;
293 if (m_opaque_sp)
294 {
295 // DEPRECATED, this will change when CreateProcess is removed...
296 if (m_opaque_sp->GetProcessSP())
297 {
298 sb_process.SetProcess(m_opaque_sp->GetProcessSP());
299 }
300 else
301 {
302 // When launching, we always want to create a new process When
303 // SBTarget::CreateProcess is removed, this will always happen.
304 sb_process.SetProcess (m_opaque_sp->CreateProcess (m_opaque_sp->GetDebugger().GetListener()));
305 }
306
307 if (sb_process.IsValid())
308 {
309 error.SetError (sb_process->Attach (pid));
310 }
311 else
312 {
313 error.SetErrorString ("unable to create lldb_private::Process");
314 }
315 }
316 else
317 {
318 error.SetErrorString ("SBTarget is invalid");
319 }
320 return sb_process;
321
322}
323
324lldb::SBProcess
Greg Claytond8c62532010-10-07 04:19:01 +0000325SBTarget::AttachToProcessWithName
Greg Claytonc5f728c2010-10-06 22:10:17 +0000326(
327 const char *name, // basename of process to attach to
328 bool wait_for, // if true wait for a new instance of "name" to be launched
329 SBError& error // An error explaining what went wrong if attach fails
330)
331{
332 SBProcess sb_process;
333 if (m_opaque_sp)
334 {
335 // DEPRECATED, this will change when CreateProcess is removed...
336 if (m_opaque_sp->GetProcessSP())
337 {
338 sb_process.SetProcess(m_opaque_sp->GetProcessSP());
339 }
340 else
341 {
342 // When launching, we always want to create a new process When
343 // SBTarget::CreateProcess is removed, this will always happen.
344 sb_process.SetProcess (m_opaque_sp->CreateProcess (m_opaque_sp->GetDebugger().GetListener()));
345 }
346
347 if (sb_process.IsValid())
348 {
349 error.SetError (sb_process->Attach (name, wait_for));
350 }
351 else
352 {
353 error.SetErrorString ("unable to create lldb_private::Process");
354 }
355 }
356 else
357 {
358 error.SetErrorString ("SBTarget is invalid");
359 }
360 return sb_process;
361
362}
363
Chris Lattner24943d22010-06-08 16:52:24 +0000364SBFileSpec
365SBTarget::GetExecutable ()
366{
Caroline Tice7826c882010-10-26 03:11:13 +0000367 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
368
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000369 //if (log)
370 // log->Printf ("SBTarget::GetExecutable ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000371
Chris Lattner24943d22010-06-08 16:52:24 +0000372 SBFileSpec exe_file_spec;
Greg Clayton63094e02010-06-23 01:19:29 +0000373 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000374 {
Greg Clayton63094e02010-06-23 01:19:29 +0000375 ModuleSP exe_module_sp (m_opaque_sp->GetExecutableModule ());
Chris Lattner24943d22010-06-08 16:52:24 +0000376 if (exe_module_sp)
377 exe_file_spec.SetFileSpec (exe_module_sp->GetFileSpec());
378 }
Caroline Tice7826c882010-10-26 03:11:13 +0000379
380 if (log)
381 {
382 if (exe_file_spec.Exists())
383 {
384 SBStream sstr;
385 exe_file_spec.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000386 log->Printf ("SBTarget::GetExecutable (this.sp=%p) => SBFileSpec (this.ap = %p, '%s')", m_opaque_sp.get(),
387 exe_file_spec.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000388 }
389 else
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000390 log->Printf ("SBTarget::GetExecutable (this.sp=%p) => SBFileSpec (this.ap = %p, 'Unable to find valid file')",
391 m_opaque_sp.get(), exe_file_spec.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000392 }
393
Chris Lattner24943d22010-06-08 16:52:24 +0000394 return exe_file_spec;
395}
396
397
398bool
399SBTarget::DeleteTargetFromList (TargetList *list)
400{
Greg Clayton63094e02010-06-23 01:19:29 +0000401 if (m_opaque_sp)
402 return list->DeleteTarget (m_opaque_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000403 else
404 return false;
405}
406
407bool
Chris Lattner24943d22010-06-08 16:52:24 +0000408SBTarget::operator == (const SBTarget &rhs) const
409{
Greg Clayton63094e02010-06-23 01:19:29 +0000410 return m_opaque_sp.get() == rhs.m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000411}
412
413bool
414SBTarget::operator != (const SBTarget &rhs) const
415{
Greg Clayton63094e02010-06-23 01:19:29 +0000416 return m_opaque_sp.get() != rhs.m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000417}
418
419lldb_private::Target *
Greg Clayton63094e02010-06-23 01:19:29 +0000420SBTarget::operator ->() const
Chris Lattner24943d22010-06-08 16:52:24 +0000421{
Greg Clayton63094e02010-06-23 01:19:29 +0000422 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000423}
Greg Clayton63094e02010-06-23 01:19:29 +0000424
425lldb_private::Target *
426SBTarget::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000427{
Greg Clayton63094e02010-06-23 01:19:29 +0000428 return m_opaque_sp.get();
429}
430
431void
432SBTarget::reset (const lldb::TargetSP& target_sp)
433{
434 m_opaque_sp = target_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000435}
436
437SBBreakpoint
438SBTarget::BreakpointCreateByLocation (const char *file, uint32_t line)
439{
Caroline Tice7826c882010-10-26 03:11:13 +0000440 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
441
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000442 //if (log)
443 // log->Printf ("SBTarget::BreakpointCreateByLocation (const char *file, uint32_t line) file = '%s', line = %d",
444 // file, line);
Caroline Tice7826c882010-10-26 03:11:13 +0000445
Chris Lattner24943d22010-06-08 16:52:24 +0000446 SBBreakpoint sb_bp;
447 if (file != NULL && line != 0)
448 sb_bp = BreakpointCreateByLocation (SBFileSpec (file), line);
Caroline Tice7826c882010-10-26 03:11:13 +0000449
450 if (log)
451 {
452 SBStream sstr;
453 sb_bp.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000454 log->Printf("SBTarget::BreakpointCreateByLocation (this.sp=%p, file='%s', line=%d) => "
455 "SBBreakpoint : this.sp = %p, '%s'", m_opaque_sp.get(), file, line, sb_bp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000456 }
457
Chris Lattner24943d22010-06-08 16:52:24 +0000458 return sb_bp;
459}
460
461SBBreakpoint
462SBTarget::BreakpointCreateByLocation (const SBFileSpec &sb_file_spec, uint32_t line)
463{
Caroline Tice7826c882010-10-26 03:11:13 +0000464 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
465
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000466 //if (log)
467 // log->Printf ("SBTarget::BreakpointCreateByLocation (const SBFileSpec &sb_file_spec, uint32_t line) "
468 // "sb_file_spec (%p), line = %d)", &sb_file_spec, line);
Caroline Tice7826c882010-10-26 03:11:13 +0000469
Chris Lattner24943d22010-06-08 16:52:24 +0000470 SBBreakpoint sb_bp;
Greg Clayton63094e02010-06-23 01:19:29 +0000471 if (m_opaque_sp.get() && line != 0)
472 *sb_bp = m_opaque_sp->CreateBreakpoint (NULL, *sb_file_spec, line, true, false);
Caroline Tice7826c882010-10-26 03:11:13 +0000473
474 if (log)
475 {
476 SBStream sstr;
477 sb_bp.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000478 log->Printf ("SBTarget::BreakpointCreateByLocation (this.sp=%p, sb_file_spec.ap=%p, line=%d) => "
479 "SBBreakpoint : this.sp = %p, '%s'", m_opaque_sp.get(), sb_file_spec.get(), line, sb_bp.get(),
Caroline Tice7826c882010-10-26 03:11:13 +0000480 sstr.GetData());
481 }
482
Chris Lattner24943d22010-06-08 16:52:24 +0000483 return sb_bp;
484}
485
486SBBreakpoint
487SBTarget::BreakpointCreateByName (const char *symbol_name, const char *module_name)
488{
Caroline Tice7826c882010-10-26 03:11:13 +0000489 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
490
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000491 //if (log)
492 // log->Printf ("SBTarget::BreakpointCreateByName (const char *symbol_name, const char *module_name) "
493 // "symbol_name = %s, module_name = %s)", symbol_name, module_name);
Caroline Tice7826c882010-10-26 03:11:13 +0000494
Chris Lattner24943d22010-06-08 16:52:24 +0000495 SBBreakpoint sb_bp;
Greg Clayton63094e02010-06-23 01:19:29 +0000496 if (m_opaque_sp.get() && symbol_name && symbol_name[0])
Chris Lattner24943d22010-06-08 16:52:24 +0000497 {
498 if (module_name && module_name[0])
499 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000500 FileSpec module_file_spec(module_name, false);
Jim Ingham7ec03bd2010-09-30 21:21:43 +0000501 *sb_bp = m_opaque_sp->CreateBreakpoint (&module_file_spec, symbol_name, eFunctionNameTypeFull | eFunctionNameTypeBase, false);
Chris Lattner24943d22010-06-08 16:52:24 +0000502 }
503 else
504 {
Jim Ingham7ec03bd2010-09-30 21:21:43 +0000505 *sb_bp = m_opaque_sp->CreateBreakpoint (NULL, symbol_name, eFunctionNameTypeFull | eFunctionNameTypeBase, false);
Chris Lattner24943d22010-06-08 16:52:24 +0000506 }
507 }
Caroline Tice7826c882010-10-26 03:11:13 +0000508
509 if (log)
510 {
511 SBStream sstr;
512 sb_bp.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000513 log->Printf ("SBTarget::BreakpointCreateByName (this.sp=%p, symbol_name='%s', module_name='%s') => "
514 "SBBreakpoint : this.sp = %p, '%s'", m_opaque_sp.get(), symbol_name, module_name, sb_bp.get(),
515 sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000516 }
517
Chris Lattner24943d22010-06-08 16:52:24 +0000518 return sb_bp;
519}
520
521SBBreakpoint
522SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, const char *module_name)
523{
Caroline Tice7826c882010-10-26 03:11:13 +0000524 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
525
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000526 //if (log)
527 // log->Printf ("SBTarget::BreakpointCreateByRegex (const char *symbol_name_regex, const char *module_name) "
528 // "symbol_name_regex = %s, module_name = %s)", symbol_name_regex, module_name);
Caroline Tice7826c882010-10-26 03:11:13 +0000529
Chris Lattner24943d22010-06-08 16:52:24 +0000530 SBBreakpoint sb_bp;
Greg Clayton63094e02010-06-23 01:19:29 +0000531 if (m_opaque_sp.get() && symbol_name_regex && symbol_name_regex[0])
Chris Lattner24943d22010-06-08 16:52:24 +0000532 {
533 RegularExpression regexp(symbol_name_regex);
534
535 if (module_name && module_name[0])
536 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000537 FileSpec module_file_spec(module_name, false);
Chris Lattner24943d22010-06-08 16:52:24 +0000538
Greg Clayton63094e02010-06-23 01:19:29 +0000539 *sb_bp = m_opaque_sp->CreateBreakpoint (&module_file_spec, regexp, false);
Chris Lattner24943d22010-06-08 16:52:24 +0000540 }
541 else
542 {
Greg Clayton63094e02010-06-23 01:19:29 +0000543 *sb_bp = m_opaque_sp->CreateBreakpoint (NULL, regexp, false);
Chris Lattner24943d22010-06-08 16:52:24 +0000544 }
545 }
Caroline Tice7826c882010-10-26 03:11:13 +0000546
547 if (log)
548 {
549 SBStream sstr;
550 sb_bp.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000551 log->Printf ("SBTarget::BreakpointCreateByRegex (this.sp=%p, symbol_name_regex='%s', module_name='%s') "
552 "=> SBBreakpoint : this.sp = %p, '%s'", m_opaque_sp.get(), symbol_name_regex, module_name,
553 sb_bp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000554 }
555
Chris Lattner24943d22010-06-08 16:52:24 +0000556 return sb_bp;
557}
558
559
560
561SBBreakpoint
562SBTarget::BreakpointCreateByAddress (addr_t address)
563{
Caroline Tice7826c882010-10-26 03:11:13 +0000564 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
565
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000566 //if (log)
567 // log->Printf ("SBTarget::BreakpointCreateByAddress (addr_t address) address = %p", address);
Caroline Tice7826c882010-10-26 03:11:13 +0000568
Chris Lattner24943d22010-06-08 16:52:24 +0000569 SBBreakpoint sb_bp;
Greg Clayton63094e02010-06-23 01:19:29 +0000570 if (m_opaque_sp.get())
571 *sb_bp = m_opaque_sp->CreateBreakpoint (address, false);
Caroline Tice7826c882010-10-26 03:11:13 +0000572
573 if (log)
574 {
575 SBStream sstr;
576 sb_bp.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000577 log->Printf ("SBTarget::BreakpointCreateByAddress (this.sp=%p, address=%p) => "
578 "SBBreakpoint : this.sp = %p, '%s')", m_opaque_sp.get(), address, sb_bp.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000579 }
580
Chris Lattner24943d22010-06-08 16:52:24 +0000581 return sb_bp;
582}
583
Chris Lattner24943d22010-06-08 16:52:24 +0000584SBBreakpoint
585SBTarget::FindBreakpointByID (break_id_t bp_id)
586{
Caroline Tice7826c882010-10-26 03:11:13 +0000587 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
588
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000589 //if (log)
590 // log->Printf ("SBTarget::FindBreakpointByID (break_id_t bp_id) bp_id = %d", bp_id);
Caroline Tice7826c882010-10-26 03:11:13 +0000591
Chris Lattner24943d22010-06-08 16:52:24 +0000592 SBBreakpoint sb_breakpoint;
Greg Clayton63094e02010-06-23 01:19:29 +0000593 if (m_opaque_sp && bp_id != LLDB_INVALID_BREAK_ID)
594 *sb_breakpoint = m_opaque_sp->GetBreakpointByID (bp_id);
Caroline Tice7826c882010-10-26 03:11:13 +0000595
596 if (log)
597 {
598 SBStream sstr;
599 sb_breakpoint.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000600 log->Printf ("SBTarget::FindBreakpointByID (this.sp=%p, bp_id=%d) => SBBreakpoint : this.sp = %p, '%s'",
601 m_opaque_sp.get(), (uint32_t) bp_id, sb_breakpoint.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000602 }
603
Chris Lattner24943d22010-06-08 16:52:24 +0000604 return sb_breakpoint;
605}
606
Greg Claytonc7f5d5c2010-07-23 23:33:17 +0000607uint32_t
608SBTarget::GetNumBreakpoints () const
609{
610 if (m_opaque_sp)
611 return m_opaque_sp->GetBreakpointList().GetSize();
612 return 0;
613}
614
615SBBreakpoint
616SBTarget::GetBreakpointAtIndex (uint32_t idx) const
617{
618 SBBreakpoint sb_breakpoint;
619 if (m_opaque_sp)
620 *sb_breakpoint = m_opaque_sp->GetBreakpointList().GetBreakpointAtIndex(idx);
621 return sb_breakpoint;
622}
Chris Lattner24943d22010-06-08 16:52:24 +0000623
624bool
625SBTarget::BreakpointDelete (break_id_t bp_id)
626{
Caroline Tice7826c882010-10-26 03:11:13 +0000627 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
628
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000629 //if (log)
630 // log->Printf ("SBTarget::BreakpointDelete (break_id_t bp_id) bp_id = %d", bp_id);
Caroline Tice7826c882010-10-26 03:11:13 +0000631
632 bool result = false;
Greg Clayton63094e02010-06-23 01:19:29 +0000633 if (m_opaque_sp)
Caroline Tice7826c882010-10-26 03:11:13 +0000634 result = m_opaque_sp->RemoveBreakpointByID (bp_id);
635
636 if (log)
637 {
638 if (result)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000639 log->Printf ("SBTarget::BreakpointDelete (this.sp=%p, bp_id=%d) => 'true'", m_opaque_sp.get(),
640 (uint32_t) bp_id);
Caroline Tice7826c882010-10-26 03:11:13 +0000641 else
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000642 log->Printf ("SBTarget::BreakpointDelete (this.sp=%p, bp_id=%d) => 'false'", m_opaque_sp.get(),
643 (uint32_t) bp_id);
Caroline Tice7826c882010-10-26 03:11:13 +0000644 }
645
646 return result;
Chris Lattner24943d22010-06-08 16:52:24 +0000647}
648
649bool
650SBTarget::EnableAllBreakpoints ()
651{
Greg Clayton63094e02010-06-23 01:19:29 +0000652 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000653 {
Greg Clayton63094e02010-06-23 01:19:29 +0000654 m_opaque_sp->EnableAllBreakpoints ();
Chris Lattner24943d22010-06-08 16:52:24 +0000655 return true;
656 }
657 return false;
658}
659
660bool
661SBTarget::DisableAllBreakpoints ()
662{
Greg Clayton63094e02010-06-23 01:19:29 +0000663 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000664 {
Greg Clayton63094e02010-06-23 01:19:29 +0000665 m_opaque_sp->DisableAllBreakpoints ();
Chris Lattner24943d22010-06-08 16:52:24 +0000666 return true;
667 }
668 return false;
669}
670
671bool
672SBTarget::DeleteAllBreakpoints ()
673{
Greg Clayton63094e02010-06-23 01:19:29 +0000674 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000675 {
Greg Clayton63094e02010-06-23 01:19:29 +0000676 m_opaque_sp->RemoveAllBreakpoints ();
Chris Lattner24943d22010-06-08 16:52:24 +0000677 return true;
678 }
679 return false;
680}
681
682
683uint32_t
684SBTarget::GetNumModules () const
685{
Caroline Tice7826c882010-10-26 03:11:13 +0000686 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
687
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000688 //if (log)
689 // log->Printf ("SBTarget::GetNumModules ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000690
691 uint32_t num = 0;
Greg Clayton63094e02010-06-23 01:19:29 +0000692 if (m_opaque_sp)
Caroline Tice7826c882010-10-26 03:11:13 +0000693 num = m_opaque_sp->GetImages().GetSize();
694
695 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000696 log->Printf ("SBTarget::GetNumModules (this.sp=%p) => %d", m_opaque_sp.get(), num);
Caroline Tice7826c882010-10-26 03:11:13 +0000697
698 return num;
Chris Lattner24943d22010-06-08 16:52:24 +0000699}
700
Greg Clayton43490d12010-07-30 20:12:55 +0000701void
702SBTarget::Clear ()
703{
Caroline Tice7826c882010-10-26 03:11:13 +0000704 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
705
706 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000707 log->Printf ("SBTarget::Clear (this.sp=%p)", m_opaque_sp.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000708
Greg Clayton43490d12010-07-30 20:12:55 +0000709 m_opaque_sp.reset();
710}
711
712
Chris Lattner24943d22010-06-08 16:52:24 +0000713SBModule
714SBTarget::FindModule (const SBFileSpec &sb_file_spec)
715{
716 SBModule sb_module;
Greg Clayton63094e02010-06-23 01:19:29 +0000717 if (m_opaque_sp && sb_file_spec.IsValid())
718 sb_module.SetModule (m_opaque_sp->GetImages().FindFirstModuleForFileSpec (*sb_file_spec, NULL));
Chris Lattner24943d22010-06-08 16:52:24 +0000719 return sb_module;
720}
721
722SBModule
723SBTarget::GetModuleAtIndex (uint32_t idx)
724{
Caroline Tice7826c882010-10-26 03:11:13 +0000725 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
726
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000727 //if (log)
728 // log->Printf ("SBTarget::GetModuleAtIndex (uint32_t idx) idx = %d", idx);
Caroline Tice7826c882010-10-26 03:11:13 +0000729
Chris Lattner24943d22010-06-08 16:52:24 +0000730 SBModule sb_module;
Greg Clayton63094e02010-06-23 01:19:29 +0000731 if (m_opaque_sp)
732 sb_module.SetModule(m_opaque_sp->GetImages().GetModuleAtIndex(idx));
Caroline Tice7826c882010-10-26 03:11:13 +0000733
734 if (log)
735 {
736 SBStream sstr;
737 sb_module.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000738 log->Printf ("SBTarget::GetModuleAtIndex (this.sp=%p, idx=%d) => SBModule: this = %p, '%s'",
739 m_opaque_sp.get(), idx, sb_module.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000740 }
741
Chris Lattner24943d22010-06-08 16:52:24 +0000742 return sb_module;
743}
744
745
746SBBroadcaster
747SBTarget::GetBroadcaster () const
748{
Caroline Tice7826c882010-10-26 03:11:13 +0000749 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
750
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000751 //if (log)
752 // log->Printf ("SBTarget::GetBroadcaster ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000753
Greg Clayton63094e02010-06-23 01:19:29 +0000754 SBBroadcaster broadcaster(m_opaque_sp.get(), false);
Caroline Tice7826c882010-10-26 03:11:13 +0000755
756 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000757 log->Printf ("SBTarget::GetBroadcaster (this.sp=%p) => SBBroadcaster (this.obj = %p)",
758 m_opaque_sp.get(), broadcaster.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000759
Chris Lattner24943d22010-06-08 16:52:24 +0000760 return broadcaster;
761}
762
763void
Greg Clayton70436352010-06-30 23:03:03 +0000764SBTarget::Disassemble (lldb::addr_t start_addr, lldb::addr_t end_addr, const char *module_name)
Chris Lattner24943d22010-06-08 16:52:24 +0000765{
Greg Clayton70436352010-06-30 23:03:03 +0000766 if (start_addr == LLDB_INVALID_ADDRESS)
Chris Lattner24943d22010-06-08 16:52:24 +0000767 return;
768
Greg Clayton63094e02010-06-23 01:19:29 +0000769 FILE *out = m_opaque_sp->GetDebugger().GetOutputFileHandle();
Chris Lattner24943d22010-06-08 16:52:24 +0000770 if (out == NULL)
771 return;
772
Greg Clayton63094e02010-06-23 01:19:29 +0000773 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000774 {
Greg Clayton70436352010-06-30 23:03:03 +0000775 ModuleSP module_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000776 if (module_name != NULL)
777 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000778 FileSpec module_file_spec (module_name, false);
Greg Clayton70436352010-06-30 23:03:03 +0000779 module_sp = m_opaque_sp->GetImages().FindFirstModuleForFileSpec (module_file_spec, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000780 }
Greg Clayton70436352010-06-30 23:03:03 +0000781
782 AddressRange range;
783
784 // Make sure the process object is alive if we have one (it might be
785 // created but we might not be launched yet).
Greg Claytoneea26402010-09-14 23:36:40 +0000786
Greg Clayton1a3083a2010-10-06 03:53:16 +0000787 Process *sb_process = m_opaque_sp->GetProcessSP().get();
788 if (sb_process && !sb_process->IsAlive())
789 sb_process = NULL;
Greg Clayton70436352010-06-30 23:03:03 +0000790
791 // If we are given a module, then "start_addr" is a file address in
792 // that module.
793 if (module_sp)
794 {
795 if (!module_sp->ResolveFileAddress (start_addr, range.GetBaseAddress()))
796 range.GetBaseAddress().SetOffset(start_addr);
797 }
Greg Claytoneea26402010-09-14 23:36:40 +0000798 else if (m_opaque_sp->GetSectionLoadList().IsEmpty() == false)
Greg Clayton70436352010-06-30 23:03:03 +0000799 {
800 // We don't have a module, se we need to figure out if "start_addr"
801 // resolves to anything in a running process.
Greg Claytoneea26402010-09-14 23:36:40 +0000802 if (!m_opaque_sp->GetSectionLoadList().ResolveLoadAddress (start_addr, range.GetBaseAddress()))
Greg Clayton70436352010-06-30 23:03:03 +0000803 range.GetBaseAddress().SetOffset(start_addr);
804 }
805 else
806 {
807 if (m_opaque_sp->GetImages().ResolveFileAddress (start_addr, range.GetBaseAddress()))
808 range.GetBaseAddress().SetOffset(start_addr);
809 }
Chris Lattner24943d22010-06-08 16:52:24 +0000810
811 // For now, we need a process; the disassembly functions insist. If we don't have one already,
812 // make one.
813
Greg Clayton70436352010-06-30 23:03:03 +0000814 ExecutionContext exe_ctx;
Chris Lattner24943d22010-06-08 16:52:24 +0000815
Greg Clayton1a3083a2010-10-06 03:53:16 +0000816 if (sb_process)
817 sb_process->CalculateExecutionContext(exe_ctx);
Greg Clayton70436352010-06-30 23:03:03 +0000818 else
Greg Claytona830adb2010-10-04 01:05:56 +0000819 m_opaque_sp->CalculateExecutionContext(exe_ctx);
Chris Lattner24943d22010-06-08 16:52:24 +0000820
Greg Clayton70436352010-06-30 23:03:03 +0000821 if (end_addr == LLDB_INVALID_ADDRESS || end_addr < start_addr)
822 range.SetByteSize( DEFAULT_DISASM_BYTE_SIZE);
823 else
824 range.SetByteSize(end_addr - start_addr);
Chris Lattner24943d22010-06-08 16:52:24 +0000825
Greg Clayton70436352010-06-30 23:03:03 +0000826 StreamFile out_stream (out);
Chris Lattner24943d22010-06-08 16:52:24 +0000827
Greg Clayton70436352010-06-30 23:03:03 +0000828 Disassembler::Disassemble (m_opaque_sp->GetDebugger(),
829 m_opaque_sp->GetArchitecture(),
830 exe_ctx,
831 range,
832 3,
833 false,
834 out_stream);
Chris Lattner24943d22010-06-08 16:52:24 +0000835 }
836}
837
838void
839SBTarget::Disassemble (const char *function_name, const char *module_name)
840{
841 if (function_name == NULL)
842 return;
843
Greg Clayton63094e02010-06-23 01:19:29 +0000844 FILE *out = m_opaque_sp->GetDebugger().GetOutputFileHandle();
Chris Lattner24943d22010-06-08 16:52:24 +0000845 if (out == NULL)
846 return;
847
Greg Clayton63094e02010-06-23 01:19:29 +0000848 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +0000849 {
Greg Clayton70436352010-06-30 23:03:03 +0000850 Disassembler *disassembler = Disassembler::FindPlugin (m_opaque_sp->GetArchitecture());
Chris Lattner24943d22010-06-08 16:52:24 +0000851 if (disassembler == NULL)
852 return;
853
Greg Clayton70436352010-06-30 23:03:03 +0000854 ModuleSP module_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000855 if (module_name != NULL)
Chris Lattner24943d22010-06-08 16:52:24 +0000856 {
Greg Clayton537a7a82010-10-20 20:54:39 +0000857 FileSpec module_file_spec (module_name, false);
Greg Clayton70436352010-06-30 23:03:03 +0000858 module_sp = m_opaque_sp->GetImages().FindFirstModuleForFileSpec (module_file_spec, NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000859 }
Greg Clayton70436352010-06-30 23:03:03 +0000860
861 ExecutionContext exe_ctx;
862
863 // Make sure the process object is alive if we have one (it might be
864 // created but we might not be launched yet).
Greg Clayton1a3083a2010-10-06 03:53:16 +0000865 Process *sb_process = m_opaque_sp->GetProcessSP().get();
866 if (sb_process && !sb_process->IsAlive())
867 sb_process = NULL;
Greg Clayton70436352010-06-30 23:03:03 +0000868
Greg Clayton1a3083a2010-10-06 03:53:16 +0000869 if (sb_process)
870 sb_process->CalculateExecutionContext(exe_ctx);
Greg Clayton70436352010-06-30 23:03:03 +0000871 else
Greg Claytona830adb2010-10-04 01:05:56 +0000872 m_opaque_sp->CalculateExecutionContext(exe_ctx);
Greg Clayton70436352010-06-30 23:03:03 +0000873
874
875 StreamFile out_stream (out);
876
877 Disassembler::Disassemble (m_opaque_sp->GetDebugger(),
878 m_opaque_sp->GetArchitecture(),
879 exe_ctx,
880 ConstString (function_name),
881 module_sp.get(),
882 3,
883 false,
884 out_stream);
Chris Lattner24943d22010-06-08 16:52:24 +0000885 }
886}
Caroline Tice98f930f2010-09-20 05:20:02 +0000887
888bool
Caroline Tice7826c882010-10-26 03:11:13 +0000889SBTarget::GetDescription (SBStream &description, lldb::DescriptionLevel description_level)
Caroline Tice98f930f2010-09-20 05:20:02 +0000890{
891 if (m_opaque_sp)
Caroline Ticee7a566e2010-09-20 16:21:41 +0000892 {
Caroline Ticee49ec182010-09-22 23:01:29 +0000893 description.ref();
Caroline Tice7826c882010-10-26 03:11:13 +0000894 m_opaque_sp->Dump (description.get(), description_level);
895 }
896 else
897 description.Printf ("No value");
898
899 return true;
900}
901
902bool
903SBTarget::GetDescription (SBStream &description, lldb::DescriptionLevel description_level) const
904{
905 if (m_opaque_sp)
906 {
907 description.ref();
908 m_opaque_sp->Dump (description.get(), description_level);
Caroline Ticee7a566e2010-09-20 16:21:41 +0000909 }
Caroline Tice98f930f2010-09-20 05:20:02 +0000910 else
911 description.Printf ("No value");
912
913 return true;
914}