new file: .syntastic_cpp_config
[dyninst.git] / proccontrol / src / arm_process.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(arm_process_h_)
32 #define arm_process_h_
33
34 #include <map>
35 #include "int_process.h"
36
37 class arm_process : virtual public int_process
38 {
39  public:
40   arm_process(Dyninst::PID p, std::string e, std::vector<std::string> a,
41               std::vector<std::string> envp, std::map<int, int> f);
42   arm_process(Dyninst::PID pid_, int_process *p) ;
43   virtual ~arm_process();
44
45   virtual unsigned plat_breakpointSize();
46   virtual void plat_breakpointBytes(unsigned char *buffer);
47   virtual bool plat_breakpointAdvancesPC() const;
48
49   //virtual async_ret_t plat_needsEmulatedSingleStep(int_thread *thr, std::vector<Address> &addrResult);
50   //virtual bool plat_convertToBreakpointAddress(Address &addr, int_thread *thr);
51   //virtual bool plat_needsPCSaveBeforeSingleStep();
52   //virtual void plat_getEmulatedSingleStepAsyncs(int_thread *thr, std::set<response::ptr> resps);
53
54  private:
55   std::map<int_thread *, reg_response::ptr> pcs_for_ss;
56   std::map<Address, mem_response::ptr> mem_for_ss;
57 };
58
59 class arm_thread : virtual public int_thread
60 {
61   protected:
62     bool have_cached_pc;
63     Address cached_pc;
64   public:
65     arm_thread(int_process *p, Dyninst::THR_ID t, Dyninst::LWP l);
66     virtual ~arm_thread();
67
68     virtual bool rmHWBreakpoint(hw_breakpoint *bp,
69                                 bool suspend,
70                                 std::set<response::ptr> &resps,
71                                 bool &done);
72     virtual bool addHWBreakpoint(hw_breakpoint *bp,
73                                  bool resume,
74                                  std::set<response::ptr> &resps,
75                                  bool &done);
76     virtual unsigned hwBPAvail(unsigned mode);
77
78     virtual EventBreakpoint::ptr decodeHWBreakpoint(response::ptr &resp,
79                                                     bool have_reg = false,
80                                                     Dyninst::MachRegisterVal regval = 0);
81     virtual bool bpNeedsClear(hw_breakpoint *hwbp);
82
83     void setCachedPC(Address pc);
84     void clearCachedPC();
85     bool haveCachedPC(Address &pc);
86 };
87
88 #endif
89