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

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

?? trclib.c

?? vxworks的源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* trcLib.c - i80x86 stack trace library *//* Copyright 1984-2002 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01g,16sep02,pai  Cleaned up data types & formatting.  Added additional                 instruction patterns.  Moved manifest constants to common                 header file.  Added notes on IA-32 cross-compiler stack                 frame structures.01f,16jan02,pai  replaced obsolete symFindByValue (_func_symFindByValue) with                 symByValueFind.  Removed FAST variable qualifier.                 Cleaned up formatting and updated copyright for T2.2.01e,12may95,p_m  adapted to support host based tt().01d,26oct94,hdn  added a MAX_LOOPCOUNT to avoid infinite loop.01c,09dec93,hdn  added a forward declaration of trcCountArgs().                 commented out trcFollowJmp(pc) in trcFindFuncStart().01b,01jun93,hdn  added third parameter tid to trcStack().                 updated to 5.1.                  - changed functions to ansi style                  - changed VOID to void                  - changed copyright notice01a,16jul92,hdn  written based on TRON version.*//*This module provides a 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.INTERNALThe IA-32 architecture supports procedure calls in the following twodifferent ways:    o CALL and RET instructions.    o ENTER and LEAVE instructions, in conjuntion with the CALL and RET      instructions.Both of these procedure call mechanisms use the procedure stack ("thestack") to save the state of the calling procedure, pass parameters to thecalled procedure, and store local variables for the currently executingprocedure.The processor's facilities for handling interrupts and exceptions aresimilar to those used by the CALL and RET instructions.The stack is a contiguous array of memory locations.  Each VxWorks taskhas its own stack of a size and location specified when the task wascreated.The next available memory location on the stack is called the top ofstack.  At any given time, the stack pointer (contained in the ESPregister) gives the address (the offset from the base of the stacksegement) to the top of the stack.Items are placed on the stack using a PUSH instruction and removed fromthe stack using the POP instruction.  When an item is pushed onto thestack, the processor decrements the ESP register, then writes the item atthe new top of stack.  When an item is popped off the stack, the processorreads the item from the top of stack, then increments the ESP register.In this manner, the stack grows down in memory (towards lower addresses)when items are pushd on the stack and shrinks up (towards higheraddresses) when the items are popped from the stack.The processor provides two pointers for linking of procedures: thestack-frame base pointer and the return instruction pointer.  Thesepointers are intended to permit reliable and coherent linking ofprocedures.The stack is typically divided into frames.  Each frame can contain localvariables, parameters to be passed to another procedure, and procedurelinking information.  The stack-frame base pointer (contained in the EBPregister) identifies a fixed reference point within the stack frame forthe called procedure.  To use the stack-frame base pointer, the calledprocedure typically saves the current EBP contents (by pushing theregister), then copies the contents of the ESP register into the EBPregister.  The EBP value is then used as a base address for accessingprocedure parameters and local variables for the life of the procedure.Before returning, the procedure will restore ESP from EBP and pop thesaved EBP register value from the stack.Prior to branching to the first instruction of the called procedure, theCALL instruction pushes the address in the EIP register onto the currentstack.  This address is then called the return-instruction pointer and itpoints to the instruction where execution of the calling procedure shouldresume following a return from the called procedure.  Upon returning froma called procedure, the RET instruction pops the return-instructionpointer from the stack back into the EIP register.The IA-32 processors have a few variations on CALL and RET operations.For example, there are procedure call variations that allow calls todifferent segments and different privilege levels, as well as variationsrelated to interrupt and exception handlers.  In addition, arguments canbe passed in registers or on the stack.The IA-32 calling convention for the VxWorks C/C++ cross-compilers andruntime are fairly straight-forward (with one major exception) andconsistent with what is used in several major IA-32 developmentenvironments.  Generally C-language source functions are compiled downto procedures using the near CALL and RET operation.  When executing anear call, the processor does the following:    (1) Parameters to a procedure are pushed on the stack in order from        right to left (as the parameters appear in the source code).    (2) The CALL instruction pushes the current value of EIP on the stack.    (3) The offset of the called procedure is loaded into the EIP        register.    (4) The called procedure begins executing.When executing a near return, the processor does the following:    (1) The return instruction pointer is popped into the EIP register.    (2) If the RET instruction has an optional <n> argument, the stack        pointer is incremented by the number of bytes specified with the        <n> operand to release parameters from the stack.  VxWorks code        does not do this - the caller cleans the stack, not the callee.    (3) Execution is resumed at the caller on instructions that clean        the stack (increment the stack pointer) based on the number of        parameters passed to the routine being returned from.A hypothetical stack frame for a routine with (3) 32-bit paramaters and (2)local variables might appear as follows:.bS                                                 High Memory                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Previous ESP -->|                              |                |------------------------------|     Stack grows downwards                 | parameter 3                  |              |                |------------------------------|              |                | parameter 2                  |              |                |------------------------------|              v                | parameter 1                  | [EBP+8]                |------------------------------|                | return address               | [EBP+4]                |------------------------------|New EBP ------->| previous EBP                 | [EBP]                |------------------------------|                | local variable 1             | [EBP-4]                |------------------------------|New ESP ------->| local variable 2             | [EBP-8]                |------------------------------|                |                              |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                 Low Memory.bEIn the example above, the EBP register is used as the stack "frame pointer".The EBP register, once initialized on function entry, can be used to accessany of the procedure parameters and local variables in addition to theprocedure return address.  The usual prologue and epilogue code used tosupport this model is as follows (Intel assembly syntax):.CS    foo:        push  ebp        mov   ebp, esp        ...        mov   esp, ebp        pop   ebp        ret.CEThe ENTER and LEAVE instructions support an alternate method for creatingand destroying stack frames.  The ENTER instruction has two operands.  Itis not necessary to understand the use of these operands in this stacktracing library.  With respect to ENTER and LEAVE instructions, it isimportant to note that an EBP-based stack frame is created and destroyedin a manner that is equivalent to the preceding example..CS    foo:        enter m,n    ; push EBP, then copy ESP to EBP        ...        leave        ; copy EBP to ESP, then pop EBP        ret.CEThe Tornado 2.2 IA-32 cross-compiler does not generate subroutine stacksetup code in the manner described above when the -msse compiler flag isused.  The -msse flag will cause the compiler to generate prologue andepilogue code which is used to dynamically align stack variables on16-byte addresses, as required for most SSE/SSE2 memory operands.  Themechanics behind this alignment and other SSE/SSE2 ABI conventionsintroduced in the Intel compiler are discussed in the Intel ApplicationNote AP-589.  Note that the Tornado 2.2 IA-32 cross-compiler (version2.9-PentiumIII-010221) is essentially the "Intel C/C++ Compiler".A 128-bit vendor-specific data type named __m128 may imply the followingextensions to the IA-32 ABI:    o Functions that use Streaming SIMD Extensions data provide      a 16-byte-aligned stack frame.    o __m128 parameters are aligned, possibly creating "holes"      (padding) in the argument block.    o __m128 parameters may be passed in registers.    o The first (3) __m128 parameters are passed in registers xmm0,      xmm1, and xmm2.  Additional __m128 parameters are passed on      the stack as usual.    o __m128 return values are passed in xmm0.    o Registers xmm0 through xmm7 are caller-save.Subroutines that use the __m128 data type must have 16-byte-aligned stackframes (for local variables of type __m128) to meet alignment requirementsfor SSE memory operands.The current Intel compiler resolves the 16-byte-alignment requirement byinserting function prologue and epilogue code to dynamically align the stackappropriately.As an optimization, an alternate entry point will be created that can becalled when proper stack alignment is guaranteed by the caller.  Throughcall graph analysis, calls to the unaligned entry point can be optimizedinto calls to the aligned entry point when the stack can be proven to beproperly aligned.SEE ALSO: dbgLib, tt(),.pG "Debugging"*//* includes */#include "vxWorks.h"#include "dbgLib.h"#include "regs.h"#include "stdio.h"#include "stdlib.h"#include "symLib.h"#include "sysSymTbl.h"#include "taskLib.h"#include "private/funcBindP.h"/* imports */IMPORT int vxTaskEntry ();/* globals *//* default number of arguments printed from trcDefaultPrint() */int trcDefaultArgs = 5;/* forward declarations */LOCAL const INSTR * trcFindCall (const INSTR *);LOCAL const INSTR * trcFindFuncStart (const INSTR *);LOCAL const INSTR * trcFindReturnAddr (const int *, const INSTR *);LOCAL const INSTR * trcFindDest (const INSTR *);LOCAL const INSTR * trcFollowJmp (const INSTR *);LOCAL void  trcDefaultPrint (const INSTR *, const INSTR *, int, const int *);LOCAL void  trcStackLvl (const int *, const INSTR *, const char *, const char *, FUNCPTR);LOCAL int   trcCountArgs (const INSTR *);/********************************************************************************* 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 trcStack(), is provided by tt() in* dbgLib.** This routine prints a list of the nested routine calls that are on the* stack, showing each routine with its parameters.** The stack being traced should be quiescent.  The caller should avoid* tracing its own stack.** PRINT ROUTINE* In order 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 7* .CS*     void printRtn*         (*         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 will be used that prints out just* the call address, the function address, and the arguments as hexadecimal* values.** CAVEAT* In order to do the trace, a number of assumptions are made.  In general,* the trace will work for all C language routines and for assembly language* routines that start with an PUSH %EBP MOV %ESP %EBP instruction.  Most * VxWorks assembly language routines include PUSH %EBP MOV %ESP %EBP * instructions for exactly this reason.* However, routines written in other languages, strange entries into* routines, or tasks with corrupted stacks can confuse the trace.  Also,* all parameters are assumed to be 32-bit quantities, therefore structures* passed as parameters will be displayed as a number of long integers.** 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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一级片网址| 免费观看在线综合| 成人av综合在线| xfplay精品久久| 国产不卡视频在线播放| 久久先锋影音av鲁色资源网| 另类小说图片综合网| 久久久久久一级片| 高清在线观看日韩| 欧美激情艳妇裸体舞| 91久久一区二区| 亚洲一区在线观看免费观看电影高清| 国产91富婆露脸刺激对白| 精品国产成人系列| 国产成人夜色高潮福利影视| 欧美激情在线免费观看| voyeur盗摄精品| 亚洲成人综合视频| 日韩一区二区免费在线观看| 国产资源在线一区| 亚洲精品成人精品456| 717成人午夜免费福利电影| 久久av资源网| 日韩美女精品在线| 色哟哟国产精品| 婷婷开心激情综合| 久久久久99精品国产片| 在线欧美小视频| 免费欧美高清视频| 国产欧美一区二区精品忘忧草| 欧洲中文字幕精品| 美腿丝袜在线亚洲一区| 欧美一区二区三区四区久久 | www.在线欧美| 亚洲美女电影在线| 欧美男人的天堂一二区| 国产成人aaa| 亚洲高清在线视频| 欧美一区二区福利在线| 成人动漫一区二区在线| 亚洲成人av一区二区| 18欧美亚洲精品| 日韩欧美一级二级| 91在线观看免费视频| 婷婷丁香激情综合| 国产精品丝袜一区| 欧美一区二区日韩一区二区| 色综合久久天天综合网| 国产在线播放一区| 亚洲电影视频在线| 亚洲激情在线播放| 国产欧美一区二区三区在线老狼| 欧美日韩国产系列| 欧美专区日韩专区| 懂色av一区二区三区免费观看| 香蕉久久一区二区不卡无毒影院| 亚洲欧美日韩国产一区二区三区| 欧美成人一区二区三区在线观看| 色欧美88888久久久久久影院| 懂色av一区二区在线播放| 日本欧美一区二区在线观看| 亚洲人精品一区| **欧美大码日韩| 久久你懂得1024| 欧美久久久影院| 欧美日韩视频在线第一区 | 亚洲四区在线观看| 精品国产免费人成电影在线观看四季 | 亚洲成av人片一区二区三区| 亚洲男人的天堂在线观看| 国产日韩欧美在线一区| 3d动漫精品啪啪一区二区竹菊| 欧美三级资源在线| 色视频成人在线观看免| 99久久精品国产一区二区三区| 成人一区在线看| 国产乱子轮精品视频| 美女视频一区二区| 久久99精品久久久久久国产越南 | 亚洲综合丝袜美腿| 亚洲综合丝袜美腿| 一区二区国产盗摄色噜噜| 2021中文字幕一区亚洲| 久久久国产精华| 国产日韩影视精品| 精品久久人人做人人爱| 久久久久国产精品人| 国产午夜精品一区二区三区嫩草| 国产肉丝袜一区二区| 国产精品欧美极品| 中文字幕视频一区| 亚洲国产成人av| 天天综合天天做天天综合| 一区二区三区中文字幕在线观看| 午夜精品一区二区三区电影天堂| 亚洲一线二线三线视频| 中文字幕一区在线观看视频| 亚洲日本青草视频在线怡红院 | 国产色综合一区| 国产亲近乱来精品视频| 国产精品欧美经典| 亚洲午夜日本在线观看| 日韩和欧美的一区| 裸体一区二区三区| www.日韩av| 欧美性生活大片视频| 91精品国产欧美一区二区18| 久久色成人在线| 国产精品国产a| 伊人色综合久久天天人手人婷| 午夜精品国产更新| 黄色资源网久久资源365| 免费观看30秒视频久久| 国产电影精品久久禁18| 91碰在线视频| 欧美一区二区美女| 亚洲国产精品二十页| 国产精品美女久久久久aⅴ| 亚洲不卡av一区二区三区| 久久成人18免费观看| 国产一区二区三区精品视频| 成人的网站免费观看| 在线看日本不卡| 亚洲国产精品v| 亚洲三级在线播放| 亚洲地区一二三色| 国精品**一区二区三区在线蜜桃| 国产成人午夜精品5599| 欧美日韩亚洲高清一区二区| 精品成人a区在线观看| 亚洲欧美日韩在线播放| 九九九精品视频| 91亚洲精品久久久蜜桃网站| 成人福利视频网站| 欧美xxxxxxxx| 一区二区三区欧美视频| 免费一级欧美片在线观看| 波多野结衣中文字幕一区二区三区| 欧美亚洲国产一区在线观看网站| 久久久久国产成人精品亚洲午夜| 一级特黄大欧美久久久| 国内成人精品2018免费看| 欧美日韩1234| 中文字幕亚洲视频| 精品一二三四在线| 欧美一级生活片| 夜夜亚洲天天久久| 99免费精品在线| 精品国产在天天线2019| 不卡的av电影| 欧美精品乱码久久久久久 | 日韩精品资源二区在线| 国产精品久久久久一区二区三区 | 99久久国产免费看| 国产欧美日韩中文久久| 日韩精品免费专区| 国内一区二区在线| 欧美日韩国产免费| 亚洲精品久久久久久国产精华液| 国产一区二区三区在线观看免费视频 | 国产亚洲1区2区3区| 免费观看91视频大全| 91精品在线麻豆| 亚洲va天堂va国产va久| 99re热这里只有精品免费视频| 亚洲国产高清aⅴ视频| 精品动漫一区二区三区在线观看| 欧洲精品中文字幕| 精品久久久久一区二区国产| 麻豆国产欧美一区二区三区| 欧美亚洲图片小说| 2022国产精品视频| 国产高清不卡一区| 日韩女优制服丝袜电影| 日韩高清一级片| 欧美日本一区二区三区四区| 一区二区三区在线视频播放| 在线免费观看成人短视频| 最新不卡av在线| 成人av综合一区| 亚洲精品日韩一| 在线亚洲精品福利网址导航| 国产精品萝li| 色综合中文字幕| 亚洲最新视频在线播放| 欧美视频精品在线| 亚洲成人动漫精品| 欧美日韩一区小说| 日韩电影在线一区二区三区| 欧美日韩精品一区二区三区蜜桃| 美女视频免费一区| 91麻豆自制传媒国产之光| 国产呦萝稀缺另类资源| 久久精品在线观看| 国产一区999| 精品久久人人做人人爱| 国产成人在线看| 综合亚洲深深色噜噜狠狠网站| 欧美日韩一区二区在线观看| 日韩精品久久理论片|