85fd61fffd7bfffd0809b0cc5c283d72b11eaaf2
[external/binutils.git] / gdb / blockframe.c
1 /* Get info from stack frames;
2    convert between frames, blocks, functions and pc values.
3    Copyright 1986, 1987, 1988, 1989, 1991, 1994, 1995, 1996, 1997
4              Free Software Foundation, Inc.
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, Boston, MA 02111-1307, USA.  */
21
22 #include "defs.h"
23 #include "symtab.h"
24 #include "bfd.h"
25 #include "symfile.h"
26 #include "objfiles.h"
27 #include "frame.h"
28 #include "gdbcore.h"
29 #include "value.h"              /* for read_register */
30 #include "target.h"             /* for target_has_stack */
31 #include "inferior.h"           /* for read_pc */
32 #include "annotate.h"
33
34 /* Is ADDR inside the startup file?  Note that if your machine
35    has a way to detect the bottom of the stack, there is no need
36    to call this function from FRAME_CHAIN_VALID; the reason for
37    doing so is that some machines have no way of detecting bottom
38    of stack. 
39
40    A PC of zero is always considered to be the bottom of the stack. */
41
42 int
43 inside_entry_file (addr)
44      CORE_ADDR addr;
45 {
46   if (addr == 0)
47     return 1;
48   if (symfile_objfile == 0)
49     return 0;
50 #if CALL_DUMMY_LOCATION == AT_ENTRY_POINT
51   /* Do not stop backtracing if the pc is in the call dummy
52      at the entry point.  */
53 /* FIXME: Won't always work with zeros for the last two arguments */
54   if (PC_IN_CALL_DUMMY (addr, 0, 0))    
55     return 0;
56 #endif
57   return (addr >= symfile_objfile -> ei.entry_file_lowpc &&
58           addr <  symfile_objfile -> ei.entry_file_highpc);
59 }
60
61 /* Test a specified PC value to see if it is in the range of addresses
62    that correspond to the main() function.  See comments above for why
63    we might want to do this.
64
65    Typically called from FRAME_CHAIN_VALID.
66
67    A PC of zero is always considered to be the bottom of the stack. */
68
69 int
70 inside_main_func (pc)
71 CORE_ADDR pc;
72 {
73   if (pc == 0)
74     return 1;
75   if (symfile_objfile == 0)
76     return 0;
77
78   /* If the addr range is not set up at symbol reading time, set it up now.
79      This is for FRAME_CHAIN_VALID_ALTERNATE. I do this for coff, because
80      it is unable to set it up and symbol reading time. */
81
82   if (symfile_objfile -> ei.main_func_lowpc == INVALID_ENTRY_LOWPC &&
83       symfile_objfile -> ei.main_func_highpc == INVALID_ENTRY_HIGHPC)
84     {
85       struct symbol *mainsym;
86
87       mainsym = lookup_symbol ("main", NULL, VAR_NAMESPACE, NULL, NULL);
88       if (mainsym && SYMBOL_CLASS(mainsym) == LOC_BLOCK)
89         {
90           symfile_objfile->ei.main_func_lowpc = 
91             BLOCK_START (SYMBOL_BLOCK_VALUE (mainsym));
92           symfile_objfile->ei.main_func_highpc = 
93             BLOCK_END (SYMBOL_BLOCK_VALUE (mainsym));
94         }
95     }
96   return (symfile_objfile -> ei.main_func_lowpc  <= pc &&
97           symfile_objfile -> ei.main_func_highpc > pc);
98 }
99
100 /* Test a specified PC value to see if it is in the range of addresses
101    that correspond to the process entry point function.  See comments
102    in objfiles.h for why we might want to do this.
103
104    Typically called from FRAME_CHAIN_VALID.
105
106    A PC of zero is always considered to be the bottom of the stack. */
107
108 int
109 inside_entry_func (pc)
110 CORE_ADDR pc;
111 {
112   if (pc == 0)
113     return 1;
114   if (symfile_objfile == 0)
115     return 0;
116 #if CALL_DUMMY_LOCATION == AT_ENTRY_POINT
117   /* Do not stop backtracing if the pc is in the call dummy
118      at the entry point.  */
119 /* FIXME: Won't always work with zeros for the last two arguments */
120   if (PC_IN_CALL_DUMMY (pc, 0, 0))
121     return 0;
122 #endif
123   return (symfile_objfile -> ei.entry_func_lowpc  <= pc &&
124           symfile_objfile -> ei.entry_func_highpc > pc);
125 }
126
127 /* Info about the innermost stack frame (contents of FP register) */
128
129 static struct frame_info *current_frame;
130
131 /* Cache for frame addresses already read by gdb.  Valid only while
132    inferior is stopped.  Control variables for the frame cache should
133    be local to this module.  */
134
135 struct obstack frame_cache_obstack;
136
137 /* Return the innermost (currently executing) stack frame.  */
138
139 struct frame_info *
140 get_current_frame ()
141 {
142   if (current_frame == NULL)
143     {
144       if (target_has_stack)
145         current_frame = create_new_frame (read_fp (), read_pc ());
146       else
147         error ("No stack.");
148     }
149   return current_frame;
150 }
151
152 void
153 set_current_frame (frame)
154      struct frame_info *frame;
155 {
156   current_frame = frame;
157 }
158
159 /* Create an arbitrary (i.e. address specified by user) or innermost frame.
160    Always returns a non-NULL value.  */
161
162 struct frame_info *
163 create_new_frame (addr, pc)
164      CORE_ADDR addr;
165      CORE_ADDR pc;
166 {
167   struct frame_info *fi;
168   char *name;
169
170   fi = (struct frame_info *)
171     obstack_alloc (&frame_cache_obstack,
172                    sizeof (struct frame_info));
173
174   /* Arbitrary frame */
175   fi->next = NULL;
176   fi->prev = NULL;
177   fi->frame = addr;
178   fi->pc = pc;
179   find_pc_partial_function (pc, &name, (CORE_ADDR *)NULL,(CORE_ADDR *)NULL);
180   fi->signal_handler_caller = IN_SIGTRAMP (fi->pc, name);
181
182 #ifdef INIT_EXTRA_FRAME_INFO
183   INIT_EXTRA_FRAME_INFO (0, fi);
184 #endif
185
186   return fi;
187 }
188
189 /* Return the frame that called FI.
190    If FI is the original frame (it has no caller), return 0.  */
191
192 struct frame_info *
193 get_prev_frame (frame)
194      struct frame_info *frame;
195 {
196   return get_prev_frame_info (frame);
197 }
198
199 /* Return the frame that FRAME calls (NULL if FRAME is the innermost
200    frame).  */
201
202 struct frame_info *
203 get_next_frame (frame)
204      struct frame_info *frame;
205 {
206   return frame->next;
207 }
208
209 /* Flush the entire frame cache.  */
210
211 void
212 flush_cached_frames ()
213 {
214   /* Since we can't really be sure what the first object allocated was */
215   obstack_free (&frame_cache_obstack, 0);
216   obstack_init (&frame_cache_obstack);
217
218   current_frame = NULL;  /* Invalidate cache */
219   select_frame (NULL, -1);
220   annotate_frames_invalid ();
221 }
222
223 /* Flush the frame cache, and start a new one if necessary.  */
224
225 void
226 reinit_frame_cache ()
227 {
228   flush_cached_frames ();
229
230   /* FIXME: The inferior_pid test is wrong if there is a corefile.  */
231   if (inferior_pid != 0)
232     {
233       select_frame (get_current_frame (), 0);
234     }
235 }
236
237 /* If a machine allows frameless functions, it should define a macro
238    FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) in param.h.  FI is the struct
239    frame_info for the frame, and FRAMELESS should be set to nonzero
240    if it represents a frameless function invocation.  */
241
242 /* Return nonzero if the function for this frame lacks a prologue.  Many
243    machines can define FRAMELESS_FUNCTION_INVOCATION to just call this
244    function.  */
245
246 int
247 frameless_look_for_prologue (frame)
248      struct frame_info *frame;
249 {
250   CORE_ADDR func_start, after_prologue;
251   func_start = get_pc_function_start (frame->pc);
252   if (func_start)
253     {
254       func_start += FUNCTION_START_OFFSET;
255       after_prologue = func_start;
256 #ifdef SKIP_PROLOGUE_FRAMELESS_P
257       /* This is faster, since only care whether there *is* a prologue,
258          not how long it is.  */
259       SKIP_PROLOGUE_FRAMELESS_P (after_prologue);
260 #else
261       SKIP_PROLOGUE (after_prologue);
262 #endif
263       return after_prologue == func_start;
264     }
265   else if (frame->pc == 0)
266     /* A frame with a zero PC is usually created by dereferencing a NULL
267        function pointer, normally causing an immediate core dump of the
268        inferior. Mark function as frameless, as the inferior has no chance
269        of setting up a stack frame.  */
270     return 1;
271   else
272     /* If we can't find the start of the function, we don't really
273        know whether the function is frameless, but we should be able
274        to get a reasonable (i.e. best we can do under the
275        circumstances) backtrace by saying that it isn't.  */
276     return 0;
277 }
278
279 /* Default a few macros that people seldom redefine.  */
280
281 #if !defined (INIT_FRAME_PC)
282 #define INIT_FRAME_PC(fromleaf, prev) \
283   prev->pc = (fromleaf ? SAVED_PC_AFTER_CALL (prev->next) : \
284               prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ());
285 #endif
286
287 #ifndef FRAME_CHAIN_COMBINE
288 #define FRAME_CHAIN_COMBINE(chain, thisframe) (chain)
289 #endif
290
291 /* Return a structure containing various interesting information
292    about the frame that called NEXT_FRAME.  Returns NULL
293    if there is no such frame.  */
294
295 struct frame_info *
296 get_prev_frame_info (next_frame)
297      struct frame_info *next_frame;
298 {
299   CORE_ADDR address = 0;
300   struct frame_info *prev;
301   int fromleaf = 0;
302   char *name;
303
304   /* If the requested entry is in the cache, return it.
305      Otherwise, figure out what the address should be for the entry
306      we're about to add to the cache. */
307
308   if (!next_frame)
309     {
310 #if 0
311       /* This screws value_of_variable, which just wants a nice clean
312          NULL return from block_innermost_frame if there are no frames.
313          I don't think I've ever seen this message happen otherwise.
314          And returning NULL here is a perfectly legitimate thing to do.  */
315       if (!current_frame)
316         {
317           error ("You haven't set up a process's stack to examine.");
318         }
319 #endif
320
321       return current_frame;
322     }
323
324   /* If we have the prev one, return it */
325   if (next_frame->prev)
326     return next_frame->prev;
327
328   /* On some machines it is possible to call a function without
329      setting up a stack frame for it.  On these machines, we
330      define this macro to take two args; a frameinfo pointer
331      identifying a frame and a variable to set or clear if it is
332      or isn't leafless.  */
333 #ifdef FRAMELESS_FUNCTION_INVOCATION
334   /* Still don't want to worry about this except on the innermost
335      frame.  This macro will set FROMLEAF if NEXT_FRAME is a
336      frameless function invocation.  */
337   if (!(next_frame->next))
338     {
339       FRAMELESS_FUNCTION_INVOCATION (next_frame, fromleaf);
340       if (fromleaf)
341         address = FRAME_FP (next_frame);
342     }
343 #endif
344
345   if (!fromleaf)
346     {
347       /* Two macros defined in tm.h specify the machine-dependent
348          actions to be performed here.
349          First, get the frame's chain-pointer.
350          If that is zero, the frame is the outermost frame or a leaf
351          called by the outermost frame.  This means that if start
352          calls main without a frame, we'll return 0 (which is fine
353          anyway).
354
355          Nope; there's a problem.  This also returns when the current
356          routine is a leaf of main.  This is unacceptable.  We move
357          this to after the ffi test; I'd rather have backtraces from
358          start go curfluy than have an abort called from main not show
359          main.  */
360       address = FRAME_CHAIN (next_frame);
361       if (!FRAME_CHAIN_VALID (address, next_frame))
362         return 0;
363       address = FRAME_CHAIN_COMBINE (address, next_frame);
364     }
365   if (address == 0)
366     return 0;
367
368   prev = (struct frame_info *)
369     obstack_alloc (&frame_cache_obstack,
370                    sizeof (struct frame_info));
371
372   if (next_frame)
373     next_frame->prev = prev;
374   prev->next = next_frame;
375   prev->prev = (struct frame_info *) 0;
376   prev->frame = address;
377   prev->signal_handler_caller = 0;
378
379 /* This change should not be needed, FIXME!  We should
380    determine whether any targets *need* INIT_FRAME_PC to happen
381    after INIT_EXTRA_FRAME_INFO and come up with a simple way to
382    express what goes on here.
383
384       INIT_EXTRA_FRAME_INFO is called from two places: create_new_frame
385                 (where the PC is already set up) and here (where it isn't).
386       INIT_FRAME_PC is only called from here, always after
387                 INIT_EXTRA_FRAME_INFO.
388    
389    The catch is the MIPS, where INIT_EXTRA_FRAME_INFO requires the PC
390    value (which hasn't been set yet).  Some other machines appear to
391    require INIT_EXTRA_FRAME_INFO before they can do INIT_FRAME_PC.  Phoo.
392
393    We shouldn't need INIT_FRAME_PC_FIRST to add more complication to
394    an already overcomplicated part of GDB.   gnu@cygnus.com, 15Sep92.
395
396    Assuming that some machines need INIT_FRAME_PC after
397    INIT_EXTRA_FRAME_INFO, one possible scheme:
398
399    SETUP_INNERMOST_FRAME()
400      Default version is just create_new_frame (read_fp ()),
401      read_pc ()).  Machines with extra frame info would do that (or the
402      local equivalent) and then set the extra fields.
403    SETUP_ARBITRARY_FRAME(argc, argv)
404      Only change here is that create_new_frame would no longer init extra
405      frame info; SETUP_ARBITRARY_FRAME would have to do that.
406    INIT_PREV_FRAME(fromleaf, prev)
407      Replace INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC.  This should
408      also return a flag saying whether to keep the new frame, or
409      whether to discard it, because on some machines (e.g.  mips) it
410      is really awkward to have FRAME_CHAIN_VALID called *before*
411      INIT_EXTRA_FRAME_INFO (there is no good way to get information
412      deduced in FRAME_CHAIN_VALID into the extra fields of the new frame).
413    std_frame_pc(fromleaf, prev)
414      This is the default setting for INIT_PREV_FRAME.  It just does what
415      the default INIT_FRAME_PC does.  Some machines will call it from
416      INIT_PREV_FRAME (either at the beginning, the end, or in the middle).
417      Some machines won't use it.
418    kingdon@cygnus.com, 13Apr93, 31Jan94, 14Dec94.  */
419
420 #ifdef INIT_FRAME_PC_FIRST
421   INIT_FRAME_PC_FIRST (fromleaf, prev);
422 #endif
423
424 #ifdef INIT_EXTRA_FRAME_INFO
425   INIT_EXTRA_FRAME_INFO(fromleaf, prev);
426 #endif
427
428   /* This entry is in the frame queue now, which is good since
429      FRAME_SAVED_PC may use that queue to figure out its value
430      (see tm-sparc.h).  We want the pc saved in the inferior frame. */
431   INIT_FRAME_PC(fromleaf, prev);
432
433   /* If ->frame and ->pc are unchanged, we are in the process of getting
434      ourselves into an infinite backtrace.  Some architectures check this
435      in FRAME_CHAIN or thereabouts, but it seems like there is no reason
436      this can't be an architecture-independent check.  */
437   if (next_frame != NULL)
438     {
439       if (prev->frame == next_frame->frame
440           && prev->pc == next_frame->pc)
441         {
442           next_frame->prev = NULL;
443           obstack_free (&frame_cache_obstack, prev);
444           return NULL;
445         }
446     }
447
448   find_pc_partial_function (prev->pc, &name,
449                             (CORE_ADDR *)NULL,(CORE_ADDR *)NULL);
450   if (IN_SIGTRAMP (prev->pc, name))
451     prev->signal_handler_caller = 1;
452
453   return prev;
454 }
455
456 CORE_ADDR
457 get_frame_pc (frame)
458      struct frame_info *frame;
459 {
460   return frame->pc;
461 }
462
463 #if defined (FRAME_FIND_SAVED_REGS)
464 /* Find the addresses in which registers are saved in FRAME.  */
465
466 void
467 get_frame_saved_regs (frame, saved_regs_addr)
468      struct frame_info *frame;
469      struct frame_saved_regs *saved_regs_addr;
470 {
471   FRAME_FIND_SAVED_REGS (frame, *saved_regs_addr);
472 }
473 #endif
474
475 /* Return the innermost lexical block in execution
476    in a specified stack frame.  The frame address is assumed valid.  */
477
478 struct block *
479 get_frame_block (frame)
480      struct frame_info *frame;
481 {
482   CORE_ADDR pc;
483
484   pc = frame->pc;
485   if (frame->next != 0 && frame->next->signal_handler_caller == 0)
486     /* We are not in the innermost frame and we were not interrupted
487        by a signal.  We need to subtract one to get the correct block,
488        in case the call instruction was the last instruction of the block.
489        If there are any machines on which the saved pc does not point to
490        after the call insn, we probably want to make frame->pc point after
491        the call insn anyway.  */
492     --pc;
493   return block_for_pc (pc);
494 }
495
496 struct block *
497 get_current_block ()
498 {
499   return block_for_pc (read_pc ());
500 }
501
502 CORE_ADDR
503 get_pc_function_start (pc)
504      CORE_ADDR pc;
505 {
506   register struct block *bl;
507   register struct symbol *symbol;
508   register struct minimal_symbol *msymbol;
509   CORE_ADDR fstart;
510
511   if ((bl = block_for_pc (pc)) != NULL &&
512       (symbol = block_function (bl)) != NULL)
513     {
514       bl = SYMBOL_BLOCK_VALUE (symbol);
515       fstart = BLOCK_START (bl);
516     }
517   else if ((msymbol = lookup_minimal_symbol_by_pc (pc)) != NULL)
518     {
519       fstart = SYMBOL_VALUE_ADDRESS (msymbol);
520     }
521   else
522     {
523       fstart = 0;
524     }
525   return (fstart);
526 }
527
528 /* Return the symbol for the function executing in frame FRAME.  */
529
530 struct symbol *
531 get_frame_function (frame)
532      struct frame_info *frame;
533 {
534   register struct block *bl = get_frame_block (frame);
535   if (bl == 0)
536     return 0;
537   return block_function (bl);
538 }
539 \f
540
541 /* Return the blockvector immediately containing the innermost lexical block
542    containing the specified pc value and section, or 0 if there is none.
543    PINDEX is a pointer to the index value of the block.  If PINDEX
544    is NULL, we don't pass this information back to the caller.  */
545
546 struct blockvector *
547 blockvector_for_pc_sect (pc, section, pindex, symtab)
548      register CORE_ADDR pc;
549      struct sec *section;
550      int *pindex;
551      struct symtab *symtab;
552      
553 {
554   register struct block *b;
555   register int bot, top, half;
556   struct blockvector *bl;
557
558   if (symtab == 0)      /* if no symtab specified by caller */
559     {
560       /* First search all symtabs for one whose file contains our pc */
561       if ((symtab = find_pc_sect_symtab (pc, section)) == 0)
562         return 0;
563     }
564
565   bl = BLOCKVECTOR (symtab);
566   b = BLOCKVECTOR_BLOCK (bl, 0);
567
568   /* Then search that symtab for the smallest block that wins.  */
569   /* Use binary search to find the last block that starts before PC.  */
570
571   bot = 0;
572   top = BLOCKVECTOR_NBLOCKS (bl);
573
574   while (top - bot > 1)
575     {
576       half = (top - bot + 1) >> 1;
577       b = BLOCKVECTOR_BLOCK (bl, bot + half);
578       if (BLOCK_START (b) <= pc)
579         bot += half;
580       else
581         top = bot + half;
582     }
583
584   /* Now search backward for a block that ends after PC.  */
585
586   while (bot >= 0)
587     {
588       b = BLOCKVECTOR_BLOCK (bl, bot);
589       if (BLOCK_END (b) > pc)
590         {
591           if (pindex)
592             *pindex = bot;
593           return bl;
594         }
595       bot--;
596     }
597   return 0;
598 }
599
600 /* Return the blockvector immediately containing the innermost lexical block
601    containing the specified pc value, or 0 if there is none.
602    Backward compatibility, no section.  */
603
604 struct blockvector *
605 blockvector_for_pc (pc, pindex)
606      register CORE_ADDR pc;
607      int *pindex;
608 {
609   return blockvector_for_pc_sect (pc, find_pc_mapped_section (pc),
610                                   pindex, NULL);
611 }
612
613 /* Return the innermost lexical block containing the specified pc value
614    in the specified section, or 0 if there is none.  */
615
616 struct block *
617 block_for_pc_sect (pc, section)
618      register CORE_ADDR pc;
619      struct sec *section;
620 {
621   register struct blockvector *bl;
622   int index;
623
624   bl = blockvector_for_pc_sect (pc, section, &index, NULL);
625   if (bl)
626     return BLOCKVECTOR_BLOCK (bl, index);
627   return 0;
628 }
629
630 /* Return the innermost lexical block containing the specified pc value,
631    or 0 if there is none.  Backward compatibility, no section.  */
632
633 struct block *
634 block_for_pc (pc)
635      register CORE_ADDR pc;
636 {
637   return block_for_pc_sect (pc, find_pc_mapped_section (pc));
638 }
639
640 /* Return the function containing pc value PC in section SECTION.
641    Returns 0 if function is not known.  */
642
643 struct symbol *
644 find_pc_sect_function (pc, section)
645      CORE_ADDR pc;
646      struct sec *section;
647 {
648   register struct block *b = block_for_pc_sect (pc, section);
649   if (b == 0)
650     return 0;
651   return block_function (b);
652 }
653
654 /* Return the function containing pc value PC.
655    Returns 0 if function is not known.  Backward compatibility, no section */
656
657 struct symbol *
658 find_pc_function (pc)
659      CORE_ADDR pc;
660 {
661   return find_pc_sect_function (pc, find_pc_mapped_section (pc));
662 }
663
664 /* These variables are used to cache the most recent result
665  * of find_pc_partial_function. */
666
667 static CORE_ADDR   cache_pc_function_low     = 0;
668 static CORE_ADDR   cache_pc_function_high    = 0;
669 static char       *cache_pc_function_name    = 0;
670 static struct sec *cache_pc_function_section = NULL;
671
672 /* Clear cache, e.g. when symbol table is discarded. */
673
674 void
675 clear_pc_function_cache()
676 {
677   cache_pc_function_low = 0;
678   cache_pc_function_high = 0;
679   cache_pc_function_name = (char *)0;
680   cache_pc_function_section = NULL;
681 }
682
683 /* Finds the "function" (text symbol) that is smaller than PC but
684    greatest of all of the potential text symbols in SECTION.  Sets
685    *NAME and/or *ADDRESS conditionally if that pointer is non-null.
686    If ENDADDR is non-null, then set *ENDADDR to be the end of the
687    function (exclusive), but passing ENDADDR as non-null means that
688    the function might cause symbols to be read.  This function either
689    succeeds or fails (not halfway succeeds).  If it succeeds, it sets
690    *NAME, *ADDRESS, and *ENDADDR to real information and returns 1.
691    If it fails, it sets *NAME, *ADDRESS, and *ENDADDR to zero and
692    returns 0.  */
693
694 int
695 find_pc_sect_partial_function (pc, section, name, address, endaddr)
696      CORE_ADDR  pc;
697      asection  *section;
698      char     **name;
699      CORE_ADDR *address;
700      CORE_ADDR *endaddr;
701 {
702   struct partial_symtab *pst;
703   struct symbol         *f;
704   struct minimal_symbol *msymbol;
705   struct partial_symbol *psb;
706   struct obj_section    *osect;
707   int i;
708   CORE_ADDR mapped_pc;
709
710   mapped_pc = overlay_mapped_address (pc, section);
711
712   if (mapped_pc >= cache_pc_function_low && 
713       mapped_pc < cache_pc_function_high &&
714       section == cache_pc_function_section)
715     goto return_cached_value;
716
717   /* If sigtramp is in the u area, it counts as a function (especially
718      important for step_1).  */
719 #if defined SIGTRAMP_START
720   if (IN_SIGTRAMP (mapped_pc, (char *)NULL))
721     {
722       cache_pc_function_low     = SIGTRAMP_START (mapped_pc);
723       cache_pc_function_high    = SIGTRAMP_END (mapped_pc);
724       cache_pc_function_name    = "<sigtramp>";
725       cache_pc_function_section = section;
726       goto return_cached_value;
727     }
728 #endif
729
730   msymbol = lookup_minimal_symbol_by_pc_section (mapped_pc, section);
731   pst = find_pc_sect_psymtab (mapped_pc, section);
732   if (pst)
733     {
734       /* Need to read the symbols to get a good value for the end address.  */
735       if (endaddr != NULL && !pst->readin)
736         {
737           /* Need to get the terminal in case symbol-reading produces
738              output.  */
739           target_terminal_ours_for_output ();
740           PSYMTAB_TO_SYMTAB (pst);
741         }
742
743       if (pst->readin)
744         {
745           /* Checking whether the msymbol has a larger value is for the
746              "pathological" case mentioned in print_frame_info.  */
747           f = find_pc_sect_function (mapped_pc, section);
748           if (f != NULL
749               && (msymbol == NULL
750                   || (BLOCK_START (SYMBOL_BLOCK_VALUE (f))
751                       >= SYMBOL_VALUE_ADDRESS (msymbol))))
752             {
753               cache_pc_function_low     = BLOCK_START (SYMBOL_BLOCK_VALUE (f));
754               cache_pc_function_high    = BLOCK_END   (SYMBOL_BLOCK_VALUE (f));
755               cache_pc_function_name    = SYMBOL_NAME (f);
756               cache_pc_function_section = section;
757               goto return_cached_value;
758             }
759         }
760       else
761         {
762           /* Now that static symbols go in the minimal symbol table, perhaps
763              we could just ignore the partial symbols.  But at least for now
764              we use the partial or minimal symbol, whichever is larger.  */
765           psb = find_pc_sect_psymbol (pst, mapped_pc, section);
766
767           if (psb
768               && (msymbol == NULL ||
769                   (SYMBOL_VALUE_ADDRESS (psb)
770                    >= SYMBOL_VALUE_ADDRESS (msymbol))))
771             {
772               /* This case isn't being cached currently. */
773               if (address)
774                 *address = SYMBOL_VALUE_ADDRESS (psb);
775               if (name)
776                 *name = SYMBOL_NAME (psb);
777               /* endaddr non-NULL can't happen here.  */
778               return 1;
779             }
780         }
781     }
782
783   /* Not in the normal symbol tables, see if the pc is in a known section.
784      If it's not, then give up.  This ensures that anything beyond the end
785      of the text seg doesn't appear to be part of the last function in the
786      text segment.  */
787
788   osect = find_pc_sect_section (mapped_pc, section);
789
790   if (!osect)
791     msymbol = NULL;
792
793   /* Must be in the minimal symbol table.  */
794   if (msymbol == NULL)
795     {
796       /* No available symbol.  */
797       if (name != NULL)
798         *name = 0;
799       if (address != NULL)
800         *address = 0;
801       if (endaddr != NULL)
802         *endaddr = 0;
803       return 0;
804     }
805
806   cache_pc_function_low     = SYMBOL_VALUE_ADDRESS (msymbol);
807   cache_pc_function_name    = SYMBOL_NAME (msymbol);
808   cache_pc_function_section = section;
809
810   /* Use the lesser of the next minimal symbol in the same section, or the end
811      of the section, as the end of the function. Step over other symbols at 
812      this same address to find the next one.  */
813
814   for (i=1; SYMBOL_NAME (msymbol+i) != NULL 
815          && (SYMBOL_VALUE_ADDRESS(msymbol+i) == SYMBOL_VALUE_ADDRESS (msymbol)
816          || SYMBOL_BFD_SECTION(msymbol+i) != section);
817        i++) /* empty */;
818
819   if (SYMBOL_NAME (msymbol + i) != NULL
820       && SYMBOL_VALUE_ADDRESS (msymbol + i) < osect->endaddr)
821     cache_pc_function_high = SYMBOL_VALUE_ADDRESS (msymbol + i);
822   else
823     /* We got the start address from the last msymbol in the objfile.
824        So the end address is the end of the section.  */
825     cache_pc_function_high = osect->endaddr;
826
827  return_cached_value:
828
829   if (address)
830     if (pc_in_unmapped_range (pc, section))
831       *address = overlay_unmapped_address (cache_pc_function_low, section);
832     else
833       *address = cache_pc_function_low;
834     
835   if (name)
836     *name = cache_pc_function_name;
837
838   if (endaddr)
839     if (pc_in_unmapped_range (pc, section))
840       {
841         /* Because the high address is actually beyond the end of
842            the function (and therefore possibly beyond the end of
843            the overlay), we must actually convert (high - 1)
844            and then add one to that. */
845
846         *endaddr = 1 + overlay_unmapped_address (cache_pc_function_high - 1, 
847                                                  section);
848       }
849     else
850       *endaddr = cache_pc_function_high;
851
852   return 1;
853 }
854
855 /* Backward compatibility, no section argument */
856
857 int
858 find_pc_partial_function (pc, name, address, endaddr)
859      CORE_ADDR  pc;
860      char     **name;
861      CORE_ADDR *address;
862      CORE_ADDR *endaddr;
863 {
864   asection     *section;
865
866   section = find_pc_overlay (pc);
867   return find_pc_sect_partial_function (pc, section, name, address, endaddr);
868 }
869
870 /* Return the innermost stack frame executing inside of BLOCK,
871    or NULL if there is no such frame.  If BLOCK is NULL, just return NULL.  */
872
873 struct frame_info *
874 block_innermost_frame (block)
875      struct block *block;
876 {
877   struct frame_info *frame;
878   register CORE_ADDR start;
879   register CORE_ADDR end;
880
881   if (block == NULL)
882     return NULL;
883
884   start = BLOCK_START (block);
885   end = BLOCK_END (block);
886
887   frame = NULL;
888   while (1)
889     {
890       frame = get_prev_frame (frame);
891       if (frame == NULL)
892         return NULL;
893       if (frame->pc >= start && frame->pc < end)
894         return frame;
895     }
896 }
897
898 /* Return the full FRAME which corresponds to the given CORE_ADDR
899    or NULL if no FRAME on the chain corresponds to CORE_ADDR.  */
900
901 struct frame_info *
902 find_frame_addr_in_frame_chain (frame_addr)
903      CORE_ADDR frame_addr;
904 {
905   struct frame_info *frame = NULL;
906
907   if (frame_addr == (CORE_ADDR)0)
908     return NULL;
909
910   while (1)
911     {
912       frame = get_prev_frame (frame);
913       if (frame == NULL)
914         return NULL;
915       if (FRAME_FP (frame) == frame_addr)
916         return frame;
917     }
918 }
919
920 #ifdef SIGCONTEXT_PC_OFFSET
921 /* Get saved user PC for sigtramp from sigcontext for BSD style sigtramp.  */
922
923 CORE_ADDR
924 sigtramp_saved_pc (frame)
925      struct frame_info *frame;
926 {
927   CORE_ADDR sigcontext_addr;
928   char buf[TARGET_PTR_BIT / TARGET_CHAR_BIT];
929   int ptrbytes = TARGET_PTR_BIT / TARGET_CHAR_BIT;
930   int sigcontext_offs = (2 * TARGET_INT_BIT) / TARGET_CHAR_BIT;
931
932   /* Get sigcontext address, it is the third parameter on the stack.  */
933   if (frame->next)
934     sigcontext_addr = read_memory_integer (FRAME_ARGS_ADDRESS (frame->next)
935                                            + FRAME_ARGS_SKIP
936                                            + sigcontext_offs,
937                                            ptrbytes);
938   else
939     sigcontext_addr = read_memory_integer (read_register (SP_REGNUM)
940                                             + sigcontext_offs,
941                                            ptrbytes);
942
943   /* Don't cause a memory_error when accessing sigcontext in case the stack
944      layout has changed or the stack is corrupt.  */
945   target_read_memory (sigcontext_addr + SIGCONTEXT_PC_OFFSET, buf, ptrbytes);
946   return extract_unsigned_integer (buf, ptrbytes);
947 }
948 #endif /* SIGCONTEXT_PC_OFFSET */
949
950 #ifdef USE_GENERIC_DUMMY_FRAMES
951
952 /*
953  * GENERIC DUMMY FRAMES
954  * 
955  * The following code serves to maintain the dummy stack frames for
956  * inferior function calls (ie. when gdb calls into the inferior via
957  * call_function_by_hand).  This code saves the machine state before 
958  * the call in host memory, so we must maintain an independant stack 
959  * and keep it consistant etc.  I am attempting to make this code 
960  * generic enough to be used by many targets.
961  *
962  * The cheapest and most generic way to do CALL_DUMMY on a new target
963  * is probably to define CALL_DUMMY to be empty, CALL_DUMMY_LENGTH to zero,
964  * and CALL_DUMMY_LOCATION to AT_ENTRY.  Then you must remember to define
965  * PUSH_RETURN_ADDRESS, because no call instruction will be being
966  * executed by the target.
967  */
968
969 static struct dummy_frame *dummy_frame_stack = NULL;
970
971 /* Function: find_dummy_frame(pc, fp, sp)
972    Search the stack of dummy frames for one matching the given PC, FP and SP.
973    This is the work-horse for pc_in_call_dummy and read_register_dummy     */
974
975 char * 
976 generic_find_dummy_frame (pc, fp)
977      CORE_ADDR pc;
978      CORE_ADDR fp;
979 {
980   struct dummy_frame * dummyframe;
981
982   if (pc != entry_point_address ())
983     return 0;
984
985   for (dummyframe = dummy_frame_stack; dummyframe != NULL;
986        dummyframe = dummyframe->next)
987     if (fp == dummyframe->fp || fp == dummyframe->sp)
988       /* The frame in question lies between the saved fp and sp, inclusive */
989       return dummyframe->regs;
990
991   return 0;
992 }
993
994 /* Function: pc_in_call_dummy (pc, fp)
995    Return true if this is a dummy frame created by gdb for an inferior call */
996
997 int
998 generic_pc_in_call_dummy (pc, fp)
999      CORE_ADDR pc;
1000      CORE_ADDR fp;
1001 {
1002   /* if find_dummy_frame succeeds, then PC is in a call dummy */
1003   return (generic_find_dummy_frame (pc, fp) != 0);
1004 }
1005
1006 /* Function: read_register_dummy 
1007    Find a saved register from before GDB calls a function in the inferior */
1008
1009 CORE_ADDR
1010 generic_read_register_dummy (pc, fp, regno)
1011      CORE_ADDR pc;
1012      CORE_ADDR fp;
1013      int regno;
1014 {
1015   char *dummy_regs = generic_find_dummy_frame (pc, fp);
1016
1017   if (dummy_regs)
1018     return extract_address (&dummy_regs[REGISTER_BYTE (regno)],
1019                             REGISTER_RAW_SIZE(regno));
1020   else
1021     return 0;
1022 }
1023
1024 /* Save all the registers on the dummy frame stack.  Most ports save the
1025    registers on the target stack.  This results in lots of unnecessary memory
1026    references, which are slow when debugging via a serial line.  Instead, we
1027    save all the registers internally, and never write them to the stack.  The
1028    registers get restored when the called function returns to the entry point,
1029    where a breakpoint is laying in wait.  */
1030
1031 void
1032 generic_push_dummy_frame ()
1033 {
1034   struct dummy_frame *dummy_frame;
1035   CORE_ADDR fp = (get_current_frame ())->frame;
1036
1037   /* check to see if there are stale dummy frames, 
1038      perhaps left over from when a longjump took us out of a 
1039      function that was called by the debugger */
1040
1041   dummy_frame = dummy_frame_stack;
1042   while (dummy_frame)
1043     if (dummy_frame->fp INNER_THAN fp)  /* stale -- destroy! */
1044       {
1045         dummy_frame_stack = dummy_frame->next;
1046         free (dummy_frame);
1047         dummy_frame = dummy_frame_stack;
1048       }
1049     else
1050       dummy_frame = dummy_frame->next;
1051
1052   dummy_frame = xmalloc (sizeof (struct dummy_frame));
1053   dummy_frame->pc   = read_register (PC_REGNUM);
1054   dummy_frame->sp   = read_register (SP_REGNUM);
1055   dummy_frame->fp   = fp;
1056   read_register_bytes (0, dummy_frame->regs, REGISTER_BYTES);
1057   dummy_frame->next = dummy_frame_stack;
1058   dummy_frame_stack = dummy_frame;
1059 }
1060
1061 /* Function: pop_frame
1062    Restore the machine state from either the saved dummy stack or a
1063    real stack frame. */
1064
1065 void
1066 generic_pop_current_frame (pop)
1067   void (*pop) PARAMS ((struct frame_info *frame));
1068 {
1069   struct frame_info *frame = get_current_frame ();
1070   if (PC_IN_CALL_DUMMY(frame->pc, frame->frame, frame->frame))
1071     generic_pop_dummy_frame ();
1072   else
1073     pop (frame);
1074 }
1075
1076 /* Function: pop_dummy_frame
1077    Restore the machine state from a saved dummy stack frame. */
1078
1079 void
1080 generic_pop_dummy_frame ()
1081 {
1082   struct dummy_frame *dummy_frame = dummy_frame_stack;
1083
1084   /* FIXME: what if the first frame isn't the right one, eg..
1085      because one call-by-hand function has done a longjmp into another one? */
1086
1087   if (!dummy_frame)
1088     error ("Can't pop dummy frame!");
1089   dummy_frame_stack = dummy_frame->next;
1090   write_register_bytes (0, dummy_frame->regs, REGISTER_BYTES);
1091   flush_cached_frames ();
1092   free (dummy_frame);
1093 }
1094
1095 /* Function: frame_chain_valid 
1096    Returns true for a user frame or a call_function_by_hand dummy frame,
1097    and false for the CRT0 start-up frame.  Purpose is to terminate backtrace */
1098  
1099 int
1100 generic_frame_chain_valid (fp, fi)
1101      CORE_ADDR fp;
1102      struct frame_info *fi;
1103 {
1104   if (PC_IN_CALL_DUMMY(FRAME_SAVED_PC(fi), fp, fp))
1105     return 1;   /* don't prune CALL_DUMMY frames */
1106   else          /* fall back to default algorithm (see frame.h) */
1107     return (fp != 0
1108             && (fi->frame INNER_THAN fp || fi->frame == fp)
1109             && !inside_entry_file (FRAME_SAVED_PC(fi)));
1110 }
1111  
1112 /* Function: get_saved_register
1113    Find register number REGNUM relative to FRAME and put its (raw,
1114    target format) contents in *RAW_BUFFER.  
1115
1116    Set *OPTIMIZED if the variable was optimized out (and thus can't be
1117    fetched).  Note that this is never set to anything other than zero
1118    in this implementation.
1119
1120    Set *LVAL to lval_memory, lval_register, or not_lval, depending on
1121    whether the value was fetched from memory, from a register, or in a
1122    strange and non-modifiable way (e.g. a frame pointer which was
1123    calculated rather than fetched).  We will use not_lval for values
1124    fetched from generic dummy frames.
1125
1126    Set *ADDRP to the address, either in memory on as a REGISTER_BYTE
1127    offset into the registers array.  If the value is stored in a dummy
1128    frame, set *ADDRP to zero.
1129
1130    To use this implementation, define a function called
1131    "get_saved_register" in your target code, which simply passes all
1132    of its arguments to this function.
1133
1134    The argument RAW_BUFFER must point to aligned memory.  */
1135
1136 void
1137 generic_get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lval)
1138      char *raw_buffer;
1139      int *optimized;
1140      CORE_ADDR *addrp;
1141      struct frame_info *frame;
1142      int regnum;
1143      enum lval_type *lval;
1144 {
1145   struct frame_saved_regs fsr;
1146
1147   if (!target_has_registers)
1148     error ("No registers.");
1149
1150   /* Normal systems don't optimize out things with register numbers.  */
1151   if (optimized != NULL)
1152     *optimized = 0;
1153
1154   if (addrp)            /* default assumption: not found in memory */
1155     *addrp = 0;
1156
1157   /* Note: since the current frame's registers could only have been
1158      saved by frames INTERIOR TO the current frame, we skip examining
1159      the current frame itself: otherwise, we would be getting the
1160      previous frame's registers which were saved by the current frame.  */
1161
1162   while (frame && ((frame = frame->next) != NULL))
1163     {
1164       if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
1165         {
1166           if (lval)                     /* found it in a CALL_DUMMY frame */
1167             *lval = not_lval;
1168           if (raw_buffer)
1169             memcpy (raw_buffer, 
1170                     generic_find_dummy_frame (frame->pc, frame->frame) + 
1171                     REGISTER_BYTE (regnum),
1172                     REGISTER_RAW_SIZE (regnum));
1173               return;
1174         }
1175
1176       FRAME_FIND_SAVED_REGS(frame, fsr);
1177       if (fsr.regs[regnum] != 0)
1178         {
1179           if (lval)                     /* found it saved on the stack */
1180             *lval = lval_memory;
1181           if (regnum == SP_REGNUM)
1182             {
1183               if (raw_buffer)           /* SP register treated specially */
1184                 store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), 
1185                                fsr.regs[regnum]);
1186             }
1187           else
1188             {
1189               if (addrp)                /* any other register */
1190                 *addrp = fsr.regs[regnum];
1191               if (raw_buffer)
1192                 read_memory (fsr.regs[regnum], raw_buffer, 
1193                              REGISTER_RAW_SIZE (regnum));
1194             }
1195           return;
1196         }
1197     }
1198
1199   /* If we get thru the loop to this point, it means the register was
1200      not saved in any frame.  Return the actual live-register value.  */
1201
1202   if (lval)                             /* found it in a live register */
1203     *lval = lval_register;
1204   if (addrp)
1205     *addrp = REGISTER_BYTE (regnum);
1206   if (raw_buffer)
1207     read_register_gen (regnum, raw_buffer);
1208 }
1209 #endif /* USE_GENERIC_DUMMY_FRAMES */
1210
1211 void
1212 _initialize_blockframe ()
1213 {
1214   obstack_init (&frame_cache_obstack);
1215 }