📄 usrwdb.c
字号:
/* usrWdb.c - configuration file for the WDB agent *//* Copyright 1984-1999 Wind River Systems, Inc. *//*modification history--------------------03h,19dec00,pai Included (uncommented) wdbPipePktDrv.h. This does not conflict with recent NPT modifications. Moreover, it is needed for T2 WDB_COMM_PIPE configuration.03g,25aug99,sj dont include private muxLib header file 03f,30jul99,pul modifications to support NPT03e,29apr99,pul Upgraded NPT phase3 code to tor2.0.003d,31mar99,sj commenting out #include wdbPipePktDrv.h until tor2_0_x merge03c,18mar99,sj removed INCLUDE_NPT check03b,05mar99,sj eliminated call to muxTkLibInit. Must set muxMaxBinds03a,15feb99,dbt remove task creation hook only if it has been previously installed (SPR #24195)02z,08nov98,sj added NPT support 02y,12aug98,gnn fixed return values from wdbCommIfInit02x,06aug98,pdn make sure that WDB_MTU is less or equal WDB_PIPE_PKT_MTU.02w,03jun98,cym specified type int for local variable in taskCreateHookAdd.02v,02jun98,dbt wdbTgtHasFpp() routine is now LOCAL.02u,20may98,dbt test if wdbPipePktDevInit() returns an error. completed error checking for other communication links.02t,13may98,dbt reworked HPSIM fix for SLIP communication link. check if sysBootLine is empty before parsing it.02s,24apr98,dbt test pFpContext before reading task floating point registers (SPR #9940).02r,19mar98,dbt added support for user events and context start notification. fixed some problems due to various merges.02q,18mar98,jmb fix ifdef in previous patch 02p,18mar98,jmb merge HPSIM poll for connect code 02o,11mar98,pdn added WDB_COMM_PIPE for VxSims02n,26jan98,gnn remerged from sirocco, was missing wdbSp function.02m,21jan98,dbt added more error checking (SPR #9422, SPR #5651). vxTaskCreate() returns ERROR instead of NULL when taskCreat() fails (SPR #9050). Removed vxTaskLock() and vxTaskUnlock(). Added wdbEvtptLibInit() call.02l,12jan98,dbt modified for new breakpoint scheme. Replaced wdbBpRemove() with wdbDbgBpRemoveAll(). Moved wdbBpSet() to usrBreakpoint.c.02k,03oct97,gnn fixed a warning in the endLoad call02j,25sep97,gnn SENS beta feedback fixes02i,19sep97,vin added WDB_NUM_CL_BLKS and the logic for clBlks.02c,06aug97,cdp gave type to 'initialised' in vxTaskDeleteHookAdd.02h,17apr97,gnn added support for configNet type support for END.02g,07apr97,gnn added new routines for MUX functionality.02f,17mar97,hdn added sysIntLock() and sysIntUnlock() for I80X86.02e,05mar97,ms fixed IU_REGS_GET bug introduced by 01y checkin.02d,04feb97,ms Added support for NetROM 500 series.02c,21jan97,gnn added code to load the device if we are booted standalone.02b,17dec96,ms WDB now uses FP_CONTEXT instead of FPREG_SET (SPR 7654).02a,02oct96,elp changed casts due to TGT_ADDR_T type change.01z,04nov96,gnn added code to handle smaller END MTU.01y,28aug96,gnn added WDB_COMM_END stuff.01w,09aug96,ms added "wdbSp" for windsh system mode "sp" (SPR 6254).01x,23jul96,vin added BSD4.4 changes for mbufs. 01v,22jul96,jmb added kab (ease) sanity check to wdbBpSet; HPUX can have tasks with "unset" registers, and that gets propogated as addr 0x0.01u,12mar96,ms redid host pool init. made exteral agent run in kernelState.01t,05mar96,tpr put the wdbHostPool always static for PPC (24bits limitation PB) + added VX_FP_TASK flag to WDB_TASK_OPTIONS macro.01s,24oct95,ms moved wdbBpSet here.01r,16oct95,ms host mem pool created via static buffer instead of malloc01q,11oct95,ms turned off character echoing in TTY_TEST to fix SPR 511601p,21sep95,ms macro shuffle + fix for SPR 4936.01o,31aug95,ms INCLUDE_WDB_TTY_TEST works if started before kernel (SPR #4808)01n,23aug95,ms bump intCnt to fake ISR context in extern agents extern hook01m,28jun95,tpr added NETROM_TASK_POLL_DELAY macro.01l,23jun95,ms changed logMsg to _func_logMsg01k,21jun95,ms added taskRestart for the agent on exception.01j,20jun95,tpr added wdbMemCoreLibInit().01i,20jun95,ms moved gopher buffer back to gopherLib.o for DSA01h,19jun95,ms moved event lib initialization near the begining of wdbConfig fixed vxTaskDeleteHookAdd to return OK or ERROR added initialization for INCLUDE_WDB_TTY_TEST01g,15jun95,ms updated for new serial drivers.01f,07jun95,ms exit hook no longer uses the spare TCB field memory size based on sysMemTop() instead of LOCAL_MEM_SIZE added some scalability WDB_STACK_SIZE used for both task and system agent. WDB_COMM_TYCO changed to WDB_COMM_TTY01e,01jun95,ms added taskLock/unlock. pass buffer to wdbGopherLibInit(). decreace WDB_MTU when going over serial line. changed MTU->WDB_MTU, EXC_NOTIFY->WDB_EXC_NOTIFY, MAX_SERVICES->WDB_MAX_SERVICES, AGENT_POOL_SIZE->WDB_POOL_SIZE.01d,25may95,ms added fpp support for the system agent.01c,23may95,ms added some include files.01b,17jan95,ms cleaned up.01a,21sep94,ms written.*//*DESCRIPTIONThis library configures and initializes the WDB agent.The only user callable routine is wdbConfig(). This routineinitializes the agents OS function pointers, the communicationfunction pointers, and then the agent itself.*/#include "vxWorks.h"#include "sysLib.h"#include "stdlib.h"#include "vxLib.h"#include "taskLib.h"#include "taskHookLib.h"#include "fppLib.h"#include "intLib.h"#include "rebootLib.h"#include "bootLib.h"#include "version.h"#include "cacheLib.h"#include "excLib.h"#include "config.h"#include "string.h"#include "bufLib.h"#include "sioLib.h"#include "private/taskLibP.h"#include "private/kernelLibP.h"#include "private/vmLibP.h"#include "private/funcBindP.h"#include "wdb/wdb.h"#include "wdb/wdbLib.h"#include "wdb/wdbLibP.h"#include "wdb/wdbBpLib.h"#include "wdb/wdbSvcLib.h"#include "wdb/wdbUdpLib.h"#include "wdb/wdbUdpSockLib.h"#include "wdb/wdbTyCoDrv.h"#include "wdb/wdbRtIfLib.h"#include "wdb/wdbCommIfLib.h"#include "wdb/wdbMbufLib.h"#include "wdb/wdbRpcLib.h"#include "wdb/wdbRegs.h"#include "wdb/wdbVioLib.h"#include "drv/wdb/wdbVioDrv.h"#include "drv/wdb/wdbSlipPktDrv.h"#include "drv/wdb/wdbUlipPktDrv.h"#include "drv/wdb/wdbNetromPktDrv.h"#include "drv/wdb/wdbEndPktDrv.h"#include "drv/wdb/wdbPipePktDrv.h"#if (CPU==SIMHPPA) && defined(INCLUDE_SLIP) && \ (WDB_COMM_TYPE == WDB_COMM_NETWORK)#include "wdLib.h"#include "drv/sio/unixSio.h"IMPORT void intCatch ();extern int s_asyncio ();LOCAL void usrWdbPollForConnect ();LOCAL WDOG_ID wdSlipConnect;#endif /* CPU==SIMHPPA && INCLUDE_SLIP */#if (WDB_COMM_TYPE == WDB_COMM_END)#include "end.h"#include "muxLib.h"#include "muxTkLib.h"#include "configNet.h"IMPORT END_TBL_ENTRY endDevTbl[];#endif /* WDB_COMM_TYPE == WDB_COMM_END *//* defines */#define NUM_MBUFS 5#define WDB_NUM_CL_BLKS 5#define MILLION 1000000#define MAX_LEN 100#define INCLUDE_VXWORKS_KERNEL /* don't remove this */#define WDB_RESTART_TIME 10#define WDB_MAX_RESTARTS 5#define WDB_BP_MAX 50 /* max # of break points */#define WDB_MAX_SERVICES 50 /* max # of agent services */#define WDB_TASK_PRIORITY 3 /* priority of task agent */#define WDB_TASK_OPTIONS VX_UNBREAKABLE | VX_FP_TASK /* agent options */#define WDB_POOL_BASE ((char *)(FREE_RAM_ADRS))/* lower WDB_MTU to SLMTU bytes for serial connection */#if (WDB_COMM_TYPE == WDB_COMM_TYCODRV_5_2) || \ (WDB_COMM_TYPE == WDB_COMM_SERIAL)#if WDB_MTU > SLMTU#undef WDB_MTU#define WDB_MTU SLMTU#endif /* WDB_MTU > SLMTU */#endif/* lower WDB_MTU to NETROM_MTU for netrom connections */#if (WDB_COMM_TYPE == WDB_COMM_NETROM)#if WDB_NETROM_TYPE == 400#include "wdb/wdbNetromPktDrv.c"#elif WDB_NETROM_TYPE == 500#include "wdb/amc500/wdbNetromPktDrv.c"#else#error WDB_NETROM_TYPE unknown#endif#if WDB_MTU > NETROM_MTU#undef WDB_MTU#define WDB_MTU NETROM_MTU#endif /* WDB_MTU > NETROM_MTU */#endif/* lower WDB_MTU to ULIP_MTU for ULIP connections */#if (WDB_COMM_TYPE == WDB_COMM_ULIP)#if WDB_MTU > ULIP_MTU#undef WDB_MTU#define WDB_MTU ULIP_MTU#endif /* WDB_MTU > ULIP_MTU */#endif#if (WDB_COMM_TYPE == WDB_COMM_END)#if WDB_MTU > WDB_END_PKT_MTU#undef WDB_MTU#define WDB_MTU WDB_END_PKT_MTU#endif /* WDB_MTU > WDB_END_PKT_MTU */#ifndef MUX_MAX_BINDS#define MUX_MAX_BINDS 16#endif /* MUX_MAX_BINDS */#endif /* (WDB_COMM_TYPE == WDB_COMM_END) */#if (WDB_COMM_TYPE == WDB_COMM_PIPE)#if WDB_MTU > WDB_PIPE_PKT_MTU#undef WDB_MTU#define WDB_MTU WDB_PIPE_PKT_MTU#endif /* WDB_MTU > WDB_PIPE_PKT_MTU */#endif/* change agent mode to task mode for NETWORK or TYCODRV_5_2 connections */#if (WDB_COMM_TYPE == WDB_COMM_TYCODRV_5_2) || (WDB_COMM_TYPE == WDB_COMM_NETWORK)#undef WDB_MODE#define WDB_MODE WDB_MODE_TASK#endif/* globals */uint_t wdbCommMtu = WDB_MTU;int wdbNumMemRegions = 0; /* number of extra memory regions */WDB_MEM_REGION * pWdbMemRegions = NULL; /* array of regions */#if (CPU==SIMHPPA)extern void sysSerialWDBSetup ();#endif /* (CPU==SIMHPPA) *//* locals */LOCAL BUF_POOL wdbMbufPool;LOCAL BUF_POOL wdbClBlkPool;LOCAL char vxBootFile [MAX_LEN];LOCAL WDB_RT_IF wdbRtIf;LOCAL BOOL prevKernelState;LOCAL VOIDFUNCPTR wdbCreateHook = NULL; /* WDB task create hook *//* * These are private - but configurable size arrays can't be malloc'ed * in external mode, so we define them here. */#if (WDB_MODE & WDB_MODE_EXTERN)LOCAL uint_t wdbExternStackArray [WDB_STACK_SIZE/sizeof(uint_t)];#endifLOCAL WDB_SVC wdbSvcArray [WDB_MAX_SERVICES];LOCAL uint_t wdbSvcArraySize = WDB_MAX_SERVICES;#ifdef INCLUDE_WDB_BPLOCAL struct brkpt wdbBreakPoints [WDB_BP_MAX];#endif/* forward static declarations */LOCAL void wdbMbufInit ();LOCAL void wdbRtIfInit ();LOCAL STATUS wdbCommIfInit ();LOCAL bool_t wdbTgtHasFpp (void);/******************************************************************************** wdbConfig - configure and initialize the WDB agent.** This routine configures and initializes the WDB agent.** RETURNS :* OK if at least one of the agents (task or system) was correctly* initialized. ERROR otherwise.** NOMANUAL*/STATUS wdbConfig (void) { STATUS status1 = ERROR; STATUS status2 = ERROR; #if (WDB_MODE & WDB_MODE_EXTERN) caddr_t pExternStack;#endif /* WDB_MODE & WDB_MODE_EXTERN */ /* Initialize the agents interface function pointers */ wdbRtIfInit (); /* run-time interface functions */ if (wdbCommIfInit () == ERROR) /* communication interface functions */ { if (_func_printErr != NULL) _func_printErr ("wdbConfig: error configuring WDB communication interface\n"); return (ERROR); } /* Install some agent services */ wdbSvcLibInit (wdbSvcArray, wdbSvcArraySize); wdbConnectLibInit (); /* required agent service */ wdbMemCoreLibInit (); /* required agent service */#ifdef INCLUDE_WDB_MEM wdbMemLibInit (); /* extra memory services */#endif /* INCLUDE_WDB_MEM */#ifdef INCLUDE_WDB_EVENTS wdbEventLibInit();#endif /* INCLUDE_WDB_EVENTS */#ifdef INCLUDE_WDB_EVENTPOINTS wdbEvtptLibInit();#endif /* INCLUDE_WDB_EVENTPOINTS */#ifdef INCLUDE_WDB_DIRECT_CALL wdbDirectCallLibInit ();#endif /* INCLUDE_WDB_DIRECT_CALL */#ifdef INCLUDE_WDB_CTXT wdbCtxLibInit ();#endif /* INCLUDE_WDB_CTXT */#ifdef INCLUDE_WDB_REG wdbRegsLibInit ();#endif /* INCLUDE_WDB_REG */#ifdef INCLUDE_WDB_GOPHER wdbGopherLibInit();#endif /* INCLUDE_WDB_GOPHER */#ifdef INCLUDE_WDB_EXIT_NOTIFY wdbCtxExitLibInit();#endif /* INCLUDE_WDB_EXIT_NOTIFY */#ifdef INCLUDE_WDB_EXC_NOTIFY wdbExcLibInit();#endif /* INCLUDE_WDB_EXC_NOTIFY */#ifdef INCLUDE_WDB_FUNC_CALL wdbFuncCallLibInit ();#endif /* INCLUDE_WDB_FUNC_CALL */#ifdef INCLUDE_WDB_VIO wdbVioLibInit(); wdbVioDrv("/vio");#endif /* INCLUDE_WDB_VIO */#ifdef INCLUDE_WDB_TSFS wdbTsfsDrv ("/tgtsvr");#endif /* INCLUDE_WDB_TSFS */#ifdef INCLUDE_WDB_BP wdbSysBpLibInit (wdbBreakPoints, WDB_BP_MAX);#if (WDB_MODE & WDB_MODE_TASK) wdbTaskBpLibInit ();#endif /* WDB_MODE & WDB_MODE_TASK */#endif /* INCLUDE_WDB_BP */#ifdef INCLUDE_WDB_START_NOTIFY wdbCtxStartLibInit ();#endif /* INCLUDE_WDB_START_NOTIFY */#ifdef INCLUDE_WDB_USER_EVENT wdbUserEvtLibInit ();#endif /* INCLUDE_WDB_USER_EVENT */ /* Initialize the agent(s) */#if (WDB_MODE & WDB_MODE_TASK) status1 = wdbTaskInit (WDB_TASK_PRIORITY, WDB_TASK_OPTIONS, NULL, WDB_STACK_SIZE);#endif#if (WDB_MODE & WDB_MODE_EXTERN)#if _STACK_DIR == _STACK_GROWS_DOWN pExternStack = (caddr_t)&wdbExternStackArray [WDB_STACK_SIZE/sizeof(uint_t)]; pExternStack = (caddr_t)STACK_ROUND_DOWN (pExternStack);#else /* _STACK_DIR == _STACK_GROWS_UP */ pExternStack = (caddr_t)wdbExternStackArray; pExternStack = (caddr_t)STACK_ROUND_UP (pExternStack);#endif /* _STACK_DIR == _STACK_GROWS_DOWN */ status2 = wdbExternInit (pExternStack);#ifdef INCLUDE_HW_FP if (wdbTgtHasFpp()) { WDB_REG_SET_OBJ * pFpRegs; pFpRegs = wdbFpLibInit(); wdbExternRegSetObjAdd (pFpRegs); }#endif /* INCLUDE_HW_FP */#endif /* WDB_MODE & WDB_MODE_EXTERN */ /* activate one agent only */#if (WDB_MODE & WDB_MODE_TASK) wdbModeSet (WDB_MODE_TASK);#else wdbModeSet (WDB_MODE_EXTERN);#endif return ((status1 && status2) ? ERROR : OK); }/******************************************************************************** wdbExternEnterHook - hook to call when external agent is entered.*/void wdbExternEnterHook (void) { intCnt++; /* always fake an interrupt context */ prevKernelState = kernelState; kernelState = TRUE; /* always run in kernel state */#if (CPU_FAMILY==I80X86) sysIntLock ();#endif /* CPU_FAMILY==I80X86 */#ifdef INCLUDE_WDB_BP wdbDbgBpRemoveAll ();#endif }/******************************************************************************** wdbExternExitHook - hook to call when the external agent resumes the system.*/void wdbExternExitHook (void) { intCnt--; /* restore original intCnt value */ kernelState = prevKernelState; /* restore original kernelState value */#if (CPU_FAMILY==I80X86) intLock (); sysIntUnlock ();#endif /* CPU_FAMILY==I80X86 */#ifdef INCLUDE_WDB_BP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -