diff options
author | Mark Kettenis <kettenis@gnu.org> | 2003-12-13 13:16:52 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2003-12-13 13:16:52 +0000 |
commit | f614e9d90b031edeae21ffc51ae2bf8166dd934e (patch) | |
tree | 820d1f68d61a9523e2b21b00e7906883ecaa25a4 /gdb/blockframe.c | |
parent | dbe2df79e9181aaef1827a6f912121a31a3db354 (diff) | |
download | gdb-f614e9d90b031edeae21ffc51ae2bf8166dd934e.zip gdb-f614e9d90b031edeae21ffc51ae2bf8166dd934e.tar.gz gdb-f614e9d90b031edeae21ffc51ae2bf8166dd934e.tar.bz2 |
* blockframe.c (inside_main_func): Reformat. Introduce new local
variables to prevent long lines. Update comments to reflect
reality.
Diffstat (limited to 'gdb/blockframe.c')
-rw-r--r-- | gdb/blockframe.c | 114 |
1 files changed, 56 insertions, 58 deletions
diff --git a/gdb/blockframe.c b/gdb/blockframe.c index fa2a17f..ac73ef2 100644 --- a/gdb/blockframe.c +++ b/gdb/blockframe.c @@ -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. - - Typically called from DEPRECATED_FRAME_CHAIN_VALID. +/* Test whether PC is in the range of addresses that corresponds to + the "main" function. - 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; - } - - 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); + 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 a specified PC value to see if it is in the range of addresses |