Merge branch 'master' into bgq_ramdisk_io
[dyninst.git] / proccontrol / src / int_event.h
1 /*
2  * See the dyninst/COPYRIGHT file for copyright information.
3  * 
4  * We provide the Paradyn Tools (below described as "Paradyn")
5  * on an AS IS basis, and do not warrant its validity or performance.
6  * We reserve the right to update, modify, or discontinue this
7  * software at any time.  We shall have no obligation to supply such
8  * updates or modifications or any other form of support to you.
9  * 
10  * By your use of Paradyn, you understand and agree that we (or any
11  * other person or entity with proprietary rights in Paradyn) are
12  * under no obligation to provide either maintenance services,
13  * update services, notices of latent defects, or correction of
14  * defects for Paradyn.
15  * 
16  * This library is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU Lesser General Public
18  * License as published by the Free Software Foundation; either
19  * version 2.1 of the License, or (at your option) any later version.
20  * 
21  * This library is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24  * Lesser General Public License for more details.
25  * 
26  * You should have received a copy of the GNU Lesser General Public
27  * License along with this library; if not, write to the Free Software
28  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29  */
30
31 #if !defined(INT_EVENT_H_)
32 #define INT_EVENT_H_
33
34 #include "response.h"
35 #include "resp.h"
36 #include <set>
37
38 namespace Dyninst {
39 namespace ProcControlAPI {
40
41 class int_eventBreakpoint
42 {
43   public:
44    int_eventBreakpoint(Address a, sw_breakpoint *i, int_thread *thr);
45    int_eventBreakpoint(hw_breakpoint *i, int_thread *thr);
46    ~int_eventBreakpoint();
47    bp_instance *lookupInstalledBreakpoint();
48
49    //Only one of addr or hwbp will be set
50    Dyninst::Address addr;
51    hw_breakpoint *hwbp;
52
53    result_response::ptr pc_regset;
54    int_thread *thrd;
55    bool stopped_proc;
56
57    std::set<Breakpoint::ptr> cb_bps;
58 };
59
60 class int_eventBreakpointClear
61 {
62   public:
63    int_eventBreakpointClear();
64    ~int_eventBreakpointClear();
65
66    std::set<response::ptr> bp_suspend;
67    bool started_bp_suspends;
68    bool cached_bp_sets;
69    bool set_singlestep;
70    bool stopped_proc;
71
72    std::set<Thread::ptr> clearing_threads;
73 };
74  
75 class int_eventBreakpointRestore
76 {
77   public:
78    int_eventBreakpointRestore(bp_instance *breakpoint_);
79    ~int_eventBreakpointRestore();
80
81    bool set_states;
82    bool bp_resume_started;
83    std::set<response::ptr> bp_resume;
84    bp_instance *bp;
85 };
86
87 class int_eventRPC {
88   public:
89    int_eventRPC();
90    ~int_eventRPC();
91    reg_response::ptr alloc_regresult;
92    result_response::ptr memrestore_response;
93    result_response::ptr regrestore_response;
94
95    void getPendingAsyncs(std::set<response::ptr> &pending);
96 };
97
98 class int_eventAsync {
99   private:
100    std::set<response::ptr> resp;
101   public:
102    int_eventAsync(response::ptr r);
103    ~int_eventAsync();
104
105    std::set<response::ptr> &getResponses();
106    void addResp(response::ptr r);
107 };
108
109 class int_eventNewUserThread {
110   public:
111    int_eventNewUserThread();
112    ~int_eventNewUserThread();
113
114    int_thread *thr;
115    Dyninst::LWP lwp;
116    void *raw_data;
117    bool needs_update;
118 };
119
120 class int_eventNewLWP {
121   public:
122    int_eventNewLWP();
123    ~int_eventNewLWP();
124
125    Dyninst::LWP lwp;
126    int_thread::attach_status_t attach_status;
127 };
128
129 class int_eventThreadDB {
130   public:
131    int_eventThreadDB();
132    ~int_eventThreadDB();
133    
134    std::set<Event::ptr> new_evs;
135    bool completed_new_evs;
136 };
137
138 class int_eventDetach {
139   public:
140    int_eventDetach();
141    ~int_eventDetach();
142
143    std::set<response::ptr> async_responses;
144    result_response::ptr detach_response;
145    bool temporary_detach;
146    bool leave_stopped;
147    bool removed_bps;
148    bool done;
149    bool had_error;
150 };
151
152 class int_eventControlAuthority {
153   public:
154    int_eventControlAuthority(std::string toolname_, unsigned int toolid_, int priority_, EventControlAuthority::Trigger trigger_);
155    int_eventControlAuthority();
156    ~int_eventControlAuthority();
157    std::string toolname;
158    unsigned int toolid;
159    int priority;
160    EventControlAuthority::Trigger trigger;
161    bool control_lost;
162    bool handled_bps;
163    bool took_ca;
164    bool did_desync;
165    bool unset_desync;
166    bool dont_delete;
167    bool waiting_on_stop;
168    std::set<response::ptr> async_responses;
169    data_response::ptr dresp;
170 };
171
172 class int_eventAsyncFileRead {
173   public:
174    int_eventAsyncFileRead();
175    ~int_eventAsyncFileRead();
176    bool isComplete();
177
178    void *data;
179    size_t size;
180    size_t orig_size;
181    void *to_free;
182    std::string filename;
183    size_t offset;
184    int errorcode;
185    bool whole_file;
186    Resp::ptr resp;
187 };
188
189 class int_eventAsyncIO {
190   public:
191    enum asyncio_type {
192       memread,
193       memwrite,
194       regallread,
195       regallwrite
196    };
197
198    int_eventAsyncIO(response::ptr resp_, asyncio_type);
199    ~int_eventAsyncIO();
200
201    response::ptr resp;
202    void *local_memory;
203    Address remote_addr;
204    size_t size;
205    void *opaque_value;
206    asyncio_type iot;
207    RegisterPool *rpool;
208 };
209
210 }
211 }
212
213 #endif