From e39db4db7c553ae1c4aaf158cd0ebf3cf6d478fb Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Sun, 20 May 2018 21:07:03 -0400 Subject: [PATCH] Use XOBNEW/XOBNEWVEC/OBSTACK_ZALLOC when possible 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 | 20 ++++++++++++++++++ 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 +-- 10 files changed, 49 insertions(+), 64 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fb4d955b484..5eb5eeaa9ad 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,23 @@ +2018-05-20 Simon Marchi + + * 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 * common/traits.h (HAVE_IS_TRIVIALLY_COPYABLE): Define if diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 7cbf1ec08de..f2514b12395 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 38367f7d73e..aed6c7b1e6c 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 84dbd667485..9692b33e097 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 d9f119af40c..3f0cdc74aa2 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; @@ -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"), diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 496dba02967..b98f121d5fd 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 98e81c48c46..2ec358ad4db 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 ac0ee0a5a64..fa59ee2b0fb 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 a56702aa1d2..4cfefaa3e02 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -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; diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 66e74439b1a..7cf5e259d93 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.30.2