Use XOBNEW/XOBNEWVEC/OBSTACK_ZALLOC when possible
authorSimon Marchi <simon.marchi@ericsson.com>
Mon, 21 May 2018 01:07:03 +0000 (21:07 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Mon, 21 May 2018 01:07:03 +0000 (21:07 -0400)
Since XOBNEW/XOBNEWVEC/OBSTACK_ZALLOC are now poisoned to prevent using
them with non-trivially-constructible objects, it is worth using them
over plain obstack_alloc.  This patch changes the locations I could find
where we can do that change easily.

gdb/ChangeLog:

* ada-lang.c (cache_symbol): Use XOBNEW and/or XOBNEWVEC and/or
OBSTACK_ZALLOC.
* dwarf2-frame.c (dwarf2_build_frame_info): Likewise.
* hppa-tdep.c (hppa_init_objfile_priv_data): Likewise.
* mdebugread.c (mdebug_build_psymtabs): Likewise.
(add_pending): Likewise.
(parse_symbol): Likewise.
(parse_partial_symbols): Likewise.
(psymtab_to_symtab_1): Likewise.
(new_psymtab): Likewise.
(elfmdebug_build_psymtabs): Likewise.
* minsyms.c (terminate_minimal_symbol_table): Likewise.
* objfiles.c (get_objfile_bfd_data): Likewise.
(objfile_register_static_link): Likewise.
* psymtab.c (allocate_psymtab): Likewise.
* stabsread.c (read_member_functions): Likewise.
* xcoffread.c (xcoff_end_psymtab): Likewise.

gdb/ChangeLog
gdb/ada-lang.c
gdb/dwarf2-frame.c
gdb/hppa-tdep.c
gdb/mdebugread.c
gdb/minsyms.c
gdb/objfiles.c
gdb/psymtab.c
gdb/stabsread.c
gdb/xcoffread.c

index fb4d955b484ca858e0a2358c9139f0c981d01a36..5eb5eeaa9ad9799b834f466c4f0d15fffbb6493f 100644 (file)
@@ -1,3 +1,23 @@
+2018-05-20  Simon Marchi  <simon.marchi@ericsson.com>
+
+       * ada-lang.c (cache_symbol): Use XOBNEW and/or XOBNEWVEC and/or
+       OBSTACK_ZALLOC.
+       * dwarf2-frame.c (dwarf2_build_frame_info): Likewise.
+       * hppa-tdep.c (hppa_init_objfile_priv_data): Likewise.
+       * mdebugread.c (mdebug_build_psymtabs): Likewise.
+       (add_pending): Likewise.
+       (parse_symbol): Likewise.
+       (parse_partial_symbols): Likewise.
+       (psymtab_to_symtab_1): Likewise.
+       (new_psymtab): Likewise.
+       (elfmdebug_build_psymtabs): Likewise.
+       * minsyms.c (terminate_minimal_symbol_table): Likewise.
+       * objfiles.c (get_objfile_bfd_data): Likewise.
+       (objfile_register_static_link): Likewise.
+       * psymtab.c (allocate_psymtab): Likewise.
+       * stabsread.c (read_member_functions): Likewise.
+       * xcoffread.c (xcoff_end_psymtab): Likewise.
+
 2018-05-20  Simon Marchi  <simon.marchi@ericsson.com>
 
        * common/traits.h (HAVE_IS_TRIVIALLY_COPYABLE): Define if
index 7cbf1ec08de57ab61510b1152e1dedb582f41cf8..f2514b1239589d9913c619540260a823c6eb19cc 100644 (file)
@@ -4744,8 +4744,7 @@ cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
     return;
 
   h = msymbol_hash (name) % HASH_SIZE;
-  e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
-                                           sizeof (*e));
+  e = XOBNEW (&sym_cache->cache_space, cache_entry);
   e->next = sym_cache->root[h];
   sym_cache->root[h] = e;
   e->name = copy
index 38367f7d73e404fe34774bf2e10a3672349b46c1..aed6c7b1e6ca29f449599a178fc0853f61e4845c 100644 (file)
@@ -2205,8 +2205,7 @@ dwarf2_build_frame_info (struct objfile *objfile)
   fde_table.entries = NULL;
 
   /* Build a minimal decoding of the DWARF2 compilation unit.  */
-  unit = (struct comp_unit *) obstack_alloc (&objfile->objfile_obstack,
-                                            sizeof (struct comp_unit));
+  unit = XOBNEW (&objfile->objfile_obstack, comp_unit);
   unit->abfd = objfile->obfd;
   unit->objfile = objfile;
   unit->dbase = 0;
index 84dbd667485914dc78988038ba2093a5de19d648..9692b33e097b38ff80de8fd5faed2c26fea49be4 100644 (file)
@@ -205,13 +205,10 @@ hppa_symbol_address(const char *sym)
 static struct hppa_objfile_private *
 hppa_init_objfile_priv_data (struct objfile *objfile)
 {
-  struct hppa_objfile_private *priv;
+  hppa_objfile_private *priv
+    = OBSTACK_ZALLOC (&objfile->objfile_obstack, hppa_objfile_private);
 
-  priv = (struct hppa_objfile_private *)
-        obstack_alloc (&objfile->objfile_obstack,
-                       sizeof (struct hppa_objfile_private));
   set_objfile_data (objfile, hppa_objfile_priv_data, priv);
-  memset (priv, 0, sizeof (*priv));
 
   return priv;
 }
index d9f119af40c9e0a5934f96691830c9f6ad70902b..3f0cdc74aa26c8730df7dc63da01f9cf9be3029c 100644 (file)
@@ -356,9 +356,8 @@ mdebug_build_psymtabs (minimal_symbol_reader &reader,
       char *fdr_end;
       FDR *fdr_ptr;
 
-      info->fdr = (FDR *) obstack_alloc (&objfile->objfile_obstack,
-                                        (info->symbolic_header.ifdMax
-                                         * sizeof (FDR)));
+      info->fdr = (FDR *) XOBNEWVEC (&objfile->objfile_obstack, FDR,
+                                    info->symbolic_header.ifdMax);
       fdr_src = (char *) info->external_fdr;
       fdr_end = (fdr_src
                 + info->symbolic_header.ifdMax * swap->external_fdr_size);
@@ -508,9 +507,7 @@ add_pending (FDR *fh, char *sh, struct type *t)
   /* Make sure we do not make duplicates.  */
   if (!p)
     {
-      p = ((struct mdebug_pending *)
-          obstack_alloc (&mdebugread_objfile->objfile_obstack,
-                         sizeof (struct mdebug_pending)));
+      p = XOBNEW (&mdebugread_objfile->objfile_obstack, mdebug_pending);
       p->s = sh;
       p->t = t;
       p->next = pending_list[f_idx];
@@ -1174,10 +1171,8 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
          SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
          SYMBOL_ACLASS_INDEX (s) = LOC_CONST;
          SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->builtin_void;
-         e = ((struct mdebug_extra_func_info *)
-              obstack_alloc (&mdebugread_objfile->objfile_obstack,
-                             sizeof (struct mdebug_extra_func_info)));
-         memset (e, 0, sizeof (struct mdebug_extra_func_info));
+         e = OBSTACK_ZALLOC (&mdebugread_objfile->objfile_obstack,
+                             mdebug_extra_func_info);
          SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e;
          e->numargs = top_stack->numargs;
          e->pdr.framereg = -1;
@@ -2370,8 +2365,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
       && (bfd_get_section_flags (cur_bfd, text_sect) & SEC_RELOC))
     relocatable = 1;
 
-  extern_tab = (EXTR *) obstack_alloc (&objfile->objfile_obstack,
-                                      sizeof (EXTR) * hdr->iextMax);
+  extern_tab = XOBNEWVEC (&objfile->objfile_obstack, EXTR, hdr->iextMax);
 
   includes_allocated = 30;
   includes_used = 0;
@@ -2413,10 +2407,8 @@ parse_partial_symbols (minimal_symbol_reader &reader,
   }
 
   /* Allocate the global pending list.  */
-  pending_list =
-    ((struct mdebug_pending **)
-     obstack_alloc (&objfile->objfile_obstack,
-                   hdr->ifdMax * sizeof (struct mdebug_pending *)));
+  pending_list = XOBNEWVEC (&objfile->objfile_obstack, mdebug_pending *,
+                           hdr->ifdMax);
   memset (pending_list, 0,
          hdr->ifdMax * sizeof (struct mdebug_pending *));
 
@@ -2656,8 +2648,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
                                  textlow,
                                  objfile->global_psymbols,
                                  objfile->static_psymbols);
-      pst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
-                                               sizeof (struct symloc));
+      pst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
       memset (pst->read_symtab_private, 0, sizeof (struct symloc));
 
       save_pst = pst;
@@ -3771,11 +3762,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 =
-       ((struct partial_symtab **)
-        obstack_alloc (&objfile->objfile_obstack,
-                       ((fh->crfd - 1)
-                        * sizeof (struct partial_symtab *))));
+      pst->dependencies = XOBNEWVEC (&objfile->objfile_obstack,
+                                    partial_symtab *, (fh->crfd - 1));
       for (s_idx = 1; s_idx < fh->crfd; s_idx++)
        {
          RFDT rh;
@@ -4061,13 +4049,11 @@ psymtab_to_symtab_1 (struct objfile *objfile,
                {
                  /* Make up special symbol to contain
                     procedure specific info.  */
-                 struct mdebug_extra_func_info *e =
-                   ((struct mdebug_extra_func_info *)
-                    obstack_alloc (&mdebugread_objfile->objfile_obstack,
-                                   sizeof (struct mdebug_extra_func_info)));
+                 mdebug_extra_func_info *e
+                   = OBSTACK_ZALLOC (&mdebugread_objfile->objfile_obstack,
+                                     mdebug_extra_func_info);
                  struct symbol *s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
 
-                 memset (e, 0, sizeof (struct mdebug_extra_func_info));
                  SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
                  SYMBOL_ACLASS_INDEX (s) = LOC_CONST;
                  SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_void;
@@ -4736,9 +4722,8 @@ new_psymtab (const char *name, struct objfile *objfile)
 
   /* Keep a backpointer to the file's symbols.  */
 
-  psymtab->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
-                                               sizeof (struct symloc));
-  memset (psymtab->read_symtab_private, 0, sizeof (struct symloc));
+  psymtab->read_symtab_private
+    = OBSTACK_ZALLOC (&objfile->objfile_obstack, symloc);
   CUR_BFD (psymtab) = cur_bfd;
   DEBUG_SWAP (psymtab) = debug_swap;
   DEBUG_INFO (psymtab) = debug_info;
@@ -4863,9 +4848,7 @@ elfmdebug_build_psymtabs (struct objfile *objfile,
 
   minimal_symbol_reader reader (objfile);
 
-  info = ((struct ecoff_debug_info *)
-         obstack_alloc (&objfile->objfile_obstack,
-                        sizeof (struct ecoff_debug_info)));
+  info = XOBNEW (&objfile->objfile_obstack, ecoff_debug_info);
 
   if (!(*swap->read_debug_info) (abfd, sec, info))
     error (_("Error reading ECOFF debugging information: %s"),
index 496dba029675bad6b91e5941fe296393b2ab7e39..b98f121d5fd6cea15f3ede949538e00b40691ee9 100644 (file)
@@ -1419,10 +1419,8 @@ void
 terminate_minimal_symbol_table (struct objfile *objfile)
 {
   if (! objfile->per_bfd->msymbols)
-    objfile->per_bfd->msymbols
-      = ((struct minimal_symbol *)
-        obstack_alloc (&objfile->per_bfd->storage_obstack,
-                       sizeof (struct minimal_symbol)));
+    objfile->per_bfd->msymbols = XOBNEW (&objfile->per_bfd->storage_obstack,
+                                        minimal_symbol);
 
   {
     struct minimal_symbol *m
index 98e81c48c467cac139b1a635a0414f12033e115a..2ec358ad4dbb57067912527de7962e4fdf989e6b 100644 (file)
@@ -147,11 +147,7 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
          set_bfd_data (abfd, objfiles_bfd_data, storage);
        }
       else
-       {
-         storage = (objfile_per_bfd_storage *)
-           obstack_alloc (&objfile->objfile_obstack,
-                          sizeof (objfile_per_bfd_storage));
-       }
+       storage = XOBNEW (&objfile->objfile_obstack, objfile_per_bfd_storage);
 
       /* objfile_per_bfd_storage is not trivially constructible, must
         call the ctor manually.  */
@@ -269,8 +265,7 @@ objfile_register_static_link (struct objfile *objfile,
   slot = htab_find_slot (objfile->static_links, &lookup_entry, INSERT);
   gdb_assert (*slot == NULL);
 
-  entry = (struct static_link_htab_entry *) obstack_alloc
-           (&objfile->objfile_obstack, sizeof (*entry));
+  entry = XOBNEW (&objfile->objfile_obstack, static_link_htab_entry);
   entry->block = block;
   entry->static_link = static_link;
   *slot = (void *) entry;
index ac0ee0a5a64c592b2c2807d354b6d06bac012a8b..fa59ee2b0fb2be56c7d479f88b6489133ff19407 100644 (file)
@@ -1805,9 +1805,7 @@ allocate_psymtab (const char *filename, struct objfile *objfile)
       objfile->free_psymtabs = psymtab->next;
     }
   else
-    psymtab = (struct partial_symtab *)
-      obstack_alloc (&objfile->objfile_obstack,
-                    sizeof (struct partial_symtab));
+    psymtab = XOBNEW (&objfile->objfile_obstack, partial_symtab);
 
   memset (psymtab, 0, sizeof (struct partial_symtab));
   psymtab->filename
index a56702aa1d2386d177fdee2d1687f86bf4cb5940..4cfefaa3e02b96bb7a370eebb6820caea1412d22 100644 (file)
@@ -2733,11 +2733,8 @@ read_member_functions (struct field_info *fip, const char **pp,
              xfree (main_fn_name);
            }
 
-         new_fnlist->fn_fieldlist.fn_fields = (struct fn_field *)
-           obstack_alloc (&objfile->objfile_obstack,
-                          sizeof (struct fn_field) * length);
-         memset (new_fnlist->fn_fieldlist.fn_fields, 0,
-                 sizeof (struct fn_field) * length);
+         new_fnlist->fn_fieldlist.fn_fields
+           = OBSTACK_CALLOC (&objfile->objfile_obstack, length, fn_field);
          for (i = length; (i--, sublist); sublist = sublist->next)
            {
              new_fnlist->fn_fieldlist.fn_fields[i] = sublist->fn_field;
index 66e74439b1aceccca81dcbd2538b133578fdea74..7cf5e259d9363af28fb6dec4584853d059255a1c 100644 (file)
@@ -2097,8 +2097,7 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
       struct partial_symtab *subpst =
        allocate_psymtab (include_list[i], objfile);
 
-      subpst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
-                                                  sizeof (struct symloc));
+      subpst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
       ((struct symloc *) subpst->read_symtab_private)->first_symnum = 0;
       ((struct symloc *) subpst->read_symtab_private)->numsyms = 0;
       subpst->textlow = 0;