blob: e91874ff4fc3f5d9bb2d2f3ddf9a3bf452fdf3b3 [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001//===-- SBBreakpointLocation.cpp --------------------------------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Chris Lattner30fdc8d2010-06-08 16:52:24 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "lldb/API/SBBreakpointLocation.h"
Jonas Devliegherebaf56642019-03-06 00:06:00 +000010#include "SBReproducerPrivate.h"
Greg Claytonf644ddf2011-09-24 01:37:21 +000011#include "lldb/API/SBAddress.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000012#include "lldb/API/SBDebugger.h"
Kate Stoneb9c1b512016-09-06 20:57:50 +000013#include "lldb/API/SBDefines.h"
Caroline Ticedde9cff2010-09-20 05:20:02 +000014#include "lldb/API/SBStream.h"
Jim Inghamaf26b222017-08-02 00:16:10 +000015#include "lldb/API/SBStringList.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000016
Greg Clayton4e78f602010-11-18 18:52:36 +000017#include "lldb/Breakpoint/Breakpoint.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000018#include "lldb/Breakpoint/BreakpointLocation.h"
Jim Inghamd80102e2014-04-02 01:04:55 +000019#include "lldb/Core/Debugger.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000020#include "lldb/Core/StreamFile.h"
Jim Inghamd80102e2014-04-02 01:04:55 +000021#include "lldb/Interpreter/CommandInterpreter.h"
22#include "lldb/Interpreter/ScriptInterpreter.h"
Greg Claytonaf67cec2010-12-20 20:49:23 +000023#include "lldb/Target/Target.h"
Jim Ingham62b02c62010-06-18 01:47:08 +000024#include "lldb/Target/ThreadSpec.h"
Zachary Turnerbf9a7732017-02-02 21:39:50 +000025#include "lldb/Utility/Stream.h"
Kate Stoneb9c1b512016-09-06 20:57:50 +000026#include "lldb/lldb-defines.h"
27#include "lldb/lldb-types.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000028
29using namespace lldb;
30using namespace lldb_private;
31
Jonas Devliegherebaf56642019-03-06 00:06:00 +000032SBBreakpointLocation::SBBreakpointLocation() {
33 LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBBreakpointLocation);
34}
Chris Lattner30fdc8d2010-06-08 16:52:24 +000035
Kate Stoneb9c1b512016-09-06 20:57:50 +000036SBBreakpointLocation::SBBreakpointLocation(
37 const lldb::BreakpointLocationSP &break_loc_sp)
Pavel Labathc5789432017-03-01 10:08:48 +000038 : m_opaque_wp(break_loc_sp) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000039 LLDB_RECORD_CONSTRUCTOR(SBBreakpointLocation,
40 (const lldb::BreakpointLocationSP &), break_loc_sp);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000041}
42
Kate Stoneb9c1b512016-09-06 20:57:50 +000043SBBreakpointLocation::SBBreakpointLocation(const SBBreakpointLocation &rhs)
Jonas Devliegherebaf56642019-03-06 00:06:00 +000044 : m_opaque_wp(rhs.m_opaque_wp) {
45 LLDB_RECORD_CONSTRUCTOR(SBBreakpointLocation,
46 (const lldb::SBBreakpointLocation &), rhs);
47}
Caroline Ticeceb6b132010-10-26 03:11:13 +000048
Kate Stoneb9c1b512016-09-06 20:57:50 +000049const SBBreakpointLocation &SBBreakpointLocation::
50operator=(const SBBreakpointLocation &rhs) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000051 LLDB_RECORD_METHOD(
52 const lldb::SBBreakpointLocation &,
53 SBBreakpointLocation, operator=,(const lldb::SBBreakpointLocation &),
54 rhs);
55
Pavel Labathc5789432017-03-01 10:08:48 +000056 m_opaque_wp = rhs.m_opaque_wp;
Kate Stoneb9c1b512016-09-06 20:57:50 +000057 return *this;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000058}
59
Kate Stoneb9c1b512016-09-06 20:57:50 +000060SBBreakpointLocation::~SBBreakpointLocation() {}
61
Pavel Labathc5789432017-03-01 10:08:48 +000062BreakpointLocationSP SBBreakpointLocation::GetSP() const {
63 return m_opaque_wp.lock();
64}
65
Jonas Devliegherebaf56642019-03-06 00:06:00 +000066bool SBBreakpointLocation::IsValid() const {
67 LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBreakpointLocation, IsValid);
Pavel Labath7f5237b2019-03-11 13:58:46 +000068 return this->operator bool();
69}
70SBBreakpointLocation::operator bool() const {
71 LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBBreakpointLocation, operator bool);
Jonas Devliegherebaf56642019-03-06 00:06:00 +000072
73 return bool(GetSP());
74}
Kate Stoneb9c1b512016-09-06 20:57:50 +000075
76SBAddress SBBreakpointLocation::GetAddress() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000077 LLDB_RECORD_METHOD_NO_ARGS(lldb::SBAddress, SBBreakpointLocation, GetAddress);
78
Pavel Labathc5789432017-03-01 10:08:48 +000079 BreakpointLocationSP loc_sp = GetSP();
Jonas Devliegherebaf56642019-03-06 00:06:00 +000080 if (loc_sp) {
81 return LLDB_RECORD_RESULT(SBAddress(&loc_sp->GetAddress()));
82 }
83
84 return LLDB_RECORD_RESULT(SBAddress());
Greg Claytonefabb122010-11-05 23:17:00 +000085}
86
Kate Stoneb9c1b512016-09-06 20:57:50 +000087addr_t SBBreakpointLocation::GetLoadAddress() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000088 LLDB_RECORD_METHOD_NO_ARGS(lldb::addr_t, SBBreakpointLocation,
89 GetLoadAddress);
90
Kate Stoneb9c1b512016-09-06 20:57:50 +000091 addr_t ret_addr = LLDB_INVALID_ADDRESS;
Pavel Labathc5789432017-03-01 10:08:48 +000092 BreakpointLocationSP loc_sp = GetSP();
Kate Stoneb9c1b512016-09-06 20:57:50 +000093
Pavel Labathc5789432017-03-01 10:08:48 +000094 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000095 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +000096 loc_sp->GetTarget().GetAPIMutex());
97 ret_addr = loc_sp->GetLoadAddress();
Kate Stoneb9c1b512016-09-06 20:57:50 +000098 }
99
100 return ret_addr;
Greg Claytonefabb122010-11-05 23:17:00 +0000101}
102
Kate Stoneb9c1b512016-09-06 20:57:50 +0000103void SBBreakpointLocation::SetEnabled(bool enabled) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000104 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetEnabled, (bool), enabled);
105
Pavel Labathc5789432017-03-01 10:08:48 +0000106 BreakpointLocationSP loc_sp = GetSP();
107 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000108 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000109 loc_sp->GetTarget().GetAPIMutex());
110 loc_sp->SetEnabled(enabled);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000111 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000112}
113
Kate Stoneb9c1b512016-09-06 20:57:50 +0000114bool SBBreakpointLocation::IsEnabled() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000115 LLDB_RECORD_METHOD_NO_ARGS(bool, SBBreakpointLocation, IsEnabled);
116
Pavel Labathc5789432017-03-01 10:08:48 +0000117 BreakpointLocationSP loc_sp = GetSP();
118 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000119 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000120 loc_sp->GetTarget().GetAPIMutex());
121 return loc_sp->IsEnabled();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000122 } else
Greg Claytonaf67cec2010-12-20 20:49:23 +0000123 return false;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000124}
125
Bruce Mitchenerccbf7982017-07-19 14:31:19 +0000126uint32_t SBBreakpointLocation::GetHitCount() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000127 LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBBreakpointLocation, GetHitCount);
128
Bruce Mitchenerccbf7982017-07-19 14:31:19 +0000129 BreakpointLocationSP loc_sp = GetSP();
130 if (loc_sp) {
131 std::lock_guard<std::recursive_mutex> guard(
132 loc_sp->GetTarget().GetAPIMutex());
133 return loc_sp->GetHitCount();
134 } else
135 return 0;
136}
137
Kate Stoneb9c1b512016-09-06 20:57:50 +0000138uint32_t SBBreakpointLocation::GetIgnoreCount() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000139 LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBBreakpointLocation, GetIgnoreCount);
140
Pavel Labathc5789432017-03-01 10:08:48 +0000141 BreakpointLocationSP loc_sp = GetSP();
142 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000143 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000144 loc_sp->GetTarget().GetAPIMutex());
145 return loc_sp->GetIgnoreCount();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000146 } else
147 return 0;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000148}
149
Kate Stoneb9c1b512016-09-06 20:57:50 +0000150void SBBreakpointLocation::SetIgnoreCount(uint32_t n) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000151 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetIgnoreCount, (uint32_t), n);
152
Pavel Labathc5789432017-03-01 10:08:48 +0000153 BreakpointLocationSP loc_sp = GetSP();
154 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000155 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000156 loc_sp->GetTarget().GetAPIMutex());
157 loc_sp->SetIgnoreCount(n);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000158 }
Caroline Ticedde9cff2010-09-20 05:20:02 +0000159}
160
Kate Stoneb9c1b512016-09-06 20:57:50 +0000161void SBBreakpointLocation::SetCondition(const char *condition) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000162 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetCondition, (const char *),
163 condition);
164
Pavel Labathc5789432017-03-01 10:08:48 +0000165 BreakpointLocationSP loc_sp = GetSP();
166 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000167 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000168 loc_sp->GetTarget().GetAPIMutex());
169 loc_sp->SetCondition(condition);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000170 }
Jim Inghamb08a9442012-05-16 00:51:15 +0000171}
172
Kate Stoneb9c1b512016-09-06 20:57:50 +0000173const char *SBBreakpointLocation::GetCondition() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000174 LLDB_RECORD_METHOD_NO_ARGS(const char *, SBBreakpointLocation, GetCondition);
175
Pavel Labathc5789432017-03-01 10:08:48 +0000176 BreakpointLocationSP loc_sp = GetSP();
177 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000178 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000179 loc_sp->GetTarget().GetAPIMutex());
180 return loc_sp->GetConditionText();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000181 }
182 return NULL;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000183}
184
Jim Inghamf08f5c92017-08-03 18:13:24 +0000185void SBBreakpointLocation::SetAutoContinue(bool auto_continue) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000186 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetAutoContinue, (bool),
187 auto_continue);
188
Jim Inghamf08f5c92017-08-03 18:13:24 +0000189 BreakpointLocationSP loc_sp = GetSP();
190 if (loc_sp) {
191 std::lock_guard<std::recursive_mutex> guard(
192 loc_sp->GetTarget().GetAPIMutex());
193 loc_sp->SetAutoContinue(auto_continue);
194 }
195}
196
197bool SBBreakpointLocation::GetAutoContinue() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000198 LLDB_RECORD_METHOD_NO_ARGS(bool, SBBreakpointLocation, GetAutoContinue);
199
Jim Inghamf08f5c92017-08-03 18:13:24 +0000200 BreakpointLocationSP loc_sp = GetSP();
201 if (loc_sp) {
202 std::lock_guard<std::recursive_mutex> guard(
203 loc_sp->GetTarget().GetAPIMutex());
204 return loc_sp->IsAutoContinue();
205 }
Jim Ingham1c7dc822017-08-03 19:38:38 +0000206 return false;
Jim Inghamf08f5c92017-08-03 18:13:24 +0000207}
208
Kate Stoneb9c1b512016-09-06 20:57:50 +0000209void SBBreakpointLocation::SetScriptCallbackFunction(
210 const char *callback_function_name) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000211 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetScriptCallbackFunction,
212 (const char *), callback_function_name);
213
Pavel Labathc5789432017-03-01 10:08:48 +0000214 BreakpointLocationSP loc_sp = GetSP();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000215
Pavel Labathc5789432017-03-01 10:08:48 +0000216 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000217 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000218 loc_sp->GetTarget().GetAPIMutex());
219 BreakpointOptions *bp_options = loc_sp->GetLocationOptions();
220 loc_sp->GetBreakpoint()
Kate Stoneb9c1b512016-09-06 20:57:50 +0000221 .GetTarget()
222 .GetDebugger()
223 .GetCommandInterpreter()
224 .GetScriptInterpreter()
225 ->SetBreakpointCommandCallbackFunction(bp_options,
226 callback_function_name);
227 }
228}
229
230SBError
231SBBreakpointLocation::SetScriptCallbackBody(const char *callback_body_text) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000232 LLDB_RECORD_METHOD(lldb::SBError, SBBreakpointLocation, SetScriptCallbackBody,
233 (const char *), callback_body_text);
234
Pavel Labathc5789432017-03-01 10:08:48 +0000235 BreakpointLocationSP loc_sp = GetSP();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000236
237 SBError sb_error;
Pavel Labathc5789432017-03-01 10:08:48 +0000238 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000239 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000240 loc_sp->GetTarget().GetAPIMutex());
241 BreakpointOptions *bp_options = loc_sp->GetLocationOptions();
Zachary Turner97206d52017-05-12 04:51:55 +0000242 Status error =
Pavel Labathc5789432017-03-01 10:08:48 +0000243 loc_sp->GetBreakpoint()
Kate Stoneb9c1b512016-09-06 20:57:50 +0000244 .GetTarget()
245 .GetDebugger()
246 .GetCommandInterpreter()
247 .GetScriptInterpreter()
248 ->SetBreakpointCommandCallback(bp_options, callback_body_text);
249 sb_error.SetError(error);
250 } else
251 sb_error.SetErrorString("invalid breakpoint");
252
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000253 return LLDB_RECORD_RESULT(sb_error);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000254}
255
Jim Inghamaf26b222017-08-02 00:16:10 +0000256void SBBreakpointLocation::SetCommandLineCommands(SBStringList &commands) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000257 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetCommandLineCommands,
258 (lldb::SBStringList &), commands);
259
Jim Inghamaf26b222017-08-02 00:16:10 +0000260 BreakpointLocationSP loc_sp = GetSP();
261 if (!loc_sp)
262 return;
263 if (commands.GetSize() == 0)
264 return;
265
266 std::lock_guard<std::recursive_mutex> guard(
267 loc_sp->GetTarget().GetAPIMutex());
268 std::unique_ptr<BreakpointOptions::CommandData> cmd_data_up(
269 new BreakpointOptions::CommandData(*commands, eScriptLanguageNone));
270
271 loc_sp->GetLocationOptions()->SetCommandDataCallback(cmd_data_up);
272}
273
274bool SBBreakpointLocation::GetCommandLineCommands(SBStringList &commands) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000275 LLDB_RECORD_METHOD(bool, SBBreakpointLocation, GetCommandLineCommands,
276 (lldb::SBStringList &), commands);
277
Jim Inghamaf26b222017-08-02 00:16:10 +0000278 BreakpointLocationSP loc_sp = GetSP();
279 if (!loc_sp)
280 return false;
281 StringList command_list;
282 bool has_commands =
283 loc_sp->GetLocationOptions()->GetCommandLineCallbacks(command_list);
284 if (has_commands)
285 commands.AppendList(command_list);
286 return has_commands;
287}
288
Kate Stoneb9c1b512016-09-06 20:57:50 +0000289void SBBreakpointLocation::SetThreadID(tid_t thread_id) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000290 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetThreadID, (lldb::tid_t),
291 thread_id);
292
Pavel Labathc5789432017-03-01 10:08:48 +0000293 BreakpointLocationSP loc_sp = GetSP();
294 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000295 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000296 loc_sp->GetTarget().GetAPIMutex());
297 loc_sp->SetThreadID(thread_id);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000298 }
299}
300
301tid_t SBBreakpointLocation::GetThreadID() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000302 LLDB_RECORD_METHOD_NO_ARGS(lldb::tid_t, SBBreakpointLocation, GetThreadID);
303
Kate Stoneb9c1b512016-09-06 20:57:50 +0000304 tid_t tid = LLDB_INVALID_THREAD_ID;
Pavel Labathc5789432017-03-01 10:08:48 +0000305 BreakpointLocationSP loc_sp = GetSP();
306 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000307 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000308 loc_sp->GetTarget().GetAPIMutex());
309 return loc_sp->GetThreadID();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000310 }
311 return tid;
312}
313
314void SBBreakpointLocation::SetThreadIndex(uint32_t index) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000315 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetThreadIndex, (uint32_t),
316 index);
317
Pavel Labathc5789432017-03-01 10:08:48 +0000318 BreakpointLocationSP loc_sp = GetSP();
319 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000320 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000321 loc_sp->GetTarget().GetAPIMutex());
322 loc_sp->SetThreadIndex(index);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000323 }
324}
325
326uint32_t SBBreakpointLocation::GetThreadIndex() const {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000327 LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBBreakpointLocation,
328 GetThreadIndex);
329
Kate Stoneb9c1b512016-09-06 20:57:50 +0000330 uint32_t thread_idx = UINT32_MAX;
Pavel Labathc5789432017-03-01 10:08:48 +0000331 BreakpointLocationSP loc_sp = GetSP();
332 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000333 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000334 loc_sp->GetTarget().GetAPIMutex());
335 return loc_sp->GetThreadIndex();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000336 }
337 return thread_idx;
338}
339
340void SBBreakpointLocation::SetThreadName(const char *thread_name) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000341 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetThreadName, (const char *),
342 thread_name);
343
Pavel Labathc5789432017-03-01 10:08:48 +0000344 BreakpointLocationSP loc_sp = GetSP();
345 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000346 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000347 loc_sp->GetTarget().GetAPIMutex());
348 loc_sp->SetThreadName(thread_name);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000349 }
350}
351
352const char *SBBreakpointLocation::GetThreadName() const {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000353 LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBBreakpointLocation,
354 GetThreadName);
355
Pavel Labathc5789432017-03-01 10:08:48 +0000356 BreakpointLocationSP loc_sp = GetSP();
357 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000358 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000359 loc_sp->GetTarget().GetAPIMutex());
360 return loc_sp->GetThreadName();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000361 }
362 return NULL;
363}
364
365void SBBreakpointLocation::SetQueueName(const char *queue_name) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000366 LLDB_RECORD_METHOD(void, SBBreakpointLocation, SetQueueName, (const char *),
367 queue_name);
368
Pavel Labathc5789432017-03-01 10:08:48 +0000369 BreakpointLocationSP loc_sp = GetSP();
370 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000371 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000372 loc_sp->GetTarget().GetAPIMutex());
373 loc_sp->SetQueueName(queue_name);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000374 }
375}
376
377const char *SBBreakpointLocation::GetQueueName() const {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000378 LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBBreakpointLocation,
379 GetQueueName);
380
Pavel Labathc5789432017-03-01 10:08:48 +0000381 BreakpointLocationSP loc_sp = GetSP();
382 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000383 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000384 loc_sp->GetTarget().GetAPIMutex());
385 loc_sp->GetQueueName();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000386 }
387 return NULL;
388}
389
390bool SBBreakpointLocation::IsResolved() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000391 LLDB_RECORD_METHOD_NO_ARGS(bool, SBBreakpointLocation, IsResolved);
392
Pavel Labathc5789432017-03-01 10:08:48 +0000393 BreakpointLocationSP loc_sp = GetSP();
394 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000395 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000396 loc_sp->GetTarget().GetAPIMutex());
397 return loc_sp->IsResolved();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000398 }
399 return false;
400}
401
402void SBBreakpointLocation::SetLocation(
403 const lldb::BreakpointLocationSP &break_loc_sp) {
404 // Uninstall the callbacks?
Pavel Labathc5789432017-03-01 10:08:48 +0000405 m_opaque_wp = break_loc_sp;
Kate Stoneb9c1b512016-09-06 20:57:50 +0000406}
407
408bool SBBreakpointLocation::GetDescription(SBStream &description,
409 DescriptionLevel level) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000410 LLDB_RECORD_METHOD(bool, SBBreakpointLocation, GetDescription,
411 (lldb::SBStream &, lldb::DescriptionLevel), description,
412 level);
413
Kate Stoneb9c1b512016-09-06 20:57:50 +0000414 Stream &strm = description.ref();
Pavel Labathc5789432017-03-01 10:08:48 +0000415 BreakpointLocationSP loc_sp = GetSP();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000416
Pavel Labathc5789432017-03-01 10:08:48 +0000417 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000418 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000419 loc_sp->GetTarget().GetAPIMutex());
420 loc_sp->GetDescription(&strm, level);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000421 strm.EOL();
422 } else
423 strm.PutCString("No value");
424
425 return true;
426}
427
428break_id_t SBBreakpointLocation::GetID() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000429 LLDB_RECORD_METHOD_NO_ARGS(lldb::break_id_t, SBBreakpointLocation, GetID);
430
Pavel Labathc5789432017-03-01 10:08:48 +0000431 BreakpointLocationSP loc_sp = GetSP();
432 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000433 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000434 loc_sp->GetTarget().GetAPIMutex());
435 return loc_sp->GetID();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000436 } else
437 return LLDB_INVALID_BREAK_ID;
438}
439
440SBBreakpoint SBBreakpointLocation::GetBreakpoint() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000441 LLDB_RECORD_METHOD_NO_ARGS(lldb::SBBreakpoint, SBBreakpointLocation,
442 GetBreakpoint);
443
Pavel Labathc5789432017-03-01 10:08:48 +0000444 BreakpointLocationSP loc_sp = GetSP();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000445
446 SBBreakpoint sb_bp;
Pavel Labathc5789432017-03-01 10:08:48 +0000447 if (loc_sp) {
Kate Stoneb9c1b512016-09-06 20:57:50 +0000448 std::lock_guard<std::recursive_mutex> guard(
Pavel Labathc5789432017-03-01 10:08:48 +0000449 loc_sp->GetTarget().GetAPIMutex());
450 sb_bp = loc_sp->GetBreakpoint().shared_from_this();
Kate Stoneb9c1b512016-09-06 20:57:50 +0000451 }
452
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000453 return LLDB_RECORD_RESULT(sb_bp);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000454}