forked from mithris/lpc_jtag
-
Notifications
You must be signed in to change notification settings - Fork 0
/
WatchPointManager.h
115 lines (92 loc) · 3.24 KB
/
WatchPointManager.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
LPCJTAG, a GDB remote JTAG connector,
Copyright (C) 2008 Bjorn Bosell (mithris@misantrop.org)
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _WATCHPOINT_MANAGER_H_
#define _WATCHPOINT_MANAGER_H_
#include "config.h"
// Forward declarations
class target;
class WatchPointManager
{
public:
WatchPointManager();
~WatchPointManager();
typedef enum {
eType_MemoryBreakpoint,
eType_HardwareBreakpoint,
eType_ReadWatchpoint,
eType_WriteWatchpoint
} EType;
/** Attaches to a target.
*
* @param pTarget
*/
void attach(target *pTarget) {
m_target = pTarget;
}
/** Adds a watchpoint/breakpoint
*
* @param type - Type, see <EType> above.
* @param address - Where to place the watchpoint.
* @param size - Size, instruction or memory area size.
*
* @return bool
*/
bool add(EType type, unsigned long address, unsigned long size);
/** Removes a watchpoint/breakpoint
*
* @param type - Type, see <EType> above.
* @param address - Where to place the watchpoint.
* @param size - Size, instruction or memory area size.
*
* @return bool
*/
bool remove(EType type, unsigned long address, unsigned long size);
/** Sets the watchpoints in the target.
* Used when restarting the target after it has been halted.
*
*/
void enable();
/** Disables the watchpoints in the target.
* Used when halting the target to make sure the
* watchpoints don't interfere with the debugging.
*/
void disable();
protected:
private:
target *m_target;
struct Watchpoint {
EType m_type;
unsigned long m_address;
unsigned long m_size;
bool m_inuse;
union {
unsigned long long m_backup64;
unsigned long m_backup32;
unsigned short m_backup16;
unsigned char m_backup8;
};
};
Watchpoint m_watchpoints[MAX_WATCHPOINTS];
};
#endif // _WATCHPOINT_MANAGER_H_