* blockframe.c (inside_main_func): Reformat. Introduce new local

variables to prevent long lines.  Update comments to reflect
reality.
This commit is contained in:
Mark Kettenis 2003-12-13 13:16:52 +00:00
parent dbe2df79e9
commit f614e9d90b
2 changed files with 59 additions and 55 deletions

View File

@ -1,3 +1,9 @@
2003-12-13 Mark Kettenis <kettenis@gnu.org>
* blockframe.c (inside_main_func): Reformat. Introduce new local
variables to prevent long lines. Update comments to reflect
reality.
2003-12-12 Kevin Buettner <kevinb@redhat.com>
From David Mosberger <davidm@hpl.hp.com>:

View File

@ -72,13 +72,10 @@ deprecated_inside_entry_file (CORE_ADDR addr)
addr < symfile_objfile->ei.deprecated_entry_file_highpc);
}
/* Test a specified PC value to see if it is in the range of addresses
that correspond to the main() function. See comments above for why
we might want to do this.
/* Test whether PC is in the range of addresses that corresponds to
the "main" function.
Typically called from DEPRECATED_FRAME_CHAIN_VALID.
A PC of zero is always considered to be the bottom of the stack. */
A PC of zero is always considered to be the bottom of the stack. */
int
inside_main_func (CORE_ADDR pc)
@ -87,30 +84,30 @@ inside_main_func (CORE_ADDR pc)
if (pc == 0)
return 1;
if (symfile_objfile == 0)
return 0;
msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile);
/* If the addr range is not set up at symbol reading time, set it up
now. This is for DEPRECATED_FRAME_CHAIN_VALID_ALTERNATE. I do
this for coff, because it is unable to set it up and symbol
reading time. */
/* 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
such as Ada for instance may find more than one match. So 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));
/* 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)
{
@ -123,44 +120,45 @@ inside_main_func (CORE_ADDR pc)
/* 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)
{
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;
}
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);
symfile_objfile->ei.main_func_lowpc = SYMBOL_VALUE_ADDRESS (msymbol);
if (osect != NULL)
{
int i;
/* 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;
}
}
}
/* 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;
}
return (symfile_objfile->ei.main_func_lowpc <= pc &&
symfile_objfile->ei.main_func_highpc > pc);
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 a specified PC value to see if it is in the range of addresses