1 /*
2 * Copyright (c) 2011-2014, Texas Instruments Incorporated
3 * Copyright (c) 2011, Google Inc
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 *
13 * * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * * Neither the name of Texas Instruments Incorporated nor the names of
18 * its contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
25 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
34 /*
35 * ======== StackDbg.xdc ========
36 */
38 /*!
39 * ======== StackDbg ========
40 *
41 * Stack Debug Helper Module
42 *
43 */
44 module StackDbg {
46 /*!
47 * StackEntry - Structure containing elements for decoding stack
48 */
49 struct StackEntry {
50 UInt instr; /* address of calling instruction */
51 UInt op; /* opcode of calling instruction */
52 UInt target; /* jump destination of calling instr (if immediate) */
53 UInt sp; /* ptr to work on stack that we're inspecting */
54 UInt ret; /* return address at *sp */
55 UInt bogus; /* return address matches code section, but not the other
56 criteria */
57 };
59 /*!
60 * User-defined function pointer definition that can be called while
61 * traversing the stack. The function returns TRUE if it wants the stack
62 * to continue being walked, and FALSE otherwise.
63 */
64 typedef Bool (*VisitFuncPtr)(StackEntry *, Void *);
66 /*!
67 * ======== walkStack ========
68 * Walk the stack ranging at @base of @size bytes, starting at stack
69 * pointer @start pointing somewhere within the stack. Walk the stack
70 * one 32-bit word at a time, calling the the caller-provided function
71 * @visit for each return address that is found. The @visit callback
72 * is passed an instance of struct stack_entry populated, as well as an
73 * opaque user-provided value.
74 */
75 Void walkStack(UInt base, UInt size, UInt start, VisitFuncPtr visit,
76 Ptr user);
78 internal:
79 struct Module_State {
80 UInt codeBegin;
81 UInt codeEnd;
82 }
84 }