Minor C++-ification in ravenscar-thread.c
[deliverable/binutils-gdb.git] / gdb / mdebugread.c
index 453b8d5307db9429a689c6ed59ce55cf310ed624..accf07c27804bd29f0080b4d14d84d886c44819b 100644 (file)
@@ -1,6 +1,6 @@
 /* Read a symbol table in ECOFF format (Third-Eye).
 
-   Copyright (C) 1986-2018 Free Software Foundation, Inc.
+   Copyright (C) 1986-2019 Free Software Foundation, Inc.
 
    Original version contributed by Alessandro Forin (af@cs.cmu.edu) at
    CMU.  Major work by Per Bothner, John Gilmore and Ian Lance Taylor
@@ -537,13 +537,9 @@ mdebug_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
 {
   int regno = gdbarch_ecoff_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
 
-  if (regno < 0
-      || regno >= (gdbarch_num_regs (gdbarch)
-                  + gdbarch_num_pseudo_regs (gdbarch)))
+  if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch))
     {
-      reg_value_complaint (regno,
-                          gdbarch_num_regs (gdbarch)
-                            + gdbarch_num_pseudo_regs (gdbarch),
+      reg_value_complaint (regno, gdbarch_num_cooked_regs (gdbarch),
                           SYMBOL_PRINT_NAME (sym));
 
       regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless.  */
@@ -2623,9 +2619,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
        textlow = 0;
       pst = start_psymtab_common (objfile,
                                  fdr_name (fh),
-                                 textlow,
-                                 objfile->global_psymbols,
-                                 objfile->static_psymbols);
+                                 textlow);
       pst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
       memset (pst->read_symtab_private, 0, sizeof (struct symloc));
 
@@ -2771,6 +2765,9 @@ parse_partial_symbols (minimal_symbol_reader &reader,
              /* Handle stabs continuation.  */
              {
                char *stabstring = debug_info->ss + fh->issBase + sh.iss;
+               /* If we need to heap-allocate STABSTRING, this owns
+                  it.  */
+               gdb::unique_xmalloc_ptr<char> stabstring_storage;
                int len = strlen (stabstring);
 
                while (stabstring[len - 1] == '\\')
@@ -2793,14 +2790,19 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                    stabstring2 = debug_info->ss + fh->issBase + sh2.iss;
                    len2 = strlen (stabstring2);
 
-                   /* Concatinate stabstring2 with stabstring1.  */
-                   if (stabstring
-                    && stabstring != debug_info->ss + fh->issBase + sh.iss)
-                     stabstring
-                       = (char *) xrealloc (stabstring, len + len2 + 1);
+                   /* Concatenate stabstring2 with stabstring1.  */
+                   if (stabstring_storage != nullptr)
+                     {
+                       stabstring_storage.reset
+                         ((char *) xrealloc (stabstring_storage.release (),
+                                             len + len2 + 1));
+                       stabstring = stabstring_storage.get ();
+                     }
                    else
                      {
-                       stabstring = (char *) xmalloc (len + len2 + 1);
+                       stabstring_storage.reset
+                         ((char *) xmalloc (len + len2 + 1));
+                       stabstring = stabstring_storage.get ();
                        strcpy (stabstring, stabstring1);
                      }
                    strcpy (stabstring + len, stabstring2);
@@ -3054,7 +3056,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                        add_psymbol_to_list (namestring, p - namestring, 1,
                                             VAR_DOMAIN, LOC_STATIC,
                                             SECT_OFF_DATA (objfile),
-                                            &objfile->static_psymbols,
+                                            psymbol_placement::STATIC,
                                             sh.value,
                                             psymtab_language, objfile);
                        continue;
@@ -3065,7 +3067,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                        add_psymbol_to_list (namestring, p - namestring, 1,
                                             VAR_DOMAIN, LOC_STATIC,
                                             SECT_OFF_DATA (objfile),
-                                            &objfile->global_psymbols,
+                                            psymbol_placement::GLOBAL,
                                             sh.value,
                                             psymtab_language, objfile);
                        continue;
@@ -3084,7 +3086,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                            add_psymbol_to_list (namestring, p - namestring, 1,
                                                 STRUCT_DOMAIN, LOC_TYPEDEF,
                                                 -1,
-                                                &objfile->static_psymbols,
+                                                psymbol_placement::STATIC,
                                                 0, psymtab_language, objfile);
                            if (p[2] == 't')
                              {
@@ -3093,7 +3095,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                                                     p - namestring, 1,
                                                     VAR_DOMAIN, LOC_TYPEDEF,
                                                     -1,
-                                                    &objfile->static_psymbols,
+                                                    psymbol_placement::STATIC,
                                                     0, psymtab_language,
                                                     objfile);
                                p += 1;
@@ -3107,7 +3109,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                            add_psymbol_to_list (namestring, p - namestring, 1,
                                                 VAR_DOMAIN, LOC_TYPEDEF,
                                                 -1,
-                                                &objfile->static_psymbols,
+                                                psymbol_placement::STATIC,
                                                 0, psymtab_language, objfile);
                          }
                      check_enum:
@@ -3172,7 +3174,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                                add_psymbol_to_list (p, q - p, 1,
                                                     VAR_DOMAIN, LOC_CONST,
                                                     -1,
-                                                    &objfile->static_psymbols,
+                                                    psymbol_placement::STATIC,
                                                     0, psymtab_language,
                                                     objfile);
                                /* Point past the name.  */
@@ -3190,25 +3192,21 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                        /* Constant, e.g. from "const" in Pascal.  */
                        add_psymbol_to_list (namestring, p - namestring, 1,
                                             VAR_DOMAIN, LOC_CONST, -1,
-                                            &objfile->static_psymbols,
+                                            psymbol_placement::STATIC,
                                             0, psymtab_language, objfile);
                        continue;
 
                      case 'f':
                        if (! pst)
                          {
-                           int name_len = p - namestring;
-                           char *name = (char *) xmalloc (name_len + 1);
-
-                           memcpy (name, namestring, name_len);
-                           name[name_len] = '\0';
-                           function_outside_compilation_unit_complaint (name);
-                           xfree (name);
+                           std::string copy (namestring, p);
+                           function_outside_compilation_unit_complaint
+                             (copy.c_str ());
                          }
                        add_psymbol_to_list (namestring, p - namestring, 1,
                                             VAR_DOMAIN, LOC_BLOCK,
                                             SECT_OFF_TEXT (objfile),
-                                            &objfile->static_psymbols,
+                                            psymbol_placement::STATIC,
                                             sh.value,
                                             psymtab_language, objfile);
                        continue;
@@ -3220,18 +3218,14 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                      case 'F':
                        if (! pst)
                          {
-                           int name_len = p - namestring;
-                           char *name = (char *) xmalloc (name_len + 1);
-
-                           memcpy (name, namestring, name_len);
-                           name[name_len] = '\0';
-                           function_outside_compilation_unit_complaint (name);
-                           xfree (name);
+                           std::string copy (namestring, p);
+                           function_outside_compilation_unit_complaint
+                             (copy.c_str ());
                          }
                        add_psymbol_to_list (namestring, p - namestring, 1,
                                             VAR_DOMAIN, LOC_BLOCK,
                                             SECT_OFF_TEXT (objfile),
-                                            &objfile->global_psymbols,
+                                            psymbol_placement::GLOBAL,
                                             sh.value,
                                             psymtab_language, objfile);
                        continue;
@@ -3344,9 +3338,6 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                               hex_string (type_code)); /* CUR_SYMBOL_TYPE */
                    continue;
                  }
-               if (stabstring
-                   && stabstring != debug_info->ss + fh->issBase + sh.iss)
-                 xfree (stabstring);
              }
              /* end - Handle continuation */
            }
@@ -3469,13 +3460,13 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                    add_psymbol_to_list (sym_name, strlen (sym_name), 1,
                                         VAR_DOMAIN, LOC_BLOCK,
                                         section,
-                                        &objfile->global_psymbols,
+                                        psymbol_placement::GLOBAL,
                                         sh.value, psymtab_language, objfile);
                  else
                    add_psymbol_to_list (sym_name, strlen (sym_name), 1,
                                         VAR_DOMAIN, LOC_BLOCK,
                                         section,
-                                        &objfile->static_psymbols,
+                                        psymbol_placement::STATIC,
                                         sh.value, psymtab_language, objfile);
 
                  procaddr = sh.value;
@@ -3541,7 +3532,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                    {
                      add_psymbol_to_list (sym_name, strlen (sym_name), 1,
                                           STRUCT_DOMAIN, LOC_TYPEDEF, -1,
-                                          &objfile->static_psymbols,
+                                          psymbol_placement::STATIC,
                                           0, psymtab_language, objfile);
                    }
                  handle_psymbol_enumerators (objfile, fh, sh.st, sh.value);
@@ -3581,7 +3572,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
              /* Use this gdb symbol.  */
              add_psymbol_to_list (sym_name, strlen (sym_name), 1,
                                   VAR_DOMAIN, theclass, section,
-                                  &objfile->static_psymbols,
+                                  psymbol_placement::STATIC,
                                   sh.value, psymtab_language, objfile);
            skip:
              cur_sdx++;        /* Go to next file symbol.  */
@@ -3661,7 +3652,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
              add_psymbol_to_list (sym_name, strlen (sym_name), 1,
                                   VAR_DOMAIN, theclass,
                                   section,
-                                  &objfile->global_psymbols,
+                                  psymbol_placement::GLOBAL,
                                   svalue, psymtab_language, objfile);
            }
        }
@@ -3693,17 +3684,17 @@ parse_partial_symbols (minimal_symbol_reader &reader,
          && save_pst->text_low_valid
          && !(objfile->flags & OBJF_REORDERED))
        {
-         ALL_OBJFILE_PSYMTABS (objfile, pst)
-         {
-           if (save_pst != pst
-               && save_pst->raw_text_low () >= pst->raw_text_low ()
-               && save_pst->raw_text_low () < pst->raw_text_high ()
-               && save_pst->raw_text_high () > pst->raw_text_high ())
-             {
-               objfile->flags |= OBJF_REORDERED;
-               break;
-             }
-         }
+         for (partial_symtab *iter : objfile->psymtabs ())
+           {
+             if (save_pst != iter
+                 && save_pst->raw_text_low () >= iter->raw_text_low ()
+                 && save_pst->raw_text_low () < iter->raw_text_high ()
+                 && save_pst->raw_text_high () > iter->raw_text_high ())
+               {
+                 objfile->flags |= OBJF_REORDERED;
+                 break;
+               }
+           }
        }
     }
 
@@ -3723,8 +3714,8 @@ parse_partial_symbols (minimal_symbol_reader &reader,
       /* Skip the first file indirect entry as it is a self dependency for
          source files or a reverse .h -> .c dependency for header files.  */
       pst->number_of_dependencies = 0;
-      pst->dependencies = XOBNEWVEC (&objfile->objfile_obstack,
-                                    partial_symtab *, (fh->crfd - 1));
+      pst->dependencies
+       = objfile->partial_symtabs->allocate_dependencies (fh->crfd - 1);
       for (s_idx = 1; s_idx < fh->crfd; s_idx++)
        {
          RFDT rh;
@@ -3753,11 +3744,12 @@ parse_partial_symbols (minimal_symbol_reader &reader,
 
   /* Remove the dummy psymtab created for -O3 images above, if it is
      still empty, to enable the detection of stripped executables.  */
-  if (objfile->psymtabs->next == NULL
-      && objfile->psymtabs->number_of_dependencies == 0
-      && objfile->psymtabs->n_global_syms == 0
-      && objfile->psymtabs->n_static_syms == 0)
-    objfile->psymtabs = NULL;
+  pst = objfile->partial_symtabs->psymtabs;
+  if (pst->next == NULL
+      && pst->number_of_dependencies == 0
+      && pst->n_global_syms == 0
+      && pst->n_static_syms == 0)
+    objfile->partial_symtabs->psymtabs = NULL;
 }
 
 /* If the current psymbol has an enumerated type, we need to add
@@ -3822,7 +3814,7 @@ handle_psymbol_enumerators (struct objfile *objfile, FDR *fh, int stype,
          in psymtabs, just in symtabs.  */
       add_psymbol_to_list (name, strlen (name), 1,
                           VAR_DOMAIN, LOC_CONST, -1,
-                          &objfile->static_psymbols, 0,
+                          psymbol_placement::STATIC, 0,
                           psymtab_language, objfile);
       ext_sym += external_sym_size;
     }
@@ -4514,7 +4506,7 @@ static void
 add_symbol (struct symbol *s, struct symtab *symtab, struct block *b)
 {
   symbol_set_symtab (s, symtab);
-  dict_add_symbol (BLOCK_DICT (b), s);
+  mdict_add_symbol (BLOCK_MULTIDICT (b), s);
 }
 
 /* Add a new block B to a symtab S.  */
@@ -4742,7 +4734,7 @@ new_bvect (int nblocks)
 }
 
 /* Allocate and zero a new block of language LANGUAGE, and set its
-   BLOCK_DICT.  If function is non-zero, assume the block is
+   BLOCK_MULTIDICT.  If function is non-zero, assume the block is
    associated to a function, and make sure that the symbols are stored
    linearly; otherwise, store them hashed.  */
 
@@ -4755,9 +4747,9 @@ new_block (enum block_type type, enum language language)
   struct block *retval = XCNEW (struct block);
 
   if (type == FUNCTION_BLOCK)
-    BLOCK_DICT (retval) = dict_create_linear_expandable (language);
+    BLOCK_MULTIDICT (retval) = mdict_create_linear_expandable (language);
   else
-    BLOCK_DICT (retval) = dict_create_hashed_expandable (language);
+    BLOCK_MULTIDICT (retval) = mdict_create_hashed_expandable (language);
 
   return retval;
 }
This page took 0.031278 seconds and 4 git commands to generate.