* dbxread.c (end_psymtab): Only reset texthigh if it's not already
authorJohn Gilmore <gnu@cygnus>
Sun, 14 Jun 1992 18:10:10 +0000 (18:10 +0000)
committerJohn Gilmore <gnu@cygnus>
Sun, 14 Jun 1992 18:10:10 +0000 (18:10 +0000)
set.  Don't reset our own texthigh, or dependency-only pst's, in
scanning all the rest of the psymtabs.
(process_one_symbol):  Fix comments around N_OBJ, N_OPT, N_UNDF.

* buildsym.h (N_UNDF):  Improve comments.
(N_LSYM, etc):  Skip types without names (":T(0,3)=sfoob...").

gdb/ChangeLog
gdb/dbxread.c
gdb/partial-stab.h

index 604ec1c550d9b4b7cfd43babd39f0df746124cdd..c3669adea85410c9c05c38e4ef2a286e5062a86a 100644 (file)
@@ -1,3 +1,13 @@
+Sun Jun 14 10:55:51 1992  John Gilmore  (gnu at cygnus.com)
+
+       * dbxread.c (end_psymtab):  Only reset texthigh if it's not already
+       set.  Don't reset our own texthigh, or dependency-only pst's, in
+       scanning all the rest of the psymtabs.
+       (process_one_symbol):  Fix comments around N_OBJ, N_OPT, N_UNDF.
+
+       * buildsym.h (N_UNDF):  Improve comments.
+       (N_LSYM, etc):  Skip types without names (":T(0,3)=sfoob...").
+
 Sat Jun 13 11:16:45 1992  Fred Fish  (fnf at cygnus.com)
 
        * symtab.h (struct symbol):  Add aux_value union for preserving
index 59e60c6147ef516593b9cf0315771a423f2fcfa0..647a96f66dae892dda8a0ff3a1a62ecac1b54d2f 100644 (file)
@@ -977,7 +977,6 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
       LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
   pst->texthigh = capping_text;
 
-/* FIXME, do the N_OBJ symbols fix this?  */
   /* Under Solaris, the N_SO symbols always have a value of 0,
      instead of the usual address of the .o file.  Therefore,
      we have to do some tricks to fill in texthigh and textlow.
@@ -1001,7 +1000,7 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
      down the partial_symtab_list filling in previous texthighs that
      are still unknown.  */
 
-  if (last_function_name) {
+  if (pst->texthigh == 0 && last_function_name) {
     char *p;
     int n;
     struct minimal_symbol *minsym;
@@ -1045,9 +1044,14 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
   if (pst->textlow == 0)
     pst->textlow = pst->texthigh;
 
+  /* If we know our own starting text address, then walk through all other
+     psymtabs for this objfile, and if any didn't know their ending text
+     address, set it to our starting address.  Take care to not set our
+     own ending address to our starting address, nor to set addresses on
+     `dependency' files that have both textlow and texthigh zero.  */
   if (pst->textlow) {
     ALL_OBJFILE_PSYMTABS (objfile, p1) {
-      if (p1->texthigh == 0) {
+      if (p1->texthigh == 0  && p1->textlow != 0 && p1 != pst) {
        p1->texthigh = pst->textlow;
        /* if this file has only data, then make textlow match texthigh */
        if (p1->textlow == 0)
@@ -1724,8 +1728,12 @@ process_one_symbol (type, desc, valu, name, offset, objfile)
        define_symbol (valu, name, desc, type, objfile);
       break;
 
-    case N_OBJ: /* 2 useless types from Solaris */
-    case N_OPT:
+    /* The following symbol types can be ignored.  */
+    case N_OBJ:                        /* Solaris 2:  Object file dir and name */
+    case N_OPT:                        /* Solaris 2:  Optimization level? */
+    /*   N_UNDF:                  Solaris 2:  file separator mark */
+    /*   N_UNDF: -- we will never encounter it, since we only process one
+                   file's symbols at once.  */
       break;
       
     /* The following symbol types we don't know how to process.  Handle
index d9d757ffb669ec3814adc73931f92ab66e6b4628..9686301b691e63e0b8eb7b599c86c30498350009 100644 (file)
@@ -137,8 +137,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
        case N_UNDF:
 #ifdef DBXREAD_ONLY
          if (processing_acc_compilation && bufp->n_strx == 1) {
-           /* deal with relative offsets in the string table
-              used in ELF+STAB under Solaris */
+           /* Deal with relative offsets in the string table
+              used in ELF+STAB under Solaris.  If we want to use the
+              n_strx field, which contains the name of the file,
+              we must adjust file_string_table_offset *before* calling
+              SET_NAMESTRING().  */
            past_first_source_file = 1;
            file_string_table_offset = next_file_string_table_offset;
            next_file_string_table_offset =
@@ -315,22 +318,28 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
          switch (p[1])
            {
            case 'T':
-             ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
-                                  STRUCT_NAMESPACE, LOC_TYPEDEF,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE);
-             if (p[2] == 't')
+             if (p != namestring)      /* a name is there, not just :T... */
                {
-                 /* Also a typedef with the same name.  */
                  ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
-                                      VAR_NAMESPACE, LOC_TYPEDEF,
+                                      STRUCT_NAMESPACE, LOC_TYPEDEF,
                                       objfile->static_psymbols, CUR_SYMBOL_VALUE);
-                 p += 1;
+                 if (p[2] == 't')
+                   {
+                     /* Also a typedef with the same name.  */
+                     ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+                                          VAR_NAMESPACE, LOC_TYPEDEF,
+                                          objfile->static_psymbols, CUR_SYMBOL_VALUE);
+                     p += 1;
+                   }
                }
              goto check_enum;
            case 't':
-             ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
-                                  VAR_NAMESPACE, LOC_TYPEDEF,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE);
+             if (p != namestring)      /* a name is there, not just :T... */
+               {
+                 ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+                                      VAR_NAMESPACE, LOC_TYPEDEF,
+                                      objfile->static_psymbols, CUR_SYMBOL_VALUE);
+               }
            check_enum:
              /* If this is an enumerated type, we need to
                 add all the enum constants to the partial symbol