X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fnlmread.c;h=fa588df1848f27557c8a9a25452e232631d413e6;hb=008c23e8fc81e1372de0250a106d65b5e9cd2d2a;hp=3895053282f753eaee3a562b1de4e5ed3f51123b;hpb=a66e8382def5fdeb8e291748ce6f1f639a0a63f2;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/nlmread.c b/gdb/nlmread.c index 3895053282..fa588df184 100644 --- a/gdb/nlmread.c +++ b/gdb/nlmread.c @@ -16,10 +16,10 @@ GNU General Public License for more details. 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" -#include +#include "gdb_string.h" #include "bfd.h" #include "symtab.h" #include "symfile.h" @@ -43,14 +43,6 @@ nlm_symfile_finish PARAMS ((struct objfile *)); static void nlm_symtab_read PARAMS ((bfd *, CORE_ADDR, struct objfile *)); -static struct section_offsets * -nlm_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR)); - -static void -record_minimal_symbol PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type, - struct objfile *)); - - /* Initialize anything that needs initializing when a completely new symbol file is specified (not just adding some symbols from another file, e.g. a shared library). @@ -82,18 +74,6 @@ nlm_symfile_init (ignore) { } -static void -record_minimal_symbol (name, address, ms_type, objfile) - char *name; - CORE_ADDR address; - enum minimal_symbol_type ms_type; - struct objfile *objfile; -{ - name = obsavestring (name, strlen (name), &objfile -> symbol_obstack); - prim_record_minimal_symbol (name, address, ms_type, objfile); -} - - /* LOCAL FUNCTION @@ -150,27 +130,20 @@ nlm_symtab_read (abfd, addr, objfile) symaddr = sym -> value + sym -> section -> vma; /* Relocate all non-absolute symbols by base address. */ if (sym -> section != &bfd_abs_section) - { - symaddr += addr; - } + symaddr += addr; /* For non-absolute symbols, use the type of the section - they are relative to, to intuit text/data. Bfd provides + they are relative to, to intuit text/data. BFD provides no way of figuring this out for absolute symbols. */ if (sym -> section -> flags & SEC_CODE) - { - ms_type = mst_text; - } + ms_type = mst_text; else if (sym -> section -> flags & SEC_DATA) - { - ms_type = mst_data; - } + ms_type = mst_data; else - { - ms_type = mst_unknown; - } - record_minimal_symbol ((char *) sym -> name, symaddr, ms_type, - objfile); + ms_type = mst_unknown; + + prim_record_minimal_symbol (sym -> name, symaddr, ms_type, + objfile); } } do_cleanups (back_to); @@ -214,6 +187,7 @@ nlm_symfile_read (objfile, section_offsets, mainline) bfd *abfd = objfile -> obfd; struct cleanup *back_to; CORE_ADDR offset; + struct symbol *mainsym; init_minimal_symbol_collection (); back_to = make_cleanup (discard_minimal_symbols, 0); @@ -228,18 +202,20 @@ nlm_symfile_read (objfile, section_offsets, mainline) nlm_symtab_read (abfd, offset, objfile); stabsect_build_psymtabs (objfile, section_offsets, mainline, ".stab", - ".stabstr"); + ".stabstr", ".text"); - /* FIXME: We could locate and read the optional native debugging format - here and add the symbols to the minimal symbol table. */ + mainsym = lookup_symbol ("main", NULL, VAR_NAMESPACE, NULL, NULL); - if (!have_partial_symbols ()) + if (mainsym + && SYMBOL_CLASS(mainsym) == LOC_BLOCK) { - wrap_here (""); - printf_filtered ("(no debugging symbols found)..."); - wrap_here (""); + objfile->ei.main_func_lowpc = BLOCK_START (SYMBOL_BLOCK_VALUE (mainsym)); + objfile->ei.main_func_highpc = BLOCK_END (SYMBOL_BLOCK_VALUE (mainsym)); } + /* FIXME: We could locate and read the optional native debugging format + here and add the symbols to the minimal symbol table. */ + /* Install any minimal symbols that have been collected as the current minimal symbols for this objfile. */ @@ -264,34 +240,6 @@ nlm_symfile_finish (objfile) } } -/* NLM specific parsing routine for section offsets. - FIXME: This may or may not be necessary. All the symbol readers seem - to have similar code. See if it can be generalized and moved elsewhere. */ - -static -struct section_offsets * -nlm_symfile_offsets (objfile, addr) - struct objfile *objfile; - CORE_ADDR addr; -{ - struct section_offsets *section_offsets; - int i; - - objfile->num_sections = SECT_OFF_MAX; - section_offsets = (struct section_offsets *) - obstack_alloc (&objfile -> psymbol_obstack, - sizeof (struct section_offsets) + - sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1)); - - for (i = 0; i < SECT_OFF_MAX; i++) - { - ANOFFSET (section_offsets, i) = addr; - } - - return (section_offsets); -} - - /* Register that we are able to handle NLM file format. */ static struct sym_fns nlm_sym_fns = @@ -301,7 +249,8 @@ static struct sym_fns nlm_sym_fns = nlm_symfile_init, /* sym_init: read initial info, setup for sym_read() */ nlm_symfile_read, /* sym_read: read a symbol file into symtab */ nlm_symfile_finish, /* sym_finish: finished with file, cleanup */ - nlm_symfile_offsets, /* sym_offsets: Translate ext. to int. relocation */ + default_symfile_offsets, + /* sym_offsets: Translate ext. to int. relocation */ NULL /* next: pointer to next struct sym_fns */ };