1 | //===-- BreakpointName.cpp ------------------------------------------------===// |
2 | // |
3 | // 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 |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #include "llvm/Support/Casting.h" |
10 | |
11 | #include "lldb/Breakpoint/Breakpoint.h" |
12 | #include "lldb/Breakpoint/BreakpointOptions.h" |
13 | #include "lldb/Breakpoint/BreakpointLocationCollection.h" |
14 | #include "lldb/Breakpoint/BreakpointResolver.h" |
15 | #include "lldb/Breakpoint/BreakpointResolverFileLine.h" |
16 | #include "lldb/Utility/Log.h" |
17 | #include "lldb/Utility/Stream.h" |
18 | #include "lldb/Utility/StreamString.h" |
19 | |
20 | using namespace lldb; |
21 | using namespace lldb_private; |
22 | |
23 | const Flags::ValueType BreakpointName::Permissions::permissions_mask |
24 | [BreakpointName::Permissions::PermissionKinds::allPerms + 1] = { |
25 | (1u << 0), |
26 | (1u << 1), |
27 | (1u << 2), |
28 | (0x5u) |
29 | }; |
30 | |
31 | bool BreakpointName::Permissions::GetDescription(Stream *s, |
32 | lldb::DescriptionLevel level) { |
33 | if (!AnySet()) |
34 | return false; |
35 | s->IndentMore(); |
36 | s->Indent(); |
37 | if (IsSet(permission: listPerm)) |
38 | s->Printf(format: "list: %s" , GetAllowList() ? "allowed" : "disallowed" ); |
39 | |
40 | if (IsSet(permission: disablePerm)) |
41 | s->Printf(format: "disable: %s" , GetAllowDisable() ? "allowed" : "disallowed" ); |
42 | |
43 | if (IsSet(permission: deletePerm)) |
44 | s->Printf(format: "delete: %s" , GetAllowDelete() ? "allowed" : "disallowed" ); |
45 | s->IndentLess(); |
46 | return true; |
47 | } |
48 | |
49 | bool BreakpointName::GetDescription(Stream *s, lldb::DescriptionLevel level) { |
50 | bool printed_any = false; |
51 | if (!m_help.empty()) |
52 | s->Printf(format: "Help: %s\n" , m_help.c_str()); |
53 | |
54 | if (GetOptions().AnySet()) |
55 | { |
56 | s->PutCString(cstr: "Options: \n" ); |
57 | s->IndentMore(); |
58 | s->Indent(); |
59 | GetOptions().GetDescription(s, level); |
60 | printed_any = true; |
61 | s->IndentLess(); |
62 | } |
63 | if (GetPermissions().AnySet()) |
64 | { |
65 | s->PutCString(cstr: "Permissions: \n" ); |
66 | s->IndentMore(); |
67 | s->Indent(); |
68 | GetPermissions().GetDescription(s, level); |
69 | printed_any = true; |
70 | s->IndentLess(); |
71 | } |
72 | return printed_any; |
73 | } |
74 | |
75 | void BreakpointName::ConfigureBreakpoint(lldb::BreakpointSP bp_sp) |
76 | { |
77 | bp_sp->GetOptions().CopyOverSetOptions(rhs: GetOptions()); |
78 | bp_sp->GetPermissions().MergeInto(incoming: GetPermissions()); |
79 | } |
80 | |