123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- /* dbg_rdi.h -- ARMulator RDI interface: ARM6 Instruction Emulator.
- Copyright (C) 1994 Advanced RISC Machines Ltd.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>. */
- #ifndef dbg_rdi__h
- #define dbg_rdi__h
- /***************************************************************************\
- * Error Codes *
- \***************************************************************************/
- #define RDIError_NoError 0
- #define RDIError_Reset 1
- #define RDIError_UndefinedInstruction 2
- #define RDIError_SoftwareInterrupt 3
- #define RDIError_PrefetchAbort 4
- #define RDIError_DataAbort 5
- #define RDIError_AddressException 6
- #define RDIError_IRQ 7
- #define RDIError_FIQ 8
- #define RDIError_Error 9
- #define RDIError_BranchThrough0 10
- #define RDIError_NotInitialised 128
- #define RDIError_UnableToInitialise 129
- #define RDIError_WrongByteSex 130
- #define RDIError_UnableToTerminate 131
- #define RDIError_BadInstruction 132
- #define RDIError_IllegalInstruction 133
- #define RDIError_BadCPUStateSetting 134
- #define RDIError_UnknownCoPro 135
- #define RDIError_UnknownCoProState 136
- #define RDIError_BadCoProState 137
- #define RDIError_BadPointType 138
- #define RDIError_UnimplementedType 139
- #define RDIError_BadPointSize 140
- #define RDIError_UnimplementedSize 141
- #define RDIError_NoMorePoints 142
- #define RDIError_BreakpointReached 143
- #define RDIError_WatchpointAccessed 144
- #define RDIError_NoSuchPoint 145
- #define RDIError_ProgramFinishedInStep 146
- #define RDIError_UserInterrupt 147
- #define RDIError_CantSetPoint 148
- #define RDIError_IncompatibleRDILevels 149
- #define RDIError_CantLoadConfig 150
- #define RDIError_BadConfigData 151
- #define RDIError_NoSuchConfig 152
- #define RDIError_BufferFull 153
- #define RDIError_OutOfStore 154
- #define RDIError_NotInDownload 155
- #define RDIError_PointInUse 156
- #define RDIError_BadImageFormat 157
- #define RDIError_TargetRunning 158
- #define RDIError_LittleEndian 240
- #define RDIError_BigEndian 241
- #define RDIError_SoftInitialiseError 242
- #define RDIError_InsufficientPrivilege 253
- #define RDIError_UnimplementedMessage 254
- #define RDIError_UndefinedMessage 255
- /***************************************************************************\
- * RDP Message Numbers *
- \***************************************************************************/
- #define RDP_Start (unsigned char)0x0
- #define RDP_End (unsigned char)0x1
- #define RDP_Read (unsigned char)0x2
- #define RDP_Write (unsigned char)0x3
- #define RDP_CPUread (unsigned char)0x4
- #define RDP_CPUwrite (unsigned char)0x5
- #define RDP_CPread (unsigned char)0x6
- #define RDP_CPwrite (unsigned char)0x7
- #define RDP_SetBreak (unsigned char)0xa
- #define RDP_ClearBreak (unsigned char)0xb
- #define RDP_SetWatch (unsigned char)0xc
- #define RDP_ClearWatch (unsigned char)0xd
- #define RDP_Execute (unsigned char)0x10
- #define RDP_Step (unsigned char)0x11
- #define RDP_Info (unsigned char)0x12
- #define RDP_OSOpReply (unsigned char)0x13
- #define RDP_AddConfig (unsigned char)0x14
- #define RDP_LoadConfigData (unsigned char)0x15
- #define RDP_SelectConfig (unsigned char)0x16
- #define RDP_LoadAgent (unsigned char)0x17
- #define RDP_Stopped (unsigned char)0x20
- #define RDP_OSOp (unsigned char)0x21
- #define RDP_Fatal (unsigned char)0x5e
- #define RDP_Return (unsigned char)0x5f
- #define RDP_Reset (unsigned char)0x7f
- /***************************************************************************\
- * Other RDI values *
- \***************************************************************************/
- #define RDISex_Little 0 /* the byte sex of the debuggee */
- #define RDISex_Big 1
- #define RDISex_DontCare 2
- #define RDIPoint_EQ 0 /* the different types of break/watchpoints */
- #define RDIPoint_GT 1
- #define RDIPoint_GE 2
- #define RDIPoint_LT 3
- #define RDIPoint_LE 4
- #define RDIPoint_IN 5
- #define RDIPoint_OUT 6
- #define RDIPoint_MASK 7
- #define RDIPoint_Inquiry 64 /* ORRed with point type in extended RDP */
- #define RDIPoint_Handle 128 /* messages */
- #define RDIWatch_ByteRead 1 /* types of data accesses to watch for */
- #define RDIWatch_HalfRead 2
- #define RDIWatch_WordRead 4
- #define RDIWatch_ByteWrite 8
- #define RDIWatch_HalfWrite 16
- #define RDIWatch_WordWrite 32
- #define RDIReg_R15 (1L << 15) /* mask values for CPU */
- #define RDIReg_PC (1L << 16)
- #define RDIReg_CPSR (1L << 17)
- #define RDIReg_SPSR (1L << 18)
- #define RDINumCPURegs 19
- #define RDINumCPRegs 10 /* current maximum */
- #define RDIMode_Curr 255
- /* Bits set in return value from RDIInfo_Target */
- #define RDITarget_LogSpeed 0x0f
- #define RDITarget_HW 0x10 /* else emulator */
- #define RDITarget_AgentMaxLevel 0xe0
- #define RDITarget_AgentLevelShift 5
- #define RDITarget_DebuggerMinLevel 0x700
- #define RDITarget_DebuggerLevelShift 8
- #define RDITarget_CanReloadAgent 0x800
- #define RDITarget_CanInquireLoadSize 0x1000
- /* Bits set in return value from RDIInfo_Step */
- #define RDIStep_Multiple 1
- #define RDIStep_PCChange 2
- #define RDIStep_Single 4
- /* Bits set in return value from RDIInfo_Points */
- #define RDIPointCapability_Comparison 1
- #define RDIPointCapability_Range 2
- /* 4 to 128 are RDIWatch_xx{Read,Write} left-shifted by two */
- #define RDIPointCapability_Mask 256
- #define RDIPointCapability_Status 512 /* Point status enquiries available */
- /* RDI_Info subcodes */
- #define RDIInfo_Target 0
- #define RDIInfo_Points 1
- #define RDIInfo_Step 2
- #define RDIInfo_MMU 3
- #define RDIInfo_DownLoad 4 /* Inquires whether configuration download
- and selection is available.
- */
- #define RDIInfo_SemiHosting 5 /* Inquires whether RDISemiHosting_* RDI_Info
- calls are available.
- */
- #define RDIInfo_CoPro 6 /* Inquires whether CoPro RDI_Info calls are
- available.
- */
- #define RDIInfo_Icebreaker 7
- /* The next two are only to be used if the value returned by RDIInfo_Points */
- /* has RDIPointCapability_Status set. */
- #define RDIPointStatus_Watch 0x80
- #define RDIPointStatus_Break 0x81
- #define RDISignal_Stop 0x100
- #define RDIVector_Catch 0x180
- /* The next four are only to be used if RDIInfo_Semihosting returned no error */
- #define RDISemiHosting_SetState 0x181
- #define RDISemiHosting_GetState 0x182
- #define RDISemiHosting_SetVector 0x183
- #define RDISemiHosting_GetVector 0x184
- /* The next two are only to be used if RDIInfo_Icebreaker returned no error */
- #define RDIIcebreaker_GetLocks 0x185
- #define RDIIcebreaker_SetLocks 0x186
- /* Only if RDIInfo_Target returned RDITarget_CanInquireLoadSize */
- #define RDIInfo_GetLoadSize 0x187
- #define RDICycles 0x200
- #define RDICycles_Size 48
- #define RDIErrorP 0x201
- #define RDISet_Cmdline 0x300
- #define RDISet_RDILevel 0x301
- #define RDISet_Thread 0x302
- /* The next two are only to be used if RDIInfo_CoPro returned no error */
- #define RDIInfo_DescribeCoPro 0x400
- #define RDIInfo_RequestCoProDesc 0x401
- #define RDIInfo_Log 0x800
- #define RDIInfo_SetLog 0x801
- typedef unsigned long PointHandle;
- typedef unsigned long ThreadHandle;
- #define RDINoPointHandle ((PointHandle)-1L)
- #define RDINoHandle ((ThreadHandle)-1L)
- struct Dbg_ConfigBlock;
- struct Dbg_HostosInterface;
- struct Dbg_MCState;
- typedef int rdi_open_proc (unsigned type,
- struct Dbg_ConfigBlock const *config,
- struct Dbg_HostosInterface const *i,
- struct Dbg_MCState *dbg_state);
- typedef int rdi_close_proc (void);
- typedef int rdi_read_proc (ARMword source, void *dest, unsigned *nbytes);
- typedef int rdi_write_proc (const void *source, ARMword dest,
- unsigned *nbytes);
- typedef int rdi_CPUread_proc (unsigned mode, unsigned long mask,
- ARMword * state);
- typedef int rdi_CPUwrite_proc (unsigned mode, unsigned long mask,
- ARMword const *state);
- typedef int rdi_CPread_proc (unsigned CPnum, unsigned long mask,
- ARMword * state);
- typedef int rdi_CPwrite_proc (unsigned CPnum, unsigned long mask,
- ARMword const *state);
- typedef int rdi_setbreak_proc (ARMword address, unsigned type, ARMword bound,
- PointHandle * handle);
- typedef int rdi_clearbreak_proc (PointHandle handle);
- typedef int rdi_setwatch_proc (ARMword address, unsigned type,
- unsigned datatype, ARMword bound,
- PointHandle * handle);
- typedef int rdi_clearwatch_proc (PointHandle handle);
- typedef int rdi_execute_proc (PointHandle * handle);
- typedef int rdi_step_proc (unsigned ninstr, PointHandle * handle);
- typedef int rdi_info_proc (unsigned type, ARMword * arg1, ARMword * arg2);
- typedef int rdi_pointinq_proc (ARMword * address, unsigned type,
- unsigned datatype, ARMword * bound);
- typedef enum
- {
- RDI_ConfigCPU,
- RDI_ConfigSystem
- }
- RDI_ConfigAspect;
- typedef enum
- {
- RDI_MatchAny,
- RDI_MatchExactly,
- RDI_MatchNoEarlier
- }
- RDI_ConfigMatchType;
- typedef int rdi_addconfig_proc (unsigned long nbytes);
- typedef int rdi_loadconfigdata_proc (unsigned long nbytes, char const *data);
- typedef int rdi_selectconfig_proc (RDI_ConfigAspect aspect, char const *name,
- RDI_ConfigMatchType matchtype,
- unsigned versionreq, unsigned *versionp);
- typedef char *getbufferproc (void *getbarg, unsigned long *sizep);
- typedef int rdi_loadagentproc (ARMword dest, unsigned long size,
- getbufferproc * getb, void *getbarg);
- typedef struct
- {
- int itemmax;
- char const *const *names;
- }
- RDI_NameList;
- typedef RDI_NameList const *rdi_namelistproc (void);
- typedef int rdi_errmessproc (char *buf, int buflen, int errno);
- struct RDIProcVec
- {
- char rditypename[12];
- rdi_open_proc *open;
- rdi_close_proc *close;
- rdi_read_proc *read;
- rdi_write_proc *write;
- rdi_CPUread_proc *CPUread;
- rdi_CPUwrite_proc *CPUwrite;
- rdi_CPread_proc *CPread;
- rdi_CPwrite_proc *CPwrite;
- rdi_setbreak_proc *setbreak;
- rdi_clearbreak_proc *clearbreak;
- rdi_setwatch_proc *setwatch;
- rdi_clearwatch_proc *clearwatch;
- rdi_execute_proc *execute;
- rdi_step_proc *step;
- rdi_info_proc *info;
- /* V2 RDI */
- rdi_pointinq_proc *pointinquiry;
- /* These three useable only if RDIInfo_DownLoad returns no error */
- rdi_addconfig_proc *addconfig;
- rdi_loadconfigdata_proc *loadconfigdata;
- rdi_selectconfig_proc *selectconfig;
- rdi_namelistproc *drivernames;
- rdi_namelistproc *cpunames;
- rdi_errmessproc *errmess;
- /* Only if RDIInfo_Target returns a value with RDITarget_LoadAgent set */
- rdi_loadagentproc *loadagent;
- };
- #endif
- extern unsigned int swi_mask;
- #define SWI_MASK_DEMON (1 << 0)
- #define SWI_MASK_ANGEL (1 << 1)
- #define SWI_MASK_REDBOOT (1 << 2)
|