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

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

?? trclib.c

?? vxworks的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
*/ static INSTR * trcFindFuncStart    (    INSTR * pc,		/* program counter within current proc */    INSTR * returnPc	/* return address */    )    {    INSTR * 	pInstr;    int		branchAddr;    /* first check if there is a branch instruction before the returnPc */    pInstr = returnPc - 1;    if ((INST_CMP (pInstr, INST_B, INST_B_MASK)) ||	(INST_CMP (pInstr, INST_BC, INST_B_MASK)))	{	/* extract address from instruction and sign extend */	if (INST_CMP (pInstr, INST_B, INST_B_MASK))	    {	    branchAddr = *pInstr & 0x03fffffc;	    if (branchAddr & 0x02000000)		branchAddr |= 0xfc000000;	    }	else	    {	    branchAddr = *pInstr & 0xfffc;	    if (branchAddr & 0x8000)		branchAddr |= 0xffff0000;	    }	/* if branch is not absolute, add in relative address */	if (!_IFIELD_AA (*pInstr))	    branchAddr += (int)pInstr;	return ((INSTR *)branchAddr);	}    /* if that fails, try to scan backwards for "stwu sp, xxx(sp)" */    if (!BOGUS_PC(pc - trcScanDepth, pInstr))	{	for (pInstr = pc; pInstr > pc - trcScanDepth; pInstr--)	    {	    if (INST_CMP (pInstr, INST_STWU_SP, INST_HIGH_MASK))		return (pInstr);	    }	}    /* if all else fails, return "pc" as a guess */    return (pc);    }/******************************************************************************** trcPrologueFrameAllocated - check if stack frame is allocated** Start at "procAddr" and scan forwards up to MAX_PROLOGUE_SIZE instructions.* If we get to our PC before we see an "allocate stack frame" instruction,* then the current procedure does not have an allocated stack frame.** RETURNS: TRUE if frame is allocated, else false*/static BOOL trcPrologueFrameAllocated    (    INSTR *procAddr,		/* address of procedure */    INSTR *pc			/* current PC value */    )    {    INSTR *pInstr;    for (pInstr = procAddr; pInstr < procAddr + MAX_PROLOGUE_SIZE; pInstr++)	{	if (INST_CMP (pInstr, INST_STWU_SP, INST_HIGH_MASK))	    return (TRUE);	if (pInstr == pc)	    return (FALSE);	}    return (TRUE);    }/******************************************************************************** trcInfoGet - get info on top stack frame.** This routine grabs the stack pointer and pc from the register set.* It then computes the frame pointer and return PC.* The later two require care:*	Usually both are on the stack.*	Sometimes the return PC is in the link register. This is true in*	  a leaf procedure, or during a procedure prologue.*	Sometimes the frame pointer is the stack pointer. This happens*	  when a frame has not been allocated for the current proc.*	  Leaf procedures often do not allocate stack frames. Non-leaf*	  procedures have no frames during the prologue and epilogue).* This procedure scans forward up to MAX_SCAN_DEPTH instructions from* the current PC looking for instructions that might give us a clue* as to which case we are in.* If the scan doesn't find any of the instructions is is looking for,* then it assumes we are in the normal case (frame allocated and* return PC saved to stack).* * XXX - If we are in a function epilogue and have just popped the* procedure frame, this routine will mistakenly skip the next* frame down.** A little sanity checking is done. If the stack pointer, frame pointer* PC or return PC are bogus, we return ERROR.** RETURNS: OK or ERROR if there was trouble parsing the frame.*/ static STATUS trcInfoGet    (    int		tid,			/* task ID */    REG_SET *	pRegs,			/* task's registers */    INSTR **	pPc,			/* return PC here */    INSTR **	pReturnPc,		/* return calling PC here */    char **	pSp,			/* return stack pointer here */    char **	pFp			/* return frame pointer here */    )    {    BOOL	frameAllocated = TRUE;    BOOL	returnPcOnStack = TRUE;    INSTR *	pInstr;    INSTR *	pc;    INSTR *	procAddr;    char *	fp;    char *	sp;    pc = (INSTR *)pRegs->pc;    sp = (char *)pRegs->spReg;    if (BOGUS_SP(sp, taskTcb(tid)->pStackEnd, taskTcb(tid)->pStackBase))	return (ERROR);    if (BOGUS_PC(pc, pInstr))	goto skipscan;    if (BOGUS_PC(pc + trcScanDepth, pInstr))	goto skipscan;    /* Scan forward from current PC to see how the link register is used */    for (pInstr = pc; pInstr < pc + trcScanDepth; pInstr++)	{	/* mfspr lr,rx => in proc prologue with return PC in link register */        if (INST_CMP(pInstr, INST_MFLR, INST_MTSPR_MASK))	    {	    procAddr = trcFindFuncStart (pc, (INSTR *)pRegs->lr);	    returnPcOnStack = FALSE;	    if (trcPrologueFrameAllocated(procAddr, pc))		frameAllocated = TRUE;	    else		frameAllocated = FALSE;	    break;	    }	/* bclr => in proc epilogue with return PC in link register */        if (INST_CMP(pInstr, INST_BCLR, INST_BCLR_MASK))	    {	    returnPcOnStack = FALSE;	    frameAllocated = TRUE;	/* XXX - not always true in epilogue */	    break;	    }	/* mtspr lr, rx => return PC in link register */        if (INST_CMP(pInstr, INST_MTLR, INST_MTSPR_MASK))	    {	    returnPcOnStack = TRUE;	    frameAllocated = TRUE;	/* XXX - not always true in epilogue */	    break;	    }	/* "stwu r1, rx" (but no mtspr lr, rx) */	if (INST_CMP (pInstr, INST_STWU_SP, INST_HIGH_MASK))	    {	    returnPcOnStack = FALSE;	    frameAllocated = FALSE;	    break;	    }	}skipscan:    if (frameAllocated)	{	fp = FP_FROM_STACK (sp);	if (BOGUS_SP (fp, sp, taskTcb(tid)->pStackBase))	    return (ERROR);	}    else	{	fp = sp;			/* no frame => sp=fp */	sp -= _STACK_ALIGN_SIZE;	/* fake a stack pointer */	}    /* store away the info */    *pPc = pc;    *pSp = sp;    *pFp = fp;    if (returnPcOnStack)	*pReturnPc = RETURN_PC_FROM_STACK (*pFp);    else	*pReturnPc = (INSTR *)pRegs->lr;    if (BOGUS_PC(*pReturnPc, pInstr))	return (ERROR);    return (OK);    }/******************************************************************************** trcGetArgs - get function arguments from the stack.** XXX - No way to do this if the code is not compiled with "-g"* because the power PC calling conventions do not require* argumenst to be pushed on the stack.* This routine is based on disassembled GNU code, which contains* the following sequence near the proc prologue:**     mfspr        r0, LR		# standard prologue*     stw          r31, 0xfffc(r1)	# standard prologue*     stw          r0, 0x4(r1)		# standard prologue*     stwu         r1, 0xffc0(r1)	# standard prologue*     or           r31, r1, r1		# r31 = stack pointer*     stw          r3, 0x18(r31)	# save arg0 0x18 bytes from sp*     stw          r4, 0x1c(r31)	# save arg1 0x1c bytes from sp*     stw          r5, 0x20(r31)	# save arg2 0x1c bytes from sp*	...** So we scan the function prologue looking for this pattern,* and if we find them we copy the args from the stack.* The ABI says nothing about this, so GNU or anouther compiler vendor* can change this at any time and break this stack tracer.** RETURNS: the number of arguments retrieved.*/ static int trcGetArgs    (    INSTR *procAddr,    char *sp,    int *args    )    {    int nArgs = 0;    INSTR *pInstr;    for (pInstr = procAddr; pInstr < procAddr + MAX_PROLOGUE_SIZE; pInstr++)	{	if (INST_CMP (pInstr, STW(nArgs + 3), STW_REG_MASK))	    {	    args[nArgs] = *(int *)(sp + (*pInstr & 0xffff));	    nArgs++;	    if (nArgs >= MAX_TASK_ARGS)		break;	    }	/* a branch instuction means function prologue is over */        if (INST_CMP (pInstr, INST_BCLR, INST_BCLR_MASK) ||	    INST_CMP (pInstr, INST_B, INST_B_MASK))	    break;	}    return (nArgs);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美一区二区三区| 色94色欧美sute亚洲13| 亚洲精品福利视频网站| 久久人人超碰精品| 日韩欧美123| 日韩欧美国产精品| 欧美刺激脚交jootjob| 日韩三级精品电影久久久| 精品视频在线免费| 欧美日本在线看| 欧美人妖巨大在线| 欧美一级爆毛片| 精品欧美久久久| 国产区在线观看成人精品 | 日韩高清不卡一区二区| 婷婷久久综合九色国产成人| 婷婷综合另类小说色区| 亚洲成国产人片在线观看| 亚洲欧美日韩一区二区三区在线观看| 国产精品久久看| 亚洲女性喷水在线观看一区| 一区二区三区四区视频精品免费 | 国产精品传媒入口麻豆| 亚洲欧美综合色| 一区二区欧美国产| 丝袜国产日韩另类美女| 精品影视av免费| 99精品视频中文字幕| 欧美午夜在线观看| 精品国产一区二区三区不卡| 2017欧美狠狠色| 亚洲人一二三区| 蜜臀av性久久久久蜜臀av麻豆| 国产在线不卡一卡二卡三卡四卡| 99麻豆久久久国产精品免费| 欧美日韩中字一区| 久久综合九色综合欧美98| 亚洲少妇最新在线视频| 日韩黄色在线观看| 波波电影院一区二区三区| 欧美麻豆精品久久久久久| 久久理论电影网| 婷婷开心激情综合| 国产91精品久久久久久久网曝门| 欧美中文字幕一区二区三区| 欧美精品一区二区三区很污很色的| 国产精品色眯眯| 日本中文字幕不卡| 日本高清不卡在线观看| 欧美激情在线一区二区| 午夜视频久久久久久| www.欧美色图| 久久久99精品免费观看不卡| 婷婷夜色潮精品综合在线| jiyouzz国产精品久久| 欧美变态tickle挠乳网站| 曰韩精品一区二区| 成人免费观看av| 久久中文娱乐网| 喷水一区二区三区| 欧美天天综合网| 亚洲欧美日韩国产综合| 国产很黄免费观看久久| 精品欧美一区二区久久| 青青草伊人久久| 欧美精品自拍偷拍动漫精品| 1区2区3区国产精品| 成人在线综合网| 国产午夜精品一区二区| 国产一区二区三区免费| 欧美大胆一级视频| 另类调教123区 | 美脚の诱脚舐め脚责91| 欧美猛男男办公室激情| 亚洲午夜电影网| 91国偷自产一区二区三区成为亚洲经典 | 国产精品一区二区黑丝| 精品区一区二区| 黄色成人免费在线| 久久久久久影视| 国产91丝袜在线18| 中文av一区二区| 不卡区在线中文字幕| 国产嫩草影院久久久久| 成人黄页毛片网站| 国产精品女同一区二区三区| 成人动漫一区二区在线| 一区二区中文字幕在线| 91视频.com| 亚洲国产欧美在线| 欧美肥胖老妇做爰| 蜜桃精品视频在线观看| 久久人人超碰精品| heyzo一本久久综合| 亚洲乱码中文字幕综合| 欧美三级视频在线| 久草中文综合在线| 国产女同性恋一区二区| 成人av免费在线播放| 亚洲精品免费电影| 日韩一区二区三区电影 | 国产乱一区二区| 国产日产欧美一区| www.性欧美| 视频一区中文字幕国产| 久久综合久色欧美综合狠狠| a级精品国产片在线观看| 亚洲午夜在线视频| 日韩精品一区二区三区三区免费 | 国产女人18水真多18精品一级做| 99久久综合精品| 日韩黄色在线观看| 中日韩免费视频中文字幕| 欧美三片在线视频观看| 国产一区三区三区| 亚洲伦在线观看| 久久噜噜亚洲综合| 欧美三区在线视频| 成人黄动漫网站免费app| 五月婷婷激情综合网| 欧美国产在线观看| 欧美一级艳片视频免费观看| 成人91在线观看| 久久精品噜噜噜成人av农村| 国产精品萝li| 日韩一区二区在线看片| 色噜噜狠狠色综合中国| 国产福利一区二区| 奇米精品一区二区三区在线观看一| 中文字幕av一区二区三区免费看 | 中文无字幕一区二区三区 | 国产一区二区三区高清播放| 一区二区三区在线视频免费观看| 精品免费国产二区三区 | 日韩欧美在线1卡| 日本电影亚洲天堂一区| 国产99久久久国产精品免费看| 日韩专区中文字幕一区二区| 亚洲欧美区自拍先锋| 欧美国产精品中文字幕| 精品国产一区二区三区不卡| 7777精品伊人久久久大香线蕉经典版下载| 懂色av一区二区三区蜜臀| 日产国产欧美视频一区精品 | 日韩国产精品久久久久久亚洲| 一区二区在线观看视频在线观看| 久久日韩精品一区二区五区| 欧美一区二区三区四区高清| 欧美三级乱人伦电影| 在线亚洲一区二区| 一本色道久久综合亚洲aⅴ蜜桃| 国产宾馆实践打屁股91| 国产高清成人在线| 成人黄色在线网站| 99亚偷拍自图区亚洲| 不卡一二三区首页| 一本色道久久加勒比精品| 91天堂素人约啪| 在线观看免费成人| 色av成人天堂桃色av| 欧美亚洲日本国产| 欧美日韩你懂得| 7777精品伊人久久久大香线蕉 | 欧美一区二区三区小说| 欧美日韩国产综合久久| 6080午夜不卡| 精品国产免费人成在线观看| 久久久久一区二区三区四区| 国产欧美日韩在线看| 欧美国产成人在线| 一区二区三区四区在线播放| 性做久久久久久| 蜜臀精品一区二区三区在线观看| 久久黄色级2电影| 国产91丝袜在线18| 91浏览器在线视频| 51精品秘密在线观看| 欧美成人艳星乳罩| 国产精品成人在线观看| 亚洲高清免费一级二级三级| 另类小说视频一区二区| 成人免费观看av| 欧美三级电影一区| 精品盗摄一区二区三区| 最新中文字幕一区二区三区| 亚洲一本大道在线| 极品少妇xxxx精品少妇| 99久久免费国产| 91精品国产91久久综合桃花| 久久久久亚洲综合| 亚洲mv在线观看| 国产一区二区精品久久91| 在线观看亚洲一区| 久久只精品国产| 亚洲一级在线观看| 丁香六月久久综合狠狠色| 8v天堂国产在线一区二区| 国产精品视频看| 精品一区二区综合| 欧亚洲嫩模精品一区三区|