diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-09-12 18:40:18 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-09-12 18:40:18 +0000 |
commit | 627b3ba2d386befaf2d1bd97bd780ac1218dd399 (patch) | |
tree | 506fc255ee49268770bd8a356538f907eec76279 | |
parent | b0abbc58f0daefaf286d6a008820fef5f69e5353 (diff) | |
download | gdb-627b3ba2d386befaf2d1bd97bd780ac1218dd399.zip gdb-627b3ba2d386befaf2d1bd97bd780ac1218dd399.tar.gz gdb-627b3ba2d386befaf2d1bd97bd780ac1218dd399.tar.bz2 |
2003-09-12 Andrew Cagney <cagney@redhat.com>
* objfiles.h (struct entry_info): Deprecate "entry_file_lowpc" and
"entry_file_highpc". Update comments.
* defs.h (deprecated_inside_entry_file): Rename
"inside_entry_file".
* blockframe.c (deprecated_inside_entry_file): Rename
"inside_entry_file".
* frame.c (get_prev_frame): Update. Use if 0 instead of #if 0.
* vax-tdep.c (vax_frame_chain): Update.
* sh64-tdep.c (sh64_frame_chain): Update.
* sh-tdep.c (sh_frame_chain): Update.
* rs6000-tdep.c (rs6000_frame_chain): Update.
* ns32k-tdep.c (ns32k_frame_chain): Update.
* mips-tdep.c (mips_frame_chain): Update.
* m68hc11-tdep.c (m68hc11_frame_this_id): Update.
* m32r-tdep.c (m32r_frame_this_id): Update.
* i386-interix-tdep.c (i386_interix_frame_chain_valid): Update.
* frv-tdep.c (frv_frame_this_id): Update.
* d10v-tdep.c (d10v_frame_this_id): Update.
* cris-tdep.c (cris_frame_chain): Update.
* blockframe.c (legacy_frame_chain_valid): Update.
* avr-tdep.c (avr_frame_this_id): Update.
* arm-tdep.c (arm_prologue_this_id): Update.
* alpha-tdep.c (alpha_heuristic_frame_this_id): Update.
* objfiles.c (objfile_relocate): Update.
* mipsread.c (mipscoff_symfile_read): Update.
(mipscoff_symfile_read): Update.
* mdebugread.c (parse_partial_symbols): Update.
* dwarfread.c (read_file_scope): Update.
* dwarf2read.c (read_file_scope): Update.
* dbxread.c (read_dbx_symtab): Update.
(read_dbx_symtab): Update.
* coffread.c (complete_symtab): Update.
-rw-r--r-- | gdb/ChangeLog | 35 | ||||
-rw-r--r-- | gdb/alpha-tdep.c | 2 | ||||
-rw-r--r-- | gdb/arm-tdep.c | 2 | ||||
-rw-r--r-- | gdb/avr-tdep.c | 2 | ||||
-rw-r--r-- | gdb/blockframe.c | 8 | ||||
-rw-r--r-- | gdb/coffread.c | 4 | ||||
-rw-r--r-- | gdb/cris-tdep.c | 2 | ||||
-rw-r--r-- | gdb/d10v-tdep.c | 2 | ||||
-rw-r--r-- | gdb/dbxread.c | 8 | ||||
-rw-r--r-- | gdb/defs.h | 2 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 4 | ||||
-rw-r--r-- | gdb/dwarfread.c | 4 | ||||
-rw-r--r-- | gdb/frame.c | 31 | ||||
-rw-r--r-- | gdb/frv-tdep.c | 2 | ||||
-rw-r--r-- | gdb/i386-interix-tdep.c | 4 | ||||
-rw-r--r-- | gdb/m32r-tdep.c | 2 | ||||
-rw-r--r-- | gdb/m68hc11-tdep.c | 2 | ||||
-rw-r--r-- | gdb/mdebugread.c | 4 | ||||
-rw-r--r-- | gdb/mips-tdep.c | 2 | ||||
-rw-r--r-- | gdb/mipsread.c | 6 | ||||
-rw-r--r-- | gdb/ns32k-tdep.c | 2 | ||||
-rw-r--r-- | gdb/objfiles.c | 6 | ||||
-rw-r--r-- | gdb/objfiles.h | 34 | ||||
-rw-r--r-- | gdb/rs6000-tdep.c | 2 | ||||
-rw-r--r-- | gdb/sh-tdep.c | 3 | ||||
-rw-r--r-- | gdb/sh64-tdep.c | 3 | ||||
-rw-r--r-- | gdb/symfile.c | 4 | ||||
-rw-r--r-- | gdb/vax-tdep.c | 2 |
28 files changed, 118 insertions, 66 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c999b83..faca64f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,38 @@ +2003-09-12 Andrew Cagney <cagney@redhat.com> + + * objfiles.h (struct entry_info): Deprecate "entry_file_lowpc" and + "entry_file_highpc". Update comments. + * defs.h (deprecated_inside_entry_file): Rename + "inside_entry_file". + * blockframe.c (deprecated_inside_entry_file): Rename + "inside_entry_file". + * frame.c (get_prev_frame): Update. Use if 0 instead of #if 0. + * vax-tdep.c (vax_frame_chain): Update. + * sh64-tdep.c (sh64_frame_chain): Update. + * sh-tdep.c (sh_frame_chain): Update. + * rs6000-tdep.c (rs6000_frame_chain): Update. + * ns32k-tdep.c (ns32k_frame_chain): Update. + * mips-tdep.c (mips_frame_chain): Update. + * m68hc11-tdep.c (m68hc11_frame_this_id): Update. + * m32r-tdep.c (m32r_frame_this_id): Update. + * i386-interix-tdep.c (i386_interix_frame_chain_valid): Update. + * frv-tdep.c (frv_frame_this_id): Update. + * d10v-tdep.c (d10v_frame_this_id): Update. + * cris-tdep.c (cris_frame_chain): Update. + * blockframe.c (legacy_frame_chain_valid): Update. + * avr-tdep.c (avr_frame_this_id): Update. + * arm-tdep.c (arm_prologue_this_id): Update. + * alpha-tdep.c (alpha_heuristic_frame_this_id): Update. + * objfiles.c (objfile_relocate): Update. + * mipsread.c (mipscoff_symfile_read): Update. + (mipscoff_symfile_read): Update. + * mdebugread.c (parse_partial_symbols): Update. + * dwarfread.c (read_file_scope): Update. + * dwarf2read.c (read_file_scope): Update. + * dbxread.c (read_dbx_symtab): Update. + (read_dbx_symtab): Update. + * coffread.c (complete_symtab): Update. + 2003-09-12 Jeff Johnston <jjohnstn@redhat.com> * top.c (quit_target): New static helper function. diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c index df55bfb..4c3e471 100644 --- a/gdb/alpha-tdep.c +++ b/gdb/alpha-tdep.c @@ -1138,7 +1138,7 @@ alpha_heuristic_frame_this_id (struct frame_info *next_frame, /* This is meant to halt the backtrace at "_start". Make sure we don't halt it at a generic dummy frame. */ - if (inside_entry_file (info->start_pc)) + if (deprecated_inside_entry_file (info->start_pc)) return; *this_id = frame_id_build (info->vfp, info->start_pc); diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 9187207..9999a60 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -970,7 +970,7 @@ arm_prologue_this_id (struct frame_info *next_frame, /* This is meant to halt the backtrace at "_start". Make sure we don't halt it at a generic dummy frame. */ - if (func <= LOWEST_PC || inside_entry_file (func)) + if (func <= LOWEST_PC || deprecated_inside_entry_file (func)) return; /* If we've hit a wall, stop. */ diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c index 2a4bf6f..90bf910 100644 --- a/gdb/avr-tdep.c +++ b/gdb/avr-tdep.c @@ -972,7 +972,7 @@ avr_frame_this_id (struct frame_info *next_frame, /* This is meant to halt the backtrace at "_start". Make sure we don't halt it at a generic dummy frame. */ - if (inside_entry_file (func)) + if (deprecated_inside_entry_file (func)) return; /* Hopefully the prologue analysis either correctly determined the diff --git a/gdb/blockframe.c b/gdb/blockframe.c index f431b50..43edc31 100644 --- a/gdb/blockframe.c +++ b/gdb/blockframe.c @@ -53,7 +53,7 @@ void _initialize_blockframe (void); A PC of zero is always considered to be the bottom of the stack. */ int -inside_entry_file (CORE_ADDR addr) +deprecated_inside_entry_file (CORE_ADDR addr) { if (addr == 0) return 1; @@ -68,8 +68,8 @@ inside_entry_file (CORE_ADDR addr) if (DEPRECATED_PC_IN_CALL_DUMMY (addr, 0, 0)) return 0; } - return (addr >= symfile_objfile->ei.entry_file_lowpc && - addr < symfile_objfile->ei.entry_file_highpc); + return (addr >= symfile_objfile->ei.deprecated_entry_file_lowpc && + addr < symfile_objfile->ei.deprecated_entry_file_highpc); } /* Test a specified PC value to see if it is in the range of addresses @@ -611,7 +611,7 @@ legacy_frame_chain_valid (CORE_ADDR fp, struct frame_info *fi) /* NOTE/drow 2002-12-25: should there be a way to disable this check? It assumes a single small entry file, and the way some debug readers (e.g. dbxread) figure out which object is the entry file is somewhat hokey. */ - if (inside_entry_file (frame_pc_unwind (fi))) + if (deprecated_inside_entry_file (frame_pc_unwind (fi))) return 0; return 1; diff --git a/gdb/coffread.c b/gdb/coffread.c index 152ec33..ac71f96 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -391,8 +391,8 @@ complete_symtab (char *name, CORE_ADDR start_addr, unsigned int size) if (current_objfile->ei.entry_point >= current_source_start_addr && current_objfile->ei.entry_point < current_source_end_addr) { - current_objfile->ei.entry_file_lowpc = current_source_start_addr; - current_objfile->ei.entry_file_highpc = current_source_end_addr; + current_objfile->ei.deprecated_entry_file_lowpc = current_source_start_addr; + current_objfile->ei.deprecated_entry_file_highpc = current_source_end_addr; } } diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c index 1b19999..3e5bfe9 100644 --- a/gdb/cris-tdep.c +++ b/gdb/cris-tdep.c @@ -1248,7 +1248,7 @@ cris_frame_chain (struct frame_info *fi) { return get_frame_base (fi); } - else if (!inside_entry_file (get_frame_pc (fi))) + else if (!deprecated_inside_entry_file (get_frame_pc (fi))) { return read_memory_unsigned_integer (get_frame_base (fi), 4); } diff --git a/gdb/d10v-tdep.c b/gdb/d10v-tdep.c index ac52ab6..574ff4d 100644 --- a/gdb/d10v-tdep.c +++ b/gdb/d10v-tdep.c @@ -1405,7 +1405,7 @@ d10v_frame_this_id (struct frame_info *next_frame, /* This is meant to halt the backtrace at "_start". Make sure we don't halt it at a generic dummy frame. */ - if (func <= IMEM_START || inside_entry_file (func)) + if (func <= IMEM_START || deprecated_inside_entry_file (func)) return; /* Hopefully the prologue analysis either correctly determined the diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 61c78c4..52cf149 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -1450,8 +1450,8 @@ read_dbx_symtab (struct objfile *objfile) if (objfile->ei.entry_point < nlist.n_value && objfile->ei.entry_point >= last_o_file_start) { - objfile->ei.entry_file_lowpc = last_o_file_start; - objfile->ei.entry_file_highpc = nlist.n_value; + objfile->ei.deprecated_entry_file_lowpc = last_o_file_start; + objfile->ei.deprecated_entry_file_highpc = nlist.n_value; } if (past_first_source_file && pst /* The gould NP1 uses low values for .o and -l symbols @@ -2214,8 +2214,8 @@ read_dbx_symtab (struct objfile *objfile) && objfile->ei.entry_point < nlist.n_value && objfile->ei.entry_point >= last_o_file_start) { - objfile->ei.entry_file_lowpc = last_o_file_start; - objfile->ei.entry_file_highpc = nlist.n_value; + objfile->ei.deprecated_entry_file_lowpc = last_o_file_start; + objfile->ei.deprecated_entry_file_highpc = nlist.n_value; } if (pst) @@ -303,7 +303,7 @@ struct breakpoint; extern int inside_entry_func (CORE_ADDR); -extern int inside_entry_file (CORE_ADDR addr); +extern int deprecated_inside_entry_file (CORE_ADDR addr); extern int inside_main_func (CORE_ADDR pc); diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index b432f12..a7435cc 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -2039,8 +2039,8 @@ read_file_scope (struct die_info *die, struct objfile *objfile, if (objfile->ei.entry_point >= lowpc && objfile->ei.entry_point < highpc) { - objfile->ei.entry_file_lowpc = lowpc; - objfile->ei.entry_file_highpc = highpc; + objfile->ei.deprecated_entry_file_lowpc = lowpc; + objfile->ei.deprecated_entry_file_highpc = highpc; } attr = dwarf_attr (die, DW_AT_language); diff --git a/gdb/dwarfread.c b/gdb/dwarfread.c index e6f2a2e..6f1c76a 100644 --- a/gdb/dwarfread.c +++ b/gdb/dwarfread.c @@ -1868,8 +1868,8 @@ read_file_scope (struct dieinfo *dip, char *thisdie, char *enddie, if (objfile->ei.entry_point >= dip->at_low_pc && objfile->ei.entry_point < dip->at_high_pc) { - objfile->ei.entry_file_lowpc = dip->at_low_pc; - objfile->ei.entry_file_highpc = dip->at_high_pc; + objfile->ei.deprecated_entry_file_lowpc = dip->at_low_pc; + objfile->ei.deprecated_entry_file_highpc = dip->at_high_pc; } set_cu_language (dip); if (dip->at_producer != NULL) diff --git a/gdb/frame.c b/gdb/frame.c index 31cb6c5..6e01026 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1844,8 +1844,9 @@ get_prev_frame (struct frame_info *this_frame) checking for "main" in the minimal symbols. With that fixed asm-source tests now stop in "main" instead of halting the backtrace in wierd and wonderful ways somewhere inside the entry - file. Suspect that inside_entry_file and inside_entry_func tests - were added to work around that (now fixed) case. */ + file. Suspect that deprecated_inside_entry_file and + inside_entry_func tests were added to work around that (now + fixed) case. */ /* NOTE: cagney/2003-07-15: danielj (if I'm reading it right) suggested having the inside_entry_func test use the inside_main_func msymbol trick (along with entry_point_address I @@ -1884,7 +1885,6 @@ get_prev_frame (struct frame_info *this_frame) } this_frame->prev_p = 1; -#if 0 /* If we're inside the entry file, it isn't valid. Don't apply this test to a dummy frame - dummy frame PC's typically land in the entry file. Don't apply this test to the sentinel frame. @@ -1896,17 +1896,19 @@ get_prev_frame (struct frame_info *this_frame) /* NOTE: cagney/2003-01-10: If there is a way of disabling this test then it should probably be moved to before the ->prev_p test, above. */ - /* NOTE: vinschen/2003-04-01: Disabled. It turns out that the call to - inside_entry_file destroys a meaningful backtrace under some - conditions. E. g. the backtrace tests in the asm-source testcase - are broken for some targets. In this test the functions are all - implemented as part of one file and the testcase is not necessarily - linked with a start file (depending on the target). What happens is, - that the first frame is printed normaly and following frames are - treated as being inside the enttry file then. This way, only the - #0 frame is printed in the backtrace output. */ - if (this_frame->type != DUMMY_FRAME && this_frame->level >= 0 - && inside_entry_file (get_frame_pc (this_frame))) + /* NOTE: vinschen/2003-04-01: Disabled. It turns out that the call + to deprecated_inside_entry_file destroys a meaningful backtrace + under some conditions. E. g. the backtrace tests in the + asm-source testcase are broken for some targets. In this test + the functions are all implemented as part of one file and the + testcase is not necessarily linked with a start file (depending + on the target). What happens is, that the first frame is printed + normaly and following frames are treated as being inside the + enttry file then. This way, only the #0 frame is printed in the + backtrace output. */ + if (0 + && this_frame->type != DUMMY_FRAME && this_frame->level >= 0 + && deprecated_inside_entry_file (get_frame_pc (this_frame))) { if (frame_debug) { @@ -1916,7 +1918,6 @@ get_prev_frame (struct frame_info *this_frame) } return NULL; } -#endif /* If any of the old frame initialization methods are around, use the legacy get_prev_frame method. */ diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c index e7cd699..fe53e56 100644 --- a/gdb/frv-tdep.c +++ b/gdb/frv-tdep.c @@ -966,7 +966,7 @@ frv_frame_this_id (struct frame_info *next_frame, /* This is meant to halt the backtrace at "_start". Make sure we don't halt it at a generic dummy frame. */ - if (inside_entry_file (func)) + if (deprecated_inside_entry_file (func)) return; /* Check if the stack is empty. */ diff --git a/gdb/i386-interix-tdep.c b/gdb/i386-interix-tdep.c index 2fced72..6902404 100644 --- a/gdb/i386-interix-tdep.c +++ b/gdb/i386-interix-tdep.c @@ -128,8 +128,8 @@ i386_interix_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe) it'll make the correct test. */ return ((get_frame_type (thisframe) == SIGTRAMP_FRAME) || (chain != 0 - && !inside_entry_file (read_memory_integer - (thisframe->frame + 4, 4)))); + && !deprecated_inside_entry_file (read_memory_integer + (thisframe->frame + 4, 4)))); } /* We want to find the previous frame, which on Interix is tricky when diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c index dc51699..12a91c2 100644 --- a/gdb/m32r-tdep.c +++ b/gdb/m32r-tdep.c @@ -832,7 +832,7 @@ m32r_frame_this_id (struct frame_info *next_frame, /* This is meant to halt the backtrace at "_start". Make sure we don't halt it at a generic dummy frame. */ - if (inside_entry_file (func)) + if (deprecated_inside_entry_file (func)) return; /* Check if the stack is empty. */ diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c index bc46f17..0f3ed0e 100644 --- a/gdb/m68hc11-tdep.c +++ b/gdb/m68hc11-tdep.c @@ -896,7 +896,7 @@ m68hc11_frame_this_id (struct frame_info *next_frame, /* This is meant to halt the backtrace at "_start". Make sure we don't halt it at a generic dummy frame. */ - if (inside_entry_file (func)) + if (deprecated_inside_entry_file (func)) return; /* Hopefully the prologue analysis either correctly determined the diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 453b983..00c7ba6 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -3627,8 +3627,8 @@ parse_partial_symbols (struct objfile *objfile) if (objfile->ei.entry_point >= save_pst->textlow && objfile->ei.entry_point < save_pst->texthigh) { - objfile->ei.entry_file_lowpc = save_pst->textlow; - objfile->ei.entry_file_highpc = save_pst->texthigh; + objfile->ei.deprecated_entry_file_lowpc = save_pst->textlow; + objfile->ei.deprecated_entry_file_highpc = save_pst->texthigh; } /* The objfile has its functions reordered if this partial symbol diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 9e391c0..f49d3ba 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -2623,7 +2623,7 @@ mips_frame_chain (struct frame_info *frame) CORE_ADDR tmp; CORE_ADDR saved_pc = DEPRECATED_FRAME_SAVED_PC (frame); - if (saved_pc == 0 || inside_entry_file (saved_pc)) + if (saved_pc == 0 || deprecated_inside_entry_file (saved_pc)) return 0; /* Check if the PC is inside a call stub. If it is, fetch the diff --git a/gdb/mipsread.c b/gdb/mipsread.c index 293eaed..e40bf54 100644 --- a/gdb/mipsread.c +++ b/gdb/mipsread.c @@ -113,15 +113,15 @@ mipscoff_symfile_read (struct objfile *objfile, int mainline) if (mainline && objfile->ei.entry_point != INVALID_ENTRY_POINT - && objfile->ei.entry_file_lowpc == INVALID_ENTRY_LOWPC) + && objfile->ei.deprecated_entry_file_lowpc == INVALID_ENTRY_LOWPC) { struct minimal_symbol *m; m = lookup_minimal_symbol_by_pc (objfile->ei.entry_point); if (m && DEPRECATED_SYMBOL_NAME (m + 1)) { - objfile->ei.entry_file_lowpc = SYMBOL_VALUE_ADDRESS (m); - objfile->ei.entry_file_highpc = SYMBOL_VALUE_ADDRESS (m + 1); + objfile->ei.deprecated_entry_file_lowpc = SYMBOL_VALUE_ADDRESS (m); + objfile->ei.deprecated_entry_file_highpc = SYMBOL_VALUE_ADDRESS (m + 1); } } diff --git a/gdb/ns32k-tdep.c b/gdb/ns32k-tdep.c index 5fd95fc..f880bd3 100644 --- a/gdb/ns32k-tdep.c +++ b/gdb/ns32k-tdep.c @@ -309,7 +309,7 @@ ns32k_frame_chain (struct frame_info *frame) FP value, and that address is saved at the previous FP value as a 4-byte word. */ - if (inside_entry_file (get_frame_pc (frame))) + if (deprecated_inside_entry_file (get_frame_pc (frame))) return 0; return (read_memory_integer (get_frame_base (frame), 4)); diff --git a/gdb/objfiles.c b/gdb/objfiles.c index c62c9a0..0037372 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -787,10 +787,10 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets) objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile)); } - if (objfile->ei.entry_file_lowpc != INVALID_ENTRY_LOWPC) + if (objfile->ei.deprecated_entry_file_lowpc != INVALID_ENTRY_LOWPC) { - objfile->ei.entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile)); - objfile->ei.entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile)); + objfile->ei.deprecated_entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile)); + objfile->ei.deprecated_entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile)); } if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC) diff --git a/gdb/objfiles.h b/gdb/objfiles.h index c52b95f..f94afd1 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -43,14 +43,28 @@ struct symtab; to the user executable's recorded entry point, as if the call had been made directly by the kernel. - The traditional gdb method of using this info is to use the recorded entry - point to set the variables entry_file_lowpc and entry_file_highpc from - the debugging information, where these values are the starting address - (inclusive) and ending address (exclusive) of the instruction space in the - executable which correspond to the "startup file", I.E. crt0.o in most - cases. This file is assumed to be a startup file and frames with pc's - inside it are treated as nonexistent. Setting these variables is necessary - so that backtraces do not fly off the bottom of the stack. + The traditional gdb method of using this info is to use the + recorded entry point to set the variables + deprecated_entry_file_lowpc and deprecated_entry_file_highpc from + the debugging information, where these values are the starting + address (inclusive) and ending address (exclusive) of the + instruction space in the executable which correspond to the + "startup file", I.E. crt0.o in most cases. This file is assumed to + be a startup file and frames with pc's inside it are treated as + nonexistent. Setting these variables is necessary so that + backtraces do not fly off the bottom of the stack. + + NOTE: cagney/2003-09-09: It turns out that this "traditional" + method doesn't work. Corinna writes: ``It turns out that the call + to deprecated_inside_entry_file destroys a meaningful backtrace + under some conditions. E. g. the backtrace tests in the asm-source + testcase are broken for some targets. In this test the functions + are all implemented as part of one file and the testcase is not + necessarily linked with a start file (depending on the target). + What happens is, that the first frame is printed normaly and + following frames are treated as being inside the enttry file then. + This way, only the #0 frame is printed in the backtrace output.'' + Ref "frame.c" "NOTE: vinschen/2003-04-01". Gdb also supports an alternate method to avoid running off the bottom of the stack. @@ -116,8 +130,8 @@ struct entry_info /* Start (inclusive) and end (exclusive) of object file containing the entry point. */ - CORE_ADDR entry_file_lowpc; - CORE_ADDR entry_file_highpc; + CORE_ADDR deprecated_entry_file_lowpc; + CORE_ADDR deprecated_entry_file_highpc; /* Start (inclusive) and end (exclusive) of the user code main() function. */ diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 6d348db..8bce98c 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -1803,7 +1803,7 @@ rs6000_frame_chain (struct frame_info *thisframe) frame. */ return read_memory_addr (get_frame_base (thisframe), wordsize); - if (inside_entry_file (get_frame_pc (thisframe)) + if (deprecated_inside_entry_file (get_frame_pc (thisframe)) || get_frame_pc (thisframe) == entry_point_address ()) return 0; diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index 578076f..04adbb8 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -487,7 +487,8 @@ sh_frame_chain (struct frame_info *frame) get_frame_base (frame), get_frame_base (frame))) return get_frame_base (frame); /* dummy frame same as caller's frame */ - if (get_frame_pc (frame) && !inside_entry_file (get_frame_pc (frame))) + if (get_frame_pc (frame) + && !deprecated_inside_entry_file (get_frame_pc (frame))) return read_memory_integer (get_frame_base (frame) + get_frame_extra_info (frame)->f_offset, 4); else diff --git a/gdb/sh64-tdep.c b/gdb/sh64-tdep.c index e93fb23..0a3fd53 100644 --- a/gdb/sh64-tdep.c +++ b/gdb/sh64-tdep.c @@ -745,7 +745,8 @@ sh64_frame_chain (struct frame_info *frame) get_frame_base (frame), get_frame_base (frame))) return get_frame_base (frame); /* dummy frame same as caller's frame */ - if (get_frame_pc (frame) && !inside_entry_file (get_frame_pc (frame))) + if (get_frame_pc (frame) + && !deprecated_inside_entry_file (get_frame_pc (frame))) { int media_mode = pc_is_isa32 (get_frame_pc (frame)); int size; diff --git a/gdb/symfile.c b/gdb/symfile.c index 02b2c36..e2fbc2a 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -327,8 +327,8 @@ init_entry_point_info (struct objfile *objfile) /* Examination of non-executable.o files. Short-circuit this stuff. */ objfile->ei.entry_point = INVALID_ENTRY_POINT; } - objfile->ei.entry_file_lowpc = INVALID_ENTRY_LOWPC; - objfile->ei.entry_file_highpc = INVALID_ENTRY_HIGHPC; + objfile->ei.deprecated_entry_file_lowpc = INVALID_ENTRY_LOWPC; + objfile->ei.deprecated_entry_file_highpc = INVALID_ENTRY_HIGHPC; objfile->ei.entry_func_lowpc = INVALID_ENTRY_LOWPC; objfile->ei.entry_func_highpc = INVALID_ENTRY_HIGHPC; objfile->ei.main_func_lowpc = INVALID_ENTRY_LOWPC; diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c index 9a16730..ed14225 100644 --- a/gdb/vax-tdep.c +++ b/gdb/vax-tdep.c @@ -188,7 +188,7 @@ vax_frame_chain (struct frame_info *frame) { /* In the case of the VAX, the frame's nominal address is the FP value, and 12 bytes later comes the saved previous FP value as a 4-byte word. */ - if (inside_entry_file (get_frame_pc (frame))) + if (deprecated_inside_entry_file (get_frame_pc (frame))) return (0); return (read_memory_integer (get_frame_base (frame) + 12, 4)); |