/* Get info from stack frames; convert between frames, blocks,
functions and pc values.
- Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+ Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
#include "defs.h"
#include "symtab.h"
void _initialize_blockframe (void);
-/* Test whether PC is in the range of addresses that corresponds to
- the "main" function. */
-
-int
-inside_main_func (CORE_ADDR pc)
-{
- struct minimal_symbol *msymbol;
-
- if (symfile_objfile == 0)
- return 0;
-
- msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile);
-
- /* If the address range hasn't been set up at symbol reading time,
- set it up now. */
-
- if (msymbol != NULL
- && symfile_objfile->ei.main_func_lowpc == INVALID_ENTRY_LOWPC
- && symfile_objfile->ei.main_func_highpc == INVALID_ENTRY_HIGHPC)
- {
- /* brobecker/2003-10-10: We used to rely on lookup_symbol() to
- search the symbol associated to the "main" function.
- Unfortunately, lookup_symbol() uses the current-language
- la_lookup_symbol_nonlocal function to do the global symbol
- search. Depending on the language, this can introduce
- certain side-effects, because certain languages, for instance
- Ada, may find more than one match. Therefore we prefer to
- search the "main" function symbol using its address rather
- than its name. */
- struct symbol *mainsym =
- find_pc_function (SYMBOL_VALUE_ADDRESS (msymbol));
-
- if (mainsym && SYMBOL_CLASS (mainsym) == LOC_BLOCK)
- {
- symfile_objfile->ei.main_func_lowpc =
- BLOCK_START (SYMBOL_BLOCK_VALUE (mainsym));
- symfile_objfile->ei.main_func_highpc =
- 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. */
- if (msymbol != NULL && MSYMBOL_TYPE (msymbol) == mst_text)
- {
- CORE_ADDR maddr = SYMBOL_VALUE_ADDRESS (msymbol);
- asection *msect = SYMBOL_BFD_SECTION (msymbol);
- struct obj_section *osect = find_pc_sect_section (maddr, msect);
-
- 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) != maddr
- && SYMBOL_BFD_SECTION (msymbol + i) == msect)
- break;
- }
-
- symfile_objfile->ei.main_func_lowpc = maddr;
-
- /* 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);
-}
-
-/* Test whether THIS_FRAME is inside the process entry point function. */
-
-int
-inside_entry_func (struct frame_info *this_frame)
-{
- return (get_frame_func (this_frame) == entry_point_address ());
-}
-
/* Return the innermost lexical block in execution
in a specified stack frame. The frame address is assumed valid.