[PATCH v2 3/3] Use XOBNEW/XOBNEWVEC/OBSTACK_ZALLOC when possible

Simon Marchi
2018-04-28T03:31:38Z

From: Simon Marchi <simon.marchi@ericsson.com>

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/ada-lang.c | 3 +--
gdb/dwarf2-frame.c | 3 +--
gdb/hppa-tdep.c | 7 ++-----
gdb/mdebugread.c | 51 ++++++++++++++++------------------------------
gdb/minsyms.c | 6 ++----
gdb/objfiles.c | 9 ++------
gdb/psymtab.c | 4 +---
gdb/stabsread.c | 7 ++-----
gdb/xcoffread.c | 3 +--
9 files changed, 29 insertions(+), 64 deletions(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index de20c43beddc..8145480d590c 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -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
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c
index 38367f7d73e4..aed6c7b1e6ca 100644
--- a/gdb/dwarf2-frame.c
+++ b/gdb/dwarf2-frame.c
@@ -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;
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 84dbd6674859..9692b33e097b 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -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;
}
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index c0bce551489d..fee8d430aa08 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -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;
@@ -2372,8 +2367,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;
@@ -2415,10 +2409,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 *));

@@ -2659,8 +2651,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;
@@ -3773,11 +3764,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;
@@ -4064,13 +4052,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;
@@ -4750,9 +4736,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;
@@ -4877,9 +4862,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"),
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 221404ee3ae7..eacc9d78a6a5 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -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
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 98e81c48c467..2ec358ad4dbb 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -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;
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index ac0ee0a5a64c..fa59ee2b0fb2 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -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
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index 0017f18c35ac..49990df82181 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -2731,11 +2731,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;
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 8c707aa8fe68..4f9b315eca52 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -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;
--
2.17.0