2002-11-28 Andrew Cagney <cagney@redhat.com>
[deliverable/binutils-gdb.git] / gdb / blockframe.c
CommitLineData
7cc19214
AC
1/* Get info from stack frames; convert between frames, blocks,
2 functions and pc values.
3
4 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
5 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software
6 Foundation, Inc.
c906108c 7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
c906108c 14
c5aa993b
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
c5aa993b
JM
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. */
c906108c
SS
24
25#include "defs.h"
26#include "symtab.h"
27#include "bfd.h"
28#include "symfile.h"
29#include "objfiles.h"
30#include "frame.h"
31#include "gdbcore.h"
32#include "value.h" /* for read_register */
33#include "target.h" /* for target_has_stack */
34#include "inferior.h" /* for read_pc */
35#include "annotate.h"
4e052eda 36#include "regcache.h"
4f460812 37#include "gdb_assert.h"
9c1412c1 38#include "dummy-frame.h"
c906108c
SS
39
40/* Prototypes for exported functions. */
41
53a5351d 42void _initialize_blockframe (void);
c906108c
SS
43
44/* A default FRAME_CHAIN_VALID, in the form that is suitable for most
45 targets. If FRAME_CHAIN_VALID returns zero it means that the given
46 frame is the outermost one and has no caller. */
47
48int
fba45db2 49file_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
c906108c
SS
50{
51 return ((chain) != 0
f18c5a73 52 && !inside_entry_file (frame_pc_unwind (thisframe)));
c906108c
SS
53}
54
55/* Use the alternate method of avoiding running up off the end of the
56 frame chain or following frames back into the startup code. See
57 the comments in objfiles.h. */
c5aa993b 58
c906108c 59int
fba45db2 60func_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
c906108c
SS
61{
62 return ((chain) != 0
c4093a6a
JM
63 && !inside_main_func ((thisframe)->pc)
64 && !inside_entry_func ((thisframe)->pc));
c906108c
SS
65}
66
67/* A very simple method of determining a valid frame */
c5aa993b 68
c906108c 69int
fba45db2 70nonnull_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
c906108c
SS
71{
72 return ((chain) != 0);
73}
74
75/* Is ADDR inside the startup file? Note that if your machine
76 has a way to detect the bottom of the stack, there is no need
77 to call this function from FRAME_CHAIN_VALID; the reason for
78 doing so is that some machines have no way of detecting bottom
79 of stack.
80
81 A PC of zero is always considered to be the bottom of the stack. */
82
83int
fba45db2 84inside_entry_file (CORE_ADDR addr)
c906108c
SS
85{
86 if (addr == 0)
87 return 1;
88 if (symfile_objfile == 0)
89 return 0;
7a292a7a
SS
90 if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
91 {
92 /* Do not stop backtracing if the pc is in the call dummy
c5aa993b 93 at the entry point. */
7a292a7a 94 /* FIXME: Won't always work with zeros for the last two arguments */
c5aa993b 95 if (PC_IN_CALL_DUMMY (addr, 0, 0))
7a292a7a
SS
96 return 0;
97 }
c5aa993b
JM
98 return (addr >= symfile_objfile->ei.entry_file_lowpc &&
99 addr < symfile_objfile->ei.entry_file_highpc);
c906108c
SS
100}
101
102/* Test a specified PC value to see if it is in the range of addresses
103 that correspond to the main() function. See comments above for why
104 we might want to do this.
105
106 Typically called from FRAME_CHAIN_VALID.
107
108 A PC of zero is always considered to be the bottom of the stack. */
109
110int
fba45db2 111inside_main_func (CORE_ADDR pc)
c906108c
SS
112{
113 if (pc == 0)
114 return 1;
115 if (symfile_objfile == 0)
116 return 0;
117
118 /* If the addr range is not set up at symbol reading time, set it up now.
119 This is for FRAME_CHAIN_VALID_ALTERNATE. I do this for coff, because
120 it is unable to set it up and symbol reading time. */
121
c5aa993b
JM
122 if (symfile_objfile->ei.main_func_lowpc == INVALID_ENTRY_LOWPC &&
123 symfile_objfile->ei.main_func_highpc == INVALID_ENTRY_HIGHPC)
c906108c
SS
124 {
125 struct symbol *mainsym;
126
51cc5b07 127 mainsym = lookup_symbol (main_name (), NULL, VAR_NAMESPACE, NULL, NULL);
c5aa993b
JM
128 if (mainsym && SYMBOL_CLASS (mainsym) == LOC_BLOCK)
129 {
130 symfile_objfile->ei.main_func_lowpc =
c906108c 131 BLOCK_START (SYMBOL_BLOCK_VALUE (mainsym));
c5aa993b 132 symfile_objfile->ei.main_func_highpc =
c906108c 133 BLOCK_END (SYMBOL_BLOCK_VALUE (mainsym));
c5aa993b 134 }
c906108c 135 }
c5aa993b
JM
136 return (symfile_objfile->ei.main_func_lowpc <= pc &&
137 symfile_objfile->ei.main_func_highpc > pc);
c906108c
SS
138}
139
140/* Test a specified PC value to see if it is in the range of addresses
141 that correspond to the process entry point function. See comments
142 in objfiles.h for why we might want to do this.
143
144 Typically called from FRAME_CHAIN_VALID.
145
146 A PC of zero is always considered to be the bottom of the stack. */
147
148int
fba45db2 149inside_entry_func (CORE_ADDR pc)
c906108c
SS
150{
151 if (pc == 0)
152 return 1;
153 if (symfile_objfile == 0)
154 return 0;
7a292a7a
SS
155 if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
156 {
157 /* Do not stop backtracing if the pc is in the call dummy
c5aa993b 158 at the entry point. */
7a292a7a
SS
159 /* FIXME: Won't always work with zeros for the last two arguments */
160 if (PC_IN_CALL_DUMMY (pc, 0, 0))
161 return 0;
162 }
c5aa993b
JM
163 return (symfile_objfile->ei.entry_func_lowpc <= pc &&
164 symfile_objfile->ei.entry_func_highpc > pc);
c906108c
SS
165}
166
c906108c
SS
167/* Return nonzero if the function for this frame lacks a prologue. Many
168 machines can define FRAMELESS_FUNCTION_INVOCATION to just call this
169 function. */
170
171int
fba45db2 172frameless_look_for_prologue (struct frame_info *frame)
c906108c
SS
173{
174 CORE_ADDR func_start, after_prologue;
53a5351d 175
c906108c
SS
176 func_start = get_pc_function_start (frame->pc);
177 if (func_start)
178 {
179 func_start += FUNCTION_START_OFFSET;
53a5351d
JM
180 /* This is faster, since only care whether there *is* a
181 prologue, not how long it is. */
dad41f9a 182 return PROLOGUE_FRAMELESS_P (func_start);
c906108c
SS
183 }
184 else if (frame->pc == 0)
53a5351d
JM
185 /* A frame with a zero PC is usually created by dereferencing a
186 NULL function pointer, normally causing an immediate core dump
187 of the inferior. Mark function as frameless, as the inferior
188 has no chance of setting up a stack frame. */
c906108c
SS
189 return 1;
190 else
191 /* If we can't find the start of the function, we don't really
192 know whether the function is frameless, but we should be able
193 to get a reasonable (i.e. best we can do under the
194 circumstances) backtrace by saying that it isn't. */
195 return 0;
196}
197
42f99ac2
JB
198/* return the address of the PC for the given FRAME, ie the current PC value
199 if FRAME is the innermost frame, or the address adjusted to point to the
200 call instruction if not. */
201
202CORE_ADDR
203frame_address_in_block (struct frame_info *frame)
204{
205 CORE_ADDR pc = frame->pc;
206
207 /* If we are not in the innermost frame, and we are not interrupted
208 by a signal, frame->pc points to the instruction following the
209 call. As a consequence, we need to get the address of the previous
210 instruction. Unfortunately, this is not straightforward to do, so
211 we just use the address minus one, which is a good enough
212 approximation. */
5a203e44
AC
213 /* FIXME: cagney/2002-11-10: Should this instead test for
214 NORMAL_FRAME? A dummy frame (in fact all the abnormal frames)
215 save the PC value in the block. */
216 if (frame->next != 0
217 && get_frame_type (frame->next) != SIGTRAMP_FRAME)
42f99ac2
JB
218 --pc;
219
220 return pc;
221}
c906108c 222
c906108c 223/* Return the innermost lexical block in execution
ae767bfb
JB
224 in a specified stack frame. The frame address is assumed valid.
225
226 If ADDR_IN_BLOCK is non-zero, set *ADDR_IN_BLOCK to the exact code
227 address we used to choose the block. We use this to find a source
228 line, to decide which macro definitions are in scope.
229
230 The value returned in *ADDR_IN_BLOCK isn't necessarily the frame's
231 PC, and may not really be a valid PC at all. For example, in the
232 caller of a function declared to never return, the code at the
233 return address will never be reached, so the call instruction may
234 be the very last instruction in the block. So the address we use
235 to choose the block is actually one byte before the return address
236 --- hopefully pointing us at the call instruction, or its delay
237 slot instruction. */
c906108c
SS
238
239struct block *
ae767bfb 240get_frame_block (struct frame_info *frame, CORE_ADDR *addr_in_block)
c906108c 241{
42f99ac2 242 const CORE_ADDR pc = frame_address_in_block (frame);
ae767bfb
JB
243
244 if (addr_in_block)
245 *addr_in_block = pc;
246
c906108c
SS
247 return block_for_pc (pc);
248}
249
c906108c 250CORE_ADDR
fba45db2 251get_pc_function_start (CORE_ADDR pc)
c906108c
SS
252{
253 register struct block *bl;
254 register struct symbol *symbol;
255 register struct minimal_symbol *msymbol;
256 CORE_ADDR fstart;
257
258 if ((bl = block_for_pc (pc)) != NULL &&
259 (symbol = block_function (bl)) != NULL)
260 {
261 bl = SYMBOL_BLOCK_VALUE (symbol);
262 fstart = BLOCK_START (bl);
263 }
264 else if ((msymbol = lookup_minimal_symbol_by_pc (pc)) != NULL)
265 {
266 fstart = SYMBOL_VALUE_ADDRESS (msymbol);
28a93f5a
PM
267 if (!find_pc_section (fstart))
268 return 0;
c906108c
SS
269 }
270 else
271 {
272 fstart = 0;
273 }
274 return (fstart);
275}
276
277/* Return the symbol for the function executing in frame FRAME. */
278
279struct symbol *
fba45db2 280get_frame_function (struct frame_info *frame)
c906108c 281{
ae767bfb 282 register struct block *bl = get_frame_block (frame, 0);
c906108c
SS
283 if (bl == 0)
284 return 0;
285 return block_function (bl);
286}
287\f
288
289/* Return the blockvector immediately containing the innermost lexical block
290 containing the specified pc value and section, or 0 if there is none.
291 PINDEX is a pointer to the index value of the block. If PINDEX
292 is NULL, we don't pass this information back to the caller. */
293
294struct blockvector *
fba45db2
KB
295blockvector_for_pc_sect (register CORE_ADDR pc, struct sec *section,
296 int *pindex, struct symtab *symtab)
c906108c
SS
297{
298 register struct block *b;
299 register int bot, top, half;
300 struct blockvector *bl;
301
c5aa993b 302 if (symtab == 0) /* if no symtab specified by caller */
c906108c
SS
303 {
304 /* First search all symtabs for one whose file contains our pc */
305 if ((symtab = find_pc_sect_symtab (pc, section)) == 0)
306 return 0;
307 }
308
309 bl = BLOCKVECTOR (symtab);
310 b = BLOCKVECTOR_BLOCK (bl, 0);
311
312 /* Then search that symtab for the smallest block that wins. */
313 /* Use binary search to find the last block that starts before PC. */
314
315 bot = 0;
316 top = BLOCKVECTOR_NBLOCKS (bl);
317
318 while (top - bot > 1)
319 {
320 half = (top - bot + 1) >> 1;
321 b = BLOCKVECTOR_BLOCK (bl, bot + half);
322 if (BLOCK_START (b) <= pc)
323 bot += half;
324 else
325 top = bot + half;
326 }
327
328 /* Now search backward for a block that ends after PC. */
329
330 while (bot >= 0)
331 {
332 b = BLOCKVECTOR_BLOCK (bl, bot);
43e526b9 333 if (BLOCK_END (b) > pc)
c906108c
SS
334 {
335 if (pindex)
336 *pindex = bot;
337 return bl;
338 }
339 bot--;
340 }
341 return 0;
342}
343
344/* Return the blockvector immediately containing the innermost lexical block
345 containing the specified pc value, or 0 if there is none.
346 Backward compatibility, no section. */
347
348struct blockvector *
fba45db2 349blockvector_for_pc (register CORE_ADDR pc, int *pindex)
c906108c
SS
350{
351 return blockvector_for_pc_sect (pc, find_pc_mapped_section (pc),
352 pindex, NULL);
353}
354
355/* Return the innermost lexical block containing the specified pc value
356 in the specified section, or 0 if there is none. */
357
358struct block *
fba45db2 359block_for_pc_sect (register CORE_ADDR pc, struct sec *section)
c906108c
SS
360{
361 register struct blockvector *bl;
362 int index;
363
364 bl = blockvector_for_pc_sect (pc, section, &index, NULL);
365 if (bl)
366 return BLOCKVECTOR_BLOCK (bl, index);
367 return 0;
368}
369
370/* Return the innermost lexical block containing the specified pc value,
371 or 0 if there is none. Backward compatibility, no section. */
372
373struct block *
fba45db2 374block_for_pc (register CORE_ADDR pc)
c906108c
SS
375{
376 return block_for_pc_sect (pc, find_pc_mapped_section (pc));
377}
378
379/* Return the function containing pc value PC in section SECTION.
380 Returns 0 if function is not known. */
381
382struct symbol *
fba45db2 383find_pc_sect_function (CORE_ADDR pc, struct sec *section)
c906108c
SS
384{
385 register struct block *b = block_for_pc_sect (pc, section);
386 if (b == 0)
387 return 0;
388 return block_function (b);
389}
390
391/* Return the function containing pc value PC.
392 Returns 0 if function is not known. Backward compatibility, no section */
393
394struct symbol *
fba45db2 395find_pc_function (CORE_ADDR pc)
c906108c
SS
396{
397 return find_pc_sect_function (pc, find_pc_mapped_section (pc));
398}
399
400/* These variables are used to cache the most recent result
401 * of find_pc_partial_function. */
402
c5aa993b
JM
403static CORE_ADDR cache_pc_function_low = 0;
404static CORE_ADDR cache_pc_function_high = 0;
405static char *cache_pc_function_name = 0;
c906108c
SS
406static struct sec *cache_pc_function_section = NULL;
407
408/* Clear cache, e.g. when symbol table is discarded. */
409
410void
fba45db2 411clear_pc_function_cache (void)
c906108c
SS
412{
413 cache_pc_function_low = 0;
414 cache_pc_function_high = 0;
c5aa993b 415 cache_pc_function_name = (char *) 0;
c906108c
SS
416 cache_pc_function_section = NULL;
417}
418
419/* Finds the "function" (text symbol) that is smaller than PC but
420 greatest of all of the potential text symbols in SECTION. Sets
421 *NAME and/or *ADDRESS conditionally if that pointer is non-null.
422 If ENDADDR is non-null, then set *ENDADDR to be the end of the
423 function (exclusive), but passing ENDADDR as non-null means that
424 the function might cause symbols to be read. This function either
425 succeeds or fails (not halfway succeeds). If it succeeds, it sets
426 *NAME, *ADDRESS, and *ENDADDR to real information and returns 1.
427 If it fails, it sets *NAME, *ADDRESS, and *ENDADDR to zero and
428 returns 0. */
429
430int
fba45db2
KB
431find_pc_sect_partial_function (CORE_ADDR pc, asection *section, char **name,
432 CORE_ADDR *address, CORE_ADDR *endaddr)
c906108c
SS
433{
434 struct partial_symtab *pst;
c5aa993b 435 struct symbol *f;
c906108c
SS
436 struct minimal_symbol *msymbol;
437 struct partial_symbol *psb;
c5aa993b 438 struct obj_section *osect;
c906108c
SS
439 int i;
440 CORE_ADDR mapped_pc;
441
442 mapped_pc = overlay_mapped_address (pc, section);
443
247055de
MK
444 if (mapped_pc >= cache_pc_function_low
445 && mapped_pc < cache_pc_function_high
446 && section == cache_pc_function_section)
c906108c
SS
447 goto return_cached_value;
448
449 /* If sigtramp is in the u area, it counts as a function (especially
450 important for step_1). */
43156d82 451 if (SIGTRAMP_START_P () && PC_IN_SIGTRAMP (mapped_pc, (char *) NULL))
c906108c 452 {
c5aa993b
JM
453 cache_pc_function_low = SIGTRAMP_START (mapped_pc);
454 cache_pc_function_high = SIGTRAMP_END (mapped_pc);
455 cache_pc_function_name = "<sigtramp>";
c906108c
SS
456 cache_pc_function_section = section;
457 goto return_cached_value;
458 }
c906108c
SS
459
460 msymbol = lookup_minimal_symbol_by_pc_section (mapped_pc, section);
461 pst = find_pc_sect_psymtab (mapped_pc, section);
462 if (pst)
463 {
464 /* Need to read the symbols to get a good value for the end address. */
465 if (endaddr != NULL && !pst->readin)
466 {
467 /* Need to get the terminal in case symbol-reading produces
468 output. */
469 target_terminal_ours_for_output ();
470 PSYMTAB_TO_SYMTAB (pst);
471 }
472
473 if (pst->readin)
474 {
475 /* Checking whether the msymbol has a larger value is for the
476 "pathological" case mentioned in print_frame_info. */
477 f = find_pc_sect_function (mapped_pc, section);
478 if (f != NULL
479 && (msymbol == NULL
480 || (BLOCK_START (SYMBOL_BLOCK_VALUE (f))
481 >= SYMBOL_VALUE_ADDRESS (msymbol))))
482 {
c5aa993b
JM
483 cache_pc_function_low = BLOCK_START (SYMBOL_BLOCK_VALUE (f));
484 cache_pc_function_high = BLOCK_END (SYMBOL_BLOCK_VALUE (f));
485 cache_pc_function_name = SYMBOL_NAME (f);
c906108c
SS
486 cache_pc_function_section = section;
487 goto return_cached_value;
488 }
489 }
490 else
491 {
492 /* Now that static symbols go in the minimal symbol table, perhaps
493 we could just ignore the partial symbols. But at least for now
494 we use the partial or minimal symbol, whichever is larger. */
495 psb = find_pc_sect_psymbol (pst, mapped_pc, section);
496
497 if (psb
498 && (msymbol == NULL ||
499 (SYMBOL_VALUE_ADDRESS (psb)
500 >= SYMBOL_VALUE_ADDRESS (msymbol))))
501 {
502 /* This case isn't being cached currently. */
503 if (address)
504 *address = SYMBOL_VALUE_ADDRESS (psb);
505 if (name)
506 *name = SYMBOL_NAME (psb);
507 /* endaddr non-NULL can't happen here. */
508 return 1;
509 }
510 }
511 }
512
513 /* Not in the normal symbol tables, see if the pc is in a known section.
514 If it's not, then give up. This ensures that anything beyond the end
515 of the text seg doesn't appear to be part of the last function in the
516 text segment. */
517
518 osect = find_pc_sect_section (mapped_pc, section);
519
520 if (!osect)
521 msymbol = NULL;
522
523 /* Must be in the minimal symbol table. */
524 if (msymbol == NULL)
525 {
526 /* No available symbol. */
527 if (name != NULL)
528 *name = 0;
529 if (address != NULL)
530 *address = 0;
531 if (endaddr != NULL)
532 *endaddr = 0;
533 return 0;
534 }
535
c5aa993b
JM
536 cache_pc_function_low = SYMBOL_VALUE_ADDRESS (msymbol);
537 cache_pc_function_name = SYMBOL_NAME (msymbol);
c906108c
SS
538 cache_pc_function_section = section;
539
540 /* Use the lesser of the next minimal symbol in the same section, or
541 the end of the section, as the end of the function. */
c5aa993b 542
c906108c
SS
543 /* Step over other symbols at this same address, and symbols in
544 other sections, to find the next symbol in this section with
545 a different address. */
546
c5aa993b 547 for (i = 1; SYMBOL_NAME (msymbol + i) != NULL; i++)
c906108c 548 {
c5aa993b 549 if (SYMBOL_VALUE_ADDRESS (msymbol + i) != SYMBOL_VALUE_ADDRESS (msymbol)
247055de 550 && SYMBOL_BFD_SECTION (msymbol + i) == SYMBOL_BFD_SECTION (msymbol))
c906108c
SS
551 break;
552 }
553
554 if (SYMBOL_NAME (msymbol + i) != NULL
555 && SYMBOL_VALUE_ADDRESS (msymbol + i) < osect->endaddr)
556 cache_pc_function_high = SYMBOL_VALUE_ADDRESS (msymbol + i);
557 else
558 /* We got the start address from the last msymbol in the objfile.
559 So the end address is the end of the section. */
560 cache_pc_function_high = osect->endaddr;
561
247055de 562 return_cached_value:
c906108c
SS
563
564 if (address)
565 {
566 if (pc_in_unmapped_range (pc, section))
c5aa993b 567 *address = overlay_unmapped_address (cache_pc_function_low, section);
c906108c 568 else
c5aa993b 569 *address = cache_pc_function_low;
c906108c 570 }
c5aa993b 571
c906108c
SS
572 if (name)
573 *name = cache_pc_function_name;
574
575 if (endaddr)
576 {
577 if (pc_in_unmapped_range (pc, section))
c5aa993b 578 {
c906108c
SS
579 /* Because the high address is actually beyond the end of
580 the function (and therefore possibly beyond the end of
247055de
MK
581 the overlay), we must actually convert (high - 1) and
582 then add one to that. */
c906108c 583
c5aa993b 584 *endaddr = 1 + overlay_unmapped_address (cache_pc_function_high - 1,
c906108c 585 section);
c5aa993b 586 }
c906108c 587 else
c5aa993b 588 *endaddr = cache_pc_function_high;
c906108c
SS
589 }
590
591 return 1;
592}
593
247055de 594/* Backward compatibility, no section argument. */
c906108c
SS
595
596int
fba45db2
KB
597find_pc_partial_function (CORE_ADDR pc, char **name, CORE_ADDR *address,
598 CORE_ADDR *endaddr)
c906108c 599{
c5aa993b 600 asection *section;
c906108c
SS
601
602 section = find_pc_overlay (pc);
603 return find_pc_sect_partial_function (pc, section, name, address, endaddr);
604}
605
606/* Return the innermost stack frame executing inside of BLOCK,
607 or NULL if there is no such frame. If BLOCK is NULL, just return NULL. */
608
609struct frame_info *
fba45db2 610block_innermost_frame (struct block *block)
c906108c
SS
611{
612 struct frame_info *frame;
613 register CORE_ADDR start;
614 register CORE_ADDR end;
42f99ac2 615 CORE_ADDR calling_pc;
c906108c
SS
616
617 if (block == NULL)
618 return NULL;
619
620 start = BLOCK_START (block);
621 end = BLOCK_END (block);
622
623 frame = NULL;
624 while (1)
625 {
626 frame = get_prev_frame (frame);
627 if (frame == NULL)
628 return NULL;
42f99ac2
JB
629 calling_pc = frame_address_in_block (frame);
630 if (calling_pc >= start && calling_pc < end)
c906108c
SS
631 return frame;
632 }
633}
634
7a292a7a
SS
635/* Are we in a call dummy? The code below which allows DECR_PC_AFTER_BREAK
636 below is for infrun.c, which may give the macro a pc without that
637 subtracted out. */
638
639extern CORE_ADDR text_end;
640
641int
b4b88177
AC
642deprecated_pc_in_call_dummy_before_text_end (CORE_ADDR pc, CORE_ADDR sp,
643 CORE_ADDR frame_address)
7a292a7a
SS
644{
645 return ((pc) >= text_end - CALL_DUMMY_LENGTH
646 && (pc) <= text_end + DECR_PC_AFTER_BREAK);
647}
648
649int
b4b88177
AC
650deprecated_pc_in_call_dummy_after_text_end (CORE_ADDR pc, CORE_ADDR sp,
651 CORE_ADDR frame_address)
7a292a7a
SS
652{
653 return ((pc) >= text_end
654 && (pc) <= text_end + CALL_DUMMY_LENGTH + DECR_PC_AFTER_BREAK);
655}
656
657/* Is the PC in a call dummy? SP and FRAME_ADDRESS are the bottom and
658 top of the stack frame which we are checking, where "bottom" and
659 "top" refer to some section of memory which contains the code for
660 the call dummy. Calls to this macro assume that the contents of
661 SP_REGNUM and FP_REGNUM (or the saved values thereof), respectively,
662 are the things to pass.
663
664 This won't work on the 29k, where SP_REGNUM and FP_REGNUM don't
665 have that meaning, but the 29k doesn't use ON_STACK. This could be
666 fixed by generalizing this scheme, perhaps by passing in a frame
667 and adding a few fields, at least on machines which need them for
668 PC_IN_CALL_DUMMY.
669
670 Something simpler, like checking for the stack segment, doesn't work,
671 since various programs (threads implementations, gcc nested function
672 stubs, etc) may either allocate stack frames in another segment, or
673 allocate other kinds of code on the stack. */
674
675int
b4b88177
AC
676deprecated_pc_in_call_dummy_on_stack (CORE_ADDR pc, CORE_ADDR sp,
677 CORE_ADDR frame_address)
7a292a7a
SS
678{
679 return (INNER_THAN ((sp), (pc))
680 && (frame_address != 0)
681 && INNER_THAN ((pc), (frame_address)));
682}
683
684int
b4b88177
AC
685deprecated_pc_in_call_dummy_at_entry_point (CORE_ADDR pc, CORE_ADDR sp,
686 CORE_ADDR frame_address)
7a292a7a
SS
687{
688 return ((pc) >= CALL_DUMMY_ADDRESS ()
689 && (pc) <= (CALL_DUMMY_ADDRESS () + DECR_PC_AFTER_BREAK));
690}
691
c906108c 692
c906108c
SS
693/* Function: frame_chain_valid
694 Returns true for a user frame or a call_function_by_hand dummy frame,
695 and false for the CRT0 start-up frame. Purpose is to terminate backtrace */
c5aa993b 696
c906108c 697int
fba45db2 698generic_file_frame_chain_valid (CORE_ADDR fp, struct frame_info *fi)
c906108c 699{
f18c5a73 700 if (PC_IN_CALL_DUMMY (frame_pc_unwind (fi), fp, fp))
c5aa993b
JM
701 return 1; /* don't prune CALL_DUMMY frames */
702 else /* fall back to default algorithm (see frame.h) */
c906108c
SS
703 return (fp != 0
704 && (INNER_THAN (fi->frame, fp) || fi->frame == fp)
f18c5a73 705 && !inside_entry_file (frame_pc_unwind (fi)));
c906108c 706}
c5aa993b 707
c4093a6a 708int
fba45db2 709generic_func_frame_chain_valid (CORE_ADDR fp, struct frame_info *fi)
c4093a6a 710{
07555a72 711 if (DEPRECATED_USE_GENERIC_DUMMY_FRAMES
ca0d0b52 712 && PC_IN_CALL_DUMMY ((fi)->pc, 0, 0))
c4093a6a
JM
713 return 1; /* don't prune CALL_DUMMY frames */
714 else /* fall back to default algorithm (see frame.h) */
715 return (fp != 0
716 && (INNER_THAN (fi->frame, fp) || fi->frame == fp)
717 && !inside_main_func ((fi)->pc)
718 && !inside_entry_func ((fi)->pc));
719}
720
This page took 0.229023 seconds and 4 git commands to generate.