remote_gdb.hh (3536:89aa06409e4d) | remote_gdb.hh (3550:515e876568b4) |
---|---|
1/* 2 * Copyright (c) 2002-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 34 unchanged lines hidden (view full) --- 43class System; 44class ThreadContext; 45class PhysicalMemory; 46 47namespace AlphaISA 48{ 49 class RemoteGDB : public BaseRemoteGDB 50 { | 1/* 2 * Copyright (c) 2002-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 34 unchanged lines hidden (view full) --- 43class System; 44class ThreadContext; 45class PhysicalMemory; 46 47namespace AlphaISA 48{ 49 class RemoteGDB : public BaseRemoteGDB 50 { |
51 private: 52 friend void debugger(); 53 friend class GDBListener; 54 | |
55 protected: | 51 protected: |
56 class Event : public PollEvent 57 { 58 protected: 59 RemoteGDB *gdb; 60 61 public: 62 Event(RemoteGDB *g, int fd, int e); 63 void process(int revent); 64 }; 65 66 friend class Event; 67 Event *event; 68 69 protected: | |
70 // Machine memory 71 bool write(Addr addr, size_t size, const char *data); 72 73 public: 74 RemoteGDB(System *system, ThreadContext *context); | 52 // Machine memory 53 bool write(Addr addr, size_t size, const char *data); 54 55 public: 56 RemoteGDB(System *system, ThreadContext *context); |
75 ~RemoteGDB(); | |
76 77 bool acc(Addr addr, size_t len); 78 79 protected: 80 void getregs(); 81 void setregs(); 82 83 void clearSingleStep(); 84 void setSingleStep(); 85 | 57 58 bool acc(Addr addr, size_t len); 59 60 protected: 61 void getregs(); 62 void setregs(); 63 64 void clearSingleStep(); 65 void setSingleStep(); 66 |
86 PCEventQueue *getPcEventQueue(); 87 | |
88 protected: | 67 protected: |
89 class HardBreakpoint : public PCEvent 90 { 91 private: 92 RemoteGDB *gdb; | |
93 | 68 |
94 public: 95 int refcount; 96 97 public: 98 HardBreakpoint(RemoteGDB *_gdb, Addr addr); 99 std::string name() { return gdb->name() + ".hwbkpt"; } 100 101 virtual void process(ThreadContext *tc); 102 }; 103 friend class HardBreakpoint; 104 105 typedef std::map<Addr, HardBreakpoint *> break_map_t; 106 typedef break_map_t::iterator break_iter_t; 107 break_map_t hardBreakMap; 108 109 bool insertSoftBreak(Addr addr, size_t len); 110 bool removeSoftBreak(Addr addr, size_t len); 111 bool insertHardBreak(Addr addr, size_t len); 112 bool removeHardBreak(Addr addr, size_t len); 113 114 protected: 115 struct TempBreakpoint { 116 Addr address; // set here 117 MachInst bkpt_inst; // saved instruction at bkpt 118 int init_count; // number of times to skip bkpt 119 int count; // current count 120 }; 121 122 TempBreakpoint notTakenBkpt; 123 TempBreakpoint takenBkpt; 124 125 void clearTempBreakpoint(TempBreakpoint &bkpt); 126 void setTempBreakpoint(TempBreakpoint &bkpt, Addr addr); | 69 Addr notTakenBkpt; 70 Addr takenBkpt; |
127 }; 128} 129 130#endif /* __ARCH_ALPHA_REMOTE_GDB_H__ */ | 71 }; 72} 73 74#endif /* __ARCH_ALPHA_REMOTE_GDB_H__ */ |