Commit | Line | Data |
---|---|---|
494cca16 AC |
1 | /* Definitions for a frame unwinder, for GDB, the GNU debugger. |
2 | ||
b811d2c2 | 3 | Copyright (C) 2003-2020 Free Software Foundation, Inc. |
494cca16 AC |
4 | |
5 | This file is part of GDB. | |
6 | ||
7 | This program is free software; you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License as published by | |
a9762ec7 | 9 | the Free Software Foundation; either version 3 of the License, or |
494cca16 AC |
10 | (at your option) any later version. |
11 | ||
12 | This program is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
a9762ec7 | 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
494cca16 AC |
19 | |
20 | #if !defined (FRAME_UNWIND_H) | |
21 | #define FRAME_UNWIND_H 1 | |
22 | ||
82417da5 | 23 | struct frame_data; |
494cca16 AC |
24 | struct frame_info; |
25 | struct frame_id; | |
26 | struct frame_unwind; | |
27 | struct gdbarch; | |
28 | struct regcache; | |
669fac23 | 29 | struct value; |
494cca16 | 30 | |
7df05f2b AC |
31 | #include "frame.h" /* For enum frame_type. */ |
32 | ||
6dc42492 AC |
33 | /* The following unwind functions assume a chain of frames forming the |
34 | sequence: (outer) prev <-> this <-> next (inner). All the | |
b7ea3126 PA |
35 | functions are called with this frame's `struct frame_info' and |
36 | prologue cache. | |
6dc42492 AC |
37 | |
38 | THIS frame's register values can be obtained by unwinding NEXT | |
39 | frame's registers (a recursive operation). | |
40 | ||
41 | THIS frame's prologue cache can be used to cache information such | |
42 | as where this frame's prologue stores the previous frame's | |
43 | registers. */ | |
44 | ||
669fac23 | 45 | /* Given THIS frame, take a whiff of its registers (namely |
82417da5 | 46 | the PC and attributes) and if SELF is the applicable unwinder, |
78ac5f83 TT |
47 | return non-zero. Possibly also initialize THIS_PROLOGUE_CACHE; but |
48 | only if returning 1. Initializing THIS_PROLOGUE_CACHE in other | |
be7d3cd5 YQ |
49 | cases (0 return) is invalid. In case of exception, the caller has |
50 | to set *THIS_PROLOGUE_CACHE to NULL. */ | |
82417da5 AC |
51 | |
52 | typedef int (frame_sniffer_ftype) (const struct frame_unwind *self, | |
669fac23 | 53 | struct frame_info *this_frame, |
82417da5 AC |
54 | void **this_prologue_cache); |
55 | ||
8fbca658 PA |
56 | typedef enum unwind_stop_reason (frame_unwind_stop_reason_ftype) |
57 | (struct frame_info *this_frame, void **this_prologue_cache); | |
58 | ||
669fac23 DJ |
59 | /* A default frame sniffer which always accepts the frame. Used by |
60 | fallback prologue unwinders. */ | |
61 | ||
62 | int default_frame_sniffer (const struct frame_unwind *self, | |
63 | struct frame_info *this_frame, | |
64 | void **this_prologue_cache); | |
65 | ||
8fbca658 PA |
66 | /* A default stop_reason callback which always claims the frame is |
67 | unwindable. */ | |
68 | ||
69 | enum unwind_stop_reason | |
70 | default_frame_unwind_stop_reason (struct frame_info *this_frame, | |
71 | void **this_cache); | |
72 | ||
8bcb5208 AB |
73 | /* A default unwind_pc callback that simply unwinds the register identified |
74 | by GDBARCH_PC_REGNUM. */ | |
75 | ||
76 | extern CORE_ADDR default_unwind_pc (struct gdbarch *gdbarch, | |
77 | struct frame_info *next_frame); | |
78 | ||
79 | /* A default unwind_sp callback that simply unwinds the register identified | |
80 | by GDBARCH_SP_REGNUM. */ | |
81 | ||
82 | extern CORE_ADDR default_unwind_sp (struct gdbarch *gdbarch, | |
83 | struct frame_info *next_frame); | |
84 | ||
6dc42492 | 85 | /* Assuming the frame chain: (outer) prev <-> this <-> next (inner); |
669fac23 DJ |
86 | use THIS frame, and through it the NEXT frame's register unwind |
87 | method, to determine the frame ID of THIS frame. | |
6dc42492 AC |
88 | |
89 | A frame ID provides an invariant that can be used to re-identify an | |
90 | instance of a frame. It is a combination of the frame's `base' and | |
91 | the frame's function's code address. | |
92 | ||
93 | Traditionally, THIS frame's ID was determined by examining THIS | |
94 | frame's function's prologue, and identifying the register/offset | |
95 | used as THIS frame's base. | |
96 | ||
97 | Example: An examination of THIS frame's prologue reveals that, on | |
98 | entry, it saves the PC(+12), SP(+8), and R1(+4) registers | |
99 | (decrementing the SP by 12). Consequently, the frame ID's base can | |
100 | be determined by adding 12 to the THIS frame's stack-pointer, and | |
101 | the value of THIS frame's SP can be obtained by unwinding the NEXT | |
102 | frame's SP. | |
103 | ||
104 | THIS_PROLOGUE_CACHE can be used to share any prolog analysis data | |
105 | with the other unwind methods. Memory for that cache should be | |
35d5d4ee | 106 | allocated using FRAME_OBSTACK_ZALLOC(). */ |
6dc42492 | 107 | |
669fac23 | 108 | typedef void (frame_this_id_ftype) (struct frame_info *this_frame, |
6dc42492 AC |
109 | void **this_prologue_cache, |
110 | struct frame_id *this_id); | |
111 | ||
112 | /* Assuming the frame chain: (outer) prev <-> this <-> next (inner); | |
669fac23 DJ |
113 | use THIS frame, and implicitly the NEXT frame's register unwind |
114 | method, to unwind THIS frame's registers (returning the value of | |
115 | the specified register REGNUM in the previous frame). | |
6dc42492 AC |
116 | |
117 | Traditionally, THIS frame's registers were unwound by examining | |
118 | THIS frame's function's prologue and identifying which registers | |
119 | that prolog code saved on the stack. | |
120 | ||
121 | Example: An examination of THIS frame's prologue reveals that, on | |
122 | entry, it saves the PC(+12), SP(+8), and R1(+4) registers | |
123 | (decrementing the SP by 12). Consequently, the value of the PC | |
124 | register in the previous frame is found in memory at SP+12, and | |
125 | THIS frame's SP can be obtained by unwinding the NEXT frame's SP. | |
126 | ||
669fac23 DJ |
127 | This function takes THIS_FRAME as an argument. It can find the |
128 | values of registers in THIS frame by calling get_frame_register | |
129 | (THIS_FRAME), and reinvoke itself to find other registers in the | |
130 | PREVIOUS frame by calling frame_unwind_register (THIS_FRAME). | |
6dc42492 | 131 | |
669fac23 DJ |
132 | The result is a GDB value object describing the register value. It |
133 | may be a lazy reference to memory, a lazy reference to the value of | |
134 | a register in THIS frame, or a non-lvalue. | |
6dc42492 AC |
135 | |
136 | THIS_PROLOGUE_CACHE can be used to share any prolog analysis data | |
137 | with the other unwind methods. Memory for that cache should be | |
35d5d4ee | 138 | allocated using FRAME_OBSTACK_ZALLOC(). */ |
6dc42492 | 139 | |
669fac23 DJ |
140 | typedef struct value * (frame_prev_register_ftype) |
141 | (struct frame_info *this_frame, void **this_prologue_cache, | |
142 | int regnum); | |
cbafadeb | 143 | |
272dfcfd AS |
144 | /* Deallocate extra memory associated with the frame cache if any. */ |
145 | ||
146 | typedef void (frame_dealloc_cache_ftype) (struct frame_info *self, | |
147 | void *this_cache); | |
cbafadeb | 148 | |
36f15f55 UW |
149 | /* Assuming the frame chain: (outer) prev <-> this <-> next (inner); |
150 | use THIS frame, and implicitly the NEXT frame's register unwind | |
151 | method, return PREV frame's architecture. */ | |
152 | ||
153 | typedef struct gdbarch *(frame_prev_arch_ftype) (struct frame_info *this_frame, | |
154 | void **this_prologue_cache); | |
155 | ||
494cca16 AC |
156 | struct frame_unwind |
157 | { | |
7df05f2b AC |
158 | /* The frame's type. Should this instead be a collection of |
159 | predicates that test the frame for various attributes? */ | |
160 | enum frame_type type; | |
494cca16 AC |
161 | /* Should an attribute indicating the frame's address-in-block go |
162 | here? */ | |
8fbca658 | 163 | frame_unwind_stop_reason_ftype *stop_reason; |
6dc42492 AC |
164 | frame_this_id_ftype *this_id; |
165 | frame_prev_register_ftype *prev_register; | |
82417da5 AC |
166 | const struct frame_data *unwind_data; |
167 | frame_sniffer_ftype *sniffer; | |
272dfcfd | 168 | frame_dealloc_cache_ftype *dealloc_cache; |
36f15f55 | 169 | frame_prev_arch_ftype *prev_arch; |
494cca16 AC |
170 | }; |
171 | ||
fb2be677 AC |
172 | /* Register a frame unwinder, _prepending_ it to the front of the |
173 | search list (so it is sniffed before previously registered | |
174 | unwinders). By using a prepend, later calls can install unwinders | |
175 | that override earlier calls. This allows, for instance, an OSABI | |
766062f6 | 176 | to install a more specific sigtramp unwinder that overrides the |
fb2be677 | 177 | traditional brute-force unwinder. */ |
3e43a32a MS |
178 | extern void frame_unwind_prepend_unwinder (struct gdbarch *, |
179 | const struct frame_unwind *); | |
82417da5 | 180 | |
e8a89fe2 AC |
181 | /* Add a frame sniffer to the list. The predicates are polled in the |
182 | order that they are appended. The initial list contains the dummy | |
183 | frame sniffer. */ | |
184 | ||
669fac23 DJ |
185 | extern void frame_unwind_append_unwinder (struct gdbarch *gdbarch, |
186 | const struct frame_unwind *unwinder); | |
e8a89fe2 | 187 | |
9f9a8002 JK |
188 | /* Iterate through sniffers for THIS_FRAME frame until one returns with an |
189 | unwinder implementation. THIS_FRAME->UNWIND must be NULL, it will get set | |
190 | by this function. Possibly initialize THIS_CACHE. */ | |
e8a89fe2 | 191 | |
9f9a8002 JK |
192 | extern void frame_unwind_find_by_frame (struct frame_info *this_frame, |
193 | void **this_cache); | |
e8a89fe2 | 194 | |
669fac23 DJ |
195 | /* Helper functions for value-based register unwinding. These return |
196 | a (possibly lazy) value of the appropriate type. */ | |
197 | ||
198 | /* Return a value which indicates that FRAME did not save REGNUM. */ | |
199 | ||
200 | struct value *frame_unwind_got_optimized (struct frame_info *frame, | |
201 | int regnum); | |
202 | ||
203 | /* Return a value which indicates that FRAME copied REGNUM into | |
204 | register NEW_REGNUM. */ | |
205 | ||
206 | struct value *frame_unwind_got_register (struct frame_info *frame, int regnum, | |
207 | int new_regnum); | |
208 | ||
209 | /* Return a value which indicates that FRAME saved REGNUM in memory at | |
210 | ADDR. */ | |
211 | ||
212 | struct value *frame_unwind_got_memory (struct frame_info *frame, int regnum, | |
213 | CORE_ADDR addr); | |
214 | ||
215 | /* Return a value which indicates that FRAME's saved version of | |
216 | REGNUM has a known constant (computed) value of VAL. */ | |
217 | ||
218 | struct value *frame_unwind_got_constant (struct frame_info *frame, int regnum, | |
219 | ULONGEST val); | |
220 | ||
15c1e57f JB |
221 | /* Return a value which indicates that FRAME's saved version of |
222 | REGNUM has a known constant (computed) value which is stored | |
223 | inside BUF. */ | |
224 | ||
225 | struct value *frame_unwind_got_bytes (struct frame_info *frame, int regnum, | |
226 | gdb_byte *buf); | |
227 | ||
669fac23 DJ |
228 | /* Return a value which indicates that FRAME's saved version of REGNUM |
229 | has a known constant (computed) value of ADDR. Convert the | |
230 | CORE_ADDR to a target address if necessary. */ | |
231 | ||
232 | struct value *frame_unwind_got_address (struct frame_info *frame, int regnum, | |
233 | CORE_ADDR addr); | |
234 | ||
494cca16 | 235 | #endif |