]>
Commit | Line | Data |
---|---|---|
c906108c SS |
1 | /* dbg_rdi.h -- ARMulator RDI interface: ARM6 Instruction Emulator. |
2 | Copyright (C) 1994 Advanced RISC Machines Ltd. | |
3 | ||
4 | This program is free software; you can redistribute it and/or modify | |
5 | it under the terms of the GNU General Public License as published by | |
6 | the Free Software Foundation; either version 2 of the License, or | |
7 | (at your option) any later version. | |
8 | ||
9 | This program is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | GNU General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU General Public License | |
15 | along with this program; if not, write to the Free Software | |
16 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |
17 | ||
18 | #ifndef dbg_rdi__h | |
19 | #define dbg_rdi__h | |
20 | ||
21 | /***************************************************************************\ | |
22 | * Error Codes * | |
23 | \***************************************************************************/ | |
24 | ||
25 | #define RDIError_NoError 0 | |
26 | ||
27 | #define RDIError_Reset 1 | |
28 | #define RDIError_UndefinedInstruction 2 | |
29 | #define RDIError_SoftwareInterrupt 3 | |
30 | #define RDIError_PrefetchAbort 4 | |
31 | #define RDIError_DataAbort 5 | |
32 | #define RDIError_AddressException 6 | |
33 | #define RDIError_IRQ 7 | |
34 | #define RDIError_FIQ 8 | |
35 | #define RDIError_Error 9 | |
36 | #define RDIError_BranchThrough0 10 | |
37 | ||
38 | #define RDIError_NotInitialised 128 | |
39 | #define RDIError_UnableToInitialise 129 | |
40 | #define RDIError_WrongByteSex 130 | |
41 | #define RDIError_UnableToTerminate 131 | |
42 | #define RDIError_BadInstruction 132 | |
43 | #define RDIError_IllegalInstruction 133 | |
44 | #define RDIError_BadCPUStateSetting 134 | |
45 | #define RDIError_UnknownCoPro 135 | |
46 | #define RDIError_UnknownCoProState 136 | |
47 | #define RDIError_BadCoProState 137 | |
48 | #define RDIError_BadPointType 138 | |
49 | #define RDIError_UnimplementedType 139 | |
50 | #define RDIError_BadPointSize 140 | |
51 | #define RDIError_UnimplementedSize 141 | |
52 | #define RDIError_NoMorePoints 142 | |
53 | #define RDIError_BreakpointReached 143 | |
54 | #define RDIError_WatchpointAccessed 144 | |
55 | #define RDIError_NoSuchPoint 145 | |
56 | #define RDIError_ProgramFinishedInStep 146 | |
57 | #define RDIError_UserInterrupt 147 | |
58 | #define RDIError_CantSetPoint 148 | |
59 | #define RDIError_IncompatibleRDILevels 149 | |
60 | ||
61 | #define RDIError_CantLoadConfig 150 | |
62 | #define RDIError_BadConfigData 151 | |
63 | #define RDIError_NoSuchConfig 152 | |
64 | #define RDIError_BufferFull 153 | |
65 | #define RDIError_OutOfStore 154 | |
66 | #define RDIError_NotInDownload 155 | |
67 | #define RDIError_PointInUse 156 | |
68 | #define RDIError_BadImageFormat 157 | |
69 | #define RDIError_TargetRunning 158 | |
70 | ||
71 | #define RDIError_LittleEndian 240 | |
72 | #define RDIError_BigEndian 241 | |
73 | #define RDIError_SoftInitialiseError 242 | |
74 | ||
75 | #define RDIError_InsufficientPrivilege 253 | |
76 | #define RDIError_UnimplementedMessage 254 | |
77 | #define RDIError_UndefinedMessage 255 | |
78 | ||
79 | /***************************************************************************\ | |
80 | * RDP Message Numbers * | |
81 | \***************************************************************************/ | |
82 | ||
83 | #define RDP_Start (unsigned char)0x0 | |
84 | #define RDP_End (unsigned char)0x1 | |
85 | #define RDP_Read (unsigned char)0x2 | |
86 | #define RDP_Write (unsigned char)0x3 | |
87 | #define RDP_CPUread (unsigned char)0x4 | |
88 | #define RDP_CPUwrite (unsigned char)0x5 | |
89 | #define RDP_CPread (unsigned char)0x6 | |
90 | #define RDP_CPwrite (unsigned char)0x7 | |
91 | #define RDP_SetBreak (unsigned char)0xa | |
92 | #define RDP_ClearBreak (unsigned char)0xb | |
93 | #define RDP_SetWatch (unsigned char)0xc | |
94 | #define RDP_ClearWatch (unsigned char)0xd | |
95 | #define RDP_Execute (unsigned char)0x10 | |
96 | #define RDP_Step (unsigned char)0x11 | |
97 | #define RDP_Info (unsigned char)0x12 | |
98 | #define RDP_OSOpReply (unsigned char)0x13 | |
99 | ||
100 | #define RDP_AddConfig (unsigned char)0x14 | |
101 | #define RDP_LoadConfigData (unsigned char)0x15 | |
102 | #define RDP_SelectConfig (unsigned char)0x16 | |
103 | #define RDP_LoadAgent (unsigned char)0x17 | |
104 | ||
105 | #define RDP_Stopped (unsigned char)0x20 | |
106 | #define RDP_OSOp (unsigned char)0x21 | |
107 | #define RDP_Fatal (unsigned char)0x5e | |
108 | #define RDP_Return (unsigned char)0x5f | |
109 | #define RDP_Reset (unsigned char)0x7f | |
110 | ||
111 | /***************************************************************************\ | |
112 | * Other RDI values * | |
113 | \***************************************************************************/ | |
114 | ||
115 | #define RDISex_Little 0 /* the byte sex of the debuggee */ | |
116 | #define RDISex_Big 1 | |
117 | #define RDISex_DontCare 2 | |
118 | ||
119 | #define RDIPoint_EQ 0 /* the different types of break/watchpoints */ | |
120 | #define RDIPoint_GT 1 | |
121 | #define RDIPoint_GE 2 | |
122 | #define RDIPoint_LT 3 | |
123 | #define RDIPoint_LE 4 | |
124 | #define RDIPoint_IN 5 | |
125 | #define RDIPoint_OUT 6 | |
126 | #define RDIPoint_MASK 7 | |
127 | ||
128 | #define RDIPoint_Inquiry 64 /* ORRed with point type in extended RDP */ | |
129 | #define RDIPoint_Handle 128 /* messages */ | |
130 | ||
131 | #define RDIWatch_ByteRead 1 /* types of data accesses to watch for */ | |
132 | #define RDIWatch_HalfRead 2 | |
133 | #define RDIWatch_WordRead 4 | |
134 | #define RDIWatch_ByteWrite 8 | |
135 | #define RDIWatch_HalfWrite 16 | |
136 | #define RDIWatch_WordWrite 32 | |
137 | ||
138 | #define RDIReg_R15 (1L << 15) /* mask values for CPU */ | |
139 | #define RDIReg_PC (1L << 16) | |
140 | #define RDIReg_CPSR (1L << 17) | |
141 | #define RDIReg_SPSR (1L << 18) | |
142 | #define RDINumCPURegs 19 | |
143 | ||
144 | #define RDINumCPRegs 10 /* current maximum */ | |
145 | ||
146 | #define RDIMode_Curr 255 | |
147 | ||
148 | /* Bits set in return value from RDIInfo_Target */ | |
149 | #define RDITarget_LogSpeed 0x0f | |
150 | #define RDITarget_HW 0x10 /* else emulator */ | |
151 | #define RDITarget_AgentMaxLevel 0xe0 | |
152 | #define RDITarget_AgentLevelShift 5 | |
153 | #define RDITarget_DebuggerMinLevel 0x700 | |
154 | #define RDITarget_DebuggerLevelShift 8 | |
155 | #define RDITarget_CanReloadAgent 0x800 | |
156 | #define RDITarget_CanInquireLoadSize 0x1000 | |
157 | ||
158 | /* Bits set in return value from RDIInfo_Step */ | |
159 | #define RDIStep_Multiple 1 | |
160 | #define RDIStep_PCChange 2 | |
161 | #define RDIStep_Single 4 | |
162 | ||
163 | /* Bits set in return value from RDIInfo_Points */ | |
164 | #define RDIPointCapability_Comparison 1 | |
165 | #define RDIPointCapability_Range 2 | |
166 | /* 4 to 128 are RDIWatch_xx{Read,Write} left-shifted by two */ | |
167 | #define RDIPointCapability_Mask 256 | |
168 | #define RDIPointCapability_Status 512 /* Point status enquiries available */ | |
169 | ||
170 | /* RDI_Info subcodes */ | |
171 | #define RDIInfo_Target 0 | |
172 | #define RDIInfo_Points 1 | |
173 | #define RDIInfo_Step 2 | |
174 | #define RDIInfo_MMU 3 | |
175 | #define RDIInfo_DownLoad 4 /* Inquires whether configuration download | |
176 | and selection is available. | |
177 | */ | |
178 | #define RDIInfo_SemiHosting 5 /* Inquires whether RDISemiHosting_* RDI_Info | |
179 | calls are available. | |
180 | */ | |
181 | #define RDIInfo_CoPro 6 /* Inquires whether CoPro RDI_Info calls are | |
182 | available. | |
183 | */ | |
184 | #define RDIInfo_Icebreaker 7 | |
185 | ||
186 | /* The next two are only to be used if the value returned by RDIInfo_Points */ | |
187 | /* has RDIPointCapability_Status set. */ | |
188 | #define RDIPointStatus_Watch 0x80 | |
189 | #define RDIPointStatus_Break 0x81 | |
190 | ||
191 | #define RDISignal_Stop 0x100 | |
192 | ||
193 | #define RDIVector_Catch 0x180 | |
194 | ||
195 | /* The next four are only to be used if RDIInfo_Semihosting returned no error */ | |
196 | #define RDISemiHosting_SetState 0x181 | |
197 | #define RDISemiHosting_GetState 0x182 | |
198 | #define RDISemiHosting_SetVector 0x183 | |
199 | #define RDISemiHosting_GetVector 0x184 | |
200 | ||
201 | /* The next two are only to be used if RDIInfo_Icebreaker returned no error */ | |
202 | #define RDIIcebreaker_GetLocks 0x185 | |
203 | #define RDIIcebreaker_SetLocks 0x186 | |
204 | ||
205 | /* Only if RDIInfo_Target returned RDITarget_CanInquireLoadSize */ | |
206 | #define RDIInfo_GetLoadSize 0x187 | |
207 | ||
208 | #define RDICycles 0x200 | |
209 | #define RDICycles_Size 48 | |
210 | #define RDIErrorP 0x201 | |
211 | ||
212 | #define RDISet_Cmdline 0x300 | |
213 | #define RDISet_RDILevel 0x301 | |
214 | #define RDISet_Thread 0x302 | |
215 | ||
216 | /* The next two are only to be used if RDIInfo_CoPro returned no error */ | |
217 | #define RDIInfo_DescribeCoPro 0x400 | |
218 | #define RDIInfo_RequestCoProDesc 0x401 | |
219 | ||
220 | #define RDIInfo_Log 0x800 | |
221 | #define RDIInfo_SetLog 0x801 | |
222 | ||
223 | typedef unsigned long PointHandle; | |
224 | typedef unsigned long ThreadHandle; | |
225 | #define RDINoPointHandle ((PointHandle)-1L) | |
226 | #define RDINoHandle ((ThreadHandle)-1L) | |
227 | ||
228 | struct Dbg_ConfigBlock; | |
229 | struct Dbg_HostosInterface; | |
230 | struct Dbg_MCState; | |
231 | typedef int rdi_open_proc(unsigned type, struct Dbg_ConfigBlock const *config, | |
232 | struct Dbg_HostosInterface const *i, | |
233 | struct Dbg_MCState *dbg_state); | |
234 | typedef int rdi_close_proc(void); | |
235 | typedef int rdi_read_proc(ARMword source, void *dest, unsigned *nbytes); | |
236 | typedef int rdi_write_proc(const void *source, ARMword dest, unsigned *nbytes); | |
237 | typedef int rdi_CPUread_proc(unsigned mode, unsigned long mask, ARMword *state); | |
238 | typedef int rdi_CPUwrite_proc(unsigned mode, unsigned long mask, ARMword const *state); | |
239 | typedef int rdi_CPread_proc(unsigned CPnum, unsigned long mask, ARMword *state); | |
240 | typedef int rdi_CPwrite_proc(unsigned CPnum, unsigned long mask, ARMword const *state); | |
241 | typedef int rdi_setbreak_proc(ARMword address, unsigned type, ARMword bound, | |
242 | PointHandle *handle); | |
243 | typedef int rdi_clearbreak_proc(PointHandle handle); | |
244 | typedef int rdi_setwatch_proc(ARMword address, unsigned type, unsigned datatype, | |
245 | ARMword bound, PointHandle *handle); | |
246 | typedef int rdi_clearwatch_proc(PointHandle handle); | |
247 | typedef int rdi_execute_proc(PointHandle *handle); | |
248 | typedef int rdi_step_proc(unsigned ninstr, PointHandle *handle); | |
249 | typedef int rdi_info_proc(unsigned type, ARMword *arg1, ARMword *arg2); | |
250 | typedef int rdi_pointinq_proc(ARMword *address, unsigned type, | |
251 | unsigned datatype, ARMword *bound); | |
252 | ||
253 | typedef enum { | |
254 | RDI_ConfigCPU, | |
255 | RDI_ConfigSystem | |
256 | } RDI_ConfigAspect; | |
257 | ||
258 | typedef enum { | |
259 | RDI_MatchAny, | |
260 | RDI_MatchExactly, | |
261 | RDI_MatchNoEarlier | |
262 | } RDI_ConfigMatchType; | |
263 | ||
264 | typedef int rdi_addconfig_proc(unsigned long nbytes); | |
265 | typedef int rdi_loadconfigdata_proc(unsigned long nbytes, char const *data); | |
266 | typedef int rdi_selectconfig_proc(RDI_ConfigAspect aspect, char const *name, | |
267 | RDI_ConfigMatchType matchtype, unsigned versionreq, | |
268 | unsigned *versionp); | |
269 | ||
270 | typedef char *getbufferproc(void *getbarg, unsigned long *sizep); | |
271 | typedef int rdi_loadagentproc(ARMword dest, unsigned long size, getbufferproc *getb, void *getbarg); | |
272 | ||
273 | typedef struct { | |
274 | int itemmax; | |
275 | char const * const *names; | |
276 | } RDI_NameList; | |
277 | ||
278 | typedef RDI_NameList const *rdi_namelistproc(void); | |
279 | ||
280 | typedef int rdi_errmessproc(char *buf, int buflen, int errno); | |
281 | ||
282 | struct RDIProcVec { | |
283 | char rditypename[12]; | |
284 | ||
285 | rdi_open_proc *open; | |
286 | rdi_close_proc *close; | |
287 | rdi_read_proc *read; | |
288 | rdi_write_proc *write; | |
289 | rdi_CPUread_proc *CPUread; | |
290 | rdi_CPUwrite_proc *CPUwrite; | |
291 | rdi_CPread_proc *CPread; | |
292 | rdi_CPwrite_proc *CPwrite; | |
293 | rdi_setbreak_proc *setbreak; | |
294 | rdi_clearbreak_proc *clearbreak; | |
295 | rdi_setwatch_proc *setwatch; | |
296 | rdi_clearwatch_proc *clearwatch; | |
297 | rdi_execute_proc *execute; | |
298 | rdi_step_proc *step; | |
299 | rdi_info_proc *info; | |
300 | /* V2 RDI */ | |
301 | rdi_pointinq_proc *pointinquiry; | |
302 | ||
303 | /* These three useable only if RDIInfo_DownLoad returns no error */ | |
304 | rdi_addconfig_proc *addconfig; | |
305 | rdi_loadconfigdata_proc *loadconfigdata; | |
306 | rdi_selectconfig_proc *selectconfig; | |
307 | ||
308 | rdi_namelistproc *drivernames; | |
309 | rdi_namelistproc *cpunames; | |
310 | ||
311 | rdi_errmessproc *errmess; | |
312 | ||
313 | /* Only if RDIInfo_Target returns a value with RDITarget_LoadAgent set */ | |
314 | rdi_loadagentproc *loadagent; | |
315 | }; | |
316 | ||
317 | #endif | |
318 | ||
319 | ||
320 | ||
321 | ||
322 | ||
323 |