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

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

?? trclib.c

?? vxworks的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* trcLib.c - PowerPC stack trace library *//* Copyright 1984-1994 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------02b,27feb96,ms   reworked findFuncStart.02a,01feb96,ms   rewritten.01c,16jan95,caf  disabled stack trace support for now.01b,05dec94,caf  added cast to trcStack().01a,07nov94,yao  written.*//*This module provides the routine trcStack(), which traces a stackgiven the current frame pointer, stack pointer, and program counter.The resulting stack trace lists the nested routine calls and their arguments.This module provides the low-level stack trace facility.A higher-level symbolic stack trace, implemented on top of this facility,is provided by the routine tt() in dbgLib.SEE ALSO:dbgLib, tt(),.pG "Debugging"*/#include "vxWorks.h"#include "symLib.h"#include "taskLib.h"#include "regs.h"#include "string.h"#include "private/funcBindP.h"#include "dbgLib.h"#include "sysSymTbl.h"#include "vxLib.h"/* definitions */#define MAX_TRACE_DEPTH	80	/* maximum stack frames to trace */#define MAX_SCAN_DEPTH	250	/* maximum distance to scan text */#define MAX_PROLOGUE_SIZE 20	/* maximum size of function prologue */#define FP_FROM_STACK(sp)	 (*(char **)(sp))#define RETURN_PC_FROM_STACK(sp) (*(INSTR **)((sp) + 4))#define BOGUS_SP(sp,low,high)	 (((int)(sp) % 8) || ((sp) < (low)) || \				  ((sp) > (high)) || (sp == 0))#define BOGUS_PC(pc, junk)	 (vxMemProbe((char *)(pc), VX_READ, 4, \				  (char *)&(junk)) == ERROR)/* some dissassembly macros */#define INST_LWZX_SP		_OP(31, 55) | (1 << 21)#define INST_LWZUX_SP		_OP(31, 23) | (1 << 21)#define INST_LWZX_SP_MASK	0xffe007fe#define INST_LWZ_SP_MASK	0xffe00000#define STW(reg)	((36 << 26) | ((reg) << 21))#define STW_REG_MASK	0xffe00000/* globals */int trcDefaultArgs = 0;			/* default # of args to print */int trcScanDepth = MAX_SCAN_DEPTH;/* forward declarations */static int	trcGetArgs (INSTR *procAddr, char *sp, int *args);static INSTR *	trcFindFuncStart (INSTR *pc, INSTR *returnPc);static void	trcDefaultPrint (INSTR *callAdrs, INSTR *funcAdrs, 			int nargs, int *args);static void	trcStackLvl (INSTR *pc, INSTR *returnPc, char *sp, char *fp,			char *stackBottom, int depth, FUNCPTR printRtn);static STATUS	trcInfoGet (int tid, REG_SET * pRegs, INSTR ** pPc,			INSTR ** pReturnPc, char ** pSp, char ** pFp);/********************************************************************************* trcStack - print a trace of function calls from the stack** This routine provides the low-level stack trace function.* A higher-level symbolic stack trace, built on top of this, is provided* by tt() in dbgLib.* * The routine prints a list of the nested routine calls that are on the stack,* showing each routine call with its parameters.** The stack being traced should be quiescent.  The caller should avoid tracing* its own stack.** PRINT ROUTINE* To allow symbolic or alternative printout formats, the call to this* routine includes the <printRtn> parameter, which specifies a user-supplied* routine to be called at each nesting level to print out the routine name* and its arguments.  This routine should be declared as follows:* .ne 5* .CS*     void printRtn (callAdrs, rtnAdrs, nargs, args)*         INSTR *callAdrs;  /@ address from which routine was called @/*         int   rtnAdrs;    /@ address of routine called             @/*         int   nargs;      /@ number of arguments in call           @/*         int   *args;      /@ pointer to arguments                  @/* .CE** If <printRtn> is NULL, a default routine is used that prints out just* the call address, function address, and arguments as hexadecimal values.** CAVEAT* There is no way to determine the function arguments unless the* code is compiled with debugging (e.g., "-gdwarf).** EXAMPLE* The following sequence can be used* to trace a VxWorks task given a pointer to the task's TCB:* .CS**     REG_SET regSet;	/@ task's data registers @/**     taskRegsGet (taskId, &regSet);*     trcStack (&regSet, (FUNCPTR) NULL, tid);** .CE** RETURNS: N/A** SEE ALSO: tt()* * NOMANUAL*/void trcStack    (    REG_SET * pRegs,	/* general purpose registers */    FUNCPTR printRtn,	/* routine to print single function call */    int     tid         /* task's id */    )    {    char *stackBottom = taskTcb (tid)->pStackBase;    char *sp;			/* current stack pointer */    char *fp;			/* frame pointer (previous sp) */    INSTR *pc;			/* current program counter */    INSTR *returnPc;		/* return address */    /* get info on the top level stack frame */    if (trcInfoGet (tid, pRegs, &pc, &returnPc, &sp, &fp) == ERROR)	{	if (_func_printErr != NULL)	    _func_printErr ("trcStack aborted: error in top frame\n");	return;	}    /* use default print routine if none specified */    if (printRtn == NULL)	printRtn = (FUNCPTR) trcDefaultPrint;    /* do the recursive stack trace. */    trcStackLvl (pc, returnPc, sp, fp, stackBottom, 0, printRtn);    }/************************************************************************** trcStackLvl - recursive stack trace routine** This routine is recursive, being called once for each level of routine* nesting.  The maximum recursion depth is limited to 40 to prevent* garbage stacks from causing this routine to continue unbounded.* The "depth" parameter on the original call should be 0.*/static void trcStackLvl    (    INSTR *pc,		/* current program counter location */    INSTR *returnPc,	/* return address */    char *sp,		/* stack pointer */    char *fp,		/* frame pointer (previous stack pointer) */    char *stackBottom,	/* effective base of task's stack */    int depth,		/* recursion depth */    FUNCPTR printRtn 	/* routine to print single function call */    )    {    char *	prevFp = NULL;    INSTR *	prevReturnPc;    int		args[MAX_TASK_ARGS];    INSTR *	procAddr;    int		nArgs;    /* recursive trace if depth not maxed and framepointer is valid */    if (depth < MAX_TRACE_DEPTH)	{	prevFp = FP_FROM_STACK(fp);	if (BOGUS_SP (prevFp, fp, stackBottom))	    return;	prevReturnPc = RETURN_PC_FROM_STACK(prevFp);	if (!BOGUS_PC (prevReturnPc, procAddr))	    trcStackLvl (returnPc, prevReturnPc, fp, prevFp, stackBottom,			 depth+1, printRtn);	}    /* get the current routine's starting address */    procAddr = trcFindFuncStart (pc, returnPc);    /* get the function arguments */    nArgs = trcGetArgs (procAddr, sp, args);    (* printRtn) (returnPc, procAddr, nArgs, args);    }/********************************************************************************* trcDefaultPrint - print a function call** This routine is called by trcStack to print each level in turn.** If nargs is specified as 0, then a default number of args (trcDefaultArgs)* is printed in brackets ("[..]"), since this often indicates that the* number of args is unknown.*/static void trcDefaultPrint    (    INSTR *callAdrs,		/* address from which function was called */    INSTR *funcAdrs,		/* address of function called */    int nargs,			/* number of arguments in function call */    int *args 			/* pointer to function args */    )    {    int ix;    BOOL doingDefault = FALSE;    if (!_func_printErr)	return;    /* print call address and function address */    _func_printErr ("%6x: %x (", callAdrs, funcAdrs);    /* if no args are specified, print out default number (see doc at top) */    if ((nargs == 0) && (trcDefaultArgs != 0))	{	doingDefault = TRUE;	nargs = trcDefaultArgs;	_func_printErr ("[");	}    /* print args */    for (ix = 0; ix < nargs; ++ix)	{	if (ix != 0)	    _func_printErr (", ");	_func_printErr ("%x", args[ix]);	}    if (doingDefault)	_func_printErr ("]");    _func_printErr (")\n");    }/******************************************************************************** trcFindFuncStart - get starting address of a procedure.** Given a "pc" value, determine the address of the procedure* containing that pc.* We try several methods until one succeeds.* 1) First check the returnPc to see if we got to the current proc* via a branch instruction. If so we can determine the procedure* address accuratly.* 2) If there is no branch instruction found, scan backwards up to* trcScanDepth bytes looking for a "stwu sp, xxx(sp)" instruction,* and assume that instruction is the proc entry.** RETURNS: The starting address of the procedure, or NULL if it couldn't* be found.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品丝袜中出| 色综合久久精品| 欧美日韩黄色影视| 亚洲一级二级在线| 5月丁香婷婷综合| 日韩不卡一区二区三区| 精品国产一区二区三区久久久蜜月 | 91精品黄色片免费大全| 日韩专区欧美专区| 久久婷婷成人综合色| 成人午夜私人影院| 一区二区欧美精品| 日韩欧美亚洲另类制服综合在线| 精品亚洲国内自在自线福利| 久久久久久久精| 色拍拍在线精品视频8848| 日韩精品视频网站| 久久青草欧美一区二区三区| 99国产精品久| 日本系列欧美系列| 国产精品嫩草影院av蜜臀| 欧美视频第二页| 国产一区二区三区| 亚洲精品高清在线| 精品女同一区二区| 91麻豆成人久久精品二区三区| 日韩av网站在线观看| 亚洲国产精品高清| 制服丝袜一区二区三区| yourporn久久国产精品| 婷婷久久综合九色综合绿巨人| 久久天天做天天爱综合色| 欧美性色综合网| 国产乱国产乱300精品| 亚洲影视资源网| 2014亚洲片线观看视频免费| 色欧美日韩亚洲| 国产99久久久国产精品潘金 | 日韩制服丝袜av| 国产精品久久久久久久裸模| 日韩一区二区三区视频在线观看| 99久久综合国产精品| 久久精品国内一区二区三区| 亚洲欧洲综合另类在线| 欧美精品一区视频| 777久久久精品| 欧美综合一区二区| 成人成人成人在线视频| 国内精品国产成人国产三级粉色 | 久久综合久久综合亚洲| 欧美色爱综合网| av高清久久久| 国产精品一区在线观看乱码| 日本在线播放一区二区三区| 亚洲在线观看免费视频| 成人免费一区二区三区视频| 久久精品在线免费观看| 精品国产91洋老外米糕| 日韩亚洲欧美一区二区三区| 国产成人av一区二区| 夜夜揉揉日日人人青青一国产精品| 国产午夜精品一区二区三区嫩草| 69堂成人精品免费视频| 欧美日韩一区成人| 欧美日韩中文另类| 色综合中文字幕| 91在线高清观看| 国产成人av自拍| 国产精品综合视频| 国产精品中文欧美| 国产精品一品二品| 国产.欧美.日韩| 成人在线综合网| 成人国产精品免费| www.日韩av| 91浏览器打开| 欧美日韩中文字幕精品| 日韩女优制服丝袜电影| 精品久久久久久最新网址| 精品国免费一区二区三区| 精品噜噜噜噜久久久久久久久试看| 日韩欧美国产小视频| 欧美xxxxx裸体时装秀| 久久久久久久久一| 国产日韩欧美不卡| 中文字幕五月欧美| 亚洲综合视频在线观看| 天堂av在线一区| 久久超碰97中文字幕| 国产一区二区美女| 成人免费va视频| 91色porny蝌蚪| 欧美影片第一页| 欧美一区二区在线播放| 精品国产一区二区三区久久影院 | 久久国产免费看| 国产美女娇喘av呻吟久久| 成人一区二区三区视频在线观看| 处破女av一区二区| 在线观看亚洲专区| 日韩美女在线视频| 1024亚洲合集| 亚洲成a人v欧美综合天堂下载| 美女视频黄久久| 成人av综合一区| 欧美日韩不卡视频| 久久午夜羞羞影院免费观看| 国产精品福利一区二区| 日韩—二三区免费观看av| 精品一区二区三区在线播放| av一区二区三区四区| 欧美性生活久久| 久久亚洲精华国产精华液| 18欧美乱大交hd1984| 日本va欧美va瓶| 成人美女在线视频| 777久久久精品| 国产精品久久久久久久蜜臀 | 亚洲精品菠萝久久久久久久| 午夜激情一区二区三区| 国产v综合v亚洲欧| 欧美精品乱码久久久久久| 26uuu久久天堂性欧美| 一区二区成人在线视频 | 国产日韩精品一区二区三区| 亚洲国产乱码最新视频| 国产成人一级电影| 欧美一级视频精品观看| 国产精品福利电影一区二区三区四区| 亚洲一区二区三区在线播放| 国产一区二区三区黄视频 | 91精品国产乱| 一区二区中文视频| 久久99热99| 欧美日韩一区二区三区在线看 | 欧美一区二区三区爱爱| 最新久久zyz资源站| 国产麻豆精品theporn| 欧美久久婷婷综合色| 中文字幕一区二区在线观看| 国产一区二区三区久久悠悠色av| 欧美人xxxx| 亚洲最新在线观看| 不卡一卡二卡三乱码免费网站 | 欧美国产激情一区二区三区蜜月| 亚洲成人一二三| 色8久久人人97超碰香蕉987| 国产亚洲人成网站| 国产一区二区不卡老阿姨| 欧美高清hd18日本| 亚洲一区在线观看免费| 91国产免费看| 亚洲人成在线播放网站岛国| 国产成人无遮挡在线视频| 精品国产三级电影在线观看| 日本色综合中文字幕| 欧美日韩一区二区在线视频| 亚洲精品视频在线看| 91视频在线观看| 亚洲人成7777| 在线视频一区二区免费| 一区二区久久久| 日本精品视频一区二区| 亚洲在线视频网站| 欧美性生活影院| 午夜精品一区二区三区免费视频 | 日本不卡的三区四区五区| 欧美日韩国产首页| 日韩二区三区在线观看| 欧美一卡二卡三卡四卡| 日韩高清中文字幕一区| 91精品综合久久久久久| 日本午夜一本久久久综合| 欧美va在线播放| 国产精品中文字幕一区二区三区| 久久夜色精品一区| 成人性生交大片免费看中文网站| 国产性天天综合网| 91色视频在线| 亚洲v日本v欧美v久久精品| 欧美一区二区三级| 精品一区二区精品| 国产欧美日韩三区| 色欧美乱欧美15图片| 亚洲超碰精品一区二区| 欧美一级在线视频| 国产999精品久久久久久| 中文字幕一区二区三中文字幕| 在线视频综合导航| 久久激情五月激情| 国产精品亲子乱子伦xxxx裸| 99久久综合国产精品| 天堂影院一区二区| 久久综合狠狠综合| 91免费国产视频网站| 午夜精彩视频在线观看不卡| 亚洲精品一区二区三区蜜桃下载 | 麻豆中文一区二区| 中文字幕亚洲不卡| 欧美一区在线视频|