]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/frame.c
2002-12-13 Andrew Cagney <ac131313@redhat.com>
[thirdparty/binutils-gdb.git] / gdb / frame.c
CommitLineData
4f460812 1/* Cache and manage frames for GDB, the GNU debugger.
96cb11df
AC
2
3 Copyright 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000,
4 2001, 2002 Free Software Foundation, Inc.
d65fe839
AC
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23#include "defs.h"
24#include "frame.h"
25#include "target.h"
26#include "value.h"
39f77062 27#include "inferior.h" /* for inferior_ptid */
4e052eda 28#include "regcache.h"
4f460812 29#include "gdb_assert.h"
e36180d7
AC
30#include "gdb_string.h"
31#include "builtin-regs.h"
4c1e7e9d
AC
32#include "gdb_obstack.h"
33#include "dummy-frame.h"
34#include "gdbcore.h"
35#include "annotate.h"
6e7f8b9c 36#include "language.h"
d65fe839 37
7a424e99 38/* Return a frame uniq ID that can be used to, later, re-find the
101dcfbe
AC
39 frame. */
40
7a424e99
AC
41struct frame_id
42get_frame_id (struct frame_info *fi)
101dcfbe
AC
43{
44 if (fi == NULL)
45 {
7a424e99 46 return null_frame_id;
101dcfbe
AC
47 }
48 else
49 {
7a424e99
AC
50 struct frame_id id;
51 id.base = fi->frame;
52 id.pc = fi->pc;
53 return id;
101dcfbe
AC
54 }
55}
56
7a424e99
AC
57const struct frame_id null_frame_id; /* All zeros. */
58
59struct frame_id
60frame_id_build (CORE_ADDR base, CORE_ADDR func_or_pc)
61{
62 struct frame_id id;
63 id.base = base;
64 id.pc = func_or_pc;
65 return id;
66}
67
68int
69frame_id_p (struct frame_id l)
70{
71 /* The .func can be NULL but the .base cannot. */
72 return (l.base != 0);
73}
74
75int
76frame_id_eq (struct frame_id l, struct frame_id r)
77{
78 /* If .base is different, the frames are different. */
79 if (l.base != r.base)
80 return 0;
81 /* Add a test to check that the frame ID's are for the same function
82 here. */
83 return 1;
84}
85
86int
87frame_id_inner (struct frame_id l, struct frame_id r)
88{
89 /* Only return non-zero when strictly inner than. Note that, per
90 comment in "frame.h", there is some fuzz here. Frameless
91 functions are not strictly inner than (same .base but different
92 .func). */
93 return INNER_THAN (l.base, r.base);
94}
95
101dcfbe
AC
96struct frame_info *
97frame_find_by_id (struct frame_id id)
98{
99 struct frame_info *frame;
100
101 /* ZERO denotes the null frame, let the caller decide what to do
102 about it. Should it instead return get_current_frame()? */
7a424e99 103 if (!frame_id_p (id))
101dcfbe
AC
104 return NULL;
105
106 for (frame = get_current_frame ();
107 frame != NULL;
108 frame = get_prev_frame (frame))
109 {
7a424e99
AC
110 struct frame_id this = get_frame_id (frame);
111 if (frame_id_eq (id, this))
112 /* An exact match. */
113 return frame;
114 if (frame_id_inner (id, this))
115 /* Gone to far. */
101dcfbe 116 return NULL;
7a424e99
AC
117 /* Either, we're not yet gone far enough out along the frame
118 chain (inner(this,id), or we're comparing frameless functions
119 (same .base, different .func, no test available). Struggle
120 on until we've definitly gone to far. */
101dcfbe
AC
121 }
122 return NULL;
123}
124
f18c5a73
AC
125CORE_ADDR
126frame_pc_unwind (struct frame_info *frame)
127{
128 if (!frame->pc_unwind_cache_p)
129 {
130 frame->pc_unwind_cache = frame->pc_unwind (frame, &frame->unwind_cache);
131 frame->pc_unwind_cache_p = 1;
132 }
133 return frame->pc_unwind_cache;
134}
135
4f460812
AC
136void
137frame_register_unwind (struct frame_info *frame, int regnum,
138 int *optimizedp, enum lval_type *lvalp,
139 CORE_ADDR *addrp, int *realnump, void *bufferp)
140{
141 struct frame_unwind_cache *cache;
142
143 /* Require all but BUFFERP to be valid. A NULL BUFFERP indicates
144 that the value proper does not need to be fetched. */
145 gdb_assert (optimizedp != NULL);
146 gdb_assert (lvalp != NULL);
147 gdb_assert (addrp != NULL);
148 gdb_assert (realnump != NULL);
149 /* gdb_assert (bufferp != NULL); */
150
151 /* NOTE: cagney/2002-04-14: It would be nice if, instead of a
152 special case, there was always an inner frame dedicated to the
153 hardware registers. Unfortunatly, there is too much unwind code
154 around that looks up/down the frame chain while making the
155 assumption that each frame level is using the same unwind code. */
156
157 if (frame == NULL)
158 {
159 /* We're in the inner-most frame, get the value direct from the
160 register cache. */
161 *optimizedp = 0;
162 *lvalp = lval_register;
fa5f27c7
AC
163 /* ULGH! Code uses the offset into the raw register byte array
164 as a way of identifying a register. */
165 *addrp = REGISTER_BYTE (regnum);
4f460812
AC
166 /* Should this code test ``register_cached (regnum) < 0'' and do
167 something like set realnum to -1 when the register isn't
168 available? */
169 *realnump = regnum;
170 if (bufferp)
4caf0990 171 deprecated_read_register_gen (regnum, bufferp);
4f460812
AC
172 return;
173 }
174
175 /* Ask this frame to unwind its register. */
f18c5a73 176 frame->register_unwind (frame, &frame->unwind_cache, regnum,
4f460812
AC
177 optimizedp, lvalp, addrp, realnump, bufferp);
178}
179
a216a322
AC
180void
181frame_register (struct frame_info *frame, int regnum,
182 int *optimizedp, enum lval_type *lvalp,
183 CORE_ADDR *addrp, int *realnump, void *bufferp)
184{
185 /* Require all but BUFFERP to be valid. A NULL BUFFERP indicates
186 that the value proper does not need to be fetched. */
187 gdb_assert (optimizedp != NULL);
188 gdb_assert (lvalp != NULL);
189 gdb_assert (addrp != NULL);
190 gdb_assert (realnump != NULL);
191 /* gdb_assert (bufferp != NULL); */
192
193 /* Ulgh! Old code that, for lval_register, sets ADDRP to the offset
194 of the register in the register cache. It should instead return
195 the REGNUM corresponding to that register. Translate the . */
196 if (GET_SAVED_REGISTER_P ())
197 {
198 GET_SAVED_REGISTER (bufferp, optimizedp, addrp, frame, regnum, lvalp);
199 /* Compute the REALNUM if the caller wants it. */
200 if (*lvalp == lval_register)
201 {
202 int regnum;
203 for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
204 {
205 if (*addrp == register_offset_hack (current_gdbarch, regnum))
206 {
207 *realnump = regnum;
208 return;
209 }
210 }
211 internal_error (__FILE__, __LINE__,
212 "Failed to compute the register number corresponding"
213 " to 0x%s", paddr_d (*addrp));
214 }
215 *realnump = -1;
216 return;
217 }
218
219 /* Reached the the bottom (youngest, inner most) of the frame chain
220 (youngest, inner most) frame, go direct to the hardware register
221 cache (do not pass go, do not try to cache the value, ...). The
222 unwound value would have been cached in frame->next but that
223 doesn't exist. This doesn't matter as the hardware register
224 cache is stopping any unnecessary accesses to the target. */
225
226 /* NOTE: cagney/2002-04-14: It would be nice if, instead of a
227 special case, there was always an inner frame dedicated to the
228 hardware registers. Unfortunatly, there is too much unwind code
229 around that looks up/down the frame chain while making the
230 assumption that each frame level is using the same unwind code. */
231
232 if (frame == NULL)
233 frame_register_unwind (NULL, regnum, optimizedp, lvalp, addrp, realnump,
234 bufferp);
235 else
236 frame_register_unwind (frame->next, regnum, optimizedp, lvalp, addrp,
237 realnump, bufferp);
238}
239
135c175f
AC
240void
241frame_unwind_signed_register (struct frame_info *frame, int regnum,
242 LONGEST *val)
243{
244 int optimized;
245 CORE_ADDR addr;
246 int realnum;
247 enum lval_type lval;
248 void *buf = alloca (MAX_REGISTER_RAW_SIZE);
249 frame_register_unwind (frame, regnum, &optimized, &lval, &addr,
250 &realnum, buf);
251 (*val) = extract_signed_integer (buf, REGISTER_VIRTUAL_SIZE (regnum));
252}
253
254void
255frame_unwind_unsigned_register (struct frame_info *frame, int regnum,
256 ULONGEST *val)
257{
258 int optimized;
259 CORE_ADDR addr;
260 int realnum;
261 enum lval_type lval;
262 void *buf = alloca (MAX_REGISTER_RAW_SIZE);
263 frame_register_unwind (frame, regnum, &optimized, &lval, &addr,
264 &realnum, buf);
265 (*val) = extract_unsigned_integer (buf, REGISTER_VIRTUAL_SIZE (regnum));
266}
4f460812 267
f908a0eb
AC
268void
269frame_read_unsigned_register (struct frame_info *frame, int regnum,
270 ULONGEST *val)
271{
272 /* NOTE: cagney/2002-10-31: There is a bit of dogma here - there is
273 always a frame. Both this, and the equivalent
274 frame_read_signed_register() function, can only be called with a
275 valid frame. If, for some reason, this function is called
276 without a frame then the problem isn't here, but rather in the
277 caller. It should of first created a frame and then passed that
278 in. */
279 /* NOTE: cagney/2002-10-31: As a side bar, keep in mind that the
280 ``current_frame'' should not be treated as a special case. While
281 ``get_next_frame (current_frame) == NULL'' currently holds, it
282 should, as far as possible, not be relied upon. In the future,
283 ``get_next_frame (current_frame)'' may instead simply return a
284 normal frame object that simply always gets register values from
285 the register cache. Consequently, frame code should try to avoid
286 tests like ``if get_next_frame() == NULL'' and instead just rely
287 on recursive frame calls (like the below code) when manipulating
288 a frame chain. */
289 gdb_assert (frame != NULL);
290 frame_unwind_unsigned_register (get_next_frame (frame), regnum, val);
291}
292
293void
294frame_read_signed_register (struct frame_info *frame, int regnum,
295 LONGEST *val)
296{
297 /* See note in frame_read_unsigned_register(). */
298 gdb_assert (frame != NULL);
299 frame_unwind_signed_register (get_next_frame (frame), regnum, val);
300}
301
18cde8d5 302static void
4f460812
AC
303generic_unwind_get_saved_register (char *raw_buffer,
304 int *optimizedp,
305 CORE_ADDR *addrp,
306 struct frame_info *frame,
307 int regnum,
308 enum lval_type *lvalp)
309{
310 int optimizedx;
311 CORE_ADDR addrx;
312 int realnumx;
313 enum lval_type lvalx;
314
315 if (!target_has_registers)
316 error ("No registers.");
317
318 /* Keep things simple, ensure that all the pointers (except valuep)
319 are non NULL. */
320 if (optimizedp == NULL)
321 optimizedp = &optimizedx;
322 if (lvalp == NULL)
323 lvalp = &lvalx;
324 if (addrp == NULL)
325 addrp = &addrx;
326
327 /* Reached the the bottom (youngest, inner most) of the frame chain
328 (youngest, inner most) frame, go direct to the hardware register
329 cache (do not pass go, do not try to cache the value, ...). The
330 unwound value would have been cached in frame->next but that
331 doesn't exist. This doesn't matter as the hardware register
332 cache is stopping any unnecessary accesses to the target. */
333
334 /* NOTE: cagney/2002-04-14: It would be nice if, instead of a
335 special case, there was always an inner frame dedicated to the
336 hardware registers. Unfortunatly, there is too much unwind code
337 around that looks up/down the frame chain while making the
338 assumption that each frame level is using the same unwind code. */
339
340 if (frame == NULL)
341 frame_register_unwind (NULL, regnum, optimizedp, lvalp, addrp, &realnumx,
342 raw_buffer);
343 else
344 frame_register_unwind (frame->next, regnum, optimizedp, lvalp, addrp,
345 &realnumx, raw_buffer);
346}
347
d65fe839
AC
348void
349get_saved_register (char *raw_buffer,
350 int *optimized,
351 CORE_ADDR *addrp,
352 struct frame_info *frame,
353 int regnum,
354 enum lval_type *lval)
355{
a216a322
AC
356 if (GET_SAVED_REGISTER_P ())
357 {
358 GET_SAVED_REGISTER (raw_buffer, optimized, addrp, frame, regnum, lval);
359 return;
360 }
361 generic_unwind_get_saved_register (raw_buffer, optimized, addrp, frame,
362 regnum, lval);
d65fe839
AC
363}
364
cda5a58a 365/* frame_register_read ()
d65fe839 366
cda5a58a 367 Find and return the value of REGNUM for the specified stack frame.
d65fe839
AC
368 The number of bytes copied is REGISTER_RAW_SIZE (REGNUM).
369
cda5a58a 370 Returns 0 if the register value could not be found. */
d65fe839 371
cda5a58a
AC
372int
373frame_register_read (struct frame_info *frame, int regnum, void *myaddr)
d65fe839 374{
a216a322
AC
375 int optimized;
376 enum lval_type lval;
377 CORE_ADDR addr;
378 int realnum;
379 frame_register (frame, regnum, &optimized, &lval, &addr, &realnum, myaddr);
d65fe839 380
c97dcfc7
AC
381 /* FIXME: cagney/2002-05-15: This test, is just bogus.
382
383 It indicates that the target failed to supply a value for a
384 register because it was "not available" at this time. Problem
385 is, the target still has the register and so get saved_register()
386 may be returning a value saved on the stack. */
387
d65fe839 388 if (register_cached (regnum) < 0)
cda5a58a 389 return 0; /* register value not available */
d65fe839 390
a216a322 391 return !optimized;
d65fe839 392}
e36180d7
AC
393
394
395/* Map between a frame register number and its name. A frame register
396 space is a superset of the cooked register space --- it also
397 includes builtin registers. */
398
399int
400frame_map_name_to_regnum (const char *name, int len)
401{
402 int i;
403
404 /* Search register name space. */
405 for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
406 if (REGISTER_NAME (i) && len == strlen (REGISTER_NAME (i))
407 && strncmp (name, REGISTER_NAME (i), len) == 0)
408 {
409 return i;
410 }
411
412 /* Try builtin registers. */
413 i = builtin_reg_map_name_to_regnum (name, len);
414 if (i >= 0)
415 {
416 /* A builtin register doesn't fall into the architecture's
417 register range. */
418 gdb_assert (i >= NUM_REGS + NUM_PSEUDO_REGS);
419 return i;
420 }
421
422 return -1;
423}
424
425const char *
426frame_map_regnum_to_name (int regnum)
427{
428 if (regnum < 0)
429 return NULL;
430 if (regnum < NUM_REGS + NUM_PSEUDO_REGS)
431 return REGISTER_NAME (regnum);
432 return builtin_reg_map_regnum_to_name (regnum);
433}
4c1e7e9d
AC
434
435/* Info about the innermost stack frame (contents of FP register) */
436
437static struct frame_info *current_frame;
438
439/* Cache for frame addresses already read by gdb. Valid only while
440 inferior is stopped. Control variables for the frame cache should
441 be local to this module. */
442
443static struct obstack frame_cache_obstack;
444
445void *
446frame_obstack_alloc (unsigned long size)
447{
448 return obstack_alloc (&frame_cache_obstack, size);
449}
450
451void
452frame_saved_regs_zalloc (struct frame_info *fi)
453{
454 fi->saved_regs = (CORE_ADDR *)
455 frame_obstack_alloc (SIZEOF_FRAME_SAVED_REGS);
456 memset (fi->saved_regs, 0, SIZEOF_FRAME_SAVED_REGS);
457}
458
459
460/* Return the innermost (currently executing) stack frame. */
461
462struct frame_info *
463get_current_frame (void)
464{
465 if (current_frame == NULL)
466 {
467 if (target_has_stack)
468 current_frame = create_new_frame (read_fp (), read_pc ());
469 else
470 error ("No stack.");
471 }
472 return current_frame;
473}
474
6e7f8b9c
AC
475/* The "selected" stack frame is used by default for local and arg
476 access. May be zero, for no selected frame. */
477
478struct frame_info *deprecated_selected_frame;
479
480/* Return the selected frame. Always non-null (unless there isn't an
481 inferior sufficient for creating a frame) in which case an error is
482 thrown. */
483
484struct frame_info *
485get_selected_frame (void)
486{
487 if (deprecated_selected_frame == NULL)
488 /* Hey! Don't trust this. It should really be re-finding the
489 last selected frame of the currently selected thread. This,
490 though, is better than nothing. */
491 select_frame (get_current_frame ());
492 /* There is always a frame. */
493 gdb_assert (deprecated_selected_frame != NULL);
494 return deprecated_selected_frame;
495}
496
497/* Select frame FI (or NULL - to invalidate the current frame). */
498
499void
500select_frame (struct frame_info *fi)
501{
502 register struct symtab *s;
503
504 deprecated_selected_frame = fi;
505 /* NOTE: cagney/2002-05-04: FI can be NULL. This occures when the
506 frame is being invalidated. */
507 if (selected_frame_level_changed_hook)
508 selected_frame_level_changed_hook (frame_relative_level (fi));
509
510 /* FIXME: kseitz/2002-08-28: It would be nice to call
511 selected_frame_level_changed_event right here, but due to limitations
512 in the current interfaces, we would end up flooding UIs with events
513 because select_frame is used extensively internally.
514
515 Once we have frame-parameterized frame (and frame-related) commands,
516 the event notification can be moved here, since this function will only
517 be called when the users selected frame is being changed. */
518
519 /* Ensure that symbols for this frame are read in. Also, determine the
520 source language of this frame, and switch to it if desired. */
521 if (fi)
522 {
523 s = find_pc_symtab (fi->pc);
524 if (s
525 && s->language != current_language->la_language
526 && s->language != language_unknown
527 && language_mode == language_mode_auto)
528 {
529 set_language (s->language);
530 }
531 }
532}
533
4c1e7e9d
AC
534/* Return the register saved in the simplistic ``saved_regs'' cache.
535 If the value isn't here AND a value is needed, try the next inner
536 most frame. */
537
538static void
539frame_saved_regs_register_unwind (struct frame_info *frame, void **cache,
540 int regnum, int *optimizedp,
541 enum lval_type *lvalp, CORE_ADDR *addrp,
542 int *realnump, void *bufferp)
543{
544 /* There is always a frame at this point. And THIS is the frame
545 we're interested in. */
546 gdb_assert (frame != NULL);
547 /* If we're using generic dummy frames, we'd better not be in a call
548 dummy. (generic_call_dummy_register_unwind ought to have been called
549 instead.) */
07555a72 550 gdb_assert (!(DEPRECATED_USE_GENERIC_DUMMY_FRAMES
5e0f933e 551 && (get_frame_type (frame) == DUMMY_FRAME)));
4c1e7e9d
AC
552
553 /* Load the saved_regs register cache. */
554 if (frame->saved_regs == NULL)
555 FRAME_INIT_SAVED_REGS (frame);
556
557 if (frame->saved_regs != NULL
558 && frame->saved_regs[regnum] != 0)
559 {
560 if (regnum == SP_REGNUM)
561 {
562 /* SP register treated specially. */
563 *optimizedp = 0;
564 *lvalp = not_lval;
565 *addrp = 0;
566 *realnump = -1;
567 if (bufferp != NULL)
568 store_address (bufferp, REGISTER_RAW_SIZE (regnum),
569 frame->saved_regs[regnum]);
570 }
571 else
572 {
573 /* Any other register is saved in memory, fetch it but cache
574 a local copy of its value. */
575 *optimizedp = 0;
576 *lvalp = lval_memory;
577 *addrp = frame->saved_regs[regnum];
578 *realnump = -1;
579 if (bufferp != NULL)
580 {
581#if 1
582 /* Save each register value, as it is read in, in a
583 frame based cache. */
584 void **regs = (*cache);
585 if (regs == NULL)
586 {
587 int sizeof_cache = ((NUM_REGS + NUM_PSEUDO_REGS)
588 * sizeof (void *));
589 regs = frame_obstack_alloc (sizeof_cache);
590 memset (regs, 0, sizeof_cache);
591 (*cache) = regs;
592 }
593 if (regs[regnum] == NULL)
594 {
595 regs[regnum]
596 = frame_obstack_alloc (REGISTER_RAW_SIZE (regnum));
597 read_memory (frame->saved_regs[regnum], regs[regnum],
598 REGISTER_RAW_SIZE (regnum));
599 }
600 memcpy (bufferp, regs[regnum], REGISTER_RAW_SIZE (regnum));
601#else
602 /* Read the value in from memory. */
603 read_memory (frame->saved_regs[regnum], bufferp,
604 REGISTER_RAW_SIZE (regnum));
605#endif
606 }
607 }
608 return;
609 }
610
611 /* No luck, assume this and the next frame have the same register
612 value. If a value is needed, pass the request on down the chain;
613 otherwise just return an indication that the value is in the same
614 register as the next frame. */
615 if (bufferp == NULL)
616 {
617 *optimizedp = 0;
618 *lvalp = lval_register;
619 *addrp = 0;
620 *realnump = regnum;
621 }
622 else
623 {
624 frame_register_unwind (frame->next, regnum, optimizedp, lvalp, addrp,
625 realnump, bufferp);
626 }
627}
628
f18c5a73
AC
629static CORE_ADDR
630frame_saved_regs_pc_unwind (struct frame_info *frame, void **cache)
631{
632 return FRAME_SAVED_PC (frame);
633}
634
4c1e7e9d
AC
635/* Function: get_saved_register
636 Find register number REGNUM relative to FRAME and put its (raw,
637 target format) contents in *RAW_BUFFER.
638
639 Set *OPTIMIZED if the variable was optimized out (and thus can't be
640 fetched). Note that this is never set to anything other than zero
641 in this implementation.
642
643 Set *LVAL to lval_memory, lval_register, or not_lval, depending on
644 whether the value was fetched from memory, from a register, or in a
645 strange and non-modifiable way (e.g. a frame pointer which was
646 calculated rather than fetched). We will use not_lval for values
647 fetched from generic dummy frames.
648
649 Set *ADDRP to the address, either in memory or as a REGISTER_BYTE
650 offset into the registers array. If the value is stored in a dummy
651 frame, set *ADDRP to zero.
652
653 To use this implementation, define a function called
654 "get_saved_register" in your target code, which simply passes all
655 of its arguments to this function.
656
657 The argument RAW_BUFFER must point to aligned memory. */
658
659void
660deprecated_generic_get_saved_register (char *raw_buffer, int *optimized,
661 CORE_ADDR *addrp,
662 struct frame_info *frame, int regnum,
663 enum lval_type *lval)
664{
665 if (!target_has_registers)
666 error ("No registers.");
667
668 /* Normal systems don't optimize out things with register numbers. */
669 if (optimized != NULL)
670 *optimized = 0;
671
672 if (addrp) /* default assumption: not found in memory */
673 *addrp = 0;
674
675 /* Note: since the current frame's registers could only have been
676 saved by frames INTERIOR TO the current frame, we skip examining
677 the current frame itself: otherwise, we would be getting the
678 previous frame's registers which were saved by the current frame. */
679
680 while (frame && ((frame = frame->next) != NULL))
681 {
5e0f933e 682 if (get_frame_type (frame) == DUMMY_FRAME)
4c1e7e9d
AC
683 {
684 if (lval) /* found it in a CALL_DUMMY frame */
685 *lval = not_lval;
686 if (raw_buffer)
687 /* FIXME: cagney/2002-06-26: This should be via the
688 gdbarch_register_read() method so that it, on the fly,
689 constructs either a raw or pseudo register from the raw
690 register cache. */
691 regcache_raw_read (generic_find_dummy_frame (frame->pc,
692 frame->frame),
693 regnum, raw_buffer);
694 return;
695 }
696
697 FRAME_INIT_SAVED_REGS (frame);
698 if (frame->saved_regs != NULL
699 && frame->saved_regs[regnum] != 0)
700 {
701 if (lval) /* found it saved on the stack */
702 *lval = lval_memory;
703 if (regnum == SP_REGNUM)
704 {
705 if (raw_buffer) /* SP register treated specially */
706 store_address (raw_buffer, REGISTER_RAW_SIZE (regnum),
707 frame->saved_regs[regnum]);
708 }
709 else
710 {
711 if (addrp) /* any other register */
712 *addrp = frame->saved_regs[regnum];
713 if (raw_buffer)
714 read_memory (frame->saved_regs[regnum], raw_buffer,
715 REGISTER_RAW_SIZE (regnum));
716 }
717 return;
718 }
719 }
720
721 /* If we get thru the loop to this point, it means the register was
722 not saved in any frame. Return the actual live-register value. */
723
724 if (lval) /* found it in a live register */
725 *lval = lval_register;
726 if (addrp)
727 *addrp = REGISTER_BYTE (regnum);
728 if (raw_buffer)
729 deprecated_read_register_gen (regnum, raw_buffer);
730}
731
732/* Using the PC, select a mechanism for unwinding a frame returning
733 the previous frame. The register unwind function should, on
734 demand, initialize the ->context object. */
735
736static void
737set_unwind_by_pc (CORE_ADDR pc, CORE_ADDR fp,
f18c5a73
AC
738 frame_register_unwind_ftype **unwind_register,
739 frame_pc_unwind_ftype **unwind_pc)
4c1e7e9d 740{
07555a72 741 if (!DEPRECATED_USE_GENERIC_DUMMY_FRAMES)
f18c5a73
AC
742 {
743 /* Still need to set this to something. The ``info frame'' code
744 calls this function to find out where the saved registers are.
745 Hopefully this is robust enough to stop any core dumps and
746 return vaguely correct values.. */
747 *unwind_register = frame_saved_regs_register_unwind;
748 *unwind_pc = frame_saved_regs_pc_unwind;
749 }
ae45cd16
AC
750 else if (DEPRECATED_PC_IN_CALL_DUMMY_P ()
751 ? DEPRECATED_PC_IN_CALL_DUMMY (pc, 0, 0)
752 : pc_in_dummy_frame (pc))
f18c5a73
AC
753 {
754 *unwind_register = dummy_frame_register_unwind;
755 *unwind_pc = dummy_frame_pc_unwind;
756 }
4c1e7e9d 757 else
f18c5a73
AC
758 {
759 *unwind_register = frame_saved_regs_register_unwind;
760 *unwind_pc = frame_saved_regs_pc_unwind;
761 }
4c1e7e9d
AC
762}
763
764/* Create an arbitrary (i.e. address specified by user) or innermost frame.
765 Always returns a non-NULL value. */
766
767struct frame_info *
768create_new_frame (CORE_ADDR addr, CORE_ADDR pc)
769{
770 struct frame_info *fi;
5a203e44 771 enum frame_type type;
4c1e7e9d
AC
772
773 fi = (struct frame_info *)
774 obstack_alloc (&frame_cache_obstack,
775 sizeof (struct frame_info));
776
777 /* Zero all fields by default. */
778 memset (fi, 0, sizeof (struct frame_info));
779
780 fi->frame = addr;
781 fi->pc = pc;
5a203e44
AC
782 /* NOTE: cagney/2002-11-18: The code segments, found in
783 create_new_frame and get_prev_frame(), that initializes the
784 frames type is subtly different. The latter only updates ->type
785 when it encounters a SIGTRAMP_FRAME or DUMMY_FRAME. This stops
786 get_prev_frame() overriding the frame's type when the INIT code
787 has previously set it. This is really somewhat bogus. The
788 initialization, as seen in create_new_frame(), should occur
789 before the INIT function has been called. */
ae45cd16
AC
790 if (DEPRECATED_USE_GENERIC_DUMMY_FRAMES
791 && (DEPRECATED_PC_IN_CALL_DUMMY_P ()
792 ? DEPRECATED_PC_IN_CALL_DUMMY (pc, 0, 0)
793 : pc_in_dummy_frame (pc)))
5a203e44
AC
794 /* NOTE: cagney/2002-11-11: Does this even occure? */
795 type = DUMMY_FRAME;
796 else
797 {
798 char *name;
799 find_pc_partial_function (pc, &name, NULL, NULL);
800 if (PC_IN_SIGTRAMP (fi->pc, name))
801 type = SIGTRAMP_FRAME;
802 else
803 type = NORMAL_FRAME;
804 }
805 fi->type = type;
4c1e7e9d
AC
806
807 if (INIT_EXTRA_FRAME_INFO_P ())
808 INIT_EXTRA_FRAME_INFO (0, fi);
809
810 /* Select/initialize an unwind function. */
f18c5a73
AC
811 set_unwind_by_pc (fi->pc, fi->frame, &fi->register_unwind,
812 &fi->pc_unwind);
4c1e7e9d
AC
813
814 return fi;
815}
816
817/* Return the frame that FRAME calls (NULL if FRAME is the innermost
818 frame). */
819
820struct frame_info *
821get_next_frame (struct frame_info *frame)
822{
823 return frame->next;
824}
825
826/* Flush the entire frame cache. */
827
828void
829flush_cached_frames (void)
830{
831 /* Since we can't really be sure what the first object allocated was */
832 obstack_free (&frame_cache_obstack, 0);
833 obstack_init (&frame_cache_obstack);
834
835 current_frame = NULL; /* Invalidate cache */
836 select_frame (NULL);
837 annotate_frames_invalid ();
838}
839
840/* Flush the frame cache, and start a new one if necessary. */
841
842void
843reinit_frame_cache (void)
844{
845 flush_cached_frames ();
846
847 /* FIXME: The inferior_ptid test is wrong if there is a corefile. */
848 if (PIDGET (inferior_ptid) != 0)
849 {
850 select_frame (get_current_frame ());
851 }
852}
853
854/* Return a structure containing various interesting information
855 about the frame that called NEXT_FRAME. Returns NULL
856 if there is no such frame. */
857
858struct frame_info *
859get_prev_frame (struct frame_info *next_frame)
860{
861 CORE_ADDR address = 0;
862 struct frame_info *prev;
95adb866 863 int fromleaf;
4c1e7e9d 864
95adb866
AC
865 /* Return the inner-most frame, when the caller passes in NULL. */
866 /* NOTE: cagney/2002-11-09: Not sure how this would happen. The
867 caller should have previously obtained a valid frame using
868 get_selected_frame() and then called this code - only possibility
869 I can think of is code behaving badly. */
870 if (next_frame == NULL)
4c1e7e9d 871 {
95adb866
AC
872 /* NOTE: cagney/2002-11-09: There was a code segment here that
873 would error out when CURRENT_FRAME was NULL. The comment
874 that went with it made the claim ...
875
876 ``This screws value_of_variable, which just wants a nice
877 clean NULL return from block_innermost_frame if there are no
878 frames. I don't think I've ever seen this message happen
879 otherwise. And returning NULL here is a perfectly legitimate
880 thing to do.''
881
882 Per the above, this code shouldn't even be called with a NULL
883 NEXT_FRAME. */
4c1e7e9d
AC
884 return current_frame;
885 }
886
15220c65
AC
887 /* Only try to do the unwind once. */
888 if (next_frame->prev_p)
4c1e7e9d 889 return next_frame->prev;
15220c65 890 next_frame->prev_p = 1;
4c1e7e9d
AC
891
892 /* On some machines it is possible to call a function without
893 setting up a stack frame for it. On these machines, we
894 define this macro to take two args; a frameinfo pointer
895 identifying a frame and a variable to set or clear if it is
896 or isn't leafless. */
897
898 /* Still don't want to worry about this except on the innermost
95adb866
AC
899 frame. This macro will set FROMLEAF if NEXT_FRAME is a frameless
900 function invocation. */
901 if (next_frame->next == NULL)
902 /* FIXME: 2002-11-09: Frameless functions can occure anywhere in
903 the frame chain, not just the inner most frame! The generic,
904 per-architecture, frame code should handle this and the below
905 should simply be removed. */
906 fromleaf = FRAMELESS_FUNCTION_INVOCATION (next_frame);
907 else
908 fromleaf = 0;
909
910 if (fromleaf)
911 /* A frameless inner-most frame. The `FP' (which isn't an
912 architecture frame-pointer register!) of the caller is the same
913 as the callee. */
914 /* FIXME: 2002-11-09: There isn't any reason to special case this
915 edge condition. Instead the per-architecture code should hande
916 it locally. */
c193f6ac 917 address = get_frame_base (next_frame);
95adb866 918 else
4c1e7e9d
AC
919 {
920 /* Two macros defined in tm.h specify the machine-dependent
921 actions to be performed here.
95adb866 922
4c1e7e9d 923 First, get the frame's chain-pointer.
95adb866 924
4c1e7e9d
AC
925 If that is zero, the frame is the outermost frame or a leaf
926 called by the outermost frame. This means that if start
927 calls main without a frame, we'll return 0 (which is fine
928 anyway).
929
930 Nope; there's a problem. This also returns when the current
931 routine is a leaf of main. This is unacceptable. We move
932 this to after the ffi test; I'd rather have backtraces from
933 start go curfluy than have an abort called from main not show
934 main. */
935 address = FRAME_CHAIN (next_frame);
936
937 /* FIXME: cagney/2002-06-08: There should be two tests here.
938 The first would check for a valid frame chain based on a user
939 selectable policy. The default being ``stop at main'' (as
940 implemented by generic_func_frame_chain_valid()). Other
941 policies would be available - stop at NULL, .... The second
942 test, if provided by the target architecture, would check for
943 more exotic cases - most target architectures wouldn't bother
944 with this second case. */
945 if (!FRAME_CHAIN_VALID (address, next_frame))
946 return 0;
947 }
948 if (address == 0)
949 return 0;
950
95adb866 951 /* Create an initially zero previous frame. */
4c1e7e9d
AC
952 prev = (struct frame_info *)
953 obstack_alloc (&frame_cache_obstack,
954 sizeof (struct frame_info));
4c1e7e9d
AC
955 memset (prev, 0, sizeof (struct frame_info));
956
95adb866
AC
957 /* Link it in. */
958 next_frame->prev = prev;
4c1e7e9d
AC
959 prev->next = next_frame;
960 prev->frame = address;
961 prev->level = next_frame->level + 1;
5a203e44
AC
962 /* FIXME: cagney/2002-11-18: Should be setting the frame's type
963 here, before anything else, and not last. Various INIT functions
964 are full of work-arounds for the frames type not being set
965 correctly from the word go. Ulgh! */
966 prev->type = NORMAL_FRAME;
4c1e7e9d 967
95adb866 968 /* This change should not be needed, FIXME! We should determine
a5afb99f
AC
969 whether any targets *need* DEPRECATED_INIT_FRAME_PC to happen
970 after INIT_EXTRA_FRAME_INFO and come up with a simple way to
971 express what goes on here.
95adb866
AC
972
973 INIT_EXTRA_FRAME_INFO is called from two places: create_new_frame
974 (where the PC is already set up) and here (where it isn't).
a5afb99f 975 DEPRECATED_INIT_FRAME_PC is only called from here, always after
95adb866
AC
976 INIT_EXTRA_FRAME_INFO.
977
978 The catch is the MIPS, where INIT_EXTRA_FRAME_INFO requires the
979 PC value (which hasn't been set yet). Some other machines appear
980 to require INIT_EXTRA_FRAME_INFO before they can do
a5afb99f 981 DEPRECATED_INIT_FRAME_PC. Phoo.
95adb866 982
2ca6c561
AC
983 We shouldn't need DEPRECATED_INIT_FRAME_PC_FIRST to add more
984 complication to an already overcomplicated part of GDB.
985 gnu@cygnus.com, 15Sep92.
95adb866 986
a5afb99f 987 Assuming that some machines need DEPRECATED_INIT_FRAME_PC after
95adb866
AC
988 INIT_EXTRA_FRAME_INFO, one possible scheme:
989
990 SETUP_INNERMOST_FRAME(): Default version is just create_new_frame
991 (read_fp ()), read_pc ()). Machines with extra frame info would
992 do that (or the local equivalent) and then set the extra fields.
993
994 SETUP_ARBITRARY_FRAME(argc, argv): Only change here is that
995 create_new_frame would no longer init extra frame info;
996 SETUP_ARBITRARY_FRAME would have to do that.
997
998 INIT_PREV_FRAME(fromleaf, prev) Replace INIT_EXTRA_FRAME_INFO and
a5afb99f
AC
999 DEPRECATED_INIT_FRAME_PC. This should also return a flag saying
1000 whether to keep the new frame, or whether to discard it, because
1001 on some machines (e.g. mips) it is really awkward to have
95adb866
AC
1002 FRAME_CHAIN_VALID called *before* INIT_EXTRA_FRAME_INFO (there is
1003 no good way to get information deduced in FRAME_CHAIN_VALID into
1004 the extra fields of the new frame). std_frame_pc(fromleaf, prev)
1005
1006 This is the default setting for INIT_PREV_FRAME. It just does
a5afb99f
AC
1007 what the default DEPRECATED_INIT_FRAME_PC does. Some machines
1008 will call it from INIT_PREV_FRAME (either at the beginning, the
1009 end, or in the middle). Some machines won't use it.
95adb866
AC
1010
1011 kingdon@cygnus.com, 13Apr93, 31Jan94, 14Dec94. */
1012
1013 /* NOTE: cagney/2002-11-09: Just ignore the above! There is no
1014 reason for things to be this complicated.
1015
1016 The trick is to assume that there is always a frame. Instead of
1017 special casing the inner-most frame, create fake frame
1018 (containing the hardware registers) that is inner to the
1019 user-visible inner-most frame (...) and then unwind from that.
1020 That way architecture code can use use the standard
1021 frame_XX_unwind() functions and not differentiate between the
1022 inner most and any other case.
1023
1024 Since there is always a frame to unwind from, there is always
1025 somewhere (NEXT_FRAME) to store all the info needed to construct
1026 a new (previous) frame without having to first create it. This
1027 means that the convolution below - needing to carefully order a
1028 frame's initialization - isn't needed.
1029
1030 The irony here though, is that FRAME_CHAIN(), at least for a more
1031 up-to-date architecture, always calls FRAME_SAVED_PC(), and
1032 FRAME_SAVED_PC() computes the PC but without first needing the
1033 frame! Instead of the convolution below, we could have simply
1034 called FRAME_SAVED_PC() and been done with it! Note that
1035 FRAME_SAVED_PC() is being superseed by frame_pc_unwind() and that
1036 function does have somewhere to cache that PC value. */
4c1e7e9d 1037
2ca6c561 1038 if (DEPRECATED_INIT_FRAME_PC_FIRST_P ())
97f46953 1039 prev->pc = (DEPRECATED_INIT_FRAME_PC_FIRST (fromleaf, prev));
4c1e7e9d
AC
1040
1041 if (INIT_EXTRA_FRAME_INFO_P ())
1042 INIT_EXTRA_FRAME_INFO (fromleaf, prev);
1043
1044 /* This entry is in the frame queue now, which is good since
95adb866
AC
1045 FRAME_SAVED_PC may use that queue to figure out its value (see
1046 tm-sparc.h). We want the pc saved in the inferior frame. */
a5afb99f
AC
1047 if (DEPRECATED_INIT_FRAME_PC_P ())
1048 prev->pc = DEPRECATED_INIT_FRAME_PC (fromleaf, prev);
4c1e7e9d 1049
95adb866
AC
1050 /* If ->frame and ->pc are unchanged, we are in the process of
1051 getting ourselves into an infinite backtrace. Some architectures
1052 check this in FRAME_CHAIN or thereabouts, but it seems like there
1053 is no reason this can't be an architecture-independent check. */
1054 if (prev->frame == next_frame->frame
1055 && prev->pc == next_frame->pc)
4c1e7e9d 1056 {
95adb866
AC
1057 next_frame->prev = NULL;
1058 obstack_free (&frame_cache_obstack, prev);
1059 return NULL;
4c1e7e9d
AC
1060 }
1061
1062 /* Initialize the code used to unwind the frame PREV based on the PC
1063 (and probably other architectural information). The PC lets you
1064 check things like the debug info at that point (dwarf2cfi?) and
1065 use that to decide how the frame should be unwound. */
f18c5a73
AC
1066 set_unwind_by_pc (prev->pc, prev->frame, &prev->register_unwind,
1067 &prev->pc_unwind);
4c1e7e9d 1068
5a203e44
AC
1069 /* NOTE: cagney/2002-11-18: The code segments, found in
1070 create_new_frame and get_prev_frame(), that initializes the
1071 frames type is subtly different. The latter only updates ->type
1072 when it encounters a SIGTRAMP_FRAME or DUMMY_FRAME. This stops
1073 get_prev_frame() overriding the frame's type when the INIT code
1074 has previously set it. This is really somewhat bogus. The
1075 initialization, as seen in create_new_frame(), should occur
1076 before the INIT function has been called. */
07555a72 1077 if (DEPRECATED_USE_GENERIC_DUMMY_FRAMES
ae45cd16
AC
1078 && (DEPRECATED_PC_IN_CALL_DUMMY_P ()
1079 ? DEPRECATED_PC_IN_CALL_DUMMY (prev->pc, 0, 0)
1080 : pc_in_dummy_frame (prev->pc)))
5a203e44
AC
1081 prev->type = DUMMY_FRAME;
1082 else
1083 {
1084 /* FIXME: cagney/2002-11-10: This should be moved to before the
1085 INIT code above so that the INIT code knows what the frame's
1086 type is (in fact, for a [generic] dummy-frame, the type can
1087 be set and then the entire initialization can be skipped.
1088 Unforunatly, its the INIT code that sets the PC (Hmm, catch
1089 22). */
1090 char *name;
1091 find_pc_partial_function (prev->pc, &name, NULL, NULL);
1092 if (PC_IN_SIGTRAMP (prev->pc, name))
1093 prev->type = SIGTRAMP_FRAME;
1094 /* FIXME: cagney/2002-11-11: Leave prev->type alone. Some
1095 architectures are forcing the frame's type in INIT so we
1096 don't want to override it here. Remember, NORMAL_FRAME == 0,
1097 so it all works (just :-/). Once this initialization is
1098 moved to the start of this function, all this nastness will
1099 go away. */
1100 }
4c1e7e9d
AC
1101
1102 return prev;
1103}
1104
1105CORE_ADDR
1106get_frame_pc (struct frame_info *frame)
1107{
1108 return frame->pc;
1109}
1110
1058bca7
AC
1111static int
1112pc_notcurrent (struct frame_info *frame)
1113{
1114 /* If FRAME is not the innermost frame, that normally means that
1115 FRAME->pc points at the return instruction (which is *after* the
1116 call instruction), and we want to get the line containing the
1117 call (because the call is where the user thinks the program is).
1118 However, if the next frame is either a SIGTRAMP_FRAME or a
1119 DUMMY_FRAME, then the next frame will contain a saved interrupt
1120 PC and such a PC indicates the current (rather than next)
1121 instruction/line, consequently, for such cases, want to get the
1122 line containing fi->pc. */
1123 struct frame_info *next = get_next_frame (frame);
1124 int notcurrent = (next != NULL && get_frame_type (next) == NORMAL_FRAME);
1125 return notcurrent;
1126}
1127
1128void
1129find_frame_sal (struct frame_info *frame, struct symtab_and_line *sal)
1130{
1131 (*sal) = find_pc_line (frame->pc, pc_notcurrent (frame));
1132}
1133
c193f6ac
AC
1134/* Per "frame.h", return the ``address'' of the frame. Code should
1135 really be using get_frame_id(). */
1136CORE_ADDR
1137get_frame_base (struct frame_info *fi)
1138{
1139 return fi->frame;
1140}
1141
85cf597a
AC
1142/* Level of the selected frame: 0 for innermost, 1 for its caller, ...
1143 or -1 for a NULL frame. */
1144
1145int
1146frame_relative_level (struct frame_info *fi)
1147{
1148 if (fi == NULL)
1149 return -1;
1150 else
1151 return fi->level;
1152}
1153
5a203e44
AC
1154enum frame_type
1155get_frame_type (struct frame_info *frame)
1156{
1157 /* Some targets still don't use [generic] dummy frames. Catch them
1158 here. */
07555a72 1159 if (!DEPRECATED_USE_GENERIC_DUMMY_FRAMES
5a203e44
AC
1160 && deprecated_frame_in_dummy (frame))
1161 return DUMMY_FRAME;
1162 return frame->type;
1163}
1164
1165void
1166deprecated_set_frame_type (struct frame_info *frame, enum frame_type type)
1167{
1168 /* Arrrg! See comment in "frame.h". */
1169 frame->type = type;
1170}
1171
4c1e7e9d
AC
1172#ifdef FRAME_FIND_SAVED_REGS
1173/* XXX - deprecated. This is a compatibility function for targets
1174 that do not yet implement FRAME_INIT_SAVED_REGS. */
1175/* Find the addresses in which registers are saved in FRAME. */
1176
1177void
95486978
AC
1178deprecated_get_frame_saved_regs (struct frame_info *frame,
1179 struct frame_saved_regs *saved_regs_addr)
4c1e7e9d
AC
1180{
1181 if (frame->saved_regs == NULL)
1182 {
1183 frame->saved_regs = (CORE_ADDR *)
1184 frame_obstack_alloc (SIZEOF_FRAME_SAVED_REGS);
1185 }
1186 if (saved_regs_addr == NULL)
1187 {
1188 struct frame_saved_regs saved_regs;
1189 FRAME_FIND_SAVED_REGS (frame, saved_regs);
1190 memcpy (frame->saved_regs, &saved_regs, SIZEOF_FRAME_SAVED_REGS);
1191 }
1192 else
1193 {
1194 FRAME_FIND_SAVED_REGS (frame, *saved_regs_addr);
1195 memcpy (frame->saved_regs, saved_regs_addr, SIZEOF_FRAME_SAVED_REGS);
1196 }
1197}
1198#endif
1199
0394eb2a
AC
1200struct frame_extra_info *
1201get_frame_extra_info (struct frame_info *fi)
1202{
1203 return fi->extra_info;
1204}
1205
2c517d0e
AC
1206struct frame_extra_info *
1207frame_extra_info_zalloc (struct frame_info *fi, long size)
1208{
1209 fi->extra_info = frame_obstack_alloc (size);
1210 memset (fi->extra_info, 0, size);
1211 return fi->extra_info;
1212}
1213
4c1e7e9d
AC
1214void
1215_initialize_frame (void)
1216{
1217 obstack_init (&frame_cache_obstack);
1218}