1 //===-- UnixSignals.h -------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef lldb_UnixSignals_h_
11 #define lldb_UnixSignals_h_
19 // Other libraries and framework includes
21 #include "lldb/Utility/ConstString.h"
22 #include "lldb/lldb-private.h"
23 #include "llvm/ADT/Optional.h"
25 namespace lldb_private {
29 static lldb::UnixSignalsSP Create(const ArchSpec &arch);
31 //------------------------------------------------------------------
32 // Constructors and Destructors
33 //------------------------------------------------------------------
36 virtual ~UnixSignals();
38 const char *GetSignalAsCString(int32_t signo) const;
40 bool SignalIsValid(int32_t signo) const;
42 int32_t GetSignalNumberFromName(const char *name) const;
44 const char *GetSignalInfo(int32_t signo, bool &should_suppress,
45 bool &should_stop, bool &should_notify) const;
47 bool GetShouldSuppress(int32_t signo) const;
49 bool SetShouldSuppress(int32_t signo, bool value);
51 bool SetShouldSuppress(const char *signal_name, bool value);
53 bool GetShouldStop(int32_t signo) const;
55 bool SetShouldStop(int32_t signo, bool value);
56 bool SetShouldStop(const char *signal_name, bool value);
58 bool GetShouldNotify(int32_t signo) const;
60 bool SetShouldNotify(int32_t signo, bool value);
62 bool SetShouldNotify(const char *signal_name, bool value);
64 // These provide an iterator through the signals available on this system.
65 // Call GetFirstSignalNumber to get the first entry, then iterate on
66 // GetNextSignalNumber
67 // till you get back LLDB_INVALID_SIGNAL_NUMBER.
68 int32_t GetFirstSignalNumber() const;
70 int32_t GetNextSignalNumber(int32_t current_signal) const;
72 int32_t GetNumSignals() const;
74 int32_t GetSignalAtIndex(int32_t index) const;
76 ConstString GetShortName(ConstString name) const;
78 // We assume that the elements of this object are constant once it is
80 // since a process should never need to add or remove symbols as it runs. So
82 // call these functions anywhere but the constructor of your subclass of
84 // your Process Plugin's GetUnixSignals method before you return the
87 void AddSignal(int signo, const char *name, bool default_suppress,
88 bool default_stop, bool default_notify,
89 const char *description, const char *alias = nullptr);
91 void RemoveSignal(int signo);
93 // Returns a current version of the data stored in this class.
94 // Version gets incremented each time Set... method is called.
95 uint64_t GetVersion() const;
97 // Returns a vector of signals that meet criteria provided in arguments.
98 // Each should_[suppress|stop|notify] flag can be
99 // None - no filtering by this flag
100 // true - only signals that have it set to true are returned
101 // false - only signals that have it set to true are returned
102 std::vector<int32_t> GetFilteredSignals(llvm::Optional<bool> should_suppress,
103 llvm::Optional<bool> should_stop,
104 llvm::Optional<bool> should_notify);
107 //------------------------------------------------------------------
108 // Classes that inherit from UnixSignals can see and modify these
109 //------------------------------------------------------------------
114 std::string m_description;
115 bool m_suppress : 1, m_stop : 1, m_notify : 1;
117 Signal(const char *name, bool default_suppress, bool default_stop,
118 bool default_notify, const char *description, const char *alias);
123 virtual void Reset();
125 typedef std::map<int32_t, Signal> collection;
127 collection m_signals;
129 // This version gets incremented every time something is changing in
130 // this class, including when we call AddSignal from the constructor.
131 // So after the object is constructed m_version is going to be > 0
132 // if it has at least one signal registered in it.
133 uint64_t m_version = 0;
135 // GDBRemote signals need to be copyable.
136 UnixSignals(const UnixSignals &rhs);
138 const UnixSignals &operator=(const UnixSignals &rhs) = delete;
142 #endif // lldb_UnixSignals_h_