1196 lines
43 KiB
C
1196 lines
43 KiB
C
/* wdb.h - WDB protocol definition header */
|
|
|
|
/*
|
|
* Copyright (c) 1984-2005 Wind River Systems, Inc.
|
|
*
|
|
* The right to copy, distribute, modify or otherwise make use of this
|
|
* software may be licensed only pursuant to the terms of an applicable Wind
|
|
* River license agreement.
|
|
*/
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
03k,29apr05,bpn Added WDB_RET_TYPE_CLEAR macro (SPR#108704).
|
|
03j,04jun04,dbt Added ctors and dtors fields in WDB_MOD_INFO.
|
|
03i,06may04,dbt Updated Modules & Symbols synchronization structures.
|
|
03h,28apr04,elg Change context name in exception information structure.
|
|
03g,27apr04,elg Add signal number information in exception event.
|
|
03f,13apr04,elg Remove coprocessor types.
|
|
03e,23mar04,elg Rework way contexts are transmitted in events.
|
|
03d,05mar04,elg Modify context structure to have more generic.
|
|
03c,22jan04,elg Add new events for breakpoint synchronization.
|
|
Add new event for agent mode change notification.
|
|
Modify exception event information.
|
|
03c,26feb04,mil Added SPE support for PPC85XX.
|
|
03b,05nov03,x_p Changed CTX_CREATE_DESC to handle argc and envp for Linux
|
|
03a,13oct03,elg Modify breakpoint information.
|
|
02z,30sep03,elg Finalize WDB protocol.
|
|
Add CPU family and CPU variant fields.
|
|
02y,29sep03,fle rather include rpc/rpc.h than xdr/rpc.h
|
|
02x,08sep03,tbu added WDB_LINUX_INFO type
|
|
02w,20may03,elg Add RTP context type.
|
|
02v,27feb03,elg Merge file with BSD.
|
|
02u,04feb03,elg Add WDB merged protocol.
|
|
02t,19dec00,elg Documentation check up.
|
|
02s,05sep00,elg Modify the WDB_RT_INFO structure (SPR 32724).
|
|
02r,29aug00,elg Modify wdbCore structure (SPR 32749).
|
|
02q,06jun00,dbt Added several fields in module descriptor.
|
|
02p,30may00,dbt Added partition ID in section descriptor.
|
|
02o,12apr00,elg Add address information for shared libraries and shared data.
|
|
02n,06mar00,elg Add WDB_VXWORKS_INFO structure.
|
|
02m,31jan00,dbt Added event to notify tgtsvr when a context is updated,
|
|
updated WDB version
|
|
02l,30jan00,dbt Added user services.
|
|
02k,25jan00,elg Fix doc generation error.
|
|
02j,10jan00,dbt Code cleanup for module/symbol synchronization code review.
|
|
02i,22nov99,elg Add float support in WDB_FUNC_CALL.
|
|
02h,04nov99,dbt Updated symbol table synchronization support.
|
|
02g,02nov99,elg Update WDB_CTX_CREATE_DESC for PD creation.
|
|
02f,26oct99,dbt Added support for trigger.
|
|
02e,17sep99,dbt added support for WDB symbol table synchronization.
|
|
02d,15sep99,elg Add support for overlapped memory model.
|
|
02c,02sep99,bpn The WDBPORT define makes reference to the communication port
|
|
variable (SPR #28606).
|
|
02b,06aug99,elg Add tool Id in WDB_CALL_RET_INFO.
|
|
02a,28jun99,elg Add WDB_CORE support.
|
|
01z,06apr99,elg add new WDB requests for Aeolus.
|
|
01a,04apr95,ms derived from work by tpr (and pme and ms).
|
|
merged wdb.h, wdbtypes.h, comtypes.h, and xdrwdb.h
|
|
removed #ifdef UNIX
|
|
made all data types of the form wdbXxx_t.
|
|
added types WDB_STRING_T, WDB_OPQ_DATA_T, TGT_ADDR_T
|
|
TGT_INT_T, and UINT32
|
|
made most event data an array of ints.
|
|
removed obsolete data types.
|
|
*/
|
|
|
|
#ifndef __INCwdbh
|
|
#define __INCwdbh
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
DESCRIPTION
|
|
|
|
The WDB protocol provides and extensible interface for remote debugging.
|
|
|
|
The WDB agent has a fixed UDP port number in order to remove the complexity
|
|
of having a portmapper (which adds significant overhead if the
|
|
agent is configured as a ROM-monitor).
|
|
|
|
Every RPC request sent to the agent has a four byte sequence number
|
|
appended to the begining of the parameters. The two most significant
|
|
bytes are the ID of the host.
|
|
|
|
Every RPC reply from the agent has a four byte error status appended
|
|
to the begining of the reply. One of the bits of the error status
|
|
is reserved to mean that events are pending on the target, and another one is
|
|
reserved to mean that another request is needed to get a full result. The rest
|
|
of the error status is either OK (on success) or the reason
|
|
for failure. If a procedure fails, then the rest of the reply is
|
|
not decoded (e.g., it contains garbage).
|
|
|
|
REQUIREMENTS
|
|
|
|
Both the host and target must support 32 bit integers.
|
|
|
|
INTERFACE
|
|
|
|
errCode = wtxBeCall (HBackend, procNum, ¶ms, &reply);
|
|
|
|
DATA TYPES
|
|
|
|
UINT32 /@ 32 bit unsigned integer (defined in host.h) @/
|
|
BOOL /@ TRUE or FALSE @/
|
|
STATUS /@ OK or ERROR @/
|
|
TGT_ADDR_T /@ target address (defined in host.h) @/
|
|
TGT_INT_T /@ target integer (defined in host.h) @/
|
|
WDB_STRING_T /@ pointer to a string (a local address) @/
|
|
WDB_OPQ_DATA_T /@ pointer to a block of memory (a local address) @/
|
|
|
|
Each side must also provide the following XDR filters:
|
|
|
|
xdr_UINT32 /@ encode/decode a 32 bit integer @/
|
|
*/
|
|
|
|
/* includes */
|
|
|
|
#ifdef HOST
|
|
#include "host.h"
|
|
#else /* HOST */
|
|
#include "wdb/wdbOsLib.h"
|
|
#endif /* HOST */
|
|
|
|
#include "rpc/rpc.h"
|
|
|
|
/* definitions */
|
|
|
|
/*
|
|
* WDB function numbers.
|
|
* Each remote service is identified by an integer.
|
|
*/
|
|
|
|
/* Session Management */
|
|
|
|
#define WDB_TARGET_PING 0 /* check if agent is alive */
|
|
#define WDB_TARGET_CONNECT 1 /* connect to the agent */
|
|
#define WDB_TARGET_DISCONNECT 2 /* terminate the connection */
|
|
#define WDB_TARGET_MODE_SET 3 /* change the agents mode */
|
|
#define WDB_TARGET_MODE_GET 4 /* get the agent mode */
|
|
|
|
/* Memory Operations */
|
|
|
|
#define WDB_MEM_READ 10 /* read a memory block */
|
|
#define WDB_MEM_WRITE 11 /* write a memory block */
|
|
#define WDB_MEM_FILL 12 /* fill memory with pattern */
|
|
#define WDB_MEM_MOVE 13 /* move memory on target */
|
|
#define WDB_MEM_CHECKSUM 14 /* checksum a memory block */
|
|
#define WDB_MEM_PROTECT 15 /* write (un)protecting */
|
|
#define WDB_MEM_CACHE_TEXT_UPDATE 16 /* called after loading text */
|
|
#define WDB_MEM_SCAN 17 /* scan memory for a pattern */
|
|
#define WDB_MEM_MANY_WRITE 18 /* scatter write */
|
|
#define WDB_MEM_WRITE_MANY_INT 19 /* scatter write of ints */
|
|
|
|
/* Context Control */
|
|
|
|
#define WDB_CONTEXT_CREATE 30 /* create a new context */
|
|
#define WDB_CONTEXT_KILL 31 /* remove a context */
|
|
#define WDB_CONTEXT_SUSPEND 32 /* suspend a context */
|
|
#define WDB_CONTEXT_RESUME 33 /* resume a context */
|
|
#define WDB_CONTEXT_STATUS_GET 34 /* get the context status */
|
|
#define WDB_CONTEXT_ATTACH 35 /* attach ctx to the agent */
|
|
#define WDB_CONTEXT_DETACH 36 /* detach ctx from the agent */
|
|
|
|
/* Register Manipulation */
|
|
|
|
#define WDB_REGS_GET 40 /* get register(s) */
|
|
#define WDB_REGS_SET 41 /* set register(s) */
|
|
|
|
/* Virtual I/O */
|
|
|
|
#define WDB_VIO_WRITE 51 /* write a virtual I/O buffer */
|
|
|
|
/* Eventpoints */
|
|
|
|
#define WDB_EVENTPOINT_ADD 60 /* add an eventpoint */
|
|
#define WDB_EVENTPOINT_DELETE 61 /* delete an eventpoint */
|
|
|
|
/* Events */
|
|
|
|
#define WDB_EVENT_GET 70 /* get info about an event */
|
|
|
|
/* debugging */
|
|
|
|
#define WDB_CONTEXT_CONT 80 /* XXX - same as resume? */
|
|
#define WDB_CONTEXT_STEP 81 /* continue a context */
|
|
#define WDB_CONTEXT_STOP 82 /* stop a context */
|
|
|
|
/* Miscelaneous */
|
|
|
|
#define WDB_FUNC_CALL 90 /* spawn a function */
|
|
#define WDB_EVALUATE_GOPHER 91 /* evaluate a gopher tape */
|
|
#define WDB_DIRECT_CALL 92 /* call a function directly */
|
|
|
|
/* module management */
|
|
|
|
#define WDB_SYM_LIST_ADD 100 /* add a symbol list */
|
|
#define WDB_SYM_GET 101 /* get symbol info. */
|
|
#define WDB_MOD_INFO_GET 102 /* get module info. */
|
|
#define WDB_MOD_ADD 103 /* add a module */
|
|
#define WDB_MOD_REMOVE 104 /* remove a module */
|
|
|
|
/* Target commands */
|
|
|
|
#define WDB_USR_SVC_CTRL 110 /* Add or Remove a command */
|
|
/* on the target */
|
|
#define WDB_USR_SVC_CALL 111 /* call a command on the */
|
|
/* target */
|
|
|
|
/* Thread Management */
|
|
|
|
#define WDB_THREAD_INFO_SET 120 /* set thread debug info */
|
|
#define WDB_THREAD_INFO_GET 121 /* get thread debug info */
|
|
|
|
/*
|
|
* WDB error codes.
|
|
* Each WDB function returns an error code.
|
|
* If the error code is zero (OK), then the procedure succeded and
|
|
* the reply data is valid.
|
|
* If the error code is nonzero, then the procedure failed. In this case
|
|
* the error code indicates the reason for failure and the reply data
|
|
* is invalid.
|
|
*/
|
|
|
|
#define WDB_OK OK /* success */
|
|
#define WDB_ERR_INVALID_PARAMS 0x501 /* params invalid */
|
|
#define WDB_ERR_MEM_ACCESS 0x502 /* memory fault */
|
|
#define WDB_ERR_AGENT_MODE 0x503 /* wrong agent mode */
|
|
#define WDB_ERR_RT_ERROR 0x504 /* run-time callout failed */
|
|
#define WDB_ERR_INVALID_CONTEXT 0x505 /* bad context ID */
|
|
#define WDB_ERR_INVALID_VIO_CHANNEL 0x506 /* bad virtual I/O channel */
|
|
#define WDB_ERR_INVALID_EVENT 0x507 /* no such event type */
|
|
#define WDB_ERR_INVALID_EVENTPOINT 0x508 /* no such eventpoint */
|
|
#define WDB_ERR_GOPHER_FAULT 0x509 /* gopher fault */
|
|
#define WDB_ERR_GOPHER_TRUNCATED 0x50a /* gopher tape too large */
|
|
#define WDB_ERR_EVENTPOINT_TABLE_FULL 0x50b /* out of room */
|
|
#define WDB_ERR_NO_AGENT_PROC 0x50c /* agent proc not installed */
|
|
#define WDB_ERR_NO_RT_PROC 0x50d /* run-time callout unavail */
|
|
#define WDB_ERR_GOPHER_SYNTAX 0x50e /* gopher syntax error */
|
|
#define WDB_ERR_NOT_FOUND 0x50f /* object not found */
|
|
#define WDB_ERR_HW_REGS_EXHAUSTED 0x510 /* hw breakpoint regs full */
|
|
#define WDB_ERR_INVALID_HW_BP 0x511 /* invalid hw breakpoint */
|
|
#define WDB_ERR_USR_SVC_EXHAUSTED 0x512 /* no more use service */
|
|
/* available */
|
|
#define WDB_ERR_USR_SVC_ALREADY_USED 0x513 /* specified user service id */
|
|
/* is already used */
|
|
#define WDB_ERR_NO_RT_CTX 0x514 /* context not supported by */
|
|
/* run time */
|
|
#define WDB_ERR_NO_PROCESS 0x515 /* no process support */
|
|
|
|
#define WDB_ERR_FILE_NOT_FOUND 0x520 /* file not found */
|
|
#define WDB_ERR_FILE_NULL_SIZE 0x521 /* size of file = 0 */
|
|
#define WDB_ERR_FILE_BAD_FORMAT 0x522 /* bad file format */
|
|
|
|
#define WDB_ERR_PROC_FAILED 0x5ff /* generic proc failure */
|
|
|
|
#define WDB_ERR_NO_CONNECTION 0x600 /* not connected */
|
|
#define WDB_ERR_CONNECTION_BUSY 0x601 /* someone else connected */
|
|
#define WDB_ERR_COMMUNICATION 0x6ff /* generic comm error */
|
|
|
|
/*
|
|
* WDB miscelaneous definitions.
|
|
*/
|
|
|
|
/* agent modes */
|
|
|
|
#define WDB_MODE_APP 1 /* application mode agent */
|
|
#define WDB_MODE_TASK WDB_MODE_APP /* task mode agent */
|
|
#define WDB_MODE_USER WDB_MODE_APP /* user mode agent */
|
|
#define WDB_MODE_SYSTEM 2 /* system mode agent */
|
|
#define WDB_MODE_EXTERN WDB_MODE_SYSTEM /* system mode agent */
|
|
#define WDB_MODE_DUAL (WDB_MODE_TASK | WDB_MODE_EXTERN) /* dual mode */
|
|
#define WDB_MODE_BI WDB_MODE_DUAL
|
|
|
|
/* size of WDB headers */
|
|
|
|
#define WDB_IP_HDR_SZ 20
|
|
#define WDB_UDP_HDR_SZ 8
|
|
#define WDB_RPC_REPLY_HDR_SZ 24
|
|
#define WDB_RPC_REQUEST_HDR_SZ 40
|
|
#define WDB_WRAPPER_HDR_SZ 12
|
|
|
|
/* maximum number of words of event data */
|
|
|
|
#define WDB_MAX_EVT_DATA 20
|
|
|
|
/* gopher stream format type codes */
|
|
|
|
#define GOPHER_UINT32 0
|
|
#define GOPHER_STRING 1
|
|
#define GOPHER_UINT16 2
|
|
#define GOPHER_UINT8 3
|
|
#define GOPHER_FLOAT32 4
|
|
#define GOPHER_FLOAT64 5
|
|
#define GOPHER_FLOAT80 6
|
|
#define GOPHER_SEPARATOR 7
|
|
#define GOPHER_UINT64 8
|
|
|
|
/* option bits for task creation */
|
|
|
|
#define WDB_UNBREAKABLE 0x0002 /* ignore breakpoints */
|
|
#define WDB_FP_RETURN 0x8000 /* return value is a double */
|
|
|
|
/* set / get / clear the return type in the options word */
|
|
|
|
#define WDB_RET_TYPE_SET(x) (((x) & 0x3) << 15)
|
|
#define WDB_RET_TYPE_GET(x) (((x) >> 15) & 0x3)
|
|
#define WDB_RET_TYPE_CLEAR(x) *(x) &= ~(0x3 << 15);
|
|
|
|
/* TSFS file type bits */
|
|
|
|
#define WDB_TSFS_S_IFREG 0x4000 /* directory */
|
|
#define WDB_TSFS_S_IFDIR 0x8000 /* regular file */
|
|
|
|
/* TSFS open mode flags */
|
|
|
|
#define WDB_TSFS_O_RDONLY 0
|
|
#define WDB_TSFS_O_WRONLY 1
|
|
#define WDB_TSFS_O_RDWR 2
|
|
#define WDB_TSFS_O_CREAT 0x0200
|
|
#define WDB_TSFS_O_TRUNC 0x0400
|
|
#define WDB_TSFS_O_APPEND 0x0008
|
|
#define WDB_TSFS_O_EXCL 0x0800
|
|
#define WDB_TSFS_O_TEXT 0x4000 /* for Win32 hosts; to override default
|
|
binary translation mode */
|
|
|
|
/* TSFS portable errno values */
|
|
|
|
/*
|
|
* POSIX errnos are used by the TSFS but not defined here. These errno
|
|
* values are portable between the target and host, because they are not
|
|
* supported by one of the host platforms, or the errno is numbered
|
|
* differently on each host platform.
|
|
*/
|
|
|
|
#define WDB_TSFS_ERRNO_ENOTEMPTY (1 << 16)
|
|
#define WDB_TSFS_ERRNO_EDEADLK (2 << 16)
|
|
#define WDB_TSFS_ERRNO_ENOLCK (3 << 16)
|
|
#define WDB_TSFS_ERRNO_EMSGSIZE (4 << 16)
|
|
#define WDB_TSFS_ERRNO_EOPNOTSUPP (5 << 16)
|
|
#define WDB_TSFS_ERRNO_EADDRNOTAVAIL (6 << 16)
|
|
#define WDB_TSFS_ERRNO_ENOTSOCK (7 << 16)
|
|
#define WDB_TSFS_ERRNO_ENETRESET (8 << 16)
|
|
#define WDB_TSFS_ERRNO_ECONNABORTED (9 << 16)
|
|
#define WDB_TSFS_ERRNO_ECONNRESET (10 << 16)
|
|
#define WDB_TSFS_ERRNO_ECONNREFUSED (11 << 16)
|
|
#define WDB_TSFS_ERRNO_ENOBUFS (12 << 16)
|
|
#define WDB_TSFS_ERRNO_ENOTCONN (13 << 16)
|
|
#define WDB_TSFS_ERRNO_ESHUTDOWN (14 << 16)
|
|
#define WDB_TSFS_ERRNO_ETIMEDOUT (15 << 16)
|
|
#define WDB_TSFS_ERRNO_EINPROGRESS (16 << 16)
|
|
#define WDB_TSFS_ERRNO_EWOULDBLOCK (17 << 16)
|
|
#define WDB_TSFS_ERRNO_ENOSR (18 << 16)
|
|
#define WDB_TSFS_ERRNO_ELOOP (19 << 16)
|
|
#define WDB_TSFS_ERRNO_ENAMETOOLONG (20 << 16)
|
|
#define WDB_TSFS_ERRNO_EBADMSG (21 << 16)
|
|
|
|
/* session information */
|
|
|
|
#ifndef HOST
|
|
#define WDBPORT wdbPort /* this variable contains */
|
|
/* the UDP port to connect */
|
|
#else /* HOST */
|
|
#define WDBPORT (UINT16) 0x4321 /* UDP port to connect */
|
|
#endif /* HOST */
|
|
|
|
#define WDBPROG (u_long) 0x55555555 /* RPC program number */
|
|
#define WDBVERS (u_long) 1 /* RPC version number */
|
|
#define WDB_VERSION_STR "4.0"
|
|
|
|
/* message cores */
|
|
|
|
#define WDB_EVENT_NOTIFY 0x8000 /* notify bit in errCode */
|
|
#define WDB_TO_BE_CONTINUED 0x4000 /* continue bit in errCode */
|
|
#define WDB_HOST_ID_MASK 0xffff0000 /* hostId in seqNum */
|
|
|
|
/* memory options */
|
|
|
|
#define WDB_MEM_OPT_UNPROTECT 0x1 /* unprotect memory */
|
|
#define WDB_MEM_OPT_BYTE 0x10000000 /* memory byte access */
|
|
#define WDB_MEM_OPT_SHORT 0x20000000 /* memory short access */
|
|
#define WDB_MEM_OPT_INT 0x40000000 /* memory int access */
|
|
|
|
#define WDB_MEM_WIDTH_GET(x) ((x & 0xf0000000) >> 28)
|
|
#define WDB_MEM_WIDTH_SET(x) ((x & 0xf) << 28)
|
|
|
|
/* symbol table synchronization options */
|
|
|
|
#define WDB_SYM_SYNC_CORE_FILE 0x1 /* synchronize core file sym. */
|
|
|
|
/* available agent options */
|
|
|
|
#define WDB_AGENT_IS_SCALABLE 0x1 /* agent is scalable */
|
|
#define WDB_AGENT_HAS_MDL_SYM_SYNC 0x2 /* support for module and */
|
|
/* SYNC */
|
|
|
|
/* keep these values for backward compatibility issues */
|
|
|
|
#define WDB_REG_SET_IU 0 /* integer unit register set */
|
|
#define WDB_REG_SET_FPU 1 /* floating point unit register set */
|
|
#define WDB_REG_SET_MMU 2 /* memory management unit reg set */
|
|
#define WDB_REG_SET_CU 3 /* cache unit register set */
|
|
#define WDB_REG_SET_TPU 4 /* timer processor unit register set */
|
|
#define WDB_REG_SET_SYS 5 /* system registers */
|
|
#define WDB_REG_SET_DSP 6 /* dsp registers */
|
|
#define WDB_REG_SET_AV 7 /* altivec registers */
|
|
#define WDB_REG_SET_SPE 8 /* SPE registers */
|
|
|
|
/* typedefs */
|
|
|
|
/*
|
|
* WDB enum types.
|
|
*/
|
|
|
|
typedef enum wdb_ctx_type /* type of context on the target */
|
|
{
|
|
WDB_CTX_SYSTEM = 0, /* system mode */
|
|
WDB_CTX_GROUP = 1, /* process group (not implemented) */
|
|
WDB_CTX_ANY = 2, /* any context (not implemented) */
|
|
WDB_CTX_TASK = 3, /* specific task or processes */
|
|
WDB_CTX_ANY_TASK = 4, /* any task */
|
|
WDB_CTX_ISR = 5, /* specific ISR */
|
|
WDB_CTX_ANY_ISR = 6, /* any ISR */
|
|
WDB_CTX_PD = 7, /* specific protection domain */
|
|
WDB_CTX_PROCESS = 8, /* specific process */
|
|
WDB_CTX_RTP = 9, /* specific RTP */
|
|
WDB_CTX_TYPE_NUM /* type number, must be last field */
|
|
} WDB_CTX_TYPE;
|
|
|
|
typedef enum wdb_ctx_status /* status of context on the target */
|
|
{
|
|
WDB_CTX_RUNNING = 0, /* context is running */
|
|
WDB_CTX_SUSPENDED = 1, /* context is suspended */
|
|
WDB_CTX_STOPPED = 2 /* context is stopped */
|
|
} WDB_CTX_STATUS;
|
|
|
|
typedef enum wdb_evt_type /* type of event on the target */
|
|
{
|
|
WDB_EVT_NONE = 0, /* no event */
|
|
WDB_EVT_CTX_START = 1, /* context creation */
|
|
WDB_EVT_CTX_EXIT = 2, /* context exit */
|
|
WDB_EVT_BP = 3, /* breakpoint */
|
|
WDB_EVT_HW_BP = 4, /* hardware breakpoint */
|
|
WDB_EVT_WP = 5, /* watchpoint */
|
|
WDB_EVT_EXC = 6, /* exception */
|
|
WDB_EVT_VIO_WRITE = 7, /* virtual I/O write */
|
|
WDB_EVT_CALL_RET = 8, /* function call finished */
|
|
WDB_EVT_TSFS_OP = 9, /* VIO II operation */
|
|
WDB_EVT_USER = 10, /* user event */
|
|
WDB_EVT_MOD_LOAD = 11, /* object module load */
|
|
WDB_EVT_MOD_UNLOAD = 12, /* object module unload */
|
|
WDB_EVT_SYM_ADD = 13, /* symbol add */
|
|
WDB_EVT_TRIGGER = 14, /* trigger event */
|
|
WDB_EVT_CTX_UPDATE = 15, /* context update */
|
|
WDB_EVT_BP_CREATE = 16, /* breakpoint creation */
|
|
WDB_EVT_BP_DELETE = 17, /* breakpoint deletion */
|
|
WDB_EVT_MODE = 18, /* WDB mode changed */
|
|
WDB_EVT_CTX_DUMP = 30 /* context dump */
|
|
} WDB_EVT_TYPE;
|
|
|
|
typedef enum wdb_action_type /* what to do when an event occurs */
|
|
{
|
|
WDB_ACTION_CALL = 1, /* condition the evtpt via a proc */
|
|
WDB_ACTION_NOTIFY = 2, /* notify the host */
|
|
WDB_ACTION_STOP = 4, /* stop the task or process */
|
|
WDB_ACTION_SYS_STOP = 8, /* stop system */
|
|
WDB_ACTION_ALL_STOP = 16 /* stop RTP tasks, or kernel tasks */
|
|
} WDB_ACTION_TYPE;
|
|
|
|
/* additional defines */
|
|
|
|
#define WDB_SYS_PROHIB_ACTION (WDB_ACTION_STOP | WDB_ACTION_ALL_STOP)
|
|
#define WDB_ACTION_STOP_MASK (WDB_ACTION_STOP | WDB_ACTION_ALL_STOP | \
|
|
WDB_ACTION_SYS_STOP)
|
|
|
|
typedef enum wdb_vt_option_type /* breakpoint options */
|
|
{
|
|
WDB_EVT_BP_PERSISTENT = 1 /* breakpoint is persistent */
|
|
} WDB_EVT_OPTION_TYPE;
|
|
|
|
typedef enum wdb_call_ret_type /* type of return value */
|
|
{
|
|
WDB_CALL_RET_INT = 0, /* an integer is returned */
|
|
WDB_CALL_RET_DBL = 1, /* a double is returned */
|
|
WDB_CALL_RET_FLT = 2 /* a float is returned */
|
|
} WDB_CALL_RET_TYPE;
|
|
|
|
typedef enum wdb_rt_type /* type of run-time system */
|
|
{
|
|
WDB_RT_NULL = 0, /* standalone WDB agent */
|
|
WDB_RT_VXWORKS = 1 /* WDB agent integrated in VxWorks */
|
|
} WDB_RT_TYPE;
|
|
|
|
/*
|
|
* WDB primitive data types.
|
|
*/
|
|
|
|
#ifndef HOST
|
|
typedef UINT32 TGT_ADDR_T;
|
|
typedef INT32 TGT_INT_T;
|
|
#endif /* HOST */
|
|
|
|
typedef char * WDB_STRING_T;
|
|
typedef char * WDB_OPQ_DATA_T;
|
|
typedef char ** WDB_STRING_ARRAY;
|
|
|
|
/*
|
|
* WDB compound data types.
|
|
*/
|
|
|
|
typedef struct wdb_core /* common header WDB structure */
|
|
{
|
|
TGT_INT_T numInts; /* WDB_CORE length: 2 */
|
|
UINT32 toolId; /* tool ID */
|
|
UINT32 memCtx; /* context WDB request sees */
|
|
} WDB_CORE;
|
|
|
|
/* Context Structures */
|
|
|
|
#define WDB_CTX_MAX_ARGS 2 /* maximum of information in context */
|
|
|
|
typedef struct wdb_ctx /* a particular context */
|
|
{
|
|
WDB_CTX_TYPE contextType; /* type of context */
|
|
TGT_INT_T numArgs; /* structure length: it depends on */
|
|
/* context type and OS */
|
|
TGT_INT_T * args; /* information to characterize */
|
|
/* a context */
|
|
} WDB_CTX;
|
|
|
|
typedef struct wdb_ctx_create_desc /* how to create a context */
|
|
{
|
|
WDB_CTX_TYPE contextType; /* task, PD, process or system */
|
|
WDB_STRING_T name; /* name */
|
|
TGT_INT_T redirIn; /* redirect input file (or 0) */
|
|
TGT_INT_T redirOut; /* redirect output file (or 0) */
|
|
TGT_INT_T redirErr; /* redirect error output file (or 0) */
|
|
TGT_ADDR_T baseAddr; /* virtual base address */
|
|
|
|
union
|
|
{
|
|
|
|
/* the following are used for system contexts */
|
|
|
|
struct
|
|
{
|
|
TGT_ADDR_T entry; /* context entry point */
|
|
TGT_INT_T numArgs; /* number of arguments */
|
|
TGT_INT_T * args; /* arguments */
|
|
} sys;
|
|
|
|
/* the following are only used for task contexts */
|
|
|
|
struct
|
|
{
|
|
TGT_ADDR_T entry; /* task entry point */
|
|
TGT_INT_T numArgs; /* number of arguments */
|
|
TGT_INT_T * args; /* arguments */
|
|
TGT_ADDR_T pdId; /* protection domain father */
|
|
TGT_INT_T priority; /* priority */
|
|
UINT32 size; /* task stack size */
|
|
TGT_INT_T options; /* context options */
|
|
} task;
|
|
|
|
/* the following are only used for protection domain contexts */
|
|
|
|
struct
|
|
{
|
|
TGT_INT_T loPriority; /* lowest priority of a task */
|
|
TGT_INT_T hiPriority; /* highest priority of a task */
|
|
TGT_ADDR_T physAddr; /* shared data physical addr */
|
|
WDB_STRING_T pagePoolList; /* list page pools */
|
|
WDB_STRING_T linkPath; /* link path */
|
|
UINT32 size; /* heap size */
|
|
TGT_INT_T options; /* context options */
|
|
} pd;
|
|
|
|
/* the following are only used for RTP contexts */
|
|
|
|
struct
|
|
{
|
|
TGT_INT_T numArgv; /* number of argv elements */
|
|
WDB_STRING_ARRAY argv; /* pointer to argv array */
|
|
TGT_INT_T numEnvp; /* number of envp elements */
|
|
WDB_STRING_ARRAY envp; /* pointer to envp array */
|
|
TGT_INT_T priority; /* priority of initial task */
|
|
TGT_INT_T stackSize; /* stack for initial task */
|
|
TGT_INT_T options; /* options passed to RTP */
|
|
} rtp;
|
|
|
|
/* the following are only used for process contexts */
|
|
|
|
struct
|
|
{
|
|
TGT_INT_T uid; /* process user ID */
|
|
TGT_INT_T gid; /* process group ID */
|
|
TGT_INT_T numArgv; /* number of argv elements */
|
|
WDB_STRING_ARRAY argv; /* pointer to argv array */
|
|
TGT_INT_T numEnvp; /* number of envp elements */
|
|
WDB_STRING_ARRAY envp; /* pointer to envp array */
|
|
TGT_INT_T priority; /* priority of initial task */
|
|
TGT_INT_T stackSize; /* stack for initial task */
|
|
TGT_INT_T options; /* options passed to RTP */
|
|
} process;
|
|
} ctxSpecific;
|
|
} WDB_CTX_CREATE_DESC;
|
|
|
|
typedef struct wdb_ctx_kill_desc /* how to kill a context */
|
|
{
|
|
WDB_CTX context; /* context to kill */
|
|
TGT_INT_T options; /* how to kill a context */
|
|
} WDB_CTX_KILL_DESC;
|
|
|
|
typedef struct wdb_direct_call_ret /* direct call return info */
|
|
{
|
|
TGT_INT_T returnVal; /* returned value */
|
|
TGT_INT_T errnoVal; /* errno value */
|
|
} WDB_DIRECT_CALL_RET;
|
|
|
|
/* Memory Structures */
|
|
|
|
typedef struct wdb_mem_region /* a region of target memory */
|
|
{
|
|
UINT32 options; /* memory options */
|
|
TGT_ADDR_T baseAddr; /* memory region base address */
|
|
TGT_INT_T numBytes; /* memory region size */
|
|
UINT32 param; /* procedure dependent parameter */
|
|
} WDB_MEM_REGION;
|
|
|
|
typedef struct wdb_mem_xfer /* transfer a block of memory */
|
|
{
|
|
UINT32 options; /* memory options */
|
|
WDB_OPQ_DATA_T source; /* data to transfer */
|
|
TGT_ADDR_T destination; /* requested destination */
|
|
TGT_INT_T numBytes; /* number of bytes transferred */
|
|
} WDB_MEM_XFER;
|
|
|
|
typedef struct wdb_mem_scan_desc
|
|
{
|
|
WDB_MEM_REGION memRegion; /* region of memory to scan */
|
|
WDB_MEM_XFER memXfer; /* pattern to scan for */
|
|
} WDB_MEM_SCAN_DESC;
|
|
|
|
/* Debug Structures */
|
|
|
|
typedef struct wdb_ctx_step_desc /* how to single step a context */
|
|
{
|
|
WDB_CTX context; /* context to step */
|
|
TGT_ADDR_T startAddr; /* lower bound of step range */
|
|
TGT_ADDR_T endAddr; /* upper bound of step range */
|
|
} WDB_CTX_STEP_DESC;
|
|
|
|
/* Register Structures */
|
|
|
|
typedef struct wdb_reg_read_desc /* register data to read */
|
|
{
|
|
UINT32 regSetType; /* type of register set to read */
|
|
WDB_CTX context; /* context associated with registers */
|
|
WDB_MEM_REGION memRegion; /* subregion of the register block */
|
|
} WDB_REG_READ_DESC;
|
|
|
|
typedef struct wdb_reg_write_desc /* register data to write */
|
|
{
|
|
UINT32 regSetType; /* type of register set to write */
|
|
WDB_CTX context; /* context associated with registers */
|
|
WDB_MEM_XFER memXfer; /* new value of the register set */
|
|
} WDB_REG_WRITE_DESC;
|
|
|
|
/* Target Structures */
|
|
|
|
typedef struct wdb_linux_info /* Linux specific information */
|
|
{
|
|
UINT32 dummy;
|
|
} WDB_LINUX_INFO;
|
|
|
|
typedef struct wdb_bsd_info /* BSD/OS specific information */
|
|
{
|
|
UINT32 dummy;
|
|
} WDB_BSD_INFO;
|
|
|
|
typedef struct wdb_vxworks_info /* vxWorks specific information */
|
|
{
|
|
TGT_ADDR_T pdList; /* pointer on protection domain list */
|
|
} WDB_VXWORKS_INFO;
|
|
|
|
typedef struct wdb_rt_info /* info on the run-time system */
|
|
{
|
|
WDB_STRING_T rtName; /* runtime name */
|
|
WDB_STRING_T rtVersion; /* run time version */
|
|
TGT_INT_T cpuFamily; /* target processor family type */
|
|
TGT_INT_T cpuType; /* target processor type */
|
|
WDB_STRING_T cpuVariant; /* target processor variant */
|
|
WDB_STRING_T toolName; /* tool used to build the kernel */
|
|
WDB_STRING_T bspShortName; /* BSP short name */
|
|
UINT32 hasCoprocessor; /* target has a floating point unit */
|
|
BOOL hasWriteProtect; /* target can write protect memory */
|
|
TGT_INT_T pageSize; /* size of a page */
|
|
TGT_INT_T endian; /* endianness (0x4321 or 0x1234) */
|
|
WDB_STRING_T bspName; /* board support package name */
|
|
WDB_STRING_T bootline; /* boot file path or NULL if embedded */
|
|
TGT_ADDR_T memBase; /* target main memory base address */
|
|
UINT32 memSize; /* target main memory size */
|
|
TGT_INT_T numRegions; /* number of memory regions */
|
|
WDB_MEM_REGION * memRegion; /* memory region descriptor(s) */
|
|
TGT_ADDR_T hostPoolBase; /* host-controlled target memory pool */
|
|
UINT32 hostPoolSize; /* host-controlled memory pool size */
|
|
TGT_INT_T numInts; /* RT specific union length */
|
|
union
|
|
{
|
|
WDB_VXWORKS_INFO vxWorksInfo; /* vxWorks specific information */
|
|
WDB_BSD_INFO bsdInfo; /* BSD/OS specific information */
|
|
WDB_LINUX_INFO linuxInfo; /* Linux specific information */
|
|
} rtSpecific;
|
|
} WDB_RT_INFO;
|
|
|
|
typedef struct wdb_agent_info /* info on the debug agent */
|
|
{
|
|
WDB_STRING_T agentVersion; /* version of the WDB agent */
|
|
TGT_INT_T mtu; /* maximum transfer size in bytes */
|
|
TGT_INT_T mode; /* available agent modes */
|
|
TGT_INT_T options; /* available agent options */
|
|
} WDB_AGENT_INFO;
|
|
|
|
typedef struct wdb_tgt_info /* info on the target */
|
|
{
|
|
WDB_AGENT_INFO agentInfo; /* info on the agent */
|
|
WDB_RT_INFO rtInfo; /* info on the run time system */
|
|
} WDB_TGT_INFO;
|
|
|
|
/* Eventpoint Structures */
|
|
|
|
typedef struct wdb_action /* a specific action */
|
|
{
|
|
WDB_ACTION_TYPE actionType;
|
|
UINT32 actionArg;
|
|
TGT_ADDR_T callRtn;
|
|
TGT_INT_T callArg;
|
|
} WDB_ACTION;
|
|
|
|
typedef struct wdb_evtpt_add_desc /* how to add an eventpoint */
|
|
{
|
|
WDB_EVT_TYPE evtType; /* type of event to detect */
|
|
TGT_INT_T numArgs; /* eventType dependent arguments */
|
|
UINT32 * args; /* arguments list */
|
|
WDB_CTX context; /* context in which event must occur */
|
|
WDB_ACTION action; /* action to perform */
|
|
} WDB_EVTPT_ADD_DESC;
|
|
|
|
typedef struct wdb_evtpt_del_desc /* how to delete an eventpoint */
|
|
{
|
|
WDB_EVT_TYPE evtType; /* type of event */
|
|
TGT_ADDR_T evtptId; /* eventpoint ID */
|
|
} WDB_EVTPT_DEL_DESC;
|
|
|
|
/* Event Structures */
|
|
|
|
typedef struct wdb_evt_info /* event info for anything but VIO */
|
|
{
|
|
TGT_INT_T numInts; /* number of ints of event data */
|
|
UINT32 info [WDB_MAX_EVT_DATA]; /* event data */
|
|
} WDB_EVT_INFO;
|
|
|
|
typedef struct wdb_call_ret_info
|
|
{
|
|
UINT32 callId; /* returned from WDB_FUNC_CALL */
|
|
UINT32 toolId; /* tool that did the function call */
|
|
WDB_CALL_RET_TYPE returnType; /* return type */
|
|
union
|
|
{
|
|
double returnValDbl; /* double return value */
|
|
TGT_INT_T returnValInt; /* integer return value */
|
|
float returnValFlt; /* float return value */
|
|
} returnVal;
|
|
TGT_INT_T errnoVal; /* error status */
|
|
} WDB_CALL_RET_INFO;
|
|
|
|
typedef struct wdb_evt_data /* reply to a WDB_EVENT_GET */
|
|
{
|
|
WDB_EVT_TYPE evtType; /* event type detected */
|
|
union /* eventType specific info */
|
|
{
|
|
WDB_MEM_XFER vioWriteInfo; /* vio write event data */
|
|
WDB_CALL_RET_INFO callRetInfo; /* call return event data */
|
|
WDB_EVT_INFO evtInfo; /* any other event info */
|
|
} eventInfo;
|
|
} WDB_EVT_DATA;
|
|
|
|
typedef struct wdb_exc_info /* WDB_EVT_INFO for exceptions */
|
|
{
|
|
TGT_INT_T numInts; /* structure length */
|
|
WDB_CTX_STATUS status; /* status of context */
|
|
WDB_CTX_TYPE stoppedCtxType; /* context stopped by exception */
|
|
TGT_INT_T stoppedArgs [WDB_CTX_MAX_ARGS];
|
|
WDB_CTX_TYPE excCtxType; /* context that got exception */
|
|
TGT_INT_T excArgs [WDB_CTX_MAX_ARGS];
|
|
TGT_INT_T vec; /* hardware trap number */
|
|
TGT_ADDR_T pEsf; /* address of exception stack frame */
|
|
TGT_INT_T sigNum; /* signal number */
|
|
} WDB_EXC_INFO;
|
|
|
|
typedef struct wdb_bp_info /* WDB_EVT_INFO for breakpoints */
|
|
{
|
|
TGT_INT_T numInts; /* structure length */
|
|
WDB_CTX_STATUS status; /* status of stopped context */
|
|
WDB_CTX_TYPE stoppedCtxType; /* context stopped on breakpoint */
|
|
TGT_INT_T stoppedArgs [WDB_CTX_MAX_ARGS];
|
|
WDB_CTX_TYPE hitCtxType; /* context that hit breakpoint */
|
|
TGT_INT_T hitArgs [WDB_CTX_MAX_ARGS];
|
|
TGT_ADDR_T pc; /* program counter */
|
|
TGT_ADDR_T fp; /* frame pointer */
|
|
TGT_ADDR_T sp; /* stack pointer */
|
|
TGT_ADDR_T addr; /* breakpoint address (watchpoint) */
|
|
} WDB_BP_INFO;
|
|
|
|
typedef struct wdb_bp_create_info /* WDB_EVT_INFO for BP creation */
|
|
{
|
|
TGT_INT_T numInts; /* structure length */
|
|
TGT_ADDR_T bpId; /* breakpoint ID */
|
|
WDB_EVT_TYPE bpType; /* breakpoint type */
|
|
TGT_ADDR_T addr; /* breakpoint address */
|
|
TGT_INT_T count; /* breakpoint count */
|
|
WDB_CTX_TYPE ctxType; /* breakpoint context */
|
|
TGT_INT_T ctxArgs [WDB_CTX_MAX_ARGS];
|
|
WDB_ACTION action; /* action on breakpoint */
|
|
WDB_EVT_OPTION_TYPE options; /* breakpoint options */
|
|
UINT32 type; /* hardware breakpoint type */
|
|
} WDB_BP_CREATE_INFO;
|
|
|
|
typedef struct wdb_bp_delete_info /* WDB_EVT_INFO for BP deletion */
|
|
{
|
|
TGT_INT_T numInts; /* 2 */
|
|
TGT_ADDR_T bpId; /* breakpoint ID deleted */
|
|
WDB_EVT_TYPE bpType; /* breakpoint type */
|
|
} WDB_BP_DELETE_INFO;
|
|
|
|
typedef struct wdb_mempart_info /* memory partition information */
|
|
{
|
|
TGT_INT_T numInts; /* structure length */
|
|
TGT_ADDR_T partId; /* memory partition address */
|
|
TGT_ADDR_T pdId; /* context owner */
|
|
WDB_STRING_T name; /* memory partition name */
|
|
UINT32 size; /* memory partition size */
|
|
} WDB_MEMPART_INFO;
|
|
|
|
typedef struct wdb_mode_info /* WDB_EVT_INFO for mode change */
|
|
{
|
|
TGT_INT_T numInts; /* 1 */
|
|
TGT_INT_T mode; /* new mode */
|
|
} WDB_MODE_INFO;
|
|
|
|
typedef struct wdb_ctx_exit_info /* WDB_EVT_INFO for context exit */
|
|
{
|
|
TGT_INT_T numInts; /* structure length */
|
|
WDB_CTX_TYPE ctxType; /* context that exited */
|
|
TGT_INT_T ctxArgs [WDB_CTX_MAX_ARGS];
|
|
TGT_INT_T returnVal; /* context's return value/exit code */
|
|
TGT_INT_T errnoVal; /* context's error status */
|
|
} WDB_CTX_EXIT_INFO;
|
|
|
|
typedef struct wdb_ctx_update_info /* WDB_EVT_INFO for context update */
|
|
{
|
|
TGT_INT_T numInts; /* structure length */
|
|
WDB_CTX_TYPE ctxType; /* context updated */
|
|
TGT_INT_T ctxArgs [WDB_CTX_MAX_ARGS];
|
|
} WDB_CTX_UPDATE_INFO;
|
|
|
|
/* thread management */
|
|
|
|
typedef struct wdb_th_id
|
|
{
|
|
TGT_INT_T threadId; /* thread ID */
|
|
TGT_INT_T threadStatus; /* thread status */
|
|
} WDB_THREAD_ID;
|
|
|
|
typedef struct wdb_th_id_list
|
|
{
|
|
TGT_INT_T numThreads; /* number of threads */
|
|
WDB_THREAD_ID * pThreadId; /* thread ID array */
|
|
} WDB_THREAD_ID_LIST;
|
|
|
|
/* symbol table synchronization structures */
|
|
|
|
#define WDB_MOD_NUM_SEGS 3 /* Number of segments in a module */
|
|
|
|
typedef struct wdb_sym_info /* WDB_SYM_INFO for symbols */
|
|
{
|
|
struct wdb_sym_info * next; /* next symbol */
|
|
TGT_INT_T symId; /* host or target symbol's ID */
|
|
TGT_ADDR_T value; /* symbol value */
|
|
TGT_INT_T symRef; /* symbols reference */
|
|
TGT_INT_T type; /* symbol type */
|
|
TGT_INT_T group; /* symbol group */
|
|
TGT_INT_T nameLength; /* symbol name length */
|
|
WDB_STRING_T name; /* symbol name */
|
|
} WDB_SYM_INFO;
|
|
|
|
typedef struct wdb_sym_list /* symbol list */
|
|
{
|
|
TGT_INT_T index; /* request index */
|
|
BOOL moreData; /* more data to come ? */
|
|
WDB_SYM_INFO * pSymInfo; /* Start of symbol list */
|
|
} WDB_SYM_LIST;
|
|
|
|
typedef struct wdb_sym_id /* host and target symbol ID */
|
|
{
|
|
TGT_INT_T hostSymbolId; /* host symbol ID */
|
|
TGT_INT_T tgtSymbolId; /* target symbol ID */
|
|
} WDB_SYM_ID;
|
|
|
|
typedef struct wdb_sym_id_list /* symbols' ID list */
|
|
{
|
|
TGT_INT_T numSym; /* number of symbols */
|
|
WDB_SYM_ID * pSymId; /* symbol ID array */
|
|
} WDB_SYM_ID_LIST;
|
|
|
|
typedef struct wdb_sect_info /* section information */
|
|
{
|
|
struct wdb_sect_info * next; /* next section */
|
|
TGT_INT_T nameLength; /* section name length */
|
|
WDB_STRING_T name; /* section name */
|
|
TGT_INT_T type; /* section type */
|
|
TGT_ADDR_T address; /* section address */
|
|
TGT_INT_T size; /* section size */
|
|
TGT_INT_T flags; /* section flags */
|
|
TGT_INT_T cksum; /* section checksum */
|
|
} WDB_SECT_INFO;
|
|
|
|
typedef struct wdb_seg_info /* segment information */
|
|
{
|
|
TGT_INT_T type; /* segment type */
|
|
TGT_ADDR_T address; /* segment address */
|
|
TGT_INT_T size; /* segment size */
|
|
TGT_INT_T flags; /* segment flags */
|
|
} WDB_SEG_INFO;
|
|
|
|
typedef struct wdb_mod_info /* module information */
|
|
{
|
|
TGT_INT_T index; /* request index */
|
|
TGT_INT_T nameLength; /* module name length */
|
|
WDB_STRING_T name; /* module name */
|
|
TGT_INT_T flags; /* load flags */
|
|
TGT_INT_T group; /* group number */
|
|
TGT_INT_T commTotalSize; /* memory used by common symbols */
|
|
TGT_INT_T swapNeeded; /* TRUE if the headers need byte swap */
|
|
TGT_INT_T undefSymCount; /* number of undefined symbols */
|
|
TGT_ADDR_T ctors; /* static constructors */
|
|
TGT_ADDR_T dtors; /* static constructors */
|
|
BOOL moreData; /* more data to come ? */
|
|
WDB_SEG_INFO segment[WDB_MOD_NUM_SEGS]; /* segments desc. */
|
|
WDB_SECT_INFO * section; /* section list */
|
|
} WDB_MOD_INFO;
|
|
|
|
typedef struct wdb_sym_mod_desc /* descriptor used to get sym. info */
|
|
{
|
|
TGT_INT_T moduleId; /* module to synchronize */
|
|
TGT_INT_T symbolId; /* symbol to synchronize */
|
|
TGT_INT_T options; /* options */
|
|
} WDB_SYM_MOD_DESC;
|
|
|
|
/* command structures */
|
|
|
|
typedef enum wdb_usr_svc_ctrl_opcode /* opcode for WDB_USR_SVC_CTRL op. */
|
|
{
|
|
WDB_USR_SVC_ADD = 0, /* add a new service on the target */
|
|
WDB_USR_SVC_REMOVE = 1, /* remove a service on the target */
|
|
WDB_USR_SVC_FIND = 2 /* find a service on the target */
|
|
} WDB_USR_SVC_CTRL_OPCODE;
|
|
|
|
typedef struct wdb_usr_svc_add_info /* extra field for WDB_USR_SVC_ADD */
|
|
{
|
|
TGT_INT_T func; /* routine associated with service */
|
|
TGT_INT_T initRtn; /* init routine for the new service */
|
|
TGT_INT_T initRtnArg; /* argument for init routine */
|
|
} WDB_USR_SVC_ADD_INFO;
|
|
|
|
typedef struct wdb_usr_svc_rem_info /* extra field for WDB_USR_SVC_REM */
|
|
{
|
|
TGT_INT_T stopRtn; /* routine to call to stop the */
|
|
/* command service */
|
|
TGT_INT_T stopRtnArg; /* argument for stop command service */
|
|
} WDB_USR_SVC_REM_INFO;
|
|
|
|
typedef struct wdb_usr_svc_find_info /* extra field for WDB_USR_SVC_FIND */
|
|
{
|
|
TGT_INT_T func; /* routine associated with service */
|
|
} WDB_USR_SVC_FIND_INFO;
|
|
|
|
typedef struct wdb_usr_svc_ctrl_info /* user service control information */
|
|
{
|
|
TGT_INT_T numInts; /* depends on opcode */
|
|
TGT_INT_T svcId; /* service Id */
|
|
TGT_INT_T opcode; /* operation to perform */
|
|
union
|
|
{
|
|
WDB_USR_SVC_ADD_INFO add; /* specific params to add a service */
|
|
WDB_USR_SVC_REM_INFO remove; /* specific params to rem. a service */
|
|
WDB_USR_SVC_FIND_INFO find; /* specific params to find a service */
|
|
} extra;
|
|
} WDB_USR_SVC_CTRL_INFO;
|
|
|
|
/*
|
|
* #pragma align 1 for i960 will prevent gcc960 from aligning all structures
|
|
* on a 16 byte boundary.
|
|
*/
|
|
|
|
#ifndef HOST
|
|
#if (defined (CPU_FAMILY) && (CPU_FAMILY==I960) && (defined __GNUC__))
|
|
#pragma align 1 /* tell gcc960 not to optimize alignments */
|
|
#endif /* CPU_FAMILY==I960 */
|
|
#endif /* HOST */
|
|
|
|
typedef struct wdb_ctx_start_info /* WDB_EVT_INFO for context creation */
|
|
{
|
|
TGT_INT_T numInts; /* structure length */
|
|
WDB_CTX_TYPE createdCtxType; /* created context */
|
|
TGT_INT_T createdArgs [WDB_CTX_MAX_ARGS];
|
|
WDB_CTX_TYPE creationCtxType; /* creation context */
|
|
TGT_INT_T creationArgs [WDB_CTX_MAX_ARGS];
|
|
} WDB_CTX_START_INFO;
|
|
|
|
typedef struct wdb_ctx_dump_info /* WDB_EVT_INFO for context dump */
|
|
{
|
|
TGT_INT_T numInts; /* structure length */
|
|
WDB_CTX_TYPE dumpedCtxType; /* dumped context */
|
|
TGT_INT_T ctxArgs [WDB_CTX_MAX_ARGS];
|
|
} WDB_CTX_DUMP_INFO;
|
|
|
|
typedef enum wdb_tsfs_opcode /* opcode for TSFS operation */
|
|
{
|
|
WDB_TSFS_OPEN = 0, /* open target server file */
|
|
WDB_TSFS_READ = 1, /* read target server file */
|
|
WDB_TSFS_WRITE = 2, /* write target server file */
|
|
WDB_TSFS_CLOSE = 3, /* close target server file */
|
|
WDB_TSFS_IOCTL = 4, /* ioctl target server file */
|
|
WDB_TSFS_DELETE = 5 /* delete target server file */
|
|
} WDB_TSFS_OPCODE;
|
|
|
|
typedef enum wdb_tsfs_ioctl_req /* portable TSFS ioctl requests */
|
|
{
|
|
WDB_TSFS_IOCTL_FIOSEEK = 0, /* set file pointer */
|
|
WDB_TSFS_IOCTL_FIOWHERE = 1, /* get file pointer */
|
|
WDB_TSFS_IOCTL_FIONREAD = 2, /* # bytes readable */
|
|
WDB_TSFS_IOCTL_FIOFSTATGET = 3, /* fill a struct stat for file */
|
|
WDB_TSFS_IOCTL_FIOREADDIR = 4, /* read one directory entry */
|
|
WDB_TSFS_IOCTL_FIORENAME = 5, /* rename a file or directory */
|
|
WDB_TSFS_IOCTL_SO_SNDURGB = 6, /* send urgent-mode byte over sock */
|
|
WDB_TSFS_IOCTL_SO_SETDEBUG = 7, /* set SO_DEBUG for sock */
|
|
WDB_TSFS_IOCTL_SO_GETDEBUG = 8, /* get SO_DEBUG for sock */
|
|
WDB_TSFS_IOCTL_SO_SETSNDBUF = 9, /* set SO_SNDBUF for sock */
|
|
WDB_TSFS_IOCTL_SO_SETRCVBUF = 11, /* set SO_RCVBUF for sock */
|
|
WDB_TSFS_IOCTL_SO_SETDONTROUTE = 13,/* set SO_DONTROUT for sock */
|
|
WDB_TSFS_IOCTL_SO_GETDONTROUTE = 14,/* get SO_DONTROUT for sock */
|
|
WDB_TSFS_IOCTL_SO_SETOOBINLINE = 15,/* set SO_OOBINLINE for sock */
|
|
WDB_TSFS_IOCTL_SO_GETOOBINLINE = 16 /* get SO_OOBINLINE for sock */
|
|
} WDB_TSFS_IOCTL_REQ;
|
|
|
|
typedef struct wdb_tsfs_generic_info /* base structure for any TSFS op */
|
|
{
|
|
TGT_INT_T numInts; /* depends on opcode */
|
|
TGT_INT_T channel; /* TSFS channel for operation */
|
|
TGT_INT_T opcode; /* TSFS operation to perform */
|
|
TGT_ADDR_T semId; /* semaphore to "give" when op done */
|
|
TGT_ADDR_T pResult; /* where to store result */
|
|
TGT_ADDR_T pErrno; /* where to store errno */
|
|
TGT_ADDR_T semGiveAddr; /* semGive address to give semId */
|
|
} WDB_TSFS_GENERIC_INFO;
|
|
|
|
typedef struct wdb_tsfs_open_info /* extra fields for TSFS open op */
|
|
{
|
|
TGT_ADDR_T filename; /* address of filename string on tgt */
|
|
TGT_INT_T fnameLen; /* length of above */
|
|
TGT_INT_T mode; /* mode to open with */
|
|
TGT_INT_T perm; /* permission bits */
|
|
} WDB_TSFS_OPEN_INFO;
|
|
|
|
typedef struct wdb_tsfs_rw_info /* extra fields for TSFS read/write */
|
|
{
|
|
TGT_ADDR_T buffer; /* buffer of data to write/read */
|
|
TGT_INT_T nBytes; /* length of above */
|
|
} WDB_TSFS_RW_INFO;
|
|
|
|
typedef struct wdb_tsfs_ioctl_info /* extra fields for TSFS ioctl */
|
|
{
|
|
WDB_TSFS_IOCTL_REQ request;
|
|
TGT_INT_T arg;
|
|
TGT_ADDR_T pExtra1; /* meaning depends on request */
|
|
TGT_ADDR_T pExtra2; /* meaning depends on request */
|
|
} WDB_TSFS_IOCTL_INFO;
|
|
|
|
typedef struct wdb_tsfs_delete_info /* extra fields for TSFS delete op */
|
|
{
|
|
TGT_ADDR_T filename; /* address of filename string on tgt */
|
|
TGT_INT_T fnameLen; /* length of above */
|
|
} WDB_TSFS_DELETE_INFO;
|
|
|
|
typedef struct wdb_tsfs_info /* generic TSFS event */
|
|
{
|
|
WDB_TSFS_GENERIC_INFO info; /* generic params for all TSFS ops */
|
|
union
|
|
{
|
|
WDB_TSFS_OPEN_INFO open; /* specific params for open() */
|
|
WDB_TSFS_DELETE_INFO remove; /* specific params for unlink() */
|
|
WDB_TSFS_RW_INFO rw; /* specific params for read/write() */
|
|
WDB_TSFS_IOCTL_INFO ioctl; /* specific params for ioctl() */
|
|
} extra;
|
|
} WDB_TSFS_INFO;
|
|
|
|
#ifndef HOST
|
|
#if (defined (CPU_FAMILY) && (CPU_FAMILY==I960) && (defined __GNUC__))
|
|
#pragma align 0 /* turn off alignment requirement */
|
|
#endif /* CPU_FAMILY==I960 */
|
|
#endif /* HOST */
|
|
|
|
typedef struct wdb_param_wrapper
|
|
{
|
|
struct wdb_core wdbCore; /* core parameters */
|
|
void * pParams; /* real parameters */
|
|
xdrproc_t xdr; /* XDR filter for the real params */
|
|
UINT32 seqNum; /* sequence number */
|
|
} WDB_PARAM_WRAPPER;
|
|
|
|
typedef struct wdb_reply_wrapper
|
|
{
|
|
void * pReply; /* real reply */
|
|
xdrproc_t xdr; /* XDR filter for the real reply */
|
|
UINT32 errCode; /* error status */
|
|
} WDB_REPLY_WRAPPER;
|
|
|
|
/* variable declarations */
|
|
|
|
#ifndef HOST
|
|
IMPORT UINT16 wdbPort; /* UDP port number to connect */
|
|
#endif /* HOST */
|
|
|
|
/* function prototypes */
|
|
|
|
IMPORT BOOL xdr_UINT32 (XDR *xdrs, UINT32 *objp);
|
|
IMPORT BOOL xdr_TGT_ADDR_T (XDR *xdrs, TGT_ADDR_T *objp);
|
|
IMPORT BOOL xdr_TGT_INT_T (XDR *xdrs, TGT_INT_T *objp);
|
|
IMPORT BOOL xdr_WDB_CORE (XDR *xdrs, WDB_CORE *objp);
|
|
IMPORT BOOL xdr_WDB_STRING_T (XDR *xdrs, WDB_STRING_T *objp);
|
|
IMPORT BOOL xdr_WDB_OPQ_DATA_T (XDR *xdrs, WDB_OPQ_DATA_T *objp,
|
|
UINT32 len, UINT32 width);
|
|
IMPORT BOOL xdr_ARRAY (XDR *xdrs, char **, TGT_INT_T *,
|
|
TGT_INT_T, TGT_INT_T,
|
|
xdrproc_t elproc);
|
|
IMPORT BOOL xdr_WDB_STRING_ARRAY (XDR * xdrs, char **,
|
|
TGT_INT_T *, TGT_INT_T);
|
|
IMPORT BOOL xdr_CHECKSUM (XDR *xdrs, UINT32 xdrCksumVal,
|
|
UINT32 xdrStreamSize,
|
|
UINT32 xdrCksumValPos,
|
|
UINT32 xdrStreamSizePos);
|
|
IMPORT BOOL xdr_REFERENCE (XDR * xdrs, caddr_t * pp,
|
|
TGT_INT_T size, xdrproc_t elproc);
|
|
|
|
IMPORT BOOL xdr_WDB_PARAM_WRAPPER (XDR *xdrs, WDB_PARAM_WRAPPER *objp);
|
|
IMPORT BOOL xdr_WDB_REPLY_WRAPPER (XDR *xdrs, WDB_REPLY_WRAPPER *objp);
|
|
IMPORT BOOL xdr_WDB_AGENT_INFO (XDR *xdrs, WDB_AGENT_INFO *objp);
|
|
IMPORT BOOL xdr_WDB_TGT_INFO (XDR *xdrs, WDB_TGT_INFO *objp);
|
|
IMPORT BOOL xdr_WDB_MEM_REGION (XDR *xdrs, WDB_MEM_REGION *objp);
|
|
IMPORT BOOL xdr_WDB_MEM_XFER (XDR *xdrs, WDB_MEM_XFER *objp);
|
|
IMPORT BOOL xdr_WDB_MEM_SCAN_DESC (XDR *xdrs, WDB_MEM_SCAN_DESC *objp);
|
|
IMPORT BOOL xdr_WDB_CTX (XDR *xdrs, WDB_CTX *objp);
|
|
IMPORT BOOL xdr_WDB_CTX_CREATE_DESC (XDR *xdrs, WDB_CTX_CREATE_DESC *objp);
|
|
IMPORT BOOL xdr_WDB_CTX_KILL_DESC (XDR *xdrs, WDB_CTX_KILL_DESC *objp);
|
|
IMPORT BOOL xdr_WDB_CTX_STEP_DESC (XDR *xdrs, WDB_CTX_STEP_DESC *objp);
|
|
IMPORT BOOL xdr_WDB_DIRECT_CALL_RET (XDR *xdrs, WDB_DIRECT_CALL_RET *objp);
|
|
IMPORT BOOL xdr_WDB_CALL_RETURN_INFO(XDR *xdrs, WDB_CALL_RET_INFO *objp);
|
|
IMPORT BOOL xdr_WDB_REG_READ_DESC (XDR *xdrs, WDB_REG_READ_DESC *objp);
|
|
IMPORT BOOL xdr_WDB_REG_WRITE_DESC (XDR *xdrs, WDB_REG_WRITE_DESC *objp);
|
|
IMPORT BOOL xdr_WDB_EVTPT_ADD_DESC (XDR *xdrs, WDB_EVTPT_ADD_DESC *objp);
|
|
IMPORT BOOL xdr_WDB_EVTPT_DEL_DESC (XDR *xdrs, WDB_EVTPT_DEL_DESC *objp);
|
|
IMPORT BOOL xdr_WDB_EVT_DATA (XDR *xdrs, WDB_EVT_DATA *objp);
|
|
IMPORT BOOL xdr_WDB_EVT_INFO (XDR *xdrs, WDB_EVT_INFO *objp);
|
|
IMPORT BOOL xdr_WDB_SYM_INFO (XDR * xdrs, WDB_SYM_INFO * objp);
|
|
IMPORT BOOL xdr_WDB_SYM_LIST (XDR * xdrs, WDB_SYM_LIST * objp);
|
|
IMPORT BOOL xdr_WDB_SECT_INFO (XDR * xdrs, WDB_SECT_INFO * objp) ;
|
|
IMPORT BOOL xdr_WDB_SEG_INFO (XDR * xdrs, WDB_SEG_INFO * objp);
|
|
IMPORT BOOL xdr_WDB_MOD_INFO (XDR * xdrs, WDB_MOD_INFO * objp);
|
|
IMPORT BOOL xdr_WDB_SYM_MOD_DESC (XDR * xdrs, WDB_SYM_MOD_DESC * objp);
|
|
IMPORT BOOL xdr_WDB_SYM_ID_LIST (XDR * xdrs, WDB_SYM_ID_LIST * objp);
|
|
IMPORT BOOL xdr_WDB_SYM_ID (XDR * xdrs, WDB_SYM_ID * objp);
|
|
IMPORT BOOL xdr_WDB_RT_INFO (XDR * xdrs, WDB_RT_INFO * objp);
|
|
IMPORT BOOL xdr_WDB_USR_SVC_CTRL_INFO (XDR * xdrs,
|
|
WDB_USR_SVC_CTRL_INFO * objp);
|
|
IMPORT BOOL xdr_WDB_THREAD_ID_LIST (XDR * xdrs, WDB_THREAD_ID_LIST * objp);
|
|
IMPORT BOOL xdr_WDB_THREAD_ID (XDR * xdrs, WDB_THREAD_ID * objp);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __INCwdbh */
|