UnixSignals.h revision bd296c661cdbb96f8bc172791441e4c2fc7e71f4
1//===-- UnixSignals.h -------------------------------------------*- 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
10#ifndef lldb_UnixSignals_h_
11#define lldb_UnixSignals_h_
12
13// C Includes
14// C++ Includes
15#include <string>
16#include <map>
17
18// Other libraries and framework includes
19// Project includes
20#include "lldb/lldb-private.h"
21#include "lldb/Core/ConstString.h"
22
23namespace lldb_private
24{
25
26class UnixSignals
27{
28public:
29    //------------------------------------------------------------------
30    // Constructors and Destructors
31    //------------------------------------------------------------------
32    UnixSignals();
33
34    virtual
35    ~UnixSignals();
36
37    const char *
38    GetSignalAsCString (int32_t signo) const;
39
40    bool
41    SignalIsValid (int32_t signo) const;
42
43    int32_t
44    GetSignalNumberFromName (const char *name) const;
45
46    const char *
47    GetSignalInfo (int32_t signo,
48                   bool &should_suppress,
49                   bool &should_stop,
50                   bool &should_notify) const;
51
52    bool
53    GetShouldSuppress (int32_t signo) const;
54
55    bool
56    SetShouldSuppress (int32_t signo,
57                       bool value);
58
59    bool
60    SetShouldSuppress (const char *signal_name,
61                       bool value);
62
63    bool
64    GetShouldStop (int32_t signo) const;
65
66    bool
67    SetShouldStop (int32_t signo,
68                   bool value);
69    bool
70    SetShouldStop (const char *signal_name,
71                   bool value);
72
73    bool
74    GetShouldNotify (int32_t signo) const;
75
76    bool
77    SetShouldNotify (int32_t signo, bool value);
78
79    bool
80    SetShouldNotify (const char *signal_name,
81                     bool value);
82
83    // These provide an iterator through the signals available on this system.
84    // Call GetFirstSignalNumber to get the first entry, then iterate on GetNextSignalNumber
85    // till you get back LLDB_INVALID_SIGNAL_NUMBER.
86    int32_t
87    GetFirstSignalNumber () const;
88
89    int32_t
90    GetNextSignalNumber (int32_t current_signal) const;
91
92    // We assume that the elements of this object are constant once it is constructed,
93    // since a process should never need to add or remove symbols as it runs.  So don't
94    // call these functions anywhere but the constructor of your subclass of UnixSignals or in
95    // your Process Plugin's GetUnixSignals method before you return the UnixSignal object.
96
97    void
98    AddSignal (int signo,
99               const char *name,
100               const char *short_name,
101               bool default_suppress,
102               bool default_stop,
103               bool default_notify,
104               const char *description);
105
106    void
107    RemoveSignal (int signo);
108
109protected:
110    //------------------------------------------------------------------
111    // Classes that inherit from UnixSignals can see and modify these
112    //------------------------------------------------------------------
113
114    struct Signal
115    {
116        ConstString m_name;
117        ConstString m_short_name;
118        std::string m_description;
119        bool m_suppress:1,
120             m_stop:1,
121             m_notify:1;
122
123        Signal (const char *name,
124                const char *short_name,
125                bool default_suppress,
126                bool default_stop,
127                bool default_notify,
128                const char *description);
129
130        ~Signal () {}
131    };
132
133    void
134    Reset ();
135
136private:
137    //------------------------------------------------------------------
138    // For UnixSignals only
139    //------------------------------------------------------------------
140    typedef std::map <int32_t, Signal> collection;
141
142    collection m_signals;
143
144    DISALLOW_COPY_AND_ASSIGN (UnixSignals);
145};
146
147} // Namespace lldb
148#endif  // lldb_UnixSignals_h_
149