1b725ae77Skettenis /* Cache and manage frames for GDB, the GNU debugger.
2b725ae77Skettenis
3b725ae77Skettenis Copyright 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000,
4b725ae77Skettenis 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5b725ae77Skettenis
6b725ae77Skettenis This file is part of GDB.
7b725ae77Skettenis
8b725ae77Skettenis This program is free software; you can redistribute it and/or modify
9b725ae77Skettenis it under the terms of the GNU General Public License as published by
10b725ae77Skettenis the Free Software Foundation; either version 2 of the License, or
11b725ae77Skettenis (at your option) any later version.
12b725ae77Skettenis
13b725ae77Skettenis This program is distributed in the hope that it will be useful,
14b725ae77Skettenis but WITHOUT ANY WARRANTY; without even the implied warranty of
15b725ae77Skettenis MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16b725ae77Skettenis GNU General Public License for more details.
17b725ae77Skettenis
18b725ae77Skettenis You should have received a copy of the GNU General Public License
19b725ae77Skettenis along with this program; if not, write to the Free Software
20b725ae77Skettenis Foundation, Inc., 59 Temple Place - Suite 330,
21b725ae77Skettenis Boston, MA 02111-1307, USA. */
22b725ae77Skettenis
23b725ae77Skettenis #include "defs.h"
24b725ae77Skettenis #include "frame.h"
25b725ae77Skettenis #include "target.h"
26b725ae77Skettenis #include "value.h"
27b725ae77Skettenis #include "inferior.h" /* for inferior_ptid */
28b725ae77Skettenis #include "regcache.h"
29b725ae77Skettenis #include "gdb_assert.h"
30b725ae77Skettenis #include "gdb_string.h"
31b725ae77Skettenis #include "user-regs.h"
32b725ae77Skettenis #include "gdb_obstack.h"
33b725ae77Skettenis #include "dummy-frame.h"
34b725ae77Skettenis #include "sentinel-frame.h"
35b725ae77Skettenis #include "gdbcore.h"
36b725ae77Skettenis #include "annotate.h"
37b725ae77Skettenis #include "language.h"
38b725ae77Skettenis #include "frame-unwind.h"
39b725ae77Skettenis #include "frame-base.h"
40b725ae77Skettenis #include "command.h"
41b725ae77Skettenis #include "gdbcmd.h"
4263addd46Skettenis #include "observer.h"
4363addd46Skettenis #include "objfiles.h"
4463addd46Skettenis
4563addd46Skettenis static struct frame_info *get_prev_frame_1 (struct frame_info *this_frame);
46b725ae77Skettenis
47b725ae77Skettenis /* We keep a cache of stack frames, each of which is a "struct
48b725ae77Skettenis frame_info". The innermost one gets allocated (in
49b725ae77Skettenis wait_for_inferior) each time the inferior stops; current_frame
50b725ae77Skettenis points to it. Additional frames get allocated (in get_prev_frame)
51b725ae77Skettenis as needed, and are chained through the next and prev fields. Any
52b725ae77Skettenis time that the frame cache becomes invalid (most notably when we
53b725ae77Skettenis execute something, but also if we change how we interpret the
54b725ae77Skettenis frames (e.g. "set heuristic-fence-post" in mips-tdep.c, or anything
55b725ae77Skettenis which reads new symbols)), we should call reinit_frame_cache. */
56b725ae77Skettenis
57b725ae77Skettenis struct frame_info
58b725ae77Skettenis {
59b725ae77Skettenis /* Level of this frame. The inner-most (youngest) frame is at level
60b725ae77Skettenis 0. As you move towards the outer-most (oldest) frame, the level
61b725ae77Skettenis increases. This is a cached value. It could just as easily be
62b725ae77Skettenis computed by counting back from the selected frame to the inner
63b725ae77Skettenis most frame. */
6463addd46Skettenis /* NOTE: cagney/2002-04-05: Perhaps a level of ``-1'' should be
65b725ae77Skettenis reserved to indicate a bogus frame - one that has been created
66b725ae77Skettenis just to keep GDB happy (GDB always needs a frame). For the
67b725ae77Skettenis moment leave this as speculation. */
68b725ae77Skettenis int level;
69b725ae77Skettenis
70b725ae77Skettenis /* The frame's low-level unwinder and corresponding cache. The
71b725ae77Skettenis low-level unwinder is responsible for unwinding register values
72b725ae77Skettenis for the previous frame. The low-level unwind methods are
7363addd46Skettenis selected based on the presence, or otherwise, of register unwind
74b725ae77Skettenis information such as CFI. */
75b725ae77Skettenis void *prologue_cache;
76b725ae77Skettenis const struct frame_unwind *unwind;
77b725ae77Skettenis
78b725ae77Skettenis /* Cached copy of the previous frame's resume address. */
79b725ae77Skettenis struct {
80b725ae77Skettenis int p;
81b725ae77Skettenis CORE_ADDR value;
82b725ae77Skettenis } prev_pc;
83b725ae77Skettenis
84b725ae77Skettenis /* Cached copy of the previous frame's function address. */
85b725ae77Skettenis struct
86b725ae77Skettenis {
87b725ae77Skettenis CORE_ADDR addr;
88b725ae77Skettenis int p;
89b725ae77Skettenis } prev_func;
90b725ae77Skettenis
91b725ae77Skettenis /* This frame's ID. */
92b725ae77Skettenis struct
93b725ae77Skettenis {
94b725ae77Skettenis int p;
95b725ae77Skettenis struct frame_id value;
96b725ae77Skettenis } this_id;
97b725ae77Skettenis
98b725ae77Skettenis /* The frame's high-level base methods, and corresponding cache.
99b725ae77Skettenis The high level base methods are selected based on the frame's
100b725ae77Skettenis debug info. */
101b725ae77Skettenis const struct frame_base *base;
102b725ae77Skettenis void *base_cache;
103b725ae77Skettenis
104b725ae77Skettenis /* Pointers to the next (down, inner, younger) and previous (up,
105b725ae77Skettenis outer, older) frame_info's in the frame cache. */
106b725ae77Skettenis struct frame_info *next; /* down, inner, younger */
107b725ae77Skettenis int prev_p;
108b725ae77Skettenis struct frame_info *prev; /* up, outer, older */
109b725ae77Skettenis };
110b725ae77Skettenis
111b725ae77Skettenis /* Flag to control debugging. */
112b725ae77Skettenis
113b725ae77Skettenis static int frame_debug;
114b725ae77Skettenis
115b725ae77Skettenis /* Flag to indicate whether backtraces should stop at main et.al. */
116b725ae77Skettenis
117b725ae77Skettenis static int backtrace_past_main;
118b725ae77Skettenis static unsigned int backtrace_limit = UINT_MAX;
119b725ae77Skettenis
12063addd46Skettenis static void
fprint_field(struct ui_file * file,const char * name,int p,CORE_ADDR addr)12163addd46Skettenis fprint_field (struct ui_file *file, const char *name, int p, CORE_ADDR addr)
12263addd46Skettenis {
12363addd46Skettenis if (p)
12463addd46Skettenis fprintf_unfiltered (file, "%s=0x%s", name, paddr_nz (addr));
12563addd46Skettenis else
12663addd46Skettenis fprintf_unfiltered (file, "!%s", name);
12763addd46Skettenis }
128b725ae77Skettenis
129b725ae77Skettenis void
fprint_frame_id(struct ui_file * file,struct frame_id id)130b725ae77Skettenis fprint_frame_id (struct ui_file *file, struct frame_id id)
131b725ae77Skettenis {
13263addd46Skettenis fprintf_unfiltered (file, "{");
13363addd46Skettenis fprint_field (file, "stack", id.stack_addr_p, id.stack_addr);
13463addd46Skettenis fprintf_unfiltered (file, ",");
13563addd46Skettenis fprint_field (file, "code", id.code_addr_p, id.code_addr);
13663addd46Skettenis fprintf_unfiltered (file, ",");
13763addd46Skettenis fprint_field (file, "special", id.special_addr_p, id.special_addr);
13863addd46Skettenis fprintf_unfiltered (file, "}");
139b725ae77Skettenis }
140b725ae77Skettenis
141b725ae77Skettenis static void
fprint_frame_type(struct ui_file * file,enum frame_type type)142b725ae77Skettenis fprint_frame_type (struct ui_file *file, enum frame_type type)
143b725ae77Skettenis {
144b725ae77Skettenis switch (type)
145b725ae77Skettenis {
146b725ae77Skettenis case NORMAL_FRAME:
147b725ae77Skettenis fprintf_unfiltered (file, "NORMAL_FRAME");
148b725ae77Skettenis return;
149b725ae77Skettenis case DUMMY_FRAME:
150b725ae77Skettenis fprintf_unfiltered (file, "DUMMY_FRAME");
151b725ae77Skettenis return;
152b725ae77Skettenis case SIGTRAMP_FRAME:
153b725ae77Skettenis fprintf_unfiltered (file, "SIGTRAMP_FRAME");
154b725ae77Skettenis return;
155b725ae77Skettenis default:
156b725ae77Skettenis fprintf_unfiltered (file, "<unknown type>");
157b725ae77Skettenis return;
158b725ae77Skettenis };
159b725ae77Skettenis }
160b725ae77Skettenis
161b725ae77Skettenis static void
fprint_frame(struct ui_file * file,struct frame_info * fi)162b725ae77Skettenis fprint_frame (struct ui_file *file, struct frame_info *fi)
163b725ae77Skettenis {
164b725ae77Skettenis if (fi == NULL)
165b725ae77Skettenis {
166b725ae77Skettenis fprintf_unfiltered (file, "<NULL frame>");
167b725ae77Skettenis return;
168b725ae77Skettenis }
169b725ae77Skettenis fprintf_unfiltered (file, "{");
170b725ae77Skettenis fprintf_unfiltered (file, "level=%d", fi->level);
171b725ae77Skettenis fprintf_unfiltered (file, ",");
172b725ae77Skettenis fprintf_unfiltered (file, "type=");
17363addd46Skettenis if (fi->unwind != NULL)
17463addd46Skettenis fprint_frame_type (file, fi->unwind->type);
17563addd46Skettenis else
17663addd46Skettenis fprintf_unfiltered (file, "<unknown>");
177b725ae77Skettenis fprintf_unfiltered (file, ",");
178b725ae77Skettenis fprintf_unfiltered (file, "unwind=");
179b725ae77Skettenis if (fi->unwind != NULL)
180b725ae77Skettenis gdb_print_host_address (fi->unwind, file);
181b725ae77Skettenis else
182b725ae77Skettenis fprintf_unfiltered (file, "<unknown>");
183b725ae77Skettenis fprintf_unfiltered (file, ",");
184b725ae77Skettenis fprintf_unfiltered (file, "pc=");
185b725ae77Skettenis if (fi->next != NULL && fi->next->prev_pc.p)
186b725ae77Skettenis fprintf_unfiltered (file, "0x%s", paddr_nz (fi->next->prev_pc.value));
187b725ae77Skettenis else
188b725ae77Skettenis fprintf_unfiltered (file, "<unknown>");
189b725ae77Skettenis fprintf_unfiltered (file, ",");
190b725ae77Skettenis fprintf_unfiltered (file, "id=");
191b725ae77Skettenis if (fi->this_id.p)
192b725ae77Skettenis fprint_frame_id (file, fi->this_id.value);
193b725ae77Skettenis else
194b725ae77Skettenis fprintf_unfiltered (file, "<unknown>");
195b725ae77Skettenis fprintf_unfiltered (file, ",");
196b725ae77Skettenis fprintf_unfiltered (file, "func=");
197b725ae77Skettenis if (fi->next != NULL && fi->next->prev_func.p)
198b725ae77Skettenis fprintf_unfiltered (file, "0x%s", paddr_nz (fi->next->prev_func.addr));
199b725ae77Skettenis else
200b725ae77Skettenis fprintf_unfiltered (file, "<unknown>");
201b725ae77Skettenis fprintf_unfiltered (file, "}");
202b725ae77Skettenis }
203b725ae77Skettenis
204b725ae77Skettenis /* Return a frame uniq ID that can be used to, later, re-find the
205b725ae77Skettenis frame. */
206b725ae77Skettenis
207b725ae77Skettenis struct frame_id
get_frame_id(struct frame_info * fi)208b725ae77Skettenis get_frame_id (struct frame_info *fi)
209b725ae77Skettenis {
210b725ae77Skettenis if (fi == NULL)
211b725ae77Skettenis {
212b725ae77Skettenis return null_frame_id;
213b725ae77Skettenis }
214b725ae77Skettenis if (!fi->this_id.p)
215b725ae77Skettenis {
216b725ae77Skettenis if (frame_debug)
217b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "{ get_frame_id (fi=%d) ",
218b725ae77Skettenis fi->level);
219b725ae77Skettenis /* Find the unwinder. */
220b725ae77Skettenis if (fi->unwind == NULL)
22163addd46Skettenis fi->unwind = frame_unwind_find_by_frame (fi->next,
22263addd46Skettenis &fi->prologue_cache);
223b725ae77Skettenis /* Find THIS frame's ID. */
224b725ae77Skettenis fi->unwind->this_id (fi->next, &fi->prologue_cache, &fi->this_id.value);
225b725ae77Skettenis fi->this_id.p = 1;
226b725ae77Skettenis if (frame_debug)
227b725ae77Skettenis {
228b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "-> ");
229b725ae77Skettenis fprint_frame_id (gdb_stdlog, fi->this_id.value);
230b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " }\n");
231b725ae77Skettenis }
232b725ae77Skettenis }
233b725ae77Skettenis return fi->this_id.value;
234b725ae77Skettenis }
235b725ae77Skettenis
23663addd46Skettenis struct frame_id
frame_unwind_id(struct frame_info * next_frame)23763addd46Skettenis frame_unwind_id (struct frame_info *next_frame)
23863addd46Skettenis {
23963addd46Skettenis /* Use prev_frame, and not get_prev_frame. The latter will truncate
24063addd46Skettenis the frame chain, leading to this function unintentionally
24163addd46Skettenis returning a null_frame_id (e.g., when a caller requests the frame
24263addd46Skettenis ID of "main()"s caller. */
24363addd46Skettenis return get_frame_id (get_prev_frame_1 (next_frame));
24463addd46Skettenis }
24563addd46Skettenis
246b725ae77Skettenis const struct frame_id null_frame_id; /* All zeros. */
247b725ae77Skettenis
248b725ae77Skettenis struct frame_id
frame_id_build_special(CORE_ADDR stack_addr,CORE_ADDR code_addr,CORE_ADDR special_addr)249b725ae77Skettenis frame_id_build_special (CORE_ADDR stack_addr, CORE_ADDR code_addr,
250b725ae77Skettenis CORE_ADDR special_addr)
251b725ae77Skettenis {
25263addd46Skettenis struct frame_id id = null_frame_id;
253b725ae77Skettenis id.stack_addr = stack_addr;
25463addd46Skettenis id.stack_addr_p = 1;
255b725ae77Skettenis id.code_addr = code_addr;
25663addd46Skettenis id.code_addr_p = 1;
257b725ae77Skettenis id.special_addr = special_addr;
25863addd46Skettenis id.special_addr_p = 1;
259b725ae77Skettenis return id;
260b725ae77Skettenis }
261b725ae77Skettenis
262b725ae77Skettenis struct frame_id
frame_id_build(CORE_ADDR stack_addr,CORE_ADDR code_addr)263b725ae77Skettenis frame_id_build (CORE_ADDR stack_addr, CORE_ADDR code_addr)
264b725ae77Skettenis {
26563addd46Skettenis struct frame_id id = null_frame_id;
26663addd46Skettenis id.stack_addr = stack_addr;
26763addd46Skettenis id.stack_addr_p = 1;
26863addd46Skettenis id.code_addr = code_addr;
26963addd46Skettenis id.code_addr_p = 1;
27063addd46Skettenis return id;
27163addd46Skettenis }
27263addd46Skettenis
27363addd46Skettenis struct frame_id
frame_id_build_wild(CORE_ADDR stack_addr)27463addd46Skettenis frame_id_build_wild (CORE_ADDR stack_addr)
27563addd46Skettenis {
27663addd46Skettenis struct frame_id id = null_frame_id;
27763addd46Skettenis id.stack_addr = stack_addr;
27863addd46Skettenis id.stack_addr_p = 1;
27963addd46Skettenis return id;
280b725ae77Skettenis }
281b725ae77Skettenis
282b725ae77Skettenis int
frame_id_p(struct frame_id l)283b725ae77Skettenis frame_id_p (struct frame_id l)
284b725ae77Skettenis {
285b725ae77Skettenis int p;
28663addd46Skettenis /* The frame is valid iff it has a valid stack address. */
28763addd46Skettenis p = l.stack_addr_p;
288b725ae77Skettenis if (frame_debug)
289b725ae77Skettenis {
290b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "{ frame_id_p (l=");
291b725ae77Skettenis fprint_frame_id (gdb_stdlog, l);
292b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", p);
293b725ae77Skettenis }
294b725ae77Skettenis return p;
295b725ae77Skettenis }
296b725ae77Skettenis
297b725ae77Skettenis int
frame_id_eq(struct frame_id l,struct frame_id r)298b725ae77Skettenis frame_id_eq (struct frame_id l, struct frame_id r)
299b725ae77Skettenis {
300b725ae77Skettenis int eq;
30163addd46Skettenis if (!l.stack_addr_p || !r.stack_addr_p)
30263addd46Skettenis /* Like a NaN, if either ID is invalid, the result is false.
30363addd46Skettenis Note that a frame ID is invalid iff it is the null frame ID. */
304b725ae77Skettenis eq = 0;
305b725ae77Skettenis else if (l.stack_addr != r.stack_addr)
306b725ae77Skettenis /* If .stack addresses are different, the frames are different. */
307b725ae77Skettenis eq = 0;
30863addd46Skettenis else if (!l.code_addr_p || !r.code_addr_p)
30963addd46Skettenis /* An invalid code addr is a wild card, always succeed. */
310b725ae77Skettenis eq = 1;
311b725ae77Skettenis else if (l.code_addr != r.code_addr)
312b725ae77Skettenis /* If .code addresses are different, the frames are different. */
313b725ae77Skettenis eq = 0;
31463addd46Skettenis else if (!l.special_addr_p || !r.special_addr_p)
31563addd46Skettenis /* An invalid special addr is a wild card (or unused), always succeed. */
316b725ae77Skettenis eq = 1;
317b725ae77Skettenis else if (l.special_addr == r.special_addr)
318b725ae77Skettenis /* Frames are equal. */
319b725ae77Skettenis eq = 1;
320b725ae77Skettenis else
321b725ae77Skettenis /* No luck. */
322b725ae77Skettenis eq = 0;
323b725ae77Skettenis if (frame_debug)
324b725ae77Skettenis {
325b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "{ frame_id_eq (l=");
326b725ae77Skettenis fprint_frame_id (gdb_stdlog, l);
327b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, ",r=");
328b725ae77Skettenis fprint_frame_id (gdb_stdlog, r);
329b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", eq);
330b725ae77Skettenis }
331b725ae77Skettenis return eq;
332b725ae77Skettenis }
333b725ae77Skettenis
334b725ae77Skettenis int
frame_id_inner(struct frame_id l,struct frame_id r)335b725ae77Skettenis frame_id_inner (struct frame_id l, struct frame_id r)
336b725ae77Skettenis {
337b725ae77Skettenis int inner;
33863addd46Skettenis if (!l.stack_addr_p || !r.stack_addr_p)
339b725ae77Skettenis /* Like NaN, any operation involving an invalid ID always fails. */
340b725ae77Skettenis inner = 0;
341b725ae77Skettenis else
342b725ae77Skettenis /* Only return non-zero when strictly inner than. Note that, per
343b725ae77Skettenis comment in "frame.h", there is some fuzz here. Frameless
344b725ae77Skettenis functions are not strictly inner than (same .stack but
345b725ae77Skettenis different .code and/or .special address). */
346b725ae77Skettenis inner = INNER_THAN (l.stack_addr, r.stack_addr);
347b725ae77Skettenis if (frame_debug)
348b725ae77Skettenis {
349b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "{ frame_id_inner (l=");
350b725ae77Skettenis fprint_frame_id (gdb_stdlog, l);
351b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, ",r=");
352b725ae77Skettenis fprint_frame_id (gdb_stdlog, r);
353b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", inner);
354b725ae77Skettenis }
355b725ae77Skettenis return inner;
356b725ae77Skettenis }
357b725ae77Skettenis
358b725ae77Skettenis struct frame_info *
frame_find_by_id(struct frame_id id)359b725ae77Skettenis frame_find_by_id (struct frame_id id)
360b725ae77Skettenis {
361b725ae77Skettenis struct frame_info *frame;
362b725ae77Skettenis
363b725ae77Skettenis /* ZERO denotes the null frame, let the caller decide what to do
364b725ae77Skettenis about it. Should it instead return get_current_frame()? */
365b725ae77Skettenis if (!frame_id_p (id))
366b725ae77Skettenis return NULL;
367b725ae77Skettenis
368b725ae77Skettenis for (frame = get_current_frame ();
369b725ae77Skettenis frame != NULL;
370b725ae77Skettenis frame = get_prev_frame (frame))
371b725ae77Skettenis {
372b725ae77Skettenis struct frame_id this = get_frame_id (frame);
373b725ae77Skettenis if (frame_id_eq (id, this))
374b725ae77Skettenis /* An exact match. */
375b725ae77Skettenis return frame;
376b725ae77Skettenis if (frame_id_inner (id, this))
377b725ae77Skettenis /* Gone to far. */
378b725ae77Skettenis return NULL;
37963addd46Skettenis /* Either we're not yet gone far enough out along the frame
38063addd46Skettenis chain (inner(this,id)), or we're comparing frameless functions
381b725ae77Skettenis (same .base, different .func, no test available). Struggle
382b725ae77Skettenis on until we've definitly gone to far. */
383b725ae77Skettenis }
384b725ae77Skettenis return NULL;
385b725ae77Skettenis }
386b725ae77Skettenis
387b725ae77Skettenis CORE_ADDR
frame_pc_unwind(struct frame_info * this_frame)388b725ae77Skettenis frame_pc_unwind (struct frame_info *this_frame)
389b725ae77Skettenis {
390b725ae77Skettenis if (!this_frame->prev_pc.p)
391b725ae77Skettenis {
392b725ae77Skettenis CORE_ADDR pc;
393b725ae77Skettenis if (gdbarch_unwind_pc_p (current_gdbarch))
394b725ae77Skettenis {
395b725ae77Skettenis /* The right way. The `pure' way. The one true way. This
396b725ae77Skettenis method depends solely on the register-unwind code to
397b725ae77Skettenis determine the value of registers in THIS frame, and hence
398b725ae77Skettenis the value of this frame's PC (resume address). A typical
399b725ae77Skettenis implementation is no more than:
400b725ae77Skettenis
401b725ae77Skettenis frame_unwind_register (this_frame, ISA_PC_REGNUM, buf);
402b725ae77Skettenis return extract_unsigned_integer (buf, size of ISA_PC_REGNUM);
403b725ae77Skettenis
404b725ae77Skettenis Note: this method is very heavily dependent on a correct
405b725ae77Skettenis register-unwind implementation, it pays to fix that
406b725ae77Skettenis method first; this method is frame type agnostic, since
407b725ae77Skettenis it only deals with register values, it works with any
408b725ae77Skettenis frame. This is all in stark contrast to the old
409b725ae77Skettenis FRAME_SAVED_PC which would try to directly handle all the
410b725ae77Skettenis different ways that a PC could be unwound. */
411b725ae77Skettenis pc = gdbarch_unwind_pc (current_gdbarch, this_frame);
412b725ae77Skettenis }
413b725ae77Skettenis else if (this_frame->level < 0)
414b725ae77Skettenis {
41563addd46Skettenis /* FIXME: cagney/2003-03-06: Old code and a sentinel
416b725ae77Skettenis frame. Do like was always done. Fetch the PC's value
41763addd46Skettenis directly from the global registers array (via read_pc).
418b725ae77Skettenis This assumes that this frame belongs to the current
419b725ae77Skettenis global register cache. The assumption is dangerous. */
420b725ae77Skettenis pc = read_pc ();
421b725ae77Skettenis }
422b725ae77Skettenis else
423b725ae77Skettenis internal_error (__FILE__, __LINE__, "No gdbarch_unwind_pc method");
424b725ae77Skettenis this_frame->prev_pc.value = pc;
425b725ae77Skettenis this_frame->prev_pc.p = 1;
426b725ae77Skettenis if (frame_debug)
427b725ae77Skettenis fprintf_unfiltered (gdb_stdlog,
428b725ae77Skettenis "{ frame_pc_unwind (this_frame=%d) -> 0x%s }\n",
429b725ae77Skettenis this_frame->level,
430b725ae77Skettenis paddr_nz (this_frame->prev_pc.value));
431b725ae77Skettenis }
432b725ae77Skettenis return this_frame->prev_pc.value;
433b725ae77Skettenis }
434b725ae77Skettenis
435b725ae77Skettenis CORE_ADDR
frame_func_unwind(struct frame_info * fi)436b725ae77Skettenis frame_func_unwind (struct frame_info *fi)
437b725ae77Skettenis {
438b725ae77Skettenis if (!fi->prev_func.p)
439b725ae77Skettenis {
440b725ae77Skettenis /* Make certain that this, and not the adjacent, function is
441b725ae77Skettenis found. */
442b725ae77Skettenis CORE_ADDR addr_in_block = frame_unwind_address_in_block (fi);
443b725ae77Skettenis fi->prev_func.p = 1;
444b725ae77Skettenis fi->prev_func.addr = get_pc_function_start (addr_in_block);
445b725ae77Skettenis if (frame_debug)
446b725ae77Skettenis fprintf_unfiltered (gdb_stdlog,
447b725ae77Skettenis "{ frame_func_unwind (fi=%d) -> 0x%s }\n",
448b725ae77Skettenis fi->level, paddr_nz (fi->prev_func.addr));
449b725ae77Skettenis }
450b725ae77Skettenis return fi->prev_func.addr;
451b725ae77Skettenis }
452b725ae77Skettenis
453b725ae77Skettenis CORE_ADDR
get_frame_func(struct frame_info * fi)454b725ae77Skettenis get_frame_func (struct frame_info *fi)
455b725ae77Skettenis {
456b725ae77Skettenis return frame_func_unwind (fi->next);
457b725ae77Skettenis }
458b725ae77Skettenis
459b725ae77Skettenis static int
do_frame_register_read(void * src,int regnum,void * buf)46063addd46Skettenis do_frame_register_read (void *src, int regnum, void *buf)
461b725ae77Skettenis {
46263addd46Skettenis frame_register_read (src, regnum, buf);
463b725ae77Skettenis return 1;
464b725ae77Skettenis }
465b725ae77Skettenis
46663addd46Skettenis struct regcache *
frame_save_as_regcache(struct frame_info * this_frame)46763addd46Skettenis frame_save_as_regcache (struct frame_info *this_frame)
46863addd46Skettenis {
46963addd46Skettenis struct regcache *regcache = regcache_xmalloc (current_gdbarch);
47063addd46Skettenis struct cleanup *cleanups = make_cleanup_regcache_xfree (regcache);
47163addd46Skettenis regcache_save (regcache, do_frame_register_read, this_frame);
47263addd46Skettenis discard_cleanups (cleanups);
47363addd46Skettenis return regcache;
47463addd46Skettenis }
47563addd46Skettenis
476b725ae77Skettenis void
frame_pop(struct frame_info * this_frame)477b725ae77Skettenis frame_pop (struct frame_info *this_frame)
478b725ae77Skettenis {
47963addd46Skettenis /* Make a copy of all the register values unwound from this frame.
48063addd46Skettenis Save them in a scratch buffer so that there isn't a race between
48163addd46Skettenis trying to extract the old values from the current_regcache while
48263addd46Skettenis at the same time writing new values into that same cache. */
48363addd46Skettenis struct regcache *scratch
48463addd46Skettenis = frame_save_as_regcache (get_prev_frame_1 (this_frame));
485b725ae77Skettenis struct cleanup *cleanups = make_cleanup_regcache_xfree (scratch);
48663addd46Skettenis
487b725ae77Skettenis /* FIXME: cagney/2003-03-16: It should be possible to tell the
48863addd46Skettenis target's register cache that it is about to be hit with a burst
48963addd46Skettenis register transfer and that the sequence of register writes should
49063addd46Skettenis be batched. The pair target_prepare_to_store() and
49163addd46Skettenis target_store_registers() kind of suggest this functionality.
49263addd46Skettenis Unfortunately, they don't implement it. Their lack of a formal
49363addd46Skettenis definition can lead to targets writing back bogus values
49463addd46Skettenis (arguably a bug in the target code mind). */
495b725ae77Skettenis /* Now copy those saved registers into the current regcache.
496b725ae77Skettenis Here, regcache_cpy() calls regcache_restore(). */
497b725ae77Skettenis regcache_cpy (current_regcache, scratch);
498b725ae77Skettenis do_cleanups (cleanups);
49963addd46Skettenis
500b725ae77Skettenis /* We've made right mess of GDB's local state, just discard
501b725ae77Skettenis everything. */
502b725ae77Skettenis flush_cached_frames ();
503b725ae77Skettenis }
504b725ae77Skettenis
505b725ae77Skettenis void
frame_register_unwind(struct frame_info * frame,int regnum,int * optimizedp,enum lval_type * lvalp,CORE_ADDR * addrp,int * realnump,void * bufferp)506b725ae77Skettenis frame_register_unwind (struct frame_info *frame, int regnum,
507b725ae77Skettenis int *optimizedp, enum lval_type *lvalp,
508b725ae77Skettenis CORE_ADDR *addrp, int *realnump, void *bufferp)
509b725ae77Skettenis {
510b725ae77Skettenis struct frame_unwind_cache *cache;
511b725ae77Skettenis
512b725ae77Skettenis if (frame_debug)
513b725ae77Skettenis {
514b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "\
515b725ae77Skettenis { frame_register_unwind (frame=%d,regnum=%d(%s),...) ",
516b725ae77Skettenis frame->level, regnum,
517b725ae77Skettenis frame_map_regnum_to_name (frame, regnum));
518b725ae77Skettenis }
519b725ae77Skettenis
520b725ae77Skettenis /* Require all but BUFFERP to be valid. A NULL BUFFERP indicates
521b725ae77Skettenis that the value proper does not need to be fetched. */
522b725ae77Skettenis gdb_assert (optimizedp != NULL);
523b725ae77Skettenis gdb_assert (lvalp != NULL);
524b725ae77Skettenis gdb_assert (addrp != NULL);
525b725ae77Skettenis gdb_assert (realnump != NULL);
526b725ae77Skettenis /* gdb_assert (bufferp != NULL); */
527b725ae77Skettenis
528b725ae77Skettenis /* NOTE: cagney/2002-11-27: A program trying to unwind a NULL frame
529b725ae77Skettenis is broken. There is always a frame. If there, for some reason,
53063addd46Skettenis isn't a frame, there is some pretty busted code as it should have
531b725ae77Skettenis detected the problem before calling here. */
532b725ae77Skettenis gdb_assert (frame != NULL);
533b725ae77Skettenis
534b725ae77Skettenis /* Find the unwinder. */
535b725ae77Skettenis if (frame->unwind == NULL)
53663addd46Skettenis frame->unwind = frame_unwind_find_by_frame (frame->next,
53763addd46Skettenis &frame->prologue_cache);
538b725ae77Skettenis
539b725ae77Skettenis /* Ask this frame to unwind its register. See comment in
54063addd46Skettenis "frame-unwind.h" for why NEXT frame and this unwind cache are
541b725ae77Skettenis passed in. */
542b725ae77Skettenis frame->unwind->prev_register (frame->next, &frame->prologue_cache, regnum,
543b725ae77Skettenis optimizedp, lvalp, addrp, realnump, bufferp);
544b725ae77Skettenis
545b725ae77Skettenis if (frame_debug)
546b725ae77Skettenis {
547b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "->");
548b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " *optimizedp=%d", (*optimizedp));
549b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " *lvalp=%d", (int) (*lvalp));
550b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " *addrp=0x%s", paddr_nz ((*addrp)));
551b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " *bufferp=");
552b725ae77Skettenis if (bufferp == NULL)
553b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "<NULL>");
554b725ae77Skettenis else
555b725ae77Skettenis {
556b725ae77Skettenis int i;
557b725ae77Skettenis const unsigned char *buf = bufferp;
558b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "[");
559b725ae77Skettenis for (i = 0; i < register_size (current_gdbarch, regnum); i++)
560b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
561b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "]");
562b725ae77Skettenis }
563b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " }\n");
564b725ae77Skettenis }
565b725ae77Skettenis }
566b725ae77Skettenis
567b725ae77Skettenis void
frame_register(struct frame_info * frame,int regnum,int * optimizedp,enum lval_type * lvalp,CORE_ADDR * addrp,int * realnump,void * bufferp)568b725ae77Skettenis frame_register (struct frame_info *frame, int regnum,
569b725ae77Skettenis int *optimizedp, enum lval_type *lvalp,
570b725ae77Skettenis CORE_ADDR *addrp, int *realnump, void *bufferp)
571b725ae77Skettenis {
572b725ae77Skettenis /* Require all but BUFFERP to be valid. A NULL BUFFERP indicates
573b725ae77Skettenis that the value proper does not need to be fetched. */
574b725ae77Skettenis gdb_assert (optimizedp != NULL);
575b725ae77Skettenis gdb_assert (lvalp != NULL);
576b725ae77Skettenis gdb_assert (addrp != NULL);
577b725ae77Skettenis gdb_assert (realnump != NULL);
578b725ae77Skettenis /* gdb_assert (bufferp != NULL); */
579b725ae77Skettenis
580b725ae77Skettenis /* Obtain the register value by unwinding the register from the next
581b725ae77Skettenis (more inner frame). */
582b725ae77Skettenis gdb_assert (frame != NULL && frame->next != NULL);
583b725ae77Skettenis frame_register_unwind (frame->next, regnum, optimizedp, lvalp, addrp,
584b725ae77Skettenis realnump, bufferp);
585b725ae77Skettenis }
586b725ae77Skettenis
587b725ae77Skettenis void
frame_unwind_register(struct frame_info * frame,int regnum,void * buf)588b725ae77Skettenis frame_unwind_register (struct frame_info *frame, int regnum, void *buf)
589b725ae77Skettenis {
590b725ae77Skettenis int optimized;
591b725ae77Skettenis CORE_ADDR addr;
592b725ae77Skettenis int realnum;
593b725ae77Skettenis enum lval_type lval;
594b725ae77Skettenis frame_register_unwind (frame, regnum, &optimized, &lval, &addr,
595b725ae77Skettenis &realnum, buf);
596b725ae77Skettenis }
597b725ae77Skettenis
598b725ae77Skettenis void
get_frame_register(struct frame_info * frame,int regnum,void * buf)599b725ae77Skettenis get_frame_register (struct frame_info *frame,
600b725ae77Skettenis int regnum, void *buf)
601b725ae77Skettenis {
602b725ae77Skettenis frame_unwind_register (frame->next, regnum, buf);
603b725ae77Skettenis }
604b725ae77Skettenis
605b725ae77Skettenis LONGEST
frame_unwind_register_signed(struct frame_info * frame,int regnum)606b725ae77Skettenis frame_unwind_register_signed (struct frame_info *frame, int regnum)
607b725ae77Skettenis {
608b725ae77Skettenis char buf[MAX_REGISTER_SIZE];
609b725ae77Skettenis frame_unwind_register (frame, regnum, buf);
61063addd46Skettenis return extract_signed_integer (buf, register_size (get_frame_arch (frame),
61163addd46Skettenis regnum));
612b725ae77Skettenis }
613b725ae77Skettenis
614b725ae77Skettenis LONGEST
get_frame_register_signed(struct frame_info * frame,int regnum)615b725ae77Skettenis get_frame_register_signed (struct frame_info *frame, int regnum)
616b725ae77Skettenis {
617b725ae77Skettenis return frame_unwind_register_signed (frame->next, regnum);
618b725ae77Skettenis }
619b725ae77Skettenis
620b725ae77Skettenis ULONGEST
frame_unwind_register_unsigned(struct frame_info * frame,int regnum)621b725ae77Skettenis frame_unwind_register_unsigned (struct frame_info *frame, int regnum)
622b725ae77Skettenis {
623b725ae77Skettenis char buf[MAX_REGISTER_SIZE];
624b725ae77Skettenis frame_unwind_register (frame, regnum, buf);
62563addd46Skettenis return extract_unsigned_integer (buf, register_size (get_frame_arch (frame),
62663addd46Skettenis regnum));
627b725ae77Skettenis }
628b725ae77Skettenis
629b725ae77Skettenis ULONGEST
get_frame_register_unsigned(struct frame_info * frame,int regnum)630b725ae77Skettenis get_frame_register_unsigned (struct frame_info *frame, int regnum)
631b725ae77Skettenis {
632b725ae77Skettenis return frame_unwind_register_unsigned (frame->next, regnum);
633b725ae77Skettenis }
634b725ae77Skettenis
635b725ae77Skettenis void
frame_unwind_unsigned_register(struct frame_info * frame,int regnum,ULONGEST * val)636b725ae77Skettenis frame_unwind_unsigned_register (struct frame_info *frame, int regnum,
637b725ae77Skettenis ULONGEST *val)
638b725ae77Skettenis {
639b725ae77Skettenis char buf[MAX_REGISTER_SIZE];
640b725ae77Skettenis frame_unwind_register (frame, regnum, buf);
64163addd46Skettenis (*val) = extract_unsigned_integer (buf,
64263addd46Skettenis register_size (get_frame_arch (frame),
64363addd46Skettenis regnum));
644b725ae77Skettenis }
645b725ae77Skettenis
646b725ae77Skettenis void
put_frame_register(struct frame_info * frame,int regnum,const void * buf)647b725ae77Skettenis put_frame_register (struct frame_info *frame, int regnum, const void *buf)
648b725ae77Skettenis {
649b725ae77Skettenis struct gdbarch *gdbarch = get_frame_arch (frame);
650b725ae77Skettenis int realnum;
651b725ae77Skettenis int optim;
652b725ae77Skettenis enum lval_type lval;
653b725ae77Skettenis CORE_ADDR addr;
654b725ae77Skettenis frame_register (frame, regnum, &optim, &lval, &addr, &realnum, NULL);
655b725ae77Skettenis if (optim)
656b725ae77Skettenis error ("Attempt to assign to a value that was optimized out.");
657b725ae77Skettenis switch (lval)
658b725ae77Skettenis {
659b725ae77Skettenis case lval_memory:
660b725ae77Skettenis {
661b725ae77Skettenis /* FIXME: write_memory doesn't yet take constant buffers.
662b725ae77Skettenis Arrrg! */
663b725ae77Skettenis char tmp[MAX_REGISTER_SIZE];
664b725ae77Skettenis memcpy (tmp, buf, register_size (gdbarch, regnum));
665b725ae77Skettenis write_memory (addr, tmp, register_size (gdbarch, regnum));
666b725ae77Skettenis break;
667b725ae77Skettenis }
668b725ae77Skettenis case lval_register:
669b725ae77Skettenis regcache_cooked_write (current_regcache, realnum, buf);
670b725ae77Skettenis break;
671b725ae77Skettenis default:
672b725ae77Skettenis error ("Attempt to assign to an unmodifiable value.");
673b725ae77Skettenis }
674b725ae77Skettenis }
675b725ae77Skettenis
676b725ae77Skettenis /* frame_register_read ()
677b725ae77Skettenis
678b725ae77Skettenis Find and return the value of REGNUM for the specified stack frame.
67963addd46Skettenis The number of bytes copied is REGISTER_SIZE (REGNUM).
680b725ae77Skettenis
681b725ae77Skettenis Returns 0 if the register value could not be found. */
682b725ae77Skettenis
683b725ae77Skettenis int
frame_register_read(struct frame_info * frame,int regnum,void * myaddr)684b725ae77Skettenis frame_register_read (struct frame_info *frame, int regnum, void *myaddr)
685b725ae77Skettenis {
686b725ae77Skettenis int optimized;
687b725ae77Skettenis enum lval_type lval;
688b725ae77Skettenis CORE_ADDR addr;
689b725ae77Skettenis int realnum;
690b725ae77Skettenis frame_register (frame, regnum, &optimized, &lval, &addr, &realnum, myaddr);
691b725ae77Skettenis
69263addd46Skettenis /* FIXME: cagney/2002-05-15: This test is just bogus.
693b725ae77Skettenis
694b725ae77Skettenis It indicates that the target failed to supply a value for a
695b725ae77Skettenis register because it was "not available" at this time. Problem
696b725ae77Skettenis is, the target still has the register and so get saved_register()
697b725ae77Skettenis may be returning a value saved on the stack. */
698b725ae77Skettenis
699b725ae77Skettenis if (register_cached (regnum) < 0)
700b725ae77Skettenis return 0; /* register value not available */
701b725ae77Skettenis
702b725ae77Skettenis return !optimized;
703b725ae77Skettenis }
704b725ae77Skettenis
705b725ae77Skettenis
706b725ae77Skettenis /* Map between a frame register number and its name. A frame register
707b725ae77Skettenis space is a superset of the cooked register space --- it also
708b725ae77Skettenis includes builtin registers. */
709b725ae77Skettenis
710b725ae77Skettenis int
frame_map_name_to_regnum(struct frame_info * frame,const char * name,int len)711b725ae77Skettenis frame_map_name_to_regnum (struct frame_info *frame, const char *name, int len)
712b725ae77Skettenis {
713b725ae77Skettenis return user_reg_map_name_to_regnum (get_frame_arch (frame), name, len);
714b725ae77Skettenis }
715b725ae77Skettenis
716b725ae77Skettenis const char *
frame_map_regnum_to_name(struct frame_info * frame,int regnum)717b725ae77Skettenis frame_map_regnum_to_name (struct frame_info *frame, int regnum)
718b725ae77Skettenis {
719b725ae77Skettenis return user_reg_map_regnum_to_name (get_frame_arch (frame), regnum);
720b725ae77Skettenis }
721b725ae77Skettenis
722b725ae77Skettenis /* Create a sentinel frame. */
723b725ae77Skettenis
724b725ae77Skettenis static struct frame_info *
create_sentinel_frame(struct regcache * regcache)725b725ae77Skettenis create_sentinel_frame (struct regcache *regcache)
726b725ae77Skettenis {
727b725ae77Skettenis struct frame_info *frame = FRAME_OBSTACK_ZALLOC (struct frame_info);
728b725ae77Skettenis frame->level = -1;
729b725ae77Skettenis /* Explicitly initialize the sentinel frame's cache. Provide it
730b725ae77Skettenis with the underlying regcache. In the future additional
731b725ae77Skettenis information, such as the frame's thread will be added. */
732b725ae77Skettenis frame->prologue_cache = sentinel_frame_cache (regcache);
733b725ae77Skettenis /* For the moment there is only one sentinel frame implementation. */
734b725ae77Skettenis frame->unwind = sentinel_frame_unwind;
735b725ae77Skettenis /* Link this frame back to itself. The frame is self referential
736b725ae77Skettenis (the unwound PC is the same as the pc), so make it so. */
737b725ae77Skettenis frame->next = frame;
738b725ae77Skettenis /* Make the sentinel frame's ID valid, but invalid. That way all
739b725ae77Skettenis comparisons with it should fail. */
740b725ae77Skettenis frame->this_id.p = 1;
741b725ae77Skettenis frame->this_id.value = null_frame_id;
742b725ae77Skettenis if (frame_debug)
743b725ae77Skettenis {
744b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "{ create_sentinel_frame (...) -> ");
745b725ae77Skettenis fprint_frame (gdb_stdlog, frame);
746b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " }\n");
747b725ae77Skettenis }
748b725ae77Skettenis return frame;
749b725ae77Skettenis }
750b725ae77Skettenis
751b725ae77Skettenis /* Info about the innermost stack frame (contents of FP register) */
752b725ae77Skettenis
753b725ae77Skettenis static struct frame_info *current_frame;
754b725ae77Skettenis
755b725ae77Skettenis /* Cache for frame addresses already read by gdb. Valid only while
756b725ae77Skettenis inferior is stopped. Control variables for the frame cache should
757b725ae77Skettenis be local to this module. */
758b725ae77Skettenis
759b725ae77Skettenis static struct obstack frame_cache_obstack;
760b725ae77Skettenis
761b725ae77Skettenis void *
frame_obstack_zalloc(unsigned long size)762b725ae77Skettenis frame_obstack_zalloc (unsigned long size)
763b725ae77Skettenis {
764b725ae77Skettenis void *data = obstack_alloc (&frame_cache_obstack, size);
765b725ae77Skettenis memset (data, 0, size);
766b725ae77Skettenis return data;
767b725ae77Skettenis }
768b725ae77Skettenis
769b725ae77Skettenis /* Return the innermost (currently executing) stack frame. This is
770b725ae77Skettenis split into two functions. The function unwind_to_current_frame()
771b725ae77Skettenis is wrapped in catch exceptions so that, even when the unwind of the
772b725ae77Skettenis sentinel frame fails, the function still returns a stack frame. */
773b725ae77Skettenis
774b725ae77Skettenis static int
unwind_to_current_frame(struct ui_out * ui_out,void * args)775b725ae77Skettenis unwind_to_current_frame (struct ui_out *ui_out, void *args)
776b725ae77Skettenis {
777b725ae77Skettenis struct frame_info *frame = get_prev_frame (args);
77863addd46Skettenis /* A sentinel frame can fail to unwind, e.g., because its PC value
779b725ae77Skettenis lands in somewhere like start. */
780b725ae77Skettenis if (frame == NULL)
781b725ae77Skettenis return 1;
782b725ae77Skettenis current_frame = frame;
783b725ae77Skettenis return 0;
784b725ae77Skettenis }
785b725ae77Skettenis
786b725ae77Skettenis struct frame_info *
get_current_frame(void)787b725ae77Skettenis get_current_frame (void)
788b725ae77Skettenis {
789b725ae77Skettenis /* First check, and report, the lack of registers. Having GDB
790b725ae77Skettenis report "No stack!" or "No memory" when the target doesn't even
791b725ae77Skettenis have registers is very confusing. Besides, "printcmd.exp"
792b725ae77Skettenis explicitly checks that ``print $pc'' with no registers prints "No
793b725ae77Skettenis registers". */
794b725ae77Skettenis if (!target_has_registers)
795b725ae77Skettenis error ("No registers.");
796b725ae77Skettenis if (!target_has_stack)
797b725ae77Skettenis error ("No stack.");
798b725ae77Skettenis if (!target_has_memory)
799b725ae77Skettenis error ("No memory.");
800b725ae77Skettenis if (current_frame == NULL)
801b725ae77Skettenis {
802b725ae77Skettenis struct frame_info *sentinel_frame =
803b725ae77Skettenis create_sentinel_frame (current_regcache);
804b725ae77Skettenis if (catch_exceptions (uiout, unwind_to_current_frame, sentinel_frame,
805b725ae77Skettenis NULL, RETURN_MASK_ERROR) != 0)
806b725ae77Skettenis {
807b725ae77Skettenis /* Oops! Fake a current frame? Is this useful? It has a PC
808b725ae77Skettenis of zero, for instance. */
809b725ae77Skettenis current_frame = sentinel_frame;
810b725ae77Skettenis }
811b725ae77Skettenis }
812b725ae77Skettenis return current_frame;
813b725ae77Skettenis }
814b725ae77Skettenis
815b725ae77Skettenis /* The "selected" stack frame is used by default for local and arg
816b725ae77Skettenis access. May be zero, for no selected frame. */
817b725ae77Skettenis
818b725ae77Skettenis struct frame_info *deprecated_selected_frame;
819b725ae77Skettenis
82063addd46Skettenis /* Return the selected frame. Always non-NULL (unless there isn't an
821b725ae77Skettenis inferior sufficient for creating a frame) in which case an error is
822b725ae77Skettenis thrown. */
823b725ae77Skettenis
824b725ae77Skettenis struct frame_info *
get_selected_frame(void)825b725ae77Skettenis get_selected_frame (void)
826b725ae77Skettenis {
827b725ae77Skettenis if (deprecated_selected_frame == NULL)
828b725ae77Skettenis /* Hey! Don't trust this. It should really be re-finding the
829b725ae77Skettenis last selected frame of the currently selected thread. This,
830b725ae77Skettenis though, is better than nothing. */
831b725ae77Skettenis select_frame (get_current_frame ());
832b725ae77Skettenis /* There is always a frame. */
833b725ae77Skettenis gdb_assert (deprecated_selected_frame != NULL);
834b725ae77Skettenis return deprecated_selected_frame;
835b725ae77Skettenis }
836b725ae77Skettenis
83763addd46Skettenis /* This is a variant of get_selected_frame() which can be called when
838b725ae77Skettenis the inferior does not have a frame; in that case it will return
839b725ae77Skettenis NULL instead of calling error(). */
840b725ae77Skettenis
841b725ae77Skettenis struct frame_info *
deprecated_safe_get_selected_frame(void)842b725ae77Skettenis deprecated_safe_get_selected_frame (void)
843b725ae77Skettenis {
844b725ae77Skettenis if (!target_has_registers || !target_has_stack || !target_has_memory)
845b725ae77Skettenis return NULL;
846b725ae77Skettenis return get_selected_frame ();
847b725ae77Skettenis }
848b725ae77Skettenis
849b725ae77Skettenis /* Select frame FI (or NULL - to invalidate the current frame). */
850b725ae77Skettenis
851b725ae77Skettenis void
select_frame(struct frame_info * fi)852b725ae77Skettenis select_frame (struct frame_info *fi)
853b725ae77Skettenis {
854b725ae77Skettenis struct symtab *s;
855b725ae77Skettenis
856b725ae77Skettenis deprecated_selected_frame = fi;
85763addd46Skettenis /* NOTE: cagney/2002-05-04: FI can be NULL. This occurs when the
858b725ae77Skettenis frame is being invalidated. */
85963addd46Skettenis if (deprecated_selected_frame_level_changed_hook)
86063addd46Skettenis deprecated_selected_frame_level_changed_hook (frame_relative_level (fi));
861b725ae77Skettenis
862b725ae77Skettenis /* FIXME: kseitz/2002-08-28: It would be nice to call
86363addd46Skettenis selected_frame_level_changed_event() right here, but due to limitations
864b725ae77Skettenis in the current interfaces, we would end up flooding UIs with events
86563addd46Skettenis because select_frame() is used extensively internally.
866b725ae77Skettenis
867b725ae77Skettenis Once we have frame-parameterized frame (and frame-related) commands,
868b725ae77Skettenis the event notification can be moved here, since this function will only
86963addd46Skettenis be called when the user's selected frame is being changed. */
870b725ae77Skettenis
871b725ae77Skettenis /* Ensure that symbols for this frame are read in. Also, determine the
872b725ae77Skettenis source language of this frame, and switch to it if desired. */
873b725ae77Skettenis if (fi)
874b725ae77Skettenis {
875b725ae77Skettenis /* We retrieve the frame's symtab by using the frame PC. However
87663addd46Skettenis we cannot use the frame PC as-is, because it usually points to
877b725ae77Skettenis the instruction following the "call", which is sometimes the
878b725ae77Skettenis first instruction of another function. So we rely on
879b725ae77Skettenis get_frame_address_in_block() which provides us with a PC which
880b725ae77Skettenis is guaranteed to be inside the frame's code block. */
881b725ae77Skettenis s = find_pc_symtab (get_frame_address_in_block (fi));
882b725ae77Skettenis if (s
883b725ae77Skettenis && s->language != current_language->la_language
884b725ae77Skettenis && s->language != language_unknown
885b725ae77Skettenis && language_mode == language_mode_auto)
886b725ae77Skettenis {
887b725ae77Skettenis set_language (s->language);
888b725ae77Skettenis }
889b725ae77Skettenis }
890b725ae77Skettenis }
891b725ae77Skettenis
892b725ae77Skettenis /* Create an arbitrary (i.e. address specified by user) or innermost frame.
893b725ae77Skettenis Always returns a non-NULL value. */
894b725ae77Skettenis
895b725ae77Skettenis struct frame_info *
create_new_frame(CORE_ADDR addr,CORE_ADDR pc)896b725ae77Skettenis create_new_frame (CORE_ADDR addr, CORE_ADDR pc)
897b725ae77Skettenis {
898b725ae77Skettenis struct frame_info *fi;
899b725ae77Skettenis
900b725ae77Skettenis if (frame_debug)
901b725ae77Skettenis {
902b725ae77Skettenis fprintf_unfiltered (gdb_stdlog,
903b725ae77Skettenis "{ create_new_frame (addr=0x%s, pc=0x%s) ",
904b725ae77Skettenis paddr_nz (addr), paddr_nz (pc));
905b725ae77Skettenis }
906b725ae77Skettenis
907b725ae77Skettenis fi = frame_obstack_zalloc (sizeof (struct frame_info));
908b725ae77Skettenis
909b725ae77Skettenis fi->next = create_sentinel_frame (current_regcache);
910b725ae77Skettenis
911b725ae77Skettenis /* Select/initialize both the unwind function and the frame's type
912b725ae77Skettenis based on the PC. */
91363addd46Skettenis fi->unwind = frame_unwind_find_by_frame (fi->next, &fi->prologue_cache);
914b725ae77Skettenis
915b725ae77Skettenis fi->this_id.p = 1;
916b725ae77Skettenis deprecated_update_frame_base_hack (fi, addr);
917b725ae77Skettenis deprecated_update_frame_pc_hack (fi, pc);
918b725ae77Skettenis
919b725ae77Skettenis if (frame_debug)
920b725ae77Skettenis {
921b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "-> ");
922b725ae77Skettenis fprint_frame (gdb_stdlog, fi);
923b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " }\n");
924b725ae77Skettenis }
925b725ae77Skettenis
926b725ae77Skettenis return fi;
927b725ae77Skettenis }
928b725ae77Skettenis
929b725ae77Skettenis /* Return the frame that THIS_FRAME calls (NULL if THIS_FRAME is the
930b725ae77Skettenis innermost frame). Be careful to not fall off the bottom of the
931b725ae77Skettenis frame chain and onto the sentinel frame. */
932b725ae77Skettenis
933b725ae77Skettenis struct frame_info *
get_next_frame(struct frame_info * this_frame)934b725ae77Skettenis get_next_frame (struct frame_info *this_frame)
935b725ae77Skettenis {
936b725ae77Skettenis if (this_frame->level > 0)
937b725ae77Skettenis return this_frame->next;
938b725ae77Skettenis else
939b725ae77Skettenis return NULL;
940b725ae77Skettenis }
941b725ae77Skettenis
94263addd46Skettenis /* Observer for the target_changed event. */
94363addd46Skettenis
94463addd46Skettenis void
frame_observer_target_changed(struct target_ops * target)94563addd46Skettenis frame_observer_target_changed (struct target_ops *target)
94663addd46Skettenis {
94763addd46Skettenis flush_cached_frames ();
94863addd46Skettenis }
94963addd46Skettenis
950b725ae77Skettenis /* Flush the entire frame cache. */
951b725ae77Skettenis
952b725ae77Skettenis void
flush_cached_frames(void)953b725ae77Skettenis flush_cached_frames (void)
954b725ae77Skettenis {
955b725ae77Skettenis /* Since we can't really be sure what the first object allocated was */
956b725ae77Skettenis obstack_free (&frame_cache_obstack, 0);
957b725ae77Skettenis obstack_init (&frame_cache_obstack);
958b725ae77Skettenis
959b725ae77Skettenis current_frame = NULL; /* Invalidate cache */
960b725ae77Skettenis select_frame (NULL);
961b725ae77Skettenis annotate_frames_invalid ();
962b725ae77Skettenis if (frame_debug)
963b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "{ flush_cached_frames () }\n");
964b725ae77Skettenis }
965b725ae77Skettenis
966b725ae77Skettenis /* Flush the frame cache, and start a new one if necessary. */
967b725ae77Skettenis
968b725ae77Skettenis void
reinit_frame_cache(void)969b725ae77Skettenis reinit_frame_cache (void)
970b725ae77Skettenis {
971b725ae77Skettenis flush_cached_frames ();
972b725ae77Skettenis
973b725ae77Skettenis /* FIXME: The inferior_ptid test is wrong if there is a corefile. */
974b725ae77Skettenis if (PIDGET (inferior_ptid) != 0)
975b725ae77Skettenis {
976b725ae77Skettenis select_frame (get_current_frame ());
977b725ae77Skettenis }
978b725ae77Skettenis }
979b725ae77Skettenis
98063addd46Skettenis /* Return a "struct frame_info" corresponding to the frame that called
98163addd46Skettenis THIS_FRAME. Returns NULL if there is no such frame.
98263addd46Skettenis
98363addd46Skettenis Unlike get_prev_frame, this function always tries to unwind the
98463addd46Skettenis frame. */
985b725ae77Skettenis
986b725ae77Skettenis static struct frame_info *
get_prev_frame_1(struct frame_info * this_frame)98763addd46Skettenis get_prev_frame_1 (struct frame_info *this_frame)
988b725ae77Skettenis {
989b725ae77Skettenis struct frame_info *prev_frame;
99052ba75afSkettenis struct frame_id this_id;
991b725ae77Skettenis
99263addd46Skettenis gdb_assert (this_frame != NULL);
99363addd46Skettenis
994b725ae77Skettenis if (frame_debug)
995b725ae77Skettenis {
99663addd46Skettenis fprintf_unfiltered (gdb_stdlog, "{ get_prev_frame_1 (this_frame=");
997b725ae77Skettenis if (this_frame != NULL)
998b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "%d", this_frame->level);
999b725ae77Skettenis else
1000b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "<NULL>");
1001b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, ") ");
1002b725ae77Skettenis }
1003b725ae77Skettenis
1004b725ae77Skettenis /* Only try to do the unwind once. */
1005b725ae77Skettenis if (this_frame->prev_p)
1006b725ae77Skettenis {
1007b725ae77Skettenis if (frame_debug)
1008b725ae77Skettenis {
1009b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "-> ");
1010b725ae77Skettenis fprint_frame (gdb_stdlog, this_frame->prev);
1011b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " // cached \n");
1012b725ae77Skettenis }
1013b725ae77Skettenis return this_frame->prev;
1014b725ae77Skettenis }
1015b725ae77Skettenis this_frame->prev_p = 1;
1016b725ae77Skettenis
1017b725ae77Skettenis /* Check that this frame's ID was valid. If it wasn't, don't try to
1018b725ae77Skettenis unwind to the prev frame. Be careful to not apply this test to
1019b725ae77Skettenis the sentinel frame. */
102052ba75afSkettenis this_id = get_frame_id (this_frame);
102152ba75afSkettenis if (this_frame->level >= 0 && !frame_id_p (this_id))
1022b725ae77Skettenis {
1023b725ae77Skettenis if (frame_debug)
1024b725ae77Skettenis {
1025b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "-> ");
1026b725ae77Skettenis fprint_frame (gdb_stdlog, NULL);
1027b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " // this ID is NULL }\n");
1028b725ae77Skettenis }
1029b725ae77Skettenis return NULL;
1030b725ae77Skettenis }
1031b725ae77Skettenis
1032b725ae77Skettenis /* Check that this frame's ID isn't inner to (younger, below, next)
1033b725ae77Skettenis the next frame. This happens when a frame unwind goes backwards.
103463addd46Skettenis Exclude signal trampolines (due to sigaltstack the frame ID can
103563addd46Skettenis go backwards) and sentinel frames (the test is meaningless). */
103663addd46Skettenis if (this_frame->next->level >= 0
103763addd46Skettenis && this_frame->next->unwind->type != SIGTRAMP_FRAME
103852ba75afSkettenis && frame_id_inner (this_id, get_frame_id (this_frame->next)))
1039b725ae77Skettenis error ("Previous frame inner to this frame (corrupt stack?)");
1040b725ae77Skettenis
1041b725ae77Skettenis /* Check that this and the next frame are not identical. If they
1042b725ae77Skettenis are, there is most likely a stack cycle. As with the inner-than
1043b725ae77Skettenis test above, avoid comparing the inner-most and sentinel frames. */
1044b725ae77Skettenis if (this_frame->level > 0
104552ba75afSkettenis && frame_id_eq (this_id, get_frame_id (this_frame->next)))
1046b725ae77Skettenis error ("Previous frame identical to this frame (corrupt stack?)");
1047b725ae77Skettenis
1048b725ae77Skettenis /* Allocate the new frame but do not wire it in to the frame chain.
1049b725ae77Skettenis Some (bad) code in INIT_FRAME_EXTRA_INFO tries to look along
1050b725ae77Skettenis frame->next to pull some fancy tricks (of course such code is, by
1051b725ae77Skettenis definition, recursive). Try to prevent it.
1052b725ae77Skettenis
1053b725ae77Skettenis There is no reason to worry about memory leaks, should the
1054b725ae77Skettenis remainder of the function fail. The allocated memory will be
1055b725ae77Skettenis quickly reclaimed when the frame cache is flushed, and the `we've
1056b725ae77Skettenis been here before' check above will stop repeated memory
1057b725ae77Skettenis allocation calls. */
1058b725ae77Skettenis prev_frame = FRAME_OBSTACK_ZALLOC (struct frame_info);
1059b725ae77Skettenis prev_frame->level = this_frame->level + 1;
1060b725ae77Skettenis
1061b725ae77Skettenis /* Don't yet compute ->unwind (and hence ->type). It is computed
1062b725ae77Skettenis on-demand in get_frame_type, frame_register_unwind, and
1063b725ae77Skettenis get_frame_id. */
1064b725ae77Skettenis
1065b725ae77Skettenis /* Don't yet compute the frame's ID. It is computed on-demand by
1066b725ae77Skettenis get_frame_id(). */
1067b725ae77Skettenis
1068b725ae77Skettenis /* The unwound frame ID is validate at the start of this function,
1069b725ae77Skettenis as part of the logic to decide if that frame should be further
1070b725ae77Skettenis unwound, and not here while the prev frame is being created.
1071b725ae77Skettenis Doing this makes it possible for the user to examine a frame that
1072b725ae77Skettenis has an invalid frame ID.
1073b725ae77Skettenis
1074b725ae77Skettenis Some very old VAX code noted: [...] For the sake of argument,
1075b725ae77Skettenis suppose that the stack is somewhat trashed (which is one reason
1076b725ae77Skettenis that "info frame" exists). So, return 0 (indicating we don't
1077b725ae77Skettenis know the address of the arglist) if we don't know what frame this
1078b725ae77Skettenis frame calls. */
1079b725ae77Skettenis
1080b725ae77Skettenis /* Link it in. */
1081b725ae77Skettenis this_frame->prev = prev_frame;
1082b725ae77Skettenis prev_frame->next = this_frame;
1083b725ae77Skettenis
1084b725ae77Skettenis if (frame_debug)
1085b725ae77Skettenis {
1086b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, "-> ");
1087b725ae77Skettenis fprint_frame (gdb_stdlog, prev_frame);
1088b725ae77Skettenis fprintf_unfiltered (gdb_stdlog, " }\n");
1089b725ae77Skettenis }
1090b725ae77Skettenis
1091b725ae77Skettenis return prev_frame;
1092b725ae77Skettenis }
1093b725ae77Skettenis
109463addd46Skettenis /* Debug routine to print a NULL frame being returned. */
109563addd46Skettenis
109663addd46Skettenis static void
frame_debug_got_null_frame(struct ui_file * file,struct frame_info * this_frame,const char * reason)109763addd46Skettenis frame_debug_got_null_frame (struct ui_file *file,
109863addd46Skettenis struct frame_info *this_frame,
109963addd46Skettenis const char *reason)
110063addd46Skettenis {
110163addd46Skettenis if (frame_debug)
110263addd46Skettenis {
110363addd46Skettenis fprintf_unfiltered (gdb_stdlog, "{ get_prev_frame (this_frame=");
110463addd46Skettenis if (this_frame != NULL)
110563addd46Skettenis fprintf_unfiltered (gdb_stdlog, "%d", this_frame->level);
110663addd46Skettenis else
110763addd46Skettenis fprintf_unfiltered (gdb_stdlog, "<NULL>");
110863addd46Skettenis fprintf_unfiltered (gdb_stdlog, ") -> // %s}\n", reason);
110963addd46Skettenis }
111063addd46Skettenis }
111163addd46Skettenis
111263addd46Skettenis /* Is this (non-sentinel) frame in the "main"() function? */
111363addd46Skettenis
111463addd46Skettenis static int
inside_main_func(struct frame_info * this_frame)111563addd46Skettenis inside_main_func (struct frame_info *this_frame)
111663addd46Skettenis {
111763addd46Skettenis struct minimal_symbol *msymbol;
111863addd46Skettenis CORE_ADDR maddr;
111963addd46Skettenis
112063addd46Skettenis if (symfile_objfile == 0)
112163addd46Skettenis return 0;
112263addd46Skettenis msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile);
112363addd46Skettenis if (msymbol == NULL)
112463addd46Skettenis return 0;
112563addd46Skettenis /* Make certain that the code, and not descriptor, address is
112663addd46Skettenis returned. */
112763addd46Skettenis maddr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
112863addd46Skettenis SYMBOL_VALUE_ADDRESS (msymbol),
112963addd46Skettenis ¤t_target);
113063addd46Skettenis return maddr == get_frame_func (this_frame);
113163addd46Skettenis }
113263addd46Skettenis
113363addd46Skettenis /* Return a structure containing various interesting information about
113463addd46Skettenis the frame that called THIS_FRAME. Returns NULL if there is entier
113563addd46Skettenis no such frame or the frame fails any of a set of target-independent
113663addd46Skettenis condition that should terminate the frame chain (e.g., as unwinding
113763addd46Skettenis past main()).
113863addd46Skettenis
113963addd46Skettenis This function should not contain target-dependent tests, such as
114063addd46Skettenis checking whether the program-counter is zero. */
114163addd46Skettenis
114263addd46Skettenis struct frame_info *
get_prev_frame(struct frame_info * this_frame)114363addd46Skettenis get_prev_frame (struct frame_info *this_frame)
114463addd46Skettenis {
114563addd46Skettenis struct frame_info *prev_frame;
114663addd46Skettenis
114763addd46Skettenis /* Return the inner-most frame, when the caller passes in NULL. */
114863addd46Skettenis /* NOTE: cagney/2002-11-09: Not sure how this would happen. The
114963addd46Skettenis caller should have previously obtained a valid frame using
115063addd46Skettenis get_selected_frame() and then called this code - only possibility
115163addd46Skettenis I can think of is code behaving badly.
115263addd46Skettenis
115363addd46Skettenis NOTE: cagney/2003-01-10: Talk about code behaving badly. Check
115463addd46Skettenis block_innermost_frame(). It does the sequence: frame = NULL;
115563addd46Skettenis while (1) { frame = get_prev_frame (frame); .... }. Ulgh! Why
115663addd46Skettenis it couldn't be written better, I don't know.
115763addd46Skettenis
115863addd46Skettenis NOTE: cagney/2003-01-11: I suspect what is happening in
115963addd46Skettenis block_innermost_frame() is, when the target has no state
116063addd46Skettenis (registers, memory, ...), it is still calling this function. The
116163addd46Skettenis assumption being that this function will return NULL indicating
116263addd46Skettenis that a frame isn't possible, rather than checking that the target
116363addd46Skettenis has state and then calling get_current_frame() and
116463addd46Skettenis get_prev_frame(). This is a guess mind. */
116563addd46Skettenis if (this_frame == NULL)
116663addd46Skettenis {
116763addd46Skettenis /* NOTE: cagney/2002-11-09: There was a code segment here that
116863addd46Skettenis would error out when CURRENT_FRAME was NULL. The comment
116963addd46Skettenis that went with it made the claim ...
117063addd46Skettenis
117163addd46Skettenis ``This screws value_of_variable, which just wants a nice
117263addd46Skettenis clean NULL return from block_innermost_frame if there are no
117363addd46Skettenis frames. I don't think I've ever seen this message happen
117463addd46Skettenis otherwise. And returning NULL here is a perfectly legitimate
117563addd46Skettenis thing to do.''
117663addd46Skettenis
117763addd46Skettenis Per the above, this code shouldn't even be called with a NULL
117863addd46Skettenis THIS_FRAME. */
117963addd46Skettenis frame_debug_got_null_frame (gdb_stdlog, this_frame, "this_frame NULL");
118063addd46Skettenis return current_frame;
118163addd46Skettenis }
118263addd46Skettenis
118363addd46Skettenis /* There is always a frame. If this assertion fails, suspect that
118463addd46Skettenis something should be calling get_selected_frame() or
118563addd46Skettenis get_current_frame(). */
118663addd46Skettenis gdb_assert (this_frame != NULL);
118763addd46Skettenis
118863addd46Skettenis if (this_frame->level >= 0
118963addd46Skettenis && !backtrace_past_main
119063addd46Skettenis && inside_main_func (this_frame))
119163addd46Skettenis /* Don't unwind past main(). Note, this is done _before_ the
119263addd46Skettenis frame has been marked as previously unwound. That way if the
119363addd46Skettenis user later decides to enable unwinds past main(), that will
119463addd46Skettenis automatically happen. */
119563addd46Skettenis {
119663addd46Skettenis frame_debug_got_null_frame (gdb_stdlog, this_frame, "inside main func");
119763addd46Skettenis return NULL;
119863addd46Skettenis }
119963addd46Skettenis
120063addd46Skettenis if (this_frame->level > backtrace_limit)
120163addd46Skettenis {
120263addd46Skettenis error ("Backtrace limit of %d exceeded", backtrace_limit);
120363addd46Skettenis }
120463addd46Skettenis
120563addd46Skettenis /* If we're already inside the entry function for the main objfile,
120663addd46Skettenis then it isn't valid. Don't apply this test to a dummy frame -
120763addd46Skettenis dummy frame PCs typically land in the entry func. Don't apply
120863addd46Skettenis this test to the sentinel frame. Sentinel frames should always
120963addd46Skettenis be allowed to unwind. */
121063addd46Skettenis /* NOTE: cagney/2003-02-25: Don't enable until someone has found
121163addd46Skettenis hard evidence that this is needed. */
121263addd46Skettenis /* NOTE: cagney/2003-07-07: Fixed a bug in inside_main_func() -
121363addd46Skettenis wasn't checking for "main" in the minimal symbols. With that
121463addd46Skettenis fixed asm-source tests now stop in "main" instead of halting the
121563addd46Skettenis backtrace in weird and wonderful ways somewhere inside the entry
121663addd46Skettenis file. Suspect that tests for inside the entry file/func were
121763addd46Skettenis added to work around that (now fixed) case. */
121863addd46Skettenis /* NOTE: cagney/2003-07-15: danielj (if I'm reading it right)
121963addd46Skettenis suggested having the inside_entry_func test use the
122063addd46Skettenis inside_main_func() msymbol trick (along with entry_point_address()
122163addd46Skettenis I guess) to determine the address range of the start function.
122263addd46Skettenis That should provide a far better stopper than the current
122363addd46Skettenis heuristics. */
122463addd46Skettenis /* NOTE: cagney/2003-07-15: Need to add a "set backtrace
122563addd46Skettenis beyond-entry-func" command so that this can be selectively
122663addd46Skettenis disabled. */
122763addd46Skettenis if (0
122863addd46Skettenis #if 0
122963addd46Skettenis && backtrace_beyond_entry_func
123063addd46Skettenis #endif
123163addd46Skettenis && this_frame->unwind->type != DUMMY_FRAME && this_frame->level >= 0
123263addd46Skettenis && inside_entry_func (this_frame))
123363addd46Skettenis {
123463addd46Skettenis frame_debug_got_null_frame (gdb_stdlog, this_frame, "inside entry func");
123563addd46Skettenis return NULL;
123663addd46Skettenis }
123763addd46Skettenis
1238*87cf8587Skettenis /* Assume that the only way to get a zero PC is through something
1239*87cf8587Skettenis like a SIGSEGV or a dummy frame, and hence that NORMAL frames
1240*87cf8587Skettenis will never unwind a zero PC. */
1241*87cf8587Skettenis if (this_frame->level > 0
1242*87cf8587Skettenis && get_frame_type (this_frame) == NORMAL_FRAME
1243*87cf8587Skettenis && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME
1244*87cf8587Skettenis && get_frame_pc (this_frame) == 0)
1245*87cf8587Skettenis {
1246*87cf8587Skettenis frame_debug_got_null_frame (gdb_stdlog, this_frame, "zero PC");
1247*87cf8587Skettenis return NULL;
1248*87cf8587Skettenis }
1249*87cf8587Skettenis
125063addd46Skettenis return get_prev_frame_1 (this_frame);
125163addd46Skettenis }
125263addd46Skettenis
1253b725ae77Skettenis CORE_ADDR
get_frame_pc(struct frame_info * frame)1254b725ae77Skettenis get_frame_pc (struct frame_info *frame)
1255b725ae77Skettenis {
1256b725ae77Skettenis gdb_assert (frame->next != NULL);
1257b725ae77Skettenis return frame_pc_unwind (frame->next);
1258b725ae77Skettenis }
1259b725ae77Skettenis
1260b725ae77Skettenis /* Return an address of that falls within the frame's code block. */
1261b725ae77Skettenis
1262b725ae77Skettenis CORE_ADDR
frame_unwind_address_in_block(struct frame_info * next_frame)1263b725ae77Skettenis frame_unwind_address_in_block (struct frame_info *next_frame)
1264b725ae77Skettenis {
1265b725ae77Skettenis /* A draft address. */
1266b725ae77Skettenis CORE_ADDR pc = frame_pc_unwind (next_frame);
1267b725ae77Skettenis
1268b725ae77Skettenis /* If THIS frame is not inner most (i.e., NEXT isn't the sentinel),
1269b725ae77Skettenis and NEXT is `normal' (i.e., not a sigtramp, dummy, ....) THIS
1270b725ae77Skettenis frame's PC ends up pointing at the instruction fallowing the
1271b725ae77Skettenis "call". Adjust that PC value so that it falls on the call
1272b725ae77Skettenis instruction (which, hopefully, falls within THIS frame's code
1273b725ae77Skettenis block. So far it's proved to be a very good approximation. See
127463addd46Skettenis get_frame_type() for why ->type can't be used. */
1275b725ae77Skettenis if (next_frame->level >= 0
1276b725ae77Skettenis && get_frame_type (next_frame) == NORMAL_FRAME)
1277b725ae77Skettenis --pc;
1278b725ae77Skettenis return pc;
1279b725ae77Skettenis }
1280b725ae77Skettenis
1281b725ae77Skettenis CORE_ADDR
get_frame_address_in_block(struct frame_info * this_frame)1282b725ae77Skettenis get_frame_address_in_block (struct frame_info *this_frame)
1283b725ae77Skettenis {
1284b725ae77Skettenis return frame_unwind_address_in_block (this_frame->next);
1285b725ae77Skettenis }
1286b725ae77Skettenis
1287b725ae77Skettenis static int
pc_notcurrent(struct frame_info * frame)1288b725ae77Skettenis pc_notcurrent (struct frame_info *frame)
1289b725ae77Skettenis {
1290b725ae77Skettenis /* If FRAME is not the innermost frame, that normally means that
1291b725ae77Skettenis FRAME->pc points at the return instruction (which is *after* the
1292b725ae77Skettenis call instruction), and we want to get the line containing the
1293b725ae77Skettenis call (because the call is where the user thinks the program is).
1294b725ae77Skettenis However, if the next frame is either a SIGTRAMP_FRAME or a
1295b725ae77Skettenis DUMMY_FRAME, then the next frame will contain a saved interrupt
1296b725ae77Skettenis PC and such a PC indicates the current (rather than next)
1297b725ae77Skettenis instruction/line, consequently, for such cases, want to get the
1298b725ae77Skettenis line containing fi->pc. */
1299b725ae77Skettenis struct frame_info *next = get_next_frame (frame);
1300b725ae77Skettenis int notcurrent = (next != NULL && get_frame_type (next) == NORMAL_FRAME);
1301b725ae77Skettenis return notcurrent;
1302b725ae77Skettenis }
1303b725ae77Skettenis
1304b725ae77Skettenis void
find_frame_sal(struct frame_info * frame,struct symtab_and_line * sal)1305b725ae77Skettenis find_frame_sal (struct frame_info *frame, struct symtab_and_line *sal)
1306b725ae77Skettenis {
1307b725ae77Skettenis (*sal) = find_pc_line (get_frame_pc (frame), pc_notcurrent (frame));
1308b725ae77Skettenis }
1309b725ae77Skettenis
1310b725ae77Skettenis /* Per "frame.h", return the ``address'' of the frame. Code should
1311b725ae77Skettenis really be using get_frame_id(). */
1312b725ae77Skettenis CORE_ADDR
get_frame_base(struct frame_info * fi)1313b725ae77Skettenis get_frame_base (struct frame_info *fi)
1314b725ae77Skettenis {
1315b725ae77Skettenis return get_frame_id (fi).stack_addr;
1316b725ae77Skettenis }
1317b725ae77Skettenis
1318b725ae77Skettenis /* High-level offsets into the frame. Used by the debug info. */
1319b725ae77Skettenis
1320b725ae77Skettenis CORE_ADDR
get_frame_base_address(struct frame_info * fi)1321b725ae77Skettenis get_frame_base_address (struct frame_info *fi)
1322b725ae77Skettenis {
1323b725ae77Skettenis if (get_frame_type (fi) != NORMAL_FRAME)
1324b725ae77Skettenis return 0;
1325b725ae77Skettenis if (fi->base == NULL)
1326b725ae77Skettenis fi->base = frame_base_find_by_frame (fi->next);
1327b725ae77Skettenis /* Sneaky: If the low-level unwind and high-level base code share a
1328b725ae77Skettenis common unwinder, let them share the prologue cache. */
1329b725ae77Skettenis if (fi->base->unwind == fi->unwind)
1330b725ae77Skettenis return fi->base->this_base (fi->next, &fi->prologue_cache);
1331b725ae77Skettenis return fi->base->this_base (fi->next, &fi->base_cache);
1332b725ae77Skettenis }
1333b725ae77Skettenis
1334b725ae77Skettenis CORE_ADDR
get_frame_locals_address(struct frame_info * fi)1335b725ae77Skettenis get_frame_locals_address (struct frame_info *fi)
1336b725ae77Skettenis {
1337b725ae77Skettenis void **cache;
1338b725ae77Skettenis if (get_frame_type (fi) != NORMAL_FRAME)
1339b725ae77Skettenis return 0;
1340b725ae77Skettenis /* If there isn't a frame address method, find it. */
1341b725ae77Skettenis if (fi->base == NULL)
1342b725ae77Skettenis fi->base = frame_base_find_by_frame (fi->next);
1343b725ae77Skettenis /* Sneaky: If the low-level unwind and high-level base code share a
1344b725ae77Skettenis common unwinder, let them share the prologue cache. */
1345b725ae77Skettenis if (fi->base->unwind == fi->unwind)
1346b725ae77Skettenis cache = &fi->prologue_cache;
1347b725ae77Skettenis else
1348b725ae77Skettenis cache = &fi->base_cache;
1349b725ae77Skettenis return fi->base->this_locals (fi->next, cache);
1350b725ae77Skettenis }
1351b725ae77Skettenis
1352b725ae77Skettenis CORE_ADDR
get_frame_args_address(struct frame_info * fi)1353b725ae77Skettenis get_frame_args_address (struct frame_info *fi)
1354b725ae77Skettenis {
1355b725ae77Skettenis void **cache;
1356b725ae77Skettenis if (get_frame_type (fi) != NORMAL_FRAME)
1357b725ae77Skettenis return 0;
1358b725ae77Skettenis /* If there isn't a frame address method, find it. */
1359b725ae77Skettenis if (fi->base == NULL)
1360b725ae77Skettenis fi->base = frame_base_find_by_frame (fi->next);
1361b725ae77Skettenis /* Sneaky: If the low-level unwind and high-level base code share a
1362b725ae77Skettenis common unwinder, let them share the prologue cache. */
1363b725ae77Skettenis if (fi->base->unwind == fi->unwind)
1364b725ae77Skettenis cache = &fi->prologue_cache;
1365b725ae77Skettenis else
1366b725ae77Skettenis cache = &fi->base_cache;
1367b725ae77Skettenis return fi->base->this_args (fi->next, cache);
1368b725ae77Skettenis }
1369b725ae77Skettenis
1370b725ae77Skettenis /* Level of the selected frame: 0 for innermost, 1 for its caller, ...
1371b725ae77Skettenis or -1 for a NULL frame. */
1372b725ae77Skettenis
1373b725ae77Skettenis int
frame_relative_level(struct frame_info * fi)1374b725ae77Skettenis frame_relative_level (struct frame_info *fi)
1375b725ae77Skettenis {
1376b725ae77Skettenis if (fi == NULL)
1377b725ae77Skettenis return -1;
1378b725ae77Skettenis else
1379b725ae77Skettenis return fi->level;
1380b725ae77Skettenis }
1381b725ae77Skettenis
1382b725ae77Skettenis enum frame_type
get_frame_type(struct frame_info * frame)1383b725ae77Skettenis get_frame_type (struct frame_info *frame)
1384b725ae77Skettenis {
138563addd46Skettenis if (frame->unwind == NULL)
138663addd46Skettenis /* Initialize the frame's unwinder because that's what
1387b725ae77Skettenis provides the frame's type. */
138863addd46Skettenis frame->unwind = frame_unwind_find_by_frame (frame->next,
138963addd46Skettenis &frame->prologue_cache);
139063addd46Skettenis return frame->unwind->type;
1391b725ae77Skettenis }
1392b725ae77Skettenis
1393b725ae77Skettenis void
deprecated_update_frame_pc_hack(struct frame_info * frame,CORE_ADDR pc)1394b725ae77Skettenis deprecated_update_frame_pc_hack (struct frame_info *frame, CORE_ADDR pc)
1395b725ae77Skettenis {
1396b725ae77Skettenis if (frame_debug)
1397b725ae77Skettenis fprintf_unfiltered (gdb_stdlog,
1398b725ae77Skettenis "{ deprecated_update_frame_pc_hack (frame=%d,pc=0x%s) }\n",
1399b725ae77Skettenis frame->level, paddr_nz (pc));
1400b725ae77Skettenis /* NOTE: cagney/2003-03-11: Some architectures (e.g., Arm) are
140163addd46Skettenis maintaining a locally allocated frame object. Since such frames
1402b725ae77Skettenis are not in the frame chain, it isn't possible to assume that the
1403b725ae77Skettenis frame has a next. Sigh. */
1404b725ae77Skettenis if (frame->next != NULL)
1405b725ae77Skettenis {
1406b725ae77Skettenis /* While we're at it, update this frame's cached PC value, found
1407b725ae77Skettenis in the next frame. Oh for the day when "struct frame_info"
1408b725ae77Skettenis is opaque and this hack on hack can just go away. */
1409b725ae77Skettenis frame->next->prev_pc.value = pc;
1410b725ae77Skettenis frame->next->prev_pc.p = 1;
1411b725ae77Skettenis }
1412b725ae77Skettenis }
1413b725ae77Skettenis
1414b725ae77Skettenis void
deprecated_update_frame_base_hack(struct frame_info * frame,CORE_ADDR base)1415b725ae77Skettenis deprecated_update_frame_base_hack (struct frame_info *frame, CORE_ADDR base)
1416b725ae77Skettenis {
1417b725ae77Skettenis if (frame_debug)
1418b725ae77Skettenis fprintf_unfiltered (gdb_stdlog,
1419b725ae77Skettenis "{ deprecated_update_frame_base_hack (frame=%d,base=0x%s) }\n",
1420b725ae77Skettenis frame->level, paddr_nz (base));
1421b725ae77Skettenis /* See comment in "frame.h". */
1422b725ae77Skettenis frame->this_id.value.stack_addr = base;
1423b725ae77Skettenis }
1424b725ae77Skettenis
1425b725ae77Skettenis /* Memory access methods. */
1426b725ae77Skettenis
1427b725ae77Skettenis void
get_frame_memory(struct frame_info * this_frame,CORE_ADDR addr,void * buf,int len)1428b725ae77Skettenis get_frame_memory (struct frame_info *this_frame, CORE_ADDR addr, void *buf,
1429b725ae77Skettenis int len)
1430b725ae77Skettenis {
1431b725ae77Skettenis read_memory (addr, buf, len);
1432b725ae77Skettenis }
1433b725ae77Skettenis
1434b725ae77Skettenis LONGEST
get_frame_memory_signed(struct frame_info * this_frame,CORE_ADDR addr,int len)1435b725ae77Skettenis get_frame_memory_signed (struct frame_info *this_frame, CORE_ADDR addr,
1436b725ae77Skettenis int len)
1437b725ae77Skettenis {
1438b725ae77Skettenis return read_memory_integer (addr, len);
1439b725ae77Skettenis }
1440b725ae77Skettenis
1441b725ae77Skettenis ULONGEST
get_frame_memory_unsigned(struct frame_info * this_frame,CORE_ADDR addr,int len)1442b725ae77Skettenis get_frame_memory_unsigned (struct frame_info *this_frame, CORE_ADDR addr,
1443b725ae77Skettenis int len)
1444b725ae77Skettenis {
1445b725ae77Skettenis return read_memory_unsigned_integer (addr, len);
1446b725ae77Skettenis }
1447b725ae77Skettenis
144863addd46Skettenis int
safe_frame_unwind_memory(struct frame_info * this_frame,CORE_ADDR addr,void * buf,int len)144963addd46Skettenis safe_frame_unwind_memory (struct frame_info *this_frame,
145063addd46Skettenis CORE_ADDR addr, void *buf, int len)
145163addd46Skettenis {
145263addd46Skettenis /* NOTE: deprecated_read_memory_nobpt returns zero on success! */
145363addd46Skettenis return !deprecated_read_memory_nobpt (addr, buf, len);
145463addd46Skettenis }
145563addd46Skettenis
1456b725ae77Skettenis /* Architecture method. */
1457b725ae77Skettenis
1458b725ae77Skettenis struct gdbarch *
get_frame_arch(struct frame_info * this_frame)1459b725ae77Skettenis get_frame_arch (struct frame_info *this_frame)
1460b725ae77Skettenis {
1461b725ae77Skettenis return current_gdbarch;
1462b725ae77Skettenis }
1463b725ae77Skettenis
1464b725ae77Skettenis /* Stack pointer methods. */
1465b725ae77Skettenis
1466b725ae77Skettenis CORE_ADDR
get_frame_sp(struct frame_info * this_frame)1467b725ae77Skettenis get_frame_sp (struct frame_info *this_frame)
1468b725ae77Skettenis {
1469b725ae77Skettenis return frame_sp_unwind (this_frame->next);
1470b725ae77Skettenis }
1471b725ae77Skettenis
1472b725ae77Skettenis CORE_ADDR
frame_sp_unwind(struct frame_info * next_frame)1473b725ae77Skettenis frame_sp_unwind (struct frame_info *next_frame)
1474b725ae77Skettenis {
147563addd46Skettenis /* Normality - an architecture that provides a way of obtaining any
1476b725ae77Skettenis frame inner-most address. */
1477b725ae77Skettenis if (gdbarch_unwind_sp_p (current_gdbarch))
1478b725ae77Skettenis return gdbarch_unwind_sp (current_gdbarch, next_frame);
1479b725ae77Skettenis /* Things are looking grim. If it's the inner-most frame and there
148063addd46Skettenis is a TARGET_READ_SP, then that can be used. */
1481b725ae77Skettenis if (next_frame->level < 0 && TARGET_READ_SP_P ())
1482b725ae77Skettenis return TARGET_READ_SP ();
1483b725ae77Skettenis /* Now things are really are grim. Hope that the value returned by
1484b725ae77Skettenis the SP_REGNUM register is meaningful. */
1485b725ae77Skettenis if (SP_REGNUM >= 0)
1486b725ae77Skettenis {
1487b725ae77Skettenis ULONGEST sp;
1488b725ae77Skettenis frame_unwind_unsigned_register (next_frame, SP_REGNUM, &sp);
1489b725ae77Skettenis return sp;
1490b725ae77Skettenis }
1491b725ae77Skettenis internal_error (__FILE__, __LINE__, "Missing unwind SP method");
1492b725ae77Skettenis }
1493b725ae77Skettenis
1494b725ae77Skettenis extern initialize_file_ftype _initialize_frame; /* -Wmissing-prototypes */
1495b725ae77Skettenis
1496b725ae77Skettenis static struct cmd_list_element *set_backtrace_cmdlist;
1497b725ae77Skettenis static struct cmd_list_element *show_backtrace_cmdlist;
1498b725ae77Skettenis
1499b725ae77Skettenis static void
set_backtrace_cmd(char * args,int from_tty)1500b725ae77Skettenis set_backtrace_cmd (char *args, int from_tty)
1501b725ae77Skettenis {
1502b725ae77Skettenis help_list (set_backtrace_cmdlist, "set backtrace ", -1, gdb_stdout);
1503b725ae77Skettenis }
1504b725ae77Skettenis
1505b725ae77Skettenis static void
show_backtrace_cmd(char * args,int from_tty)1506b725ae77Skettenis show_backtrace_cmd (char *args, int from_tty)
1507b725ae77Skettenis {
1508b725ae77Skettenis cmd_show_list (show_backtrace_cmdlist, from_tty, "");
1509b725ae77Skettenis }
1510b725ae77Skettenis
1511b725ae77Skettenis void
_initialize_frame(void)1512b725ae77Skettenis _initialize_frame (void)
1513b725ae77Skettenis {
1514b725ae77Skettenis obstack_init (&frame_cache_obstack);
1515b725ae77Skettenis
151663addd46Skettenis observer_attach_target_changed (frame_observer_target_changed);
151763addd46Skettenis
1518b725ae77Skettenis add_prefix_cmd ("backtrace", class_maintenance, set_backtrace_cmd, "\
1519b725ae77Skettenis Set backtrace specific variables.\n\
1520b725ae77Skettenis Configure backtrace variables such as the backtrace limit",
1521b725ae77Skettenis &set_backtrace_cmdlist, "set backtrace ",
1522b725ae77Skettenis 0/*allow-unknown*/, &setlist);
1523b725ae77Skettenis add_prefix_cmd ("backtrace", class_maintenance, show_backtrace_cmd, "\
1524b725ae77Skettenis Show backtrace specific variables\n\
1525b725ae77Skettenis Show backtrace variables such as the backtrace limit",
1526b725ae77Skettenis &show_backtrace_cmdlist, "show backtrace ",
1527b725ae77Skettenis 0/*allow-unknown*/, &showlist);
1528b725ae77Skettenis
1529b725ae77Skettenis add_setshow_boolean_cmd ("past-main", class_obscure,
1530b725ae77Skettenis &backtrace_past_main, "\
153163addd46Skettenis Set whether backtraces should continue past \"main\".", "\
153263addd46Skettenis Show whether backtraces should continue past \"main\".", "\
1533b725ae77Skettenis Normally the caller of \"main\" is not of interest, so GDB will terminate\n\
1534b725ae77Skettenis the backtrace at \"main\". Set this variable if you need to see the rest\n\
1535b725ae77Skettenis of the stack trace.", "\
153663addd46Skettenis Whether backtraces should continue past \"main\" is %s.",
1537b725ae77Skettenis NULL, NULL, &set_backtrace_cmdlist,
1538b725ae77Skettenis &show_backtrace_cmdlist);
1539b725ae77Skettenis
1540b725ae77Skettenis add_setshow_uinteger_cmd ("limit", class_obscure,
1541b725ae77Skettenis &backtrace_limit, "\
154263addd46Skettenis Set an upper bound on the number of backtrace levels.", "\
154363addd46Skettenis Show the upper bound on the number of backtrace levels.", "\
1544b725ae77Skettenis No more than the specified number of frames can be displayed or examined.\n\
1545b725ae77Skettenis Zero is unlimited.", "\
154663addd46Skettenis An upper bound on the number of backtrace levels is %s.",
1547b725ae77Skettenis NULL, NULL, &set_backtrace_cmdlist,
1548b725ae77Skettenis &show_backtrace_cmdlist);
1549b725ae77Skettenis
1550b725ae77Skettenis /* Debug this files internals. */
155163addd46Skettenis deprecated_add_show_from_set
155263addd46Skettenis (add_set_cmd ("frame", class_maintenance, var_zinteger,
1553b725ae77Skettenis &frame_debug, "Set frame debugging.\n\
1554b725ae77Skettenis When non-zero, frame specific internal debugging is enabled.", &setdebuglist),
1555b725ae77Skettenis &showdebuglist);
1556b725ae77Skettenis }
1557