* 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> 2003-12-12 Kevin Buettner <kevinb@redhat.com>
From David Mosberger <davidm@hpl.hp.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); addr < symfile_objfile->ei.deprecated_entry_file_highpc);
} }
/* Test a specified PC value to see if it is in the range of addresses /* Test whether PC is in the range of addresses that corresponds to
that correspond to the main() function. See comments above for why the "main" function.
we might want to do this.
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 int
inside_main_func (CORE_ADDR pc) inside_main_func (CORE_ADDR pc)
@@ -87,30 +84,30 @@ inside_main_func (CORE_ADDR pc)
if (pc == 0) if (pc == 0)
return 1; return 1;
if (symfile_objfile == 0) if (symfile_objfile == 0)
return 0; return 0;
msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile); msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile);
/* If the addr range is not set up at symbol reading time, set it up /* If the address range hasn't been set up at symbol reading time,
now. This is for DEPRECATED_FRAME_CHAIN_VALID_ALTERNATE. I do set it up now. */
this for coff, because it is unable to set it up and symbol
reading time. */
if (msymbol != NULL if (msymbol != NULL
&& symfile_objfile->ei.main_func_lowpc == INVALID_ENTRY_LOWPC && symfile_objfile->ei.main_func_lowpc == INVALID_ENTRY_LOWPC
&& symfile_objfile->ei.main_func_highpc == INVALID_ENTRY_HIGHPC) && symfile_objfile->ei.main_func_highpc == INVALID_ENTRY_HIGHPC)
{ {
/* brobecker/2003-10-10: We used to rely on lookup_symbol() to search /* brobecker/2003-10-10: We used to rely on lookup_symbol() to
the symbol associated to the main function. Unfortunately, search the symbol associated to the "main" function.
lookup_symbol() uses the current-language la_lookup_symbol_nonlocal Unfortunately, lookup_symbol() uses the current-language
function to do the global symbol search. Depending on the language, la_lookup_symbol_nonlocal function to do the global symbol
this can introduce certain side-effects, because certain languages search. Depending on the language, this can introduce
such as Ada for instance may find more than one match. So we prefer certain side-effects, because certain languages, for instance
to search the main function symbol using its address rather than Ada, may find more than one match. Therefore we prefer to
its name. */ search the "main" function symbol using its address rather
struct symbol *mainsym than its name. */
= find_pc_function (SYMBOL_VALUE_ADDRESS (msymbol)); struct symbol *mainsym =
find_pc_function (SYMBOL_VALUE_ADDRESS (msymbol));
if (mainsym && SYMBOL_CLASS (mainsym) == LOC_BLOCK) 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 /* Not in the normal symbol tables, see if "main" is in the partial
symbol table. If it's not, then give up. */ symbol table. If it's not, then give up. */
{ if (msymbol != NULL && MSYMBOL_TYPE (msymbol) == mst_text)
if (msymbol != NULL && MSYMBOL_TYPE (msymbol) == mst_text) {
{ CORE_ADDR maddr = SYMBOL_VALUE_ADDRESS (msymbol);
struct obj_section *osect asection *msect = SYMBOL_BFD_SECTION (msymbol);
= find_pc_sect_section (SYMBOL_VALUE_ADDRESS (msymbol), struct obj_section *osect = find_pc_sect_section (maddr, msect);
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); if (osect != NULL)
{
int i;
/* Use the lesser of the next minimal symbol in the same /* Step over other symbols at this same address, and symbols
section, or the end of the section, as the end of the in other sections, to find the next symbol in this
function. */ section with a different address. */
if (SYMBOL_LINKAGE_NAME (msymbol + i) != NULL for (i = 1; SYMBOL_LINKAGE_NAME (msymbol + i) != NULL; i++)
&& SYMBOL_VALUE_ADDRESS (msymbol + i) < osect->endaddr) {
symfile_objfile->ei.main_func_highpc = SYMBOL_VALUE_ADDRESS (msymbol + i); if (SYMBOL_VALUE_ADDRESS (msymbol + i) != maddr
else && SYMBOL_BFD_SECTION (msymbol + i) == msect)
/* We got the start address from the last msymbol in the break;
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_lowpc = maddr;
symfile_objfile->ei.main_func_highpc > pc);
/* 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 /* Test a specified PC value to see if it is in the range of addresses