亚洲欧美第一页_禁久久精品乱码_粉嫩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在线播放网址| 美女免费视频一区| 一个色在线综合| 国产精品人成在线观看免费| 欧美一级电影网站| 在线欧美小视频| 成人激情免费视频| 国产一区二区中文字幕| 日韩电影一区二区三区| 亚洲制服欧美中文字幕中文字幕| 成人免费毛片app| 国产肉丝袜一区二区| 欧美性生交片4| 丰满放荡岳乱妇91ww| 青青草97国产精品免费观看| 亚洲嫩草精品久久| 中文字幕一区在线| 国产午夜一区二区三区| 亚洲精品一区在线观看| 欧美一区二区私人影院日本| 色综合久久中文字幕| 成人激情图片网| 高清不卡在线观看av| 国模套图日韩精品一区二区| 日韩国产高清在线| 国产成人在线免费观看| 精品处破学生在线二十三| 欧美日本国产视频| 色妹子一区二区| 91在线观看免费视频| 成人一区二区三区视频在线观看| 国产精品综合二区| 国产毛片一区二区| 国产精品香蕉一区二区三区| 激情综合色综合久久| 青青草一区二区三区| 免费观看一级特黄欧美大片| 青草国产精品久久久久久| 免费在线观看视频一区| 奇米一区二区三区av| 蜜桃久久久久久| 精品一区二区三区欧美| 国内精品久久久久影院色| 国产伦精品一区二区三区免费| 国产专区欧美精品| 国产福利一区在线| 99久久久精品| 在线精品视频免费观看| 欧美乱熟臀69xxxxxx| 欧美一区二区久久久| 免费高清不卡av| 日韩欧美在线网站| 日韩一区二区三区高清免费看看| 欧美一个色资源| 久久综合狠狠综合| 国产精品成人免费精品自在线观看| 国产精品久久一级| 一级精品视频在线观看宜春院| 日韩综合在线视频| 国产精品自拍网站| 本田岬高潮一区二区三区| 色老汉一区二区三区| 91精品在线一区二区| 国产无一区二区| 一区二区三区在线不卡| 日韩不卡一二三区| 国产.精品.日韩.另类.中文.在线.播放| 成人av网站大全| 欧美日韩国产精品自在自线| 精品国产凹凸成av人导航| 国产免费久久精品| 亚洲va欧美va国产va天堂影院| 国产真实乱对白精彩久久| 99精品欧美一区| 欧美一区二区三区免费大片| 欧美国产精品一区| 午夜av区久久| 欧美一区二区三区白人| 国产日韩在线不卡| 亚洲天堂网中文字| 日本不卡一二三| 国产91精品在线观看| 欧美性猛片xxxx免费看久爱| 国产夜色精品一区二区av| 亚洲尤物在线视频观看| 精品在线免费观看| 欧美体内she精高潮| 亚洲国产高清在线观看视频| 亚洲成人av电影| 国产·精品毛片| 日韩亚洲欧美在线| 18成人在线视频| 午夜精品福利一区二区三区av| 成人三级伦理片| 日韩午夜三级在线| 一区二区欧美精品| 成年人网站91| 欧美精品一区二区三区在线| 亚洲一区二区三区激情| 成人激情开心网| 精品国产在天天线2019| 亚洲va天堂va国产va久| 欧美色图片你懂的| 中文字幕免费一区| 人妖欧美一区二区| 91福利视频网站| 国产精品夫妻自拍| 国产精品一区二区久久精品爱涩| 欧美精品一级二级| 一级日本不卡的影视| 99精品热视频| 欧美激情一区二区三区全黄| 久久99国产精品久久| 欧美丰满嫩嫩电影| 亚洲午夜视频在线观看| 91网站黄www| 国产精品国产精品国产专区不片| 蜜臀av亚洲一区中文字幕| 欧美人体做爰大胆视频| 亚洲伊人伊色伊影伊综合网| 色综合久久久久久久久| 亚洲欧美一区二区不卡| 成人福利视频网站| 久久精品视频在线看| 久久99精品国产.久久久久 | 色香蕉成人二区免费| 国产调教视频一区| 国产成人啪免费观看软件| 久久亚洲私人国产精品va媚药| 久久国产三级精品| 精品免费视频一区二区| 久久精品国产精品亚洲红杏| 日韩一区二区免费在线电影| 免费观看一级欧美片| 欧美大片在线观看一区二区| 黄页网站大全一区二区| 久久久久综合网| 成人午夜视频在线观看| 国产精品视频yy9299一区| 不卡av在线免费观看| 亚洲日本va在线观看| gogo大胆日本视频一区| 亚洲三级免费观看| 日本韩国欧美三级| 天堂一区二区在线| 日韩一区二区电影网| 韩国女主播一区| 国产精品久久午夜夜伦鲁鲁| 91欧美激情一区二区三区成人| 一区二区三区在线看| 在线播放日韩导航| 精品无人区卡一卡二卡三乱码免费卡| 久久尤物电影视频在线观看| 成人在线视频一区| 亚洲黄色免费电影| 正在播放亚洲一区| 国产a级毛片一区| 一区二区三区国产精品| 在线成人av网站| 国产精品18久久久久| 成人欧美一区二区三区在线播放| 欧日韩精品视频| 久久精品二区亚洲w码| 国产精品久久久久久久蜜臀| 欧美怡红院视频| 精品综合久久久久久8888| 欧美激情一区三区| 欧美日韩欧美一区二区| 久久精品免费看| 亚洲欧洲日本在线| 6080国产精品一区二区| 国产成人亚洲综合a∨婷婷| 亚洲欧美电影院| 日韩你懂的电影在线观看| 91亚洲男人天堂| 蜜桃视频一区二区三区在线观看| 国产精品免费观看视频| 91精品欧美久久久久久动漫| 成人av电影免费在线播放| 日韩精品亚洲一区| 国产女人18水真多18精品一级做| 欧美日韩小视频| 成人免费毛片aaaaa**| 免费成人在线观看| 亚洲人成影院在线观看| 久久亚洲精精品中文字幕早川悠里| 97久久精品人人做人人爽| 老汉av免费一区二区三区| 亚洲欧美一区二区三区极速播放 | 欧美日韩一二三区| 国产ts人妖一区二区| 免费一级片91| 亚洲卡通动漫在线| 国产亲近乱来精品视频| 欧美一级国产精品| 欧美在线影院一区二区|