2003-07-07 Andrew Cagney * frame.c (get_prev_frame): Add comment about forgetting to check the minimal symbol table for "main". * blockframe.c (inside_main_func): Look for "main" in the minimal symbol table. * d10v-tdep.c (d10v_frame_this_id): Delete check that frames are identical. Index: testsuite/ChangeLog 2003-07-07 Andrew Cagney * gdb.asm/asm-source.exp: Do not allow "start" in the backtrace. Index: blockframe.c =================================================================== RCS file: /cvs/src/src/gdb/blockframe.c,v retrieving revision 1.72 diff -u -r1.72 blockframe.c --- blockframe.c 23 May 2003 17:05:19 -0000 1.72 +++ blockframe.c 7 Jul 2003 20:25:21 -0000 @@ -106,6 +106,47 @@ BLOCK_END (SYMBOL_BLOCK_VALUE (mainsym)); } } + + /* Not in the normal symbol tables, see if "main" is in the partial + symbol table. If it's not, then give up. */ + { + struct minimal_symbol *msymbol + = lookup_minimal_symbol (main_name (), NULL, symfile_objfile); + if (msymbol != NULL && MSYMBOL_TYPE (msymbol) == mst_text) + { + struct obj_section *osect + = find_pc_sect_section (SYMBOL_VALUE_ADDRESS (msymbol), + msymbol->ginfo.bfd_section); + if (osect != NULL) + { + int i; + /* Step over other symbols at this same address, and + symbols in other sections, to find the next symbol in + this section with a different address. */ + for (i = 1; SYMBOL_LINKAGE_NAME (msymbol + i) != NULL; i++) + { + if (SYMBOL_VALUE_ADDRESS (msymbol + i) != SYMBOL_VALUE_ADDRESS (msymbol) + && SYMBOL_BFD_SECTION (msymbol + i) == SYMBOL_BFD_SECTION (msymbol)) + break; + } + + symfile_objfile->ei.main_func_lowpc = SYMBOL_VALUE_ADDRESS (msymbol); + + /* Use the lesser of the next minimal symbol in the same + section, or the end of the section, as the end of the + function. */ + if (SYMBOL_LINKAGE_NAME (msymbol + i) != NULL + && SYMBOL_VALUE_ADDRESS (msymbol + i) < osect->endaddr) + symfile_objfile->ei.main_func_highpc = SYMBOL_VALUE_ADDRESS (msymbol + i); + else + /* We got the start address from the last msymbol in the + objfile. So the end address is the end of the + section. */ + symfile_objfile->ei.main_func_highpc = osect->endaddr; + } + } + } + return (symfile_objfile->ei.main_func_lowpc <= pc && symfile_objfile->ei.main_func_highpc > pc); } Index: d10v-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/d10v-tdep.c,v retrieving revision 1.127 diff -u -r1.127 d10v-tdep.c --- d10v-tdep.c 7 Jul 2003 14:36:57 -0000 1.127 +++ d10v-tdep.c 7 Jul 2003 20:25:21 -0000 @@ -1417,15 +1417,6 @@ id = frame_id_build (base, func); - /* Check that we're not going round in circles with the same frame - ID (but avoid applying the test to sentinel frames which do go - round in circles). Can't use frame_id_eq() as that doesn't yet - compare the frame's PC value. */ - if (frame_relative_level (next_frame) >= 0 - && get_frame_type (next_frame) != DUMMY_FRAME - && frame_id_eq (get_frame_id (next_frame), id)) - return; - (*this_id) = id; } Index: frame.c =================================================================== RCS file: /cvs/src/src/gdb/frame.c,v retrieving revision 1.130 diff -u -r1.130 frame.c --- frame.c 7 Jul 2003 20:07:12 -0000 1.130 +++ frame.c 7 Jul 2003 20:25:22 -0000 @@ -1870,6 +1870,12 @@ be allowed to unwind. */ /* NOTE: cagney/2003-02-25: Don't enable until someone has found hard evidence that this is needed. */ + /* NOTE: cagney/2003-07-07: Fixed a bug in inside_main_func - wasn't + 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. Suspect that + inside_entry_file and inside_entry_func tests were added to work + around that (now fixed) case. */ if (0 && this_frame->type != DUMMY_FRAME && this_frame->level >= 0 && inside_entry_func (get_frame_pc (this_frame))) Index: testsuite/gdb.asm/asm-source.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.asm/asm-source.exp,v retrieving revision 1.39 diff -u -r1.39 asm-source.exp --- testsuite/gdb.asm/asm-source.exp 7 Jul 2003 14:48:50 -0000 1.39 +++ testsuite/gdb.asm/asm-source.exp 7 Jul 2003 20:25:26 -0000 @@ -244,7 +244,7 @@ # doesn't fall off the stack. gdb_test "bt 10" \ - "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:33(.*\#2.*start\[^\r\n\]*)?" \ + "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:33" \ "bt ALL in foo2" # See if a capped `bt' prints the right source files.