*** empty log message ***
[binutils-gdb.git] / gdb / dbxread.c
index a1bd8e0bb13cbac6721de09886308aa8b9e9340c..25bf07b5af5f249612e7e56cac1072c211139255 100644 (file)
@@ -1,6 +1,6 @@
 /* Read dbx symbol tables and convert to internal format, for GDB.
    Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
-   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009.
+   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009, 2010.
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -55,6 +55,7 @@
 #include "complaints.h"
 #include "cp-abi.h"
 #include "cp-support.h"
+#include "psympriv.h"
 
 #include "gdb_assert.h"
 #include "gdb_string.h"
@@ -489,6 +490,7 @@ record_minimal_symbol (char *name, CORE_ADDR address, int type,
       /* Same with virtual function tables, both global and static.  */
       {
        char *tempstring = name;
+
        if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
          ++tempstring;
        if (is_vtable_name (tempstring))
@@ -520,13 +522,10 @@ record_minimal_symbol (char *name, CORE_ADDR address, int type,
 /* Scan and build partial symbols for a symbol file.
    We have been initialized by a call to dbx_symfile_init, which 
    put all the relevant info into a "struct dbx_symfile_info",
-   hung off the objfile structure.
-
-   MAINLINE is true if we are reading the main symbol
-   table (as opposed to a shared lib or dynamically loaded file).  */
+   hung off the objfile structure.  */
 
 static void
-dbx_symfile_read (struct objfile *objfile, int mainline)
+dbx_symfile_read (struct objfile *objfile, int symfile_flags)
 {
   bfd *sym_bfd;
   int val;
@@ -812,6 +811,7 @@ fill_symbuf (bfd *sym_bfd)
       if (symbuf_left <= 0)
        {
          file_ptr filepos = symbuf_sections->section->filepos;
+
          if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
            perror_with_name (bfd_get_filename (sym_bfd));
          symbuf_left = bfd_section_size (sym_bfd, symbuf_sections->section);
@@ -904,6 +904,7 @@ add_bincl_to_list (struct partial_symtab *pst, char *name, int instance)
   if (next_bincl >= bincl_list + bincls_allocated)
     {
       int offset = next_bincl - bincl_list;
+
       bincls_allocated *= 2;
       bincl_list = (struct header_file_location *)
        xrealloc ((char *) bincl_list,
@@ -1093,8 +1094,8 @@ read_dbx_dynamic_symtab (struct objfile *objfile)
     {
       arelent *rel = *relptr;
       CORE_ADDR address =
-      rel->address + ANOFFSET (objfile->section_offsets,
-                              SECT_OFF_DATA (objfile));
+       rel->address + ANOFFSET (objfile->section_offsets,
+                                SECT_OFF_DATA (objfile));
 
       switch (bfd_get_arch (abfd))
        {
@@ -1556,6 +1557,7 @@ read_dbx_symtab (struct objfile *objfile)
        case N_BINCL:
          {
            enum language tmp_language;
+
            /* Add this bincl to the bincl_list for future EXCLs.  No
               need to save the string; it'll be around until
               read_dbx_symtab function returns */
@@ -1592,8 +1594,8 @@ pos %d"),
        case N_SOL:
          {
            enum language tmp_language;
-           /* Mark down an include file in the current psymtab */
 
+           /* Mark down an include file in the current psymtab */
            namestring = set_namestring (objfile, &nlist);
            tmp_language = deduce_language_from_filename (namestring);
 
@@ -1620,6 +1622,7 @@ pos %d"),
              continue;
            {
              int i;
+
              for (i = 0; i < includes_used; i++)
                if (strcmp (namestring, psymtab_include_list[i]) == 0)
                  {
@@ -1690,6 +1693,7 @@ pos %d"),
            {
              char *new_name, *name = xmalloc (p - namestring + 1);
              memcpy (name, namestring, p - namestring);
+
              name[p - namestring] = '\0';
              new_name = cp_canonicalize_string (name);
              if (new_name != NULL)
@@ -1867,6 +1871,7 @@ pos %d"),
                {
                  int name_len = p - namestring;
                  char *name = xmalloc (name_len + 1);
+
                  memcpy (name, namestring, name_len);
                  name[name_len] = '\0';
                  function_outside_compilation_unit_complaint (name);
@@ -1886,6 +1891,7 @@ pos %d"),
                    find_stab_function_addr (namestring, 
                                             pst ? pst->filename : NULL, 
                                             objfile);
+
                  /* find_stab_function_addr will return 0 if the minimal
                     symbol wasn't found.  (Unfortunately, this might also
                     be a valid address.)  Anyway, if it *does* return 0,
@@ -1935,6 +1941,7 @@ pos %d"),
                {
                  int name_len = p - namestring;
                  char *name = xmalloc (name_len + 1);
+
                  memcpy (name, namestring, name_len);
                  name[name_len] = '\0';
                  function_outside_compilation_unit_complaint (name);
@@ -1954,6 +1961,7 @@ pos %d"),
                    find_stab_function_addr (namestring, 
                                             pst ? pst->filename : NULL, 
                                             objfile);
+
                  /* find_stab_function_addr will return 0 if the minimal
                     symbol wasn't found.  (Unfortunately, this might also
                     be a valid address.)  Anyway, if it *does* return 0,
@@ -2076,6 +2084,7 @@ pos %d"),
                if (dependencies_used >= dependencies_allocated)
                  {
                    struct partial_symtab **orig = dependency_list;
+
                    dependency_list =
                      (struct partial_symtab **)
                      alloca ((dependencies_allocated *= 2)
@@ -2188,11 +2197,11 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
               struct partial_symbol **static_syms)
 {
   struct partial_symtab *result =
-  start_psymtab_common (objfile, objfile->section_offsets,
-                       filename, textlow, global_syms, static_syms);
+    start_psymtab_common (objfile, objfile->section_offsets,
+                         filename, textlow, global_syms, static_syms);
 
-  result->read_symtab_private = (char *)
-    obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc));
+  result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
+                                              sizeof (struct symloc));
   LDSYMOFF (result) = ldsymoff;
   result->read_symtab = dbx_psymtab_to_symtab;
   SYMBOL_SIZE (result) = symbol_size;
@@ -2331,13 +2340,12 @@ end_psymtab (struct partial_symtab *pst, char **include_list, int num_includes,
   for (i = 0; i < num_includes; i++)
     {
       struct partial_symtab *subpst =
-      allocate_psymtab (include_list[i], objfile);
+       allocate_psymtab (include_list[i], objfile);
 
       /* Copy the sesction_offsets array from the main psymtab. */
       subpst->section_offsets = pst->section_offsets;
       subpst->read_symtab_private =
-       (char *) obstack_alloc (&objfile->objfile_obstack,
-                               sizeof (struct symloc));
+       obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc));
       LDSYMOFF (subpst) =
        LDSYMLEN (subpst) =
        subpst->textlow =
@@ -2363,11 +2371,6 @@ end_psymtab (struct partial_symtab *pst, char **include_list, int num_includes,
 
   sort_pst_symbols (pst);
 
-  /* If there is already a psymtab or symtab for a file of this name, remove it.
-     (If there is a symtab, more drastic things also happen.)
-     This happens in VxWorks.  */
-  free_named_symtabs (pst->filename);
-
   if (num_includes == 0
       && number_dependencies == 0
       && pst->n_global_syms == 0
@@ -2481,9 +2484,10 @@ Shouldn't happen.\n",
       if (DBX_STAB_SECTION (pst->objfile))
        {
          stabs_data
-           = symfile_relocate_debug_section (pst->objfile->obfd,
+           = symfile_relocate_debug_section (pst->objfile,
                                              DBX_STAB_SECTION (pst->objfile),
                                              NULL);
+
          if (stabs_data)
            back_to = make_cleanup (free_current_contents,
                                    (void *) &stabs_data);
@@ -2666,8 +2670,7 @@ read_ofile_symtab (struct partial_symtab *pst)
 #endif
        }
       else if (type & N_EXT || type == (unsigned char) N_TEXT
-              || type == (unsigned char) N_NBTEXT
-       )
+              || type == (unsigned char) N_NBTEXT)
        {
          /* Global symbol: see if we came across a dbx defintion for
             a corresponding symbol.  If so, store the value.  Remove
@@ -2795,6 +2798,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
          if (sline_found_in_function)
            {
              CORE_ADDR addr = last_function_start + valu;
+
              record_line (current_subfile, 0,
                           gdbarch_addr_bits_remove (gdbarch, addr));
            }
@@ -3015,6 +3019,7 @@ no enclosing block"));
        {
          CORE_ADDR addr = processing_gcc_compilation == 2 ?
                           last_function_start : valu;
+
          record_line (current_subfile, desc,
                       gdbarch_addr_bits_remove (gdbarch, addr));
          sline_found_in_function = 1;
@@ -3149,6 +3154,7 @@ no enclosing block"));
        {
          int deftype;
          char *colon_pos = strchr (name, ':');
+
          if (colon_pos == NULL)
            deftype = '\0';
          else
@@ -3468,7 +3474,7 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect,
 
   symbuf_read = 0;
   symbuf_left = bfd_section_size (objfile->obfd, stabsect);
-  stabs_data = symfile_relocate_debug_section (objfile->obfd, stabsect, NULL);
+  stabs_data = symfile_relocate_debug_section (objfile, stabsect, NULL);
   if (stabs_data)
     back_to = make_cleanup (free_current_contents, (void *) &stabs_data);
 
@@ -3579,6 +3585,8 @@ static struct sym_fns aout_sym_fns =
   default_symfile_segments,    /* sym_segments: Get segment information from
                                   a file.  */
   NULL,                         /* sym_read_linetable */
+  default_symfile_relocate,    /* sym_relocate: Relocate a debug section.  */
+  &psym_functions,
   NULL                         /* next: pointer to next struct sym_fns */
 };