1dda28197Spatrick //===-- BreakpointName.cpp ------------------------------------------------===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick
9061da546Spatrick #include "llvm/Support/Casting.h"
10061da546Spatrick
11061da546Spatrick #include "lldb/Breakpoint/Breakpoint.h"
12061da546Spatrick #include "lldb/Breakpoint/BreakpointOptions.h"
13061da546Spatrick #include "lldb/Breakpoint/BreakpointLocationCollection.h"
14061da546Spatrick #include "lldb/Breakpoint/BreakpointResolver.h"
15061da546Spatrick #include "lldb/Breakpoint/BreakpointResolverFileLine.h"
16061da546Spatrick #include "lldb/Utility/Log.h"
17061da546Spatrick #include "lldb/Utility/Stream.h"
18061da546Spatrick #include "lldb/Utility/StreamString.h"
19061da546Spatrick
20061da546Spatrick using namespace lldb;
21061da546Spatrick using namespace lldb_private;
22061da546Spatrick
23061da546Spatrick const Flags::ValueType BreakpointName::Permissions::permissions_mask
24061da546Spatrick [BreakpointName::Permissions::PermissionKinds::allPerms + 1] = {
25061da546Spatrick (1u << 0),
26061da546Spatrick (1u << 1),
27061da546Spatrick (1u << 2),
28061da546Spatrick (0x5u)
29061da546Spatrick };
30061da546Spatrick
BreakpointName(ConstString name,const Breakpoint & bkpt,const char * help)31061da546Spatrick BreakpointName::BreakpointName(ConstString name, const Breakpoint &bkpt,
32061da546Spatrick const char *help) :
33061da546Spatrick m_name(name), m_options(bkpt.GetOptions())
34061da546Spatrick {
35061da546Spatrick SetHelp(help);
36061da546Spatrick }
37061da546Spatrick
GetDescription(Stream * s,lldb::DescriptionLevel level)38061da546Spatrick bool BreakpointName::Permissions::GetDescription(Stream *s,
39061da546Spatrick lldb::DescriptionLevel level) {
40061da546Spatrick if (!AnySet())
41061da546Spatrick return false;
42061da546Spatrick s->IndentMore();
43061da546Spatrick s->Indent();
44061da546Spatrick if (IsSet(listPerm))
45061da546Spatrick s->Printf("list: %s", GetAllowList() ? "allowed" : "disallowed");
46061da546Spatrick
47061da546Spatrick if (IsSet(disablePerm))
48061da546Spatrick s->Printf("disable: %s", GetAllowDisable() ? "allowed" : "disallowed");
49061da546Spatrick
50061da546Spatrick if (IsSet(deletePerm))
51061da546Spatrick s->Printf("delete: %s", GetAllowDelete() ? "allowed" : "disallowed");
52061da546Spatrick s->IndentLess();
53061da546Spatrick return true;
54061da546Spatrick }
55061da546Spatrick
GetDescription(Stream * s,lldb::DescriptionLevel level)56061da546Spatrick bool BreakpointName::GetDescription(Stream *s, lldb::DescriptionLevel level) {
57061da546Spatrick bool printed_any = false;
58061da546Spatrick if (!m_help.empty())
59061da546Spatrick s->Printf("Help: %s\n", m_help.c_str());
60061da546Spatrick
61061da546Spatrick if (GetOptions().AnySet())
62061da546Spatrick {
63061da546Spatrick s->PutCString("Options: \n");
64061da546Spatrick s->IndentMore();
65061da546Spatrick s->Indent();
66061da546Spatrick GetOptions().GetDescription(s, level);
67061da546Spatrick printed_any = true;
68061da546Spatrick s->IndentLess();
69061da546Spatrick }
70061da546Spatrick if (GetPermissions().AnySet())
71061da546Spatrick {
72061da546Spatrick s->PutCString("Permissions: \n");
73061da546Spatrick s->IndentMore();
74061da546Spatrick s->Indent();
75061da546Spatrick GetPermissions().GetDescription(s, level);
76061da546Spatrick printed_any = true;
77061da546Spatrick s->IndentLess();
78061da546Spatrick }
79061da546Spatrick return printed_any;
80061da546Spatrick }
81061da546Spatrick
ConfigureBreakpoint(lldb::BreakpointSP bp_sp)82061da546Spatrick void BreakpointName::ConfigureBreakpoint(lldb::BreakpointSP bp_sp)
83061da546Spatrick {
84*be691f3bSpatrick bp_sp->GetOptions().CopyOverSetOptions(GetOptions());
85061da546Spatrick bp_sp->GetPermissions().MergeInto(GetPermissions());
86061da546Spatrick }
87