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