Replace "exec" with "executable" in messages.
[deliverable/binutils-gdb.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 }
This page took 0.054824 seconds and 4 git commands to generate.