亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbgarchlib.c

?? vxworks的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* forward declaration */LOCAL int dbgInterruptPCW;	/* used by dbgIntrInfoSave/Restore */LOCAL int dbgHwRegStatus;	/* keep status of hardware regs being used *//********************************************************************************* _dbgArchInit - architecture dependent initialization routine** This routine initialize global function pointers that are architecture * specific.** RETURNS: N/A** NOMANUAL*/void _dbgArchInit (void)    {    _dbgDsmInstRtn = (FUNCPTR) dsm960Inst;    }/********************************************************************************  _dbgTraceDisable - disable trace mode** NOMANUAL*/void _dbgTraceDisable (void)    {    vxPCWClear (PCW_TRACE_ENABLE_MASK);    }/******************************************************************************** _dbgFuncCallCheck - check if opcode is a function call** RETURNS: TRUE if op code at the given addr is a subroutine call.** NOMANUAL*/BOOL _dbgFuncCallCheck     (    INSTR * pInst		/* pointer to instruction to check */    )    {    return (dsmFuncCallCheck (pInst));    }#if	(BRK_HW_BP != 0)/****************************************************************************** ** _dbgHwAdrsCheck - verify address is valid** Checks to make sure the given adrs is on a 32-bit boundary, and* that it is accessable.** RETURNS: OK or ERROR if address not on a 32-bit boundary or unaccessible.** NOMANUAL*/STATUS _dbgHwAdrsCheck     (    INSTR *	adrs,		/* address to check */    int		access		/* access type */    )    {    UINT32 val;			/* dummy for vxMemProbe */    if ((int) adrs & 0x03)	return (ERROR);#if	CPU==I960CA    switch (access)	{	case DAB_ACCESS_STORE:	    if (vxMemProbe ((char *)adrs, O_WRONLY, 4, (char *) &val) != OK)		{		return (ERROR);		}	    break;	case HW_INST_BRK:	    if (vxMemProbe ((char *)adrs, O_RDONLY, 4, (char *) &val) != OK)		{		return (ERROR);		}	    break;        case DAB_ACCESS_DATA_LOAD_OR_STORE:	case DAB_ACCESS_DATA_OR_INSTR_FETCH: 	case DAB_ACCESS_ANY_ACCESS: 	     if (vxMemProbe ((char *)adrs, O_RDONLY, 4, (char *) &val) != OK ||	         vxMemProbe ((char *)adrs, O_WRONLY, 4, (char *) &val) != OK)		 {		 return (ERROR);		 }	    break;	default:	    break;	}#endif	/* CPU==I960CA */    return (OK);    }/******************************************************************************** _dbgHwDisplay - display a hardware breakpoint ** NOMANUAL*/void _dbgHwDisplay     (    BRKENTRY * bp		/* breakpoint table entry */    )    {    if ((bp->type & BRK_HW_BP) == 0)	return;    printf (" (hard-");#if CPU==I960CA    switch (bp->pHwBp->hbAccess)	{	case DAB_ACCESS_STORE:	    printf ("store only)");	    break;	case DAB_ACCESS_DATA_LOAD_OR_STORE:	    printf ("data only)");	    break;	case DAB_ACCESS_DATA_OR_INSTR_FETCH:	    printf ("data/instr fetch)");	    break;	case DAB_ACCESS_ANY_ACCESS:	    printf ("any access)");	    break;	case HW_INST_BRK:	    printf ("instruction)");	    break;	default:	    printf ("unknown)");	    break;	}#endif	/* CPU==I960CA */    }/******************************************************************************** _dbgHwBpSet - set a data breakpoint register** Access is the type of access that will generate a breakpoint.*  000 - store only*  001 - data only (load or store)*  010 - data or instruction fetch*  011 - any access*  100 - instruction breakpoint** NOMANUAL*/void _dbgHwBpSet     (    INSTR * 	addr,		/* address on which to break */    HWBP *	pHwBp		/* hardware breakpoint */    )    {#if CPU==I960CA    switch (pHwBp->hbRegNum)	{	case REG_NUM_DAB0:	    dbgDAB0Set ((char *) addr);	    dbgDAB0Enable (pHwBp->hbAccess);	    break;	case REG_NUM_DAB1:	    dbgDAB1Set ((char *) addr);	    dbgDAB1Enable (pHwBp->hbAccess);	    break;	case REG_NUM_IPB0:	    (void) dbgIPB0Set ((char *)addr);	    break;	case REG_NUM_IPB1:	    (void) dbgIPB1Set ((char *)addr);	    break;	default:	    break;	}#endif	/* CPU==I960CA */    }/******************************************************************************** _dbgHwBpCheck - check if instruction could have caused a data breakpoint** Check to see if the instruction at the given address caused a* memory reference that matches one of the DAB registers.* Or if the address of the instruction itself caused a break.* This would be true if the access type was for instruction fetch.** RETURNS: TRUE if match, FALSE if no match.** NOMANUAL*/BOOL _dbgHwBpCheck    (    INSTR *	pInstr,	/* ptr to instruction to check 	*/    BRKENTRY *	bp,		/* pointer to breakpoint entry */    int		tid,		/* task's id */    volatile BOOL checkFlag	/* flag to check if breakpoint hit */    )    {#if CPU==I960CA    UINT32 	addr1;    REG_SET	regSet;    if ((bp->type & BRK_HW_BP) == 0)	return (FALSE);    /* check to see if instruction addr caused break */    if (pInstr == bp->addr)	return (TRUE);    taskRegsGet (tid, &regSet);    /* check to see if memory reference caused break */    if (dsmMemInstrCheck(pInstr))	{	addr1 = dsmMEMInstrRefAddrGet(pInstr, (UINT32 *)&regSet);	if (bp->addr == (INSTR *) addr1)	    return (TRUE);	}    if ((UINT32)bp->addr == (sysCtrlTable[0]&0xfffffffc))	return (TRUE);    if ((UINT32)bp->addr == (sysCtrlTable[1]&0xfffffffc))	return (TRUE);#endif	/* CPU==I960CA */    return (FALSE);    }/******************************************************************************** _dbgHwBpClear - clear a data breakpoint** Clears a data breakpoint based on given regiser number, but does not* free the resource. This is the mechanism used to clear disable* hardware breakpoints when a task is unbreakable.** NOMANUAL*/void _dbgHwBpClear     (    HWBP * pHwBp		/* hardware breakpoint */    )    {#if CPU==I960CA    switch (pHwBp->hbRegNum)	{	case REG_NUM_DAB0:	    dbgDAB0Set ((char *) -1);	    dbgDAB0Disable ();	    break;	case REG_NUM_DAB1:	    dbgDAB1Set ((char *) -1);	    dbgDAB1Disable ();	    break;	case REG_NUM_IPB0:	    (void) dbgIPB0Disable ();	    break;	case REG_NUM_IPB1:	    (void) dbgIPB1Disable ();	    break;	}#endif	/* CPU==I960CA */    }/******************************************************************************** _dbgArchHwBpFree - free hardware breakpoint data entry** NOMANUAL*/void _dbgArchHwBpFree    (    HWBP * pHwBp	/* pointer to hardware breakpoint data structure */    )    {    dbgHwRegStatus &= ~(1<< pHwBp->hbRegNum);    }#endif	/*  (BRK_HW_BP != 0) *//******************************************************************************** _dbgInfoPCGet - exception frame's PC/IP (program counter/instruction *                    pointer)** RETURNS: PC/IP** NOMANUAL*/INSTR * _dbgInfoPCGet    (    BREAK_ESF * pBrkInfo	/* pointer to exception frame */    )    {    return ((INSTR *) pBrkInfo->faultIP);    }/******************************************************************************** _dbgInstSizeGet - get size of instruction in sizeof(INSTR)'s** RETURNS: The size of the instruction.** NOMANUAL*/int _dbgInstSizeGet     (    INSTR * pInst	/* pointer to instruction to check */    )    {    return (dsmNbytes (pInst) / sizeof (INSTR));    }/******************************************************************************** _dbgIntrInfoRestore - restore the info saved by dbgIntrInfoSave** NOMANUAL*/void _dbgIntrInfoRestore    (     BREAK_ESF *	pBrkInfo		/* pointer to execption frame */    )    {    pBrkInfo->procCtrl = dbgInterruptPCW;    }/******************************************************************************** _dbgIntrInfoSave - save info when breakpoints are hit at interrupt level.** NOMANUAL*/void _dbgIntrInfoSave    (    BREAK_ESF *	pBrkInfo		/* pointer to breakpoint ESF */    )    {    dbgInterruptPCW = pBrkInfo->procCtrl;    }/******************************************************************************** _dbgRegsAdjust - adjust stack pointer** Adjust the stack pointer of the given REG_SET to remove the * exception frame, caused by the TRACE FAULT.** NOMANUAL*/void _dbgRegsAdjust    (    int		tid,		/* task's id */    TRACE_ESF *	pBrkInfo,	/* pointer to exception frame 	 */    int *	pRegSet,	/* pointer to tasks register set */    volatile BOOL flag		/* tells what type of ESF to use */    )    {    ansiFix = (int)pBrkInfo->faultIP;	 /* fix ansi warning */    /* NOP for 80960 because fault record (ESF) is     * stuck in just before the stack frame for the     * fault handler.     */    taskRegsSet (tid, (REG_SET *) pRegSet);    }/******************************************************************************** _dbgTaskPCSet - set task's pc** NOMANUAL*/void _dbgTaskPCSet    (    int		tid,	/* task's id */    INSTR *	pc,	/* pc to set */    INSTR *	npc 	/* npc to set (not supported by 960) */    )    {    REG_SET regSet;    ansiFix = (int)npc;		/* fix ansi warning */    if (taskRegsGet (tid, &regSet) ==OK)	{	regSet.rip = (UINT32) pc;	taskRegsSet (tid, &regSet);	}    }/******************************************************************************** _dbgTaskPCGet - get task's pc** NOMANUAL*/INSTR * _dbgTaskPCGet    (    int	tid		/* task's id */    )    {    REG_SET regSet;    taskRegsGet (tid, &regSet);    return ((INSTR *) regSet.rip);    }/******************************************************************************** _dbgRetAdrsGet - address of the subroutine in which has hit a breakpoint** RETURNS: Address of the next instruction to be executed upon*  	   return of the current subroutine.** INTERNAL* BAL instruction will need to be taken into account here.** NOMANUAL*/INSTR * _dbgRetAdrsGet    (    REG_SET * pRegSet	/* reg set of broken task */    )    {#define MAX_NAME_LEN 80    UINT32	retVal;    UINT32	type 	= 0x00;    UINT32	regNum;    INT8	name[MAX_NAME_LEN];    REG_SET *	pPrevRegSet = (REG_SET *)pRegSet->pfp;    INSTR * 	pInstr0 = (INSTR *)(pRegSet->rip & 0xfffffffc);    INSTR * 	pInstr1 = pInstr0;    /* from this address, find the symbol in the symbol table that     * is closest yet lower than the address. If this symbol is a leaf-proc     * entry, then get the return address either from gx or g14,     * depending on whether or not the mov g14, gx instruction has been     * executed. If the symbol is not a leaf_proc entry point,     * it is a regular function entry. Get the return address from     * the rip of the previous frame. Caveat: if an assembly language     * symbol starts with an `_', this could fool this algo. into     * thinking it is the start of a function.     */    strcpy (name, "\0");    symFindByValue (sysSymTbl, (UINT) pInstr0, (char *) &name, 		    (int *) &pInstr0, (SYM_TYPE *) &type);    if (!strncmp (&name[strlen(name) - 3], ".lf", 3))	{	/* this is a leaf_proc. first we must check to see if we	 * are sitting on the mov g14, gx instruction If we are,	 * return the value in g14, otherwise, disect the instruction	 * and figure out what register is holding the return value */	if ((*pInstr1 & MOV_G14_MASK) == INST_MOV_G14)	    retVal = pRegSet->g14;	else	    {	    regNum = (*pInstr0 & SRC_REG_MASK) >> 0x13;	    retVal = *(((UINT32 *)pRegSet) + regNum);	    printf ("regNum: 0x%x, retVal: 0x%x 0x%x \n",		    regNum, retVal, *pInstr0);	    }	/* we still have to figure out if we got to this point in the leaf-proc	 * via a 'call' or 'bal' instruction. If we came via a call instruction,	 * the address 'retVal' will point to the 'ret' instruction at the	 * end of the function. Otherwise, it will be the address of the	 * instruction following the 'bal'. If 'retVal' does not point to a	 * 'ret' instruction, we can just return it.	 *	 * NOTE: We could still be fooled if caller's 'bal' or 'balx' is	 * followed by 'ret.' Perhaps we should also check to see if the	 * instruction preceding 'ret' is 'bx gx' and or some similar check.	 */	if (((*(INSTR *)retVal) & 0xff000000) != 0x0a000000)	    return ((INSTR *)retVal);	}    /* non-leaf_proc function or 'called' leaf-proc */    return ((INSTR *)(pPrevRegSet->rip & 0xfffffffc));    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆一区二区在线| 色综合久久综合网97色综合| 91在线视频网址| 6080亚洲精品一区二区| 国产精品色一区二区三区| 强制捆绑调教一区二区| 99久久er热在这里只有精品66| 欧美日韩日本视频| 亚洲色图视频免费播放| 国产盗摄精品一区二区三区在线 | 亚洲午夜在线视频| 狠狠色狠狠色综合系列| 欧美日韩国产高清一区二区三区 | 亚洲欧美二区三区| 国产成人免费视频网站| 日韩欧美成人午夜| 亚洲国产成人porn| 99re热视频这里只精品| 久久精品日韩一区二区三区| 日韩成人午夜精品| 欧美三级乱人伦电影| 1024亚洲合集| 成人性色生活片免费看爆迷你毛片| 91精选在线观看| 亚洲午夜久久久久久久久久久| 丁香天五香天堂综合| 久久久久久久久久久久电影 | 亚洲尤物在线视频观看| 91网站最新地址| 中文字幕一区二区三区视频| 国产麻豆成人精品| 久久久91精品国产一区二区精品| 美女www一区二区| 日韩精品一区国产麻豆| 精品一区二区三区av| 日韩欧美亚洲另类制服综合在线| 日韩电影在线观看电影| 欧美一区二区精品在线| 老汉av免费一区二区三区| 日韩欧美国产高清| 国产精品一区一区三区| 国产精品欧美极品| 色哟哟国产精品免费观看| 亚洲精品一二三区| 欧美三级乱人伦电影| 日韩成人午夜电影| 久久免费视频色| av男人天堂一区| 亚洲主播在线播放| 欧美猛男男办公室激情| 麻豆成人久久精品二区三区红| 精品久久久久av影院| 国产成人亚洲精品狼色在线| 东方aⅴ免费观看久久av| www成人在线观看| 丰满白嫩尤物一区二区| 亚洲女人的天堂| 欧美猛男gaygay网站| 精品午夜久久福利影院| 中文字幕一区二区三| 欧美揉bbbbb揉bbbbb| 蜜桃一区二区三区在线观看| 国产欧美日韩亚州综合| 91传媒视频在线播放| 麻豆精品视频在线观看免费| 中文字幕免费在线观看视频一区| 欧洲在线/亚洲| 经典三级视频一区| 亚洲老司机在线| 久久一二三国产| 欧洲国产伦久久久久久久| 久久精品国产免费看久久精品| 亚洲欧洲性图库| 日韩欧美在线观看一区二区三区| 成人国产亚洲欧美成人综合网| 亚洲成人三级小说| 中文字幕免费不卡在线| 制服.丝袜.亚洲.中文.综合| 不卡av在线免费观看| 青草av.久久免费一区| 最好看的中文字幕久久| 精品91自产拍在线观看一区| 日本精品视频一区二区| 国产精品一品二品| 日韩电影在线看| 亚洲综合图片区| 国产精品福利在线播放| 精品国产成人系列| 欧美色网一区二区| 91在线码无精品| 国产成人高清视频| 青青国产91久久久久久| 午夜欧美视频在线观看| 亚洲视频每日更新| 国产网站一区二区三区| 精品国产区一区| 91精品国产综合久久精品 | 国产成人午夜视频| 免费一级片91| 亚洲成av人片在www色猫咪| 亚洲欧洲日韩综合一区二区| 国产欧美精品日韩区二区麻豆天美| 3d动漫精品啪啪1区2区免费 | 亚洲午夜激情av| 国产精品久久久久aaaa樱花 | 亚洲成人精品一区| 一区二区三区四区国产精品| 一色桃子久久精品亚洲| 国产三级精品三级| 国产亚洲1区2区3区| 欧美sm极限捆绑bd| 精品国产麻豆免费人成网站| 欧美一级欧美三级| 欧美一卡2卡三卡4卡5免费| 欧美日韩国产另类不卡| 欧美性xxxxx极品少妇| 欧美亚洲一区二区在线| 一本大道久久a久久综合| 一本久道久久综合中文字幕| 色综合久久88色综合天天免费| 92精品国产成人观看免费| 99久久免费精品高清特色大片| av在线这里只有精品| av影院午夜一区| 91极品视觉盛宴| 欧美三日本三级三级在线播放| 欧美日韩精品一区二区在线播放| 欧美午夜在线观看| 欧美精品日韩一区| 日韩欧美激情四射| 久久久99精品久久| 亚洲欧美aⅴ...| 午夜精品久久久久久久99水蜜桃| 亚洲18女电影在线观看| 日韩电影在线观看电影| 国产福利91精品一区二区三区| 大胆亚洲人体视频| 欧美午夜电影在线播放| 7777精品伊人久久久大香线蕉的| 日韩免费高清视频| 国产亚洲成aⅴ人片在线观看| 亚洲欧美日韩成人高清在线一区| 亚洲一区二区三区四区在线免费观看| 日韩精品视频网| 国产一区二区成人久久免费影院| 国产成人免费视频一区| 在线观看一区二区视频| 欧美xxxxxxxxx| 亚洲人成人一区二区在线观看| 亚洲国产成人av| 国产一区二区三区免费看| 91亚洲精品久久久蜜桃网站| 亚洲欧美乱综合| 亚洲一区二区三区四区五区黄 | 久久日一线二线三线suv| 国产精品毛片大码女人| 三级在线观看一区二区| 成人免费av在线| 91精品国产综合久久久久久漫画| 欧美国产精品专区| 免费看日韩a级影片| 99久久精品国产一区二区三区| 在线不卡免费欧美| 日韩理论电影院| 经典三级在线一区| 欧美男女性生活在线直播观看 | 亚洲精品在线免费播放| 亚洲色图在线看| 国产成人在线免费观看| 欧美丰满嫩嫩电影| 亚洲欧美电影一区二区| 国产ts人妖一区二区| 91精品久久久久久久久99蜜臂| 中文字幕在线不卡一区| 精品亚洲成av人在线观看| 欧美性色黄大片| 最新久久zyz资源站| 国产精品12区| 日韩精品一区二区三区中文精品| 亚洲在线视频一区| 色婷婷久久综合| 国产精品国产三级国产a| 激情综合色播五月| 欧美一区二区三区四区久久| 夜夜夜精品看看| 97精品国产露脸对白| 日本一区二区免费在线| 狠狠v欧美v日韩v亚洲ⅴ| 中文字幕欧美国产| 国产宾馆实践打屁股91| 久久综合狠狠综合久久综合88| 日本强好片久久久久久aaa| 欧美天堂一区二区三区| 一区二区三区蜜桃| www..com久久爱| 国产精品天天看| 成人av网站在线观看免费| 国产日韩欧美精品综合| 国产成人在线免费观看| 中文在线一区二区|