1 /* Get info from stack frames;
2 convert between frames, blocks, functions and pc values.
3 Copyright 1986, 87, 88, 89, 91, 94, 95, 96, 97, 1998
4 Free Software Foundation, Inc.
6 This file is part of GDB.
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.
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.
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, Boston, MA 02111-1307, USA. */
29 #include "value.h" /* for read_register */
30 #include "target.h" /* for target_has_stack */
31 #include "inferior.h" /* for read_pc */
34 /* Prototypes for exported functions. */
36 void _initialize_blockframe
PARAMS ((void));
38 /* Is ADDR inside the startup file? Note that if your machine
39 has a way to detect the bottom of the stack, there is no need
40 to call this function from FRAME_CHAIN_VALID; the reason for
41 doing so is that some machines have no way of detecting bottom
44 A PC of zero is always considered to be the bottom of the stack. */
47 inside_entry_file (addr
)
52 if (symfile_objfile
== 0)
54 #if CALL_DUMMY_LOCATION == AT_ENTRY_POINT
55 /* Do not stop backtracing if the pc is in the call dummy
56 at the entry point. */
57 /* FIXME: Won't always work with zeros for the last two arguments */
58 if (PC_IN_CALL_DUMMY (addr
, 0, 0))
61 return (addr
>= symfile_objfile
-> ei
.entry_file_lowpc
&&
62 addr
< symfile_objfile
-> ei
.entry_file_highpc
);
65 /* Test a specified PC value to see if it is in the range of addresses
66 that correspond to the main() function. See comments above for why
67 we might want to do this.
69 Typically called from FRAME_CHAIN_VALID.
71 A PC of zero is always considered to be the bottom of the stack. */
79 if (symfile_objfile
== 0)
82 /* If the addr range is not set up at symbol reading time, set it up now.
83 This is for FRAME_CHAIN_VALID_ALTERNATE. I do this for coff, because
84 it is unable to set it up and symbol reading time. */
86 if (symfile_objfile
-> ei
.main_func_lowpc
== INVALID_ENTRY_LOWPC
&&
87 symfile_objfile
-> ei
.main_func_highpc
== INVALID_ENTRY_HIGHPC
)
89 struct symbol
*mainsym
;
91 mainsym
= lookup_symbol ("main", NULL
, VAR_NAMESPACE
, NULL
, NULL
);
92 if (mainsym
&& SYMBOL_CLASS(mainsym
) == LOC_BLOCK
)
94 symfile_objfile
->ei
.main_func_lowpc
=
95 BLOCK_START (SYMBOL_BLOCK_VALUE (mainsym
));
96 symfile_objfile
->ei
.main_func_highpc
=
97 BLOCK_END (SYMBOL_BLOCK_VALUE (mainsym
));
100 return (symfile_objfile
-> ei
.main_func_lowpc
<= pc
&&
101 symfile_objfile
-> ei
.main_func_highpc
> pc
);
104 /* Test a specified PC value to see if it is in the range of addresses
105 that correspond to the process entry point function. See comments
106 in objfiles.h for why we might want to do this.
108 Typically called from FRAME_CHAIN_VALID.
110 A PC of zero is always considered to be the bottom of the stack. */
113 inside_entry_func (pc
)
118 if (symfile_objfile
== 0)
120 #if CALL_DUMMY_LOCATION == AT_ENTRY_POINT
121 /* Do not stop backtracing if the pc is in the call dummy
122 at the entry point. */
123 /* FIXME: Won't always work with zeros for the last two arguments */
124 if (PC_IN_CALL_DUMMY (pc
, 0, 0))
127 return (symfile_objfile
-> ei
.entry_func_lowpc
<= pc
&&
128 symfile_objfile
-> ei
.entry_func_highpc
> pc
);
131 /* Info about the innermost stack frame (contents of FP register) */
133 static struct frame_info
*current_frame
;
135 /* Cache for frame addresses already read by gdb. Valid only while
136 inferior is stopped. Control variables for the frame cache should
137 be local to this module. */
139 struct obstack frame_cache_obstack
;
141 /* Return the innermost (currently executing) stack frame. */
146 if (current_frame
== NULL
)
148 if (target_has_stack
)
149 current_frame
= create_new_frame (read_fp (), read_pc ());
153 return current_frame
;
157 set_current_frame (frame
)
158 struct frame_info
*frame
;
160 current_frame
= frame
;
163 /* Create an arbitrary (i.e. address specified by user) or innermost frame.
164 Always returns a non-NULL value. */
167 create_new_frame (addr
, pc
)
171 struct frame_info
*fi
;
174 fi
= (struct frame_info
*)
175 obstack_alloc (&frame_cache_obstack
,
176 sizeof (struct frame_info
));
178 /* Arbitrary frame */
183 find_pc_partial_function (pc
, &name
, (CORE_ADDR
*)NULL
,(CORE_ADDR
*)NULL
);
184 fi
->signal_handler_caller
= IN_SIGTRAMP (fi
->pc
, name
);
186 #ifdef INIT_EXTRA_FRAME_INFO
187 INIT_EXTRA_FRAME_INFO (0, fi
);
193 /* Return the frame that called FI.
194 If FI is the original frame (it has no caller), return 0. */
197 get_prev_frame (frame
)
198 struct frame_info
*frame
;
200 return get_prev_frame_info (frame
);
203 /* Return the frame that FRAME calls (NULL if FRAME is the innermost
207 get_next_frame (frame
)
208 struct frame_info
*frame
;
213 /* Flush the entire frame cache. */
216 flush_cached_frames ()
218 /* Since we can't really be sure what the first object allocated was */
219 obstack_free (&frame_cache_obstack
, 0);
220 obstack_init (&frame_cache_obstack
);
222 current_frame
= NULL
; /* Invalidate cache */
223 select_frame (NULL
, -1);
224 annotate_frames_invalid ();
227 /* Flush the frame cache, and start a new one if necessary. */
230 reinit_frame_cache ()
232 flush_cached_frames ();
234 /* FIXME: The inferior_pid test is wrong if there is a corefile. */
235 if (inferior_pid
!= 0)
237 select_frame (get_current_frame (), 0);
241 /* If a machine allows frameless functions, it should define a macro
242 FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) in param.h. FI is the struct
243 frame_info for the frame, and FRAMELESS should be set to nonzero
244 if it represents a frameless function invocation. */
246 /* Return nonzero if the function for this frame lacks a prologue. Many
247 machines can define FRAMELESS_FUNCTION_INVOCATION to just call this
251 frameless_look_for_prologue (frame
)
252 struct frame_info
*frame
;
254 CORE_ADDR func_start
, after_prologue
;
255 func_start
= get_pc_function_start (frame
->pc
);
258 func_start
+= FUNCTION_START_OFFSET
;
259 after_prologue
= func_start
;
260 #ifdef SKIP_PROLOGUE_FRAMELESS_P
261 /* This is faster, since only care whether there *is* a prologue,
262 not how long it is. */
263 SKIP_PROLOGUE_FRAMELESS_P (after_prologue
);
265 SKIP_PROLOGUE (after_prologue
);
267 return after_prologue
== func_start
;
269 else if (frame
->pc
== 0)
270 /* A frame with a zero PC is usually created by dereferencing a NULL
271 function pointer, normally causing an immediate core dump of the
272 inferior. Mark function as frameless, as the inferior has no chance
273 of setting up a stack frame. */
276 /* If we can't find the start of the function, we don't really
277 know whether the function is frameless, but we should be able
278 to get a reasonable (i.e. best we can do under the
279 circumstances) backtrace by saying that it isn't. */
283 /* Default a few macros that people seldom redefine. */
285 #if !defined (INIT_FRAME_PC)
286 #define INIT_FRAME_PC(fromleaf, prev) \
287 prev->pc = (fromleaf ? SAVED_PC_AFTER_CALL (prev->next) : \
288 prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ());
291 #ifndef FRAME_CHAIN_COMBINE
292 #define FRAME_CHAIN_COMBINE(chain, thisframe) (chain)
295 /* Return a structure containing various interesting information
296 about the frame that called NEXT_FRAME. Returns NULL
297 if there is no such frame. */
300 get_prev_frame_info (next_frame
)
301 struct frame_info
*next_frame
;
303 CORE_ADDR address
= 0;
304 struct frame_info
*prev
;
308 /* If the requested entry is in the cache, return it.
309 Otherwise, figure out what the address should be for the entry
310 we're about to add to the cache. */
315 /* This screws value_of_variable, which just wants a nice clean
316 NULL return from block_innermost_frame if there are no frames.
317 I don't think I've ever seen this message happen otherwise.
318 And returning NULL here is a perfectly legitimate thing to do. */
321 error ("You haven't set up a process's stack to examine.");
325 return current_frame
;
328 /* If we have the prev one, return it */
329 if (next_frame
->prev
)
330 return next_frame
->prev
;
332 /* On some machines it is possible to call a function without
333 setting up a stack frame for it. On these machines, we
334 define this macro to take two args; a frameinfo pointer
335 identifying a frame and a variable to set or clear if it is
336 or isn't leafless. */
337 #ifdef FRAMELESS_FUNCTION_INVOCATION
338 /* Still don't want to worry about this except on the innermost
339 frame. This macro will set FROMLEAF if NEXT_FRAME is a
340 frameless function invocation. */
341 if (!(next_frame
->next
))
343 FRAMELESS_FUNCTION_INVOCATION (next_frame
, fromleaf
);
345 address
= FRAME_FP (next_frame
);
351 /* Two macros defined in tm.h specify the machine-dependent
352 actions to be performed here.
353 First, get the frame's chain-pointer.
354 If that is zero, the frame is the outermost frame or a leaf
355 called by the outermost frame. This means that if start
356 calls main without a frame, we'll return 0 (which is fine
359 Nope; there's a problem. This also returns when the current
360 routine is a leaf of main. This is unacceptable. We move
361 this to after the ffi test; I'd rather have backtraces from
362 start go curfluy than have an abort called from main not show
364 address
= FRAME_CHAIN (next_frame
);
365 if (!FRAME_CHAIN_VALID (address
, next_frame
))
367 address
= FRAME_CHAIN_COMBINE (address
, next_frame
);
372 prev
= (struct frame_info
*)
373 obstack_alloc (&frame_cache_obstack
,
374 sizeof (struct frame_info
));
377 next_frame
->prev
= prev
;
378 prev
->next
= next_frame
;
379 prev
->prev
= (struct frame_info
*) 0;
380 prev
->frame
= address
;
381 prev
->signal_handler_caller
= 0;
383 /* This change should not be needed, FIXME! We should
384 determine whether any targets *need* INIT_FRAME_PC to happen
385 after INIT_EXTRA_FRAME_INFO and come up with a simple way to
386 express what goes on here.
388 INIT_EXTRA_FRAME_INFO is called from two places: create_new_frame
389 (where the PC is already set up) and here (where it isn't).
390 INIT_FRAME_PC is only called from here, always after
391 INIT_EXTRA_FRAME_INFO.
393 The catch is the MIPS, where INIT_EXTRA_FRAME_INFO requires the PC
394 value (which hasn't been set yet). Some other machines appear to
395 require INIT_EXTRA_FRAME_INFO before they can do INIT_FRAME_PC. Phoo.
397 We shouldn't need INIT_FRAME_PC_FIRST to add more complication to
398 an already overcomplicated part of GDB. gnu@cygnus.com, 15Sep92.
400 Assuming that some machines need INIT_FRAME_PC after
401 INIT_EXTRA_FRAME_INFO, one possible scheme:
403 SETUP_INNERMOST_FRAME()
404 Default version is just create_new_frame (read_fp ()),
405 read_pc ()). Machines with extra frame info would do that (or the
406 local equivalent) and then set the extra fields.
407 SETUP_ARBITRARY_FRAME(argc, argv)
408 Only change here is that create_new_frame would no longer init extra
409 frame info; SETUP_ARBITRARY_FRAME would have to do that.
410 INIT_PREV_FRAME(fromleaf, prev)
411 Replace INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC. This should
412 also return a flag saying whether to keep the new frame, or
413 whether to discard it, because on some machines (e.g. mips) it
414 is really awkward to have FRAME_CHAIN_VALID called *before*
415 INIT_EXTRA_FRAME_INFO (there is no good way to get information
416 deduced in FRAME_CHAIN_VALID into the extra fields of the new frame).
417 std_frame_pc(fromleaf, prev)
418 This is the default setting for INIT_PREV_FRAME. It just does what
419 the default INIT_FRAME_PC does. Some machines will call it from
420 INIT_PREV_FRAME (either at the beginning, the end, or in the middle).
421 Some machines won't use it.
422 kingdon@cygnus.com, 13Apr93, 31Jan94, 14Dec94. */
424 #ifdef INIT_FRAME_PC_FIRST
425 INIT_FRAME_PC_FIRST (fromleaf
, prev
);
428 #ifdef INIT_EXTRA_FRAME_INFO
429 INIT_EXTRA_FRAME_INFO(fromleaf
, prev
);
432 /* This entry is in the frame queue now, which is good since
433 FRAME_SAVED_PC may use that queue to figure out its value
434 (see tm-sparc.h). We want the pc saved in the inferior frame. */
435 INIT_FRAME_PC(fromleaf
, prev
);
437 /* If ->frame and ->pc are unchanged, we are in the process of getting
438 ourselves into an infinite backtrace. Some architectures check this
439 in FRAME_CHAIN or thereabouts, but it seems like there is no reason
440 this can't be an architecture-independent check. */
441 if (next_frame
!= NULL
)
443 if (prev
->frame
== next_frame
->frame
444 && prev
->pc
== next_frame
->pc
)
446 next_frame
->prev
= NULL
;
447 obstack_free (&frame_cache_obstack
, prev
);
452 find_pc_partial_function (prev
->pc
, &name
,
453 (CORE_ADDR
*)NULL
,(CORE_ADDR
*)NULL
);
454 if (IN_SIGTRAMP (prev
->pc
, name
))
455 prev
->signal_handler_caller
= 1;
462 struct frame_info
*frame
;
467 #if defined (FRAME_FIND_SAVED_REGS)
468 /* Find the addresses in which registers are saved in FRAME. */
471 get_frame_saved_regs (frame
, saved_regs_addr
)
472 struct frame_info
*frame
;
473 struct frame_saved_regs
*saved_regs_addr
;
475 FRAME_FIND_SAVED_REGS (frame
, *saved_regs_addr
);
479 /* Return the innermost lexical block in execution
480 in a specified stack frame. The frame address is assumed valid. */
483 get_frame_block (frame
)
484 struct frame_info
*frame
;
489 if (frame
->next
!= 0 && frame
->next
->signal_handler_caller
== 0)
490 /* We are not in the innermost frame and we were not interrupted
491 by a signal. We need to subtract one to get the correct block,
492 in case the call instruction was the last instruction of the block.
493 If there are any machines on which the saved pc does not point to
494 after the call insn, we probably want to make frame->pc point after
495 the call insn anyway. */
497 return block_for_pc (pc
);
503 return block_for_pc (read_pc ());
507 get_pc_function_start (pc
)
510 register struct block
*bl
;
511 register struct symbol
*symbol
;
512 register struct minimal_symbol
*msymbol
;
515 if ((bl
= block_for_pc (pc
)) != NULL
&&
516 (symbol
= block_function (bl
)) != NULL
)
518 bl
= SYMBOL_BLOCK_VALUE (symbol
);
519 fstart
= BLOCK_START (bl
);
521 else if ((msymbol
= lookup_minimal_symbol_by_pc (pc
)) != NULL
)
523 fstart
= SYMBOL_VALUE_ADDRESS (msymbol
);
532 /* Return the symbol for the function executing in frame FRAME. */
535 get_frame_function (frame
)
536 struct frame_info
*frame
;
538 register struct block
*bl
= get_frame_block (frame
);
541 return block_function (bl
);
545 /* Return the blockvector immediately containing the innermost lexical block
546 containing the specified pc value and section, or 0 if there is none.
547 PINDEX is a pointer to the index value of the block. If PINDEX
548 is NULL, we don't pass this information back to the caller. */
551 blockvector_for_pc_sect (pc
, section
, pindex
, symtab
)
552 register CORE_ADDR pc
;
555 struct symtab
*symtab
;
558 register struct block
*b
;
559 register int bot
, top
, half
;
560 struct blockvector
*bl
;
562 if (symtab
== 0) /* if no symtab specified by caller */
564 /* First search all symtabs for one whose file contains our pc */
565 if ((symtab
= find_pc_sect_symtab (pc
, section
)) == 0)
569 bl
= BLOCKVECTOR (symtab
);
570 b
= BLOCKVECTOR_BLOCK (bl
, 0);
572 /* Then search that symtab for the smallest block that wins. */
573 /* Use binary search to find the last block that starts before PC. */
576 top
= BLOCKVECTOR_NBLOCKS (bl
);
578 while (top
- bot
> 1)
580 half
= (top
- bot
+ 1) >> 1;
581 b
= BLOCKVECTOR_BLOCK (bl
, bot
+ half
);
582 if (BLOCK_START (b
) <= pc
)
588 /* Now search backward for a block that ends after PC. */
592 b
= BLOCKVECTOR_BLOCK (bl
, bot
);
593 if (BLOCK_END (b
) > pc
)
604 /* Return the blockvector immediately containing the innermost lexical block
605 containing the specified pc value, or 0 if there is none.
606 Backward compatibility, no section. */
609 blockvector_for_pc (pc
, pindex
)
610 register CORE_ADDR pc
;
613 return blockvector_for_pc_sect (pc
, find_pc_mapped_section (pc
),
617 /* Return the innermost lexical block containing the specified pc value
618 in the specified section, or 0 if there is none. */
621 block_for_pc_sect (pc
, section
)
622 register CORE_ADDR pc
;
625 register struct blockvector
*bl
;
628 bl
= blockvector_for_pc_sect (pc
, section
, &index
, NULL
);
630 return BLOCKVECTOR_BLOCK (bl
, index
);
634 /* Return the innermost lexical block containing the specified pc value,
635 or 0 if there is none. Backward compatibility, no section. */
639 register CORE_ADDR pc
;
641 return block_for_pc_sect (pc
, find_pc_mapped_section (pc
));
644 /* Return the function containing pc value PC in section SECTION.
645 Returns 0 if function is not known. */
648 find_pc_sect_function (pc
, section
)
652 register struct block
*b
= block_for_pc_sect (pc
, section
);
655 return block_function (b
);
658 /* Return the function containing pc value PC.
659 Returns 0 if function is not known. Backward compatibility, no section */
662 find_pc_function (pc
)
665 return find_pc_sect_function (pc
, find_pc_mapped_section (pc
));
668 /* These variables are used to cache the most recent result
669 * of find_pc_partial_function. */
671 static CORE_ADDR cache_pc_function_low
= 0;
672 static CORE_ADDR cache_pc_function_high
= 0;
673 static char *cache_pc_function_name
= 0;
674 static struct sec
*cache_pc_function_section
= NULL
;
676 /* Clear cache, e.g. when symbol table is discarded. */
679 clear_pc_function_cache()
681 cache_pc_function_low
= 0;
682 cache_pc_function_high
= 0;
683 cache_pc_function_name
= (char *)0;
684 cache_pc_function_section
= NULL
;
687 /* Finds the "function" (text symbol) that is smaller than PC but
688 greatest of all of the potential text symbols in SECTION. Sets
689 *NAME and/or *ADDRESS conditionally if that pointer is non-null.
690 If ENDADDR is non-null, then set *ENDADDR to be the end of the
691 function (exclusive), but passing ENDADDR as non-null means that
692 the function might cause symbols to be read. This function either
693 succeeds or fails (not halfway succeeds). If it succeeds, it sets
694 *NAME, *ADDRESS, and *ENDADDR to real information and returns 1.
695 If it fails, it sets *NAME, *ADDRESS, and *ENDADDR to zero and
699 find_pc_sect_partial_function (pc
, section
, name
, address
, endaddr
)
706 struct partial_symtab
*pst
;
708 struct minimal_symbol
*msymbol
;
709 struct partial_symbol
*psb
;
710 struct obj_section
*osect
;
714 mapped_pc
= overlay_mapped_address (pc
, section
);
716 if (mapped_pc
>= cache_pc_function_low
&&
717 mapped_pc
< cache_pc_function_high
&&
718 section
== cache_pc_function_section
)
719 goto return_cached_value
;
721 /* If sigtramp is in the u area, it counts as a function (especially
722 important for step_1). */
723 #if defined SIGTRAMP_START
724 if (IN_SIGTRAMP (mapped_pc
, (char *)NULL
))
726 cache_pc_function_low
= SIGTRAMP_START (mapped_pc
);
727 cache_pc_function_high
= SIGTRAMP_END (mapped_pc
);
728 cache_pc_function_name
= "<sigtramp>";
729 cache_pc_function_section
= section
;
730 goto return_cached_value
;
734 msymbol
= lookup_minimal_symbol_by_pc_section (mapped_pc
, section
);
735 pst
= find_pc_sect_psymtab (mapped_pc
, section
);
738 /* Need to read the symbols to get a good value for the end address. */
739 if (endaddr
!= NULL
&& !pst
->readin
)
741 /* Need to get the terminal in case symbol-reading produces
743 target_terminal_ours_for_output ();
744 PSYMTAB_TO_SYMTAB (pst
);
749 /* Checking whether the msymbol has a larger value is for the
750 "pathological" case mentioned in print_frame_info. */
751 f
= find_pc_sect_function (mapped_pc
, section
);
754 || (BLOCK_START (SYMBOL_BLOCK_VALUE (f
))
755 >= SYMBOL_VALUE_ADDRESS (msymbol
))))
757 cache_pc_function_low
= BLOCK_START (SYMBOL_BLOCK_VALUE (f
));
758 cache_pc_function_high
= BLOCK_END (SYMBOL_BLOCK_VALUE (f
));
759 cache_pc_function_name
= SYMBOL_NAME (f
);
760 cache_pc_function_section
= section
;
761 goto return_cached_value
;
766 /* Now that static symbols go in the minimal symbol table, perhaps
767 we could just ignore the partial symbols. But at least for now
768 we use the partial or minimal symbol, whichever is larger. */
769 psb
= find_pc_sect_psymbol (pst
, mapped_pc
, section
);
772 && (msymbol
== NULL
||
773 (SYMBOL_VALUE_ADDRESS (psb
)
774 >= SYMBOL_VALUE_ADDRESS (msymbol
))))
776 /* This case isn't being cached currently. */
778 *address
= SYMBOL_VALUE_ADDRESS (psb
);
780 *name
= SYMBOL_NAME (psb
);
781 /* endaddr non-NULL can't happen here. */
787 /* Not in the normal symbol tables, see if the pc is in a known section.
788 If it's not, then give up. This ensures that anything beyond the end
789 of the text seg doesn't appear to be part of the last function in the
792 osect
= find_pc_sect_section (mapped_pc
, section
);
797 /* Must be in the minimal symbol table. */
800 /* No available symbol. */
810 cache_pc_function_low
= SYMBOL_VALUE_ADDRESS (msymbol
);
811 cache_pc_function_name
= SYMBOL_NAME (msymbol
);
812 cache_pc_function_section
= section
;
814 /* Use the lesser of the next minimal symbol in the same section, or
815 the end of the section, as the end of the function. */
817 /* Step over other symbols at this same address, and symbols in
818 other sections, to find the next symbol in this section with
819 a different address. */
821 for (i
=1; SYMBOL_NAME (msymbol
+i
) != NULL
; i
++)
823 if (SYMBOL_VALUE_ADDRESS (msymbol
+i
) != SYMBOL_VALUE_ADDRESS (msymbol
)
824 && SYMBOL_BFD_SECTION (msymbol
+i
) == SYMBOL_BFD_SECTION (msymbol
))
828 if (SYMBOL_NAME (msymbol
+ i
) != NULL
829 && SYMBOL_VALUE_ADDRESS (msymbol
+ i
) < osect
->endaddr
)
830 cache_pc_function_high
= SYMBOL_VALUE_ADDRESS (msymbol
+ i
);
832 /* We got the start address from the last msymbol in the objfile.
833 So the end address is the end of the section. */
834 cache_pc_function_high
= osect
->endaddr
;
840 if (pc_in_unmapped_range (pc
, section
))
841 *address
= overlay_unmapped_address (cache_pc_function_low
, section
);
843 *address
= cache_pc_function_low
;
847 *name
= cache_pc_function_name
;
851 if (pc_in_unmapped_range (pc
, section
))
853 /* Because the high address is actually beyond the end of
854 the function (and therefore possibly beyond the end of
855 the overlay), we must actually convert (high - 1)
856 and then add one to that. */
858 *endaddr
= 1 + overlay_unmapped_address (cache_pc_function_high
- 1,
862 *endaddr
= cache_pc_function_high
;
868 /* Backward compatibility, no section argument */
871 find_pc_partial_function (pc
, name
, address
, endaddr
)
879 section
= find_pc_overlay (pc
);
880 return find_pc_sect_partial_function (pc
, section
, name
, address
, endaddr
);
883 /* Return the innermost stack frame executing inside of BLOCK,
884 or NULL if there is no such frame. If BLOCK is NULL, just return NULL. */
887 block_innermost_frame (block
)
890 struct frame_info
*frame
;
891 register CORE_ADDR start
;
892 register CORE_ADDR end
;
897 start
= BLOCK_START (block
);
898 end
= BLOCK_END (block
);
903 frame
= get_prev_frame (frame
);
906 if (frame
->pc
>= start
&& frame
->pc
< end
)
911 /* Return the full FRAME which corresponds to the given CORE_ADDR
912 or NULL if no FRAME on the chain corresponds to CORE_ADDR. */
915 find_frame_addr_in_frame_chain (frame_addr
)
916 CORE_ADDR frame_addr
;
918 struct frame_info
*frame
= NULL
;
920 if (frame_addr
== (CORE_ADDR
)0)
925 frame
= get_prev_frame (frame
);
928 if (FRAME_FP (frame
) == frame_addr
)
933 #ifdef SIGCONTEXT_PC_OFFSET
934 /* Get saved user PC for sigtramp from sigcontext for BSD style sigtramp. */
937 sigtramp_saved_pc (frame
)
938 struct frame_info
*frame
;
940 CORE_ADDR sigcontext_addr
;
941 char buf
[TARGET_PTR_BIT
/ TARGET_CHAR_BIT
];
942 int ptrbytes
= TARGET_PTR_BIT
/ TARGET_CHAR_BIT
;
943 int sigcontext_offs
= (2 * TARGET_INT_BIT
) / TARGET_CHAR_BIT
;
945 /* Get sigcontext address, it is the third parameter on the stack. */
947 sigcontext_addr
= read_memory_integer (FRAME_ARGS_ADDRESS (frame
->next
)
952 sigcontext_addr
= read_memory_integer (read_register (SP_REGNUM
)
956 /* Don't cause a memory_error when accessing sigcontext in case the stack
957 layout has changed or the stack is corrupt. */
958 target_read_memory (sigcontext_addr
+ SIGCONTEXT_PC_OFFSET
, buf
, ptrbytes
);
959 return extract_unsigned_integer (buf
, ptrbytes
);
961 #endif /* SIGCONTEXT_PC_OFFSET */
963 #ifdef USE_GENERIC_DUMMY_FRAMES
966 * GENERIC DUMMY FRAMES
968 * The following code serves to maintain the dummy stack frames for
969 * inferior function calls (ie. when gdb calls into the inferior via
970 * call_function_by_hand). This code saves the machine state before
971 * the call in host memory, so we must maintain an independant stack
972 * and keep it consistant etc. I am attempting to make this code
973 * generic enough to be used by many targets.
975 * The cheapest and most generic way to do CALL_DUMMY on a new target
976 * is probably to define CALL_DUMMY to be empty, CALL_DUMMY_LENGTH to zero,
977 * and CALL_DUMMY_LOCATION to AT_ENTRY. Then you must remember to define
978 * PUSH_RETURN_ADDRESS, because no call instruction will be being
979 * executed by the target.
982 static struct dummy_frame
*dummy_frame_stack
= NULL
;
984 /* Function: find_dummy_frame(pc, fp, sp)
985 Search the stack of dummy frames for one matching the given PC, FP and SP.
986 This is the work-horse for pc_in_call_dummy and read_register_dummy */
989 generic_find_dummy_frame (pc
, fp
)
993 struct dummy_frame
* dummyframe
;
995 if (pc
!= entry_point_address ())
998 for (dummyframe
= dummy_frame_stack
; dummyframe
!= NULL
;
999 dummyframe
= dummyframe
->next
)
1000 if (fp
== dummyframe
->fp
|| fp
== dummyframe
->sp
)
1001 /* The frame in question lies between the saved fp and sp, inclusive */
1002 return dummyframe
->regs
;
1007 /* Function: pc_in_call_dummy (pc, fp)
1008 Return true if this is a dummy frame created by gdb for an inferior call */
1011 generic_pc_in_call_dummy (pc
, fp
)
1015 /* if find_dummy_frame succeeds, then PC is in a call dummy */
1016 return (generic_find_dummy_frame (pc
, fp
) != 0);
1019 /* Function: read_register_dummy
1020 Find a saved register from before GDB calls a function in the inferior */
1023 generic_read_register_dummy (pc
, fp
, regno
)
1028 char *dummy_regs
= generic_find_dummy_frame (pc
, fp
);
1031 return extract_address (&dummy_regs
[REGISTER_BYTE (regno
)],
1032 REGISTER_RAW_SIZE(regno
));
1037 /* Save all the registers on the dummy frame stack. Most ports save the
1038 registers on the target stack. This results in lots of unnecessary memory
1039 references, which are slow when debugging via a serial line. Instead, we
1040 save all the registers internally, and never write them to the stack. The
1041 registers get restored when the called function returns to the entry point,
1042 where a breakpoint is laying in wait. */
1045 generic_push_dummy_frame ()
1047 struct dummy_frame
*dummy_frame
;
1048 CORE_ADDR fp
= (get_current_frame ())->frame
;
1050 /* check to see if there are stale dummy frames,
1051 perhaps left over from when a longjump took us out of a
1052 function that was called by the debugger */
1054 dummy_frame
= dummy_frame_stack
;
1056 if (INNER_THAN (dummy_frame
->fp
, fp
)) /* stale -- destroy! */
1058 dummy_frame_stack
= dummy_frame
->next
;
1060 dummy_frame
= dummy_frame_stack
;
1063 dummy_frame
= dummy_frame
->next
;
1065 dummy_frame
= xmalloc (sizeof (struct dummy_frame
));
1066 dummy_frame
->pc
= read_register (PC_REGNUM
);
1067 dummy_frame
->sp
= read_register (SP_REGNUM
);
1068 dummy_frame
->fp
= fp
;
1069 read_register_bytes (0, dummy_frame
->regs
, REGISTER_BYTES
);
1070 dummy_frame
->next
= dummy_frame_stack
;
1071 dummy_frame_stack
= dummy_frame
;
1074 /* Function: pop_frame
1075 Restore the machine state from either the saved dummy stack or a
1076 real stack frame. */
1079 generic_pop_current_frame (pop
)
1080 void (*pop
) PARAMS ((struct frame_info
*frame
));
1082 struct frame_info
*frame
= get_current_frame ();
1083 if (PC_IN_CALL_DUMMY(frame
->pc
, frame
->frame
, frame
->frame
))
1084 generic_pop_dummy_frame ();
1089 /* Function: pop_dummy_frame
1090 Restore the machine state from a saved dummy stack frame. */
1093 generic_pop_dummy_frame ()
1095 struct dummy_frame
*dummy_frame
= dummy_frame_stack
;
1097 /* FIXME: what if the first frame isn't the right one, eg..
1098 because one call-by-hand function has done a longjmp into another one? */
1101 error ("Can't pop dummy frame!");
1102 dummy_frame_stack
= dummy_frame
->next
;
1103 write_register_bytes (0, dummy_frame
->regs
, REGISTER_BYTES
);
1104 flush_cached_frames ();
1108 /* Function: frame_chain_valid
1109 Returns true for a user frame or a call_function_by_hand dummy frame,
1110 and false for the CRT0 start-up frame. Purpose is to terminate backtrace */
1113 generic_frame_chain_valid (fp
, fi
)
1115 struct frame_info
*fi
;
1117 if (PC_IN_CALL_DUMMY(FRAME_SAVED_PC(fi
), fp
, fp
))
1118 return 1; /* don't prune CALL_DUMMY frames */
1119 else /* fall back to default algorithm (see frame.h) */
1121 && (INNER_THAN (fi
->frame
, fp
) || fi
->frame
== fp
)
1122 && !inside_entry_file (FRAME_SAVED_PC(fi
)));
1125 /* Function: get_saved_register
1126 Find register number REGNUM relative to FRAME and put its (raw,
1127 target format) contents in *RAW_BUFFER.
1129 Set *OPTIMIZED if the variable was optimized out (and thus can't be
1130 fetched). Note that this is never set to anything other than zero
1131 in this implementation.
1133 Set *LVAL to lval_memory, lval_register, or not_lval, depending on
1134 whether the value was fetched from memory, from a register, or in a
1135 strange and non-modifiable way (e.g. a frame pointer which was
1136 calculated rather than fetched). We will use not_lval for values
1137 fetched from generic dummy frames.
1139 Set *ADDRP to the address, either in memory on as a REGISTER_BYTE
1140 offset into the registers array. If the value is stored in a dummy
1141 frame, set *ADDRP to zero.
1143 To use this implementation, define a function called
1144 "get_saved_register" in your target code, which simply passes all
1145 of its arguments to this function.
1147 The argument RAW_BUFFER must point to aligned memory. */
1150 generic_get_saved_register (raw_buffer
, optimized
, addrp
, frame
, regnum
, lval
)
1154 struct frame_info
*frame
;
1156 enum lval_type
*lval
;
1158 struct frame_saved_regs fsr
;
1160 if (!target_has_registers
)
1161 error ("No registers.");
1163 /* Normal systems don't optimize out things with register numbers. */
1164 if (optimized
!= NULL
)
1167 if (addrp
) /* default assumption: not found in memory */
1170 /* Note: since the current frame's registers could only have been
1171 saved by frames INTERIOR TO the current frame, we skip examining
1172 the current frame itself: otherwise, we would be getting the
1173 previous frame's registers which were saved by the current frame. */
1175 while (frame
&& ((frame
= frame
->next
) != NULL
))
1177 if (PC_IN_CALL_DUMMY (frame
->pc
, frame
->frame
, frame
->frame
))
1179 if (lval
) /* found it in a CALL_DUMMY frame */
1183 generic_find_dummy_frame (frame
->pc
, frame
->frame
) +
1184 REGISTER_BYTE (regnum
),
1185 REGISTER_RAW_SIZE (regnum
));
1189 FRAME_FIND_SAVED_REGS(frame
, fsr
);
1190 if (fsr
.regs
[regnum
] != 0)
1192 if (lval
) /* found it saved on the stack */
1193 *lval
= lval_memory
;
1194 if (regnum
== SP_REGNUM
)
1196 if (raw_buffer
) /* SP register treated specially */
1197 store_address (raw_buffer
, REGISTER_RAW_SIZE (regnum
),
1202 if (addrp
) /* any other register */
1203 *addrp
= fsr
.regs
[regnum
];
1205 read_memory (fsr
.regs
[regnum
], raw_buffer
,
1206 REGISTER_RAW_SIZE (regnum
));
1212 /* If we get thru the loop to this point, it means the register was
1213 not saved in any frame. Return the actual live-register value. */
1215 if (lval
) /* found it in a live register */
1216 *lval
= lval_register
;
1218 *addrp
= REGISTER_BYTE (regnum
);
1220 read_register_gen (regnum
, raw_buffer
);
1222 #endif /* USE_GENERIC_DUMMY_FRAMES */
1225 _initialize_blockframe ()
1227 obstack_init (&frame_cache_obstack
);