*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / dbxread.c
index c71b0c8fd5e9a63f2a355e01a8f52fa043f4232a..8b1286fff72ebb88a2299b44bc16c1aab11e9c10 100644 (file)
@@ -1457,6 +1457,7 @@ read_dbx_symtab (struct objfile *objfile)
            static int prev_so_symnum = -10;
            static int first_so_symnum;
            char *p;
+           static char *dirname_nso;
            int prev_textlow_not_set;
 
            valu = nlist.n_value + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
@@ -1514,18 +1515,27 @@ read_dbx_symtab (struct objfile *objfile)
 
            p = strrchr (namestring, '/');
            if (p && *(p + 1) == '\000')
-             continue;         /* Simply ignore directory name SOs */
+             {
+               /* Save the directory name SOs locally, then save it into
+                  the psymtab when it's created below. */
+               dirname_nso = namestring;
+               continue;               
+             }
 
            /* Some other compilers (C++ ones in particular) emit useless
               SOs for non-existant .c files.  We ignore all subsequent SOs that
               immediately follow the first.  */
 
            if (!pst)
+             {
              pst = start_psymtab (objfile,
                                   namestring, valu,
                                   first_so_symnum * symbol_size,
                                   objfile->global_psymbols.next,
                                   objfile->static_psymbols.next);
+               pst->dirname = dirname_nso;
+               dirname_nso = NULL;
+             }
            continue;
          }
 
@@ -2638,17 +2648,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
                    struct section_offsets *section_offsets,
                    struct objfile *objfile)
 {
-#ifdef SUN_FIXED_LBRAC_BUG
-  /* If SUN_FIXED_LBRAC_BUG is defined, then it tells us whether we need
-     to correct the address of N_LBRAC's.  If it is not defined, then
-     we never need to correct the addresses.  */
-
-  /* This records the last pc address we've seen.  We depend on there being
-     an SLINE or FUN or SO before the first LBRAC, since the variable does
-     not get reset in between reads of different symbol files.  */
-  static CORE_ADDR last_pc_address;
-#endif
-
   struct context_stack *new;
   /* This remembers the address of the start of a function.  It is used
      because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
@@ -2756,14 +2755,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
           N_SO, the linker did not relocate them (sigh).  */
        valu += last_source_start_addr;
 
-#ifdef SUN_FIXED_LBRAC_BUG
-      if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address)
-       {
-         /* Patch current LBRAC pc value to match last handy pc value */
-         complaint (&symfile_complaints, "bad block start address patched");
-         valu = last_pc_address;
-       }
-#endif
       new = push_context (desc, valu);
       break;
 
@@ -2877,18 +2868,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
 
       n_opt_found = 0;
 
-#ifdef SUN_FIXED_LBRAC_BUG
-      last_pc_address = valu;  /* Save for SunOS bug circumcision */
-#endif
-
-#ifdef PCC_SOL_BROKEN
-      /* pcc bug, occasionally puts out SO for SOL.  */
-      if (context_stack_depth > 0)
-       {
-         start_subfile (name, NULL);
-         break;
-       }
-#endif
       if (last_source_file)
        {
          /* Check if previous symbol was also an N_SO (with some
@@ -2949,9 +2928,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       /* Relocate for dynamic loading and for ELF acc fn-relative syms.  */
       valu += function_start_offset;
 
-#ifdef SUN_FIXED_LBRAC_BUG
-      last_pc_address = valu;  /* Save for SunOS bug circumcision */
-#endif
       /* If this is the first SLINE note in the function, record it at
         the start of the function instead of at the listed location.  */
       if (within_function && sline_found_in_function == 0)
@@ -3111,56 +3087,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
                }
 #endif
 
-#ifdef SUN_FIXED_LBRAC_BUG
-             /* The Sun acc compiler, under SunOS4, puts out
-                functions with N_GSYM or N_STSYM.  The problem is
-                that the address of the symbol is no good (for N_GSYM
-                it doesn't even attept an address; for N_STSYM it
-                puts out an address but then it gets relocated
-                relative to the data segment, not the text segment).
-                Currently we can't fix this up later as we do for
-                some types of symbol in scan_file_globals.
-                Fortunately we do have a way of finding the address -
-                we know that the value in last_pc_address is either
-                the one we want (if we're dealing with the first
-                function in an object file), or somewhere in the
-                previous function. This means that we can use the
-                minimal symbol table to get the address.  */
-
-             /* Starting with release 3.0, the Sun acc compiler,
-                under SunOS4, puts out functions with N_FUN and a value
-                of zero. This gets relocated to the start of the text
-                segment of the module, which is no good either.
-                Under SunOS4 we can deal with this as N_SLINE and N_SO
-                entries contain valid absolute addresses.
-                Release 3.0 acc also puts out N_OPT entries, which makes
-                it possible to discern acc from cc or gcc.  */
-
-             if (type == N_GSYM || type == N_STSYM
-                 || (type == N_FUN
-                     && n_opt_found && !block_address_function_relative))
-               {
-                 struct minimal_symbol *m;
-                 int l = colon_pos - name;
-
-                 m = lookup_minimal_symbol_by_pc (last_pc_address);
-                 if (m && strncmp (DEPRECATED_SYMBOL_NAME (m), name, l) == 0
-                     && DEPRECATED_SYMBOL_NAME (m)[l] == '\0')
-                   /* last_pc_address was in this function */
-                   valu = SYMBOL_VALUE (m);
-                 else if (m && DEPRECATED_SYMBOL_NAME (m + 1)
-                          && strncmp (DEPRECATED_SYMBOL_NAME (m + 1), name, l) == 0
-                          && DEPRECATED_SYMBOL_NAME (m + 1)[l] == '\0')
-                   /* last_pc_address was in last function */
-                   valu = SYMBOL_VALUE (m + 1);
-                 else
-                   /* Not found - use last_pc_address (for finish_block) */
-                   valu = last_pc_address;
-               }
-
-             last_pc_address = valu;   /* Save for SunOS bug circumcision */
-#endif
-
              if (block_address_function_relative)
                /* For Solaris 2.0 compilers, the block addresses and
                   N_SLINE's are relative to the start of the
This page took 0.024356 seconds and 4 git commands to generate.