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