palm-os-sdk/sdk-2/include/Core/System/DebugPrv.h
2016-08-25 07:53:48 -03:00

352 lines
12 KiB
C

/*******************************************************************
* Pilot Software
*
* Copyright (c) 1994-1997, Palm Computing Inc., All Rights Reserved
*
*-------------------------------------------------------------------
* FileName:
* DebugPrv.h
*
* Description:
* Privat«Debugging functions
*
* History:
* 8/10/95 RM - Created by Ron Marianetti
*
*
*******************************************************************/
#ifdef NON_PORTABLE
#ifndef __DEBUGPRV_H__
#define __DEBUGPRV_H__
/***********************************************************************
* Debugger Constants
***********************************************************************/
#define dbgLoopsPerTick 0x0800
#define dbgStackSize 0x0300 // DOLATER -- resize???
#define dbgNormalBreakpoints 5
#define dbgTempBPIndex dbgNormalBreakpoints
#define dbgTotalBreakpoints (dbgTempBPIndex+1)
#define dbgFlashCodeSpace sysInitStack // where we copy flash code
#define dbgFlashCodeSize 0x200 // size of flash code
#define dbgTotalTrapBreaks 5 // up to this many trap breaks at a time
/***********************************************************************
* Structure of Debugger Breakpoints
***********************************************************************/
typedef struct BreakpointType {
Ptr addr; // address of breakpoint
Boolean enabled; // true if enabled
Boolean installed; // for alignment
} BreakpointType;
/***********************************************************************
* Structure of Debugger Specific System Packet Type Bodies.
***********************************************************************/
#define sysPktMaxNameLen 32 // Max length of a routine name
//--------------------------------------------------------------
// sysPktStateCmd
// - get processor state
//------------------------------------------------------------------
// number of remote code words to send in the 'state response' packet
#define sysPktStateRspInstWords 15
typedef struct SysPktStateCmdType {
_sysPktBodyCommon; // Common Body header
} SysPktStateCmdCmdType;
typedef SysPktStateCmdCmdType* SysPktStateCmdCmdPtr;
// Packet Body structure for the state command response packet
typedef struct SysPktStateRspType {
_sysPktBodyCommon; // Common Body header
Boolean resetted; // true if target has just reset
Word exceptionId; // exception which caused the
// debugger to be entered.
M68KRegsType reg; // current remote registers.
Word inst[sysPktStateRspInstWords];
// instruction buffer for
// code beginning at PC.
BreakpointType bp[dbgTotalBreakpoints]; // current breakpoints
void* startAddr; // start address of routine
void* endAddr; // end address of routine
char name[sysPktMaxNameLen];
// routine name (0 or more chars,
// no null), immediately
// follows the address range.
Byte trapTableRev; // rev of trap table. Used to determine
// when host's trap table cache is invalid
} SysPktStateRspType;
typedef SysPktStateRspType* SysPktStateRspPtr;
//--------------------------------------------------------------------
// sysPktGetRtnNameCmd
// - get routine name
//--------------------------------------------------------------------
// The response packet body will contain start address(4 bytes),
// end address(4 bytes), followed by 0 or more bytes of the routine
// name (no null byte).
typedef struct SysPktRtnNameCmdType {
_sysPktBodyCommon; // Common Body header
void* address; // -> address to query on
} SysPktRtnNameCmdType;
typedef SysPktRtnNameCmdType* SysPktRtnNameCmdPtr;
typedef struct SysPktRtnNameRspType {
_sysPktBodyCommon; // Common Body header
void* address; // -> address to query on
void* startAddr; // <- start address of routine
void* endAddr; // <- end address of routine
char name[sysPktMaxNameLen]; // <- routine name, if any immediately
// follows the address range.
// The balance need not be sent.
} SysPktRtnNameRspType;
typedef SysPktRtnNameRspType* SysPktRtnNameRspPtr;
//--------------------------------------------------------------------
// sysPktReadRegsCmd
// - read registers
//--------------------------------------------------------------------
// Packet Body structure for the read regs command response packet
typedef struct SysPktReadRegsCmdType {
_sysPktBodyCommon; // Common Body header
} SysPktReadRegsCmdType;
typedef SysPktReadRegsCmdType* SysPktReadRegsCmdPtr;
typedef struct SysPktReadRegsRspType {
_sysPktBodyCommon; // Common Body header
//M68KRegsType reg; // <- return registers
} SysPktReadRegsRspType;
typedef SysPktReadRegsRspType* SysPktReadRegsRspPtr;
//--------------------------------------------------------------------
// sysPktWriteRegsCmd
// - write registers
//--------------------------------------------------------------------
// Packet Body structure for the write regs command packet
typedef struct SysPktWriteRegsCmdType {
_sysPktBodyCommon; // Common Body header
M68KRegsType reg; // -> registers to write
} SysPktWriteRegsCmdType;
typedef SysPktWriteRegsCmdType* SysPktWriteRegsCmdPtr;
// Packet Body structure for the write regs command packet
typedef struct SysPktWriteRegsRspType {
_sysPktBodyCommon; // Common Body header
} SysPktWriteRegsRspType;
typedef SysPktWriteRegsRspType* SysPktWriteRegsRspPtr;
//--------------------------------------------------------------------
// sysPktContinueCmd
// - continue
//--------------------------------------------------------------------
// Packet Body structure for the continue command packet
typedef struct SysPktContinueCmdType {
_sysPktBodyCommon; // Common Body header
M68KRegsType regs; // registers
Boolean stepSpy; // set true to do step spy
DWord ssAddr; // step spy address
DWord ssCount; // # of bytes
DWord ssCheckSum; // checksum
} SysPktContinueCmdType;
typedef SysPktContinueCmdType* SysPktContinueCmdPtr;
//--------------------------------------------------------------------
// sysPktGetBreakPointsCmd
//
// - Get breakpoints
//--------------------------------------------------------------------
typedef struct SysPktGetBreakpointsCmdType {
_sysPktBodyCommon; // Common Body header
} SysPktGetBreakpointsCmdType;
typedef SysPktGetBreakpointsCmdType* SysPktGetBreakpointsCmdPtr;
typedef struct SysPktGetBreakpointsRspType {
_sysPktBodyCommon; // Common Body header
//BreakpointType bp[dbgTotalBreakpoints];
} SysPktGetBreakpointsRspType;
typedef SysPktGetBreakpointsRspType* SysPktGetBreakpointsRspPtr;
//--------------------------------------------------------------------
// sysPktSetBreakPointsCmd
//
// - Set breakpoints
//--------------------------------------------------------------------
typedef struct SysPktSetBreakpointsCmdType {
_sysPktBodyCommon; // Common Body header
//BreakpointType bp[dbgTotalBreakpoints];
} SysPktSetBreakpointsCmdType;
typedef SysPktSetBreakpointsCmdType* SysPktSetBreakpointsCmdPtr;
typedef struct SysPktSetBreakpointsRspType {
_sysPktBodyCommon; // Common Body header
} SysPktSetBreakpointsRspType;
typedef SysPktSetBreakpointsRspType* SysPktSetBreakpointsRspPtr;
//--------------------------------------------------------------------
// sysPktDbgBreakToggleCmd
// - Enable/Disable DbgBreak's command
//--------------------------------------------------------------------
typedef struct SysPktDbgBreakToggleCmdType {
_sysPktBodyCommon; // Common Body header
} SysPktDbgBreakToggleCmdType;
typedef SysPktDbgBreakToggleCmdType* SysPktDbgBreakToggleCmdPtr;
typedef struct SysPktDbgBreakToggleRspType {
_sysPktBodyCommon; // Common Body header
Boolean newState;
} SysPktDbgBreakToggleRspType;
typedef SysPktDbgBreakToggleRspType* SysPktDbgBreakToggleRspPtr;
//--------------------------------------------------------------------
// sysPktFlashCmd
// Program Flash command - programs one sector of the FLASH ram
// If numBytes is 0, this routine returns info on the flash in:
// manuf - manufacturer code
// device - device code
// width - width of FLASH
// ramSpaceP - buffer in RAM for flash sector
//--------------------------------------------------------------------
typedef struct SysPktFlashWriteType {
_sysPktBodyCommon; // Common Body header
Word numBytes; // -> # of bytes in sector
DWord flashBase; // -> base address of FLASH, or 0 for default
DWord srcAddr; // -> source address of new data
DWord dstAddr; // -> dest address in flash memory
Byte manuf; // <- manufacturer
Byte device; // <- device
Byte width; // <- Flash memory width
Byte filler;
DWord ramSpaceP; // <- available space in RAM for sector
} SysPktFlashWriteType;
typedef SysPktFlashWriteType* SysPktFlashWritePtr;
//--------------------------------------------------------------------
// sysPktGetTrapBreaksCmd
//
// - Get Trap Breaks
//--------------------------------------------------------------------
typedef struct SysPktGetTrapBreaksCmdType {
_sysPktBodyCommon; // Common Body header
} SysPktGetTrapBreaksCmdType;
typedef SysPktGetTrapBreaksCmdType* SysPktGetTrapBreaksCmdPtr;
typedef struct SysPktGetTrapBreaksRspType {
_sysPktBodyCommon; // Common Body header
//Word trapBP[dbgTotalTrapBreaks];
} SysPktGetTrapBreaksRspType;
typedef SysPktGetTrapBreaksRspType* SysPktGetTrapBreaksRspPtr;
//--------------------------------------------------------------------
// sysPktSetTrapBreaksCmd
//
// - Set Trap Breaks
//--------------------------------------------------------------------
typedef struct SysPktSetTrapBreaksCmdType {
_sysPktBodyCommon; // Common Body header
//Word trapBP[dbgTotalTrapBreaks];
} SysPktSetTrapBreaksCmdType;
typedef SysPktSetTrapBreaksCmdType* SysPktSetTrapBreaksCmdPtr;
typedef struct SysPktSetTrapBreaksRspType {
_sysPktBodyCommon; // Common Body header
} SysPktSetTrapBreaksRspType;
typedef SysPktSetTrapBreaksRspType* SysPktSetTrapBreaksRspPtr;
// The following indicates how much space in debugger globals we've reserved for
// the SerialLibrary globals for the Debugger. Reserve 8 extra bytes for
// patching.
#define dbgSerRsvGlobalsSize 32
/***********************************************************************
* Stucture of Debugger Globals
***********************************************************************/
struct DbgGlobalsType {
// Saved registers
M68KRegsType reg;
// Breakpoints and saved opcodes behind each one
Boolean romBP;
Boolean stepOverBP; // true if single-stepping over a BP
BreakpointType bp[dbgTotalBreakpoints];
Word bpOpcode[dbgTotalBreakpoints];
// Current trap breaks
Word trapBreak[dbgTotalTrapBreaks];
DWord oldDispatcher; // saved trap dispatcher
Boolean breakingOnATrap; // set by debugger trap dispatcher
// Mode settings
Boolean ignoreDbgBreaks; // if true, ignore DbgBreak's
Boolean commOpened; // if true, comm library and socket have been
// opened.
// Step spy support
Boolean stepSpy; // true if step spying.
DWord ssAddr; // address to step spy on
DWord ssValue; // saved value
// Exception type
Word excType; // why we entered debugger
Byte reEntered; // true if we re-entered
Byte firstEntrance; // true first time we enter debugger
// Debugger Serial Library globals
Byte serGlobals[dbgSerRsvGlobalsSize]; // Debugger Serial globals
// Saved bus error exception info
DWord busErrStack[2]; // first 2 long words of bus error stack frame
// Debugger Stack
Byte stack[dbgStackSize]; // Debugger stack
Word stackEnd; // End of stack
};
typedef struct DbgGlobalsType DbgGlobalsType;
typedef DbgGlobalsType* DbgGlobalsPtr;
#endif // __DEBUGMGR_H__
#endif // NON_PORTABLE