+2019-03-15 Tom Tromey <tom@tromey.com>
+
+ * objfiles.h (struct objfile_per_bfd_storage) <msymbols>: Now a
+ unique_xmalloc_ptr.
+ (objfile::msymbols_range::begin, objfile::msymbols_range::end):
+ Update.
+ * minsyms.c (lookup_minimal_symbol_by_pc_section)
+ (build_minimal_symbol_hash_tables)
+ (minimal_symbol_reader::install): Update.
+
2019-03-15 Tom Tromey <tom@tromey.com>
* symtab.c (create_demangled_names_hash): Update.
{
int best_zero_sized = -1;
- msymbol = objfile->per_bfd->msymbols;
+ msymbol = objfile->per_bfd->msymbols.get ();
lo = 0;
hi = objfile->per_bfd->minimal_symbol_count - 1;
/* Now, (re)insert the actual entries. */
for ((i = objfile->per_bfd->minimal_symbol_count,
- msym = objfile->per_bfd->msymbols);
+ msym = objfile->per_bfd->msymbols.get ());
i > 0;
i--, msym++)
{
alloc_count = m_msym_count + m_objfile->per_bfd->minimal_symbol_count;
obstack_blank (&m_objfile->per_bfd->storage_obstack,
alloc_count * sizeof (struct minimal_symbol));
- msymbols = (struct minimal_symbol *)
- obstack_base (&m_objfile->per_bfd->storage_obstack);
+ gdb::unique_xmalloc_ptr<minimal_symbol>
+ msym_holder (XNEWVEC (minimal_symbol, alloc_count));
+ msymbols = msym_holder.get ();
/* Copy in the existing minimal symbols, if there are any. */
if (m_objfile->per_bfd->minimal_symbol_count)
- memcpy ((char *) msymbols, (char *) m_objfile->per_bfd->msymbols,
- m_objfile->per_bfd->minimal_symbol_count * sizeof (struct minimal_symbol));
+ memcpy (msymbols, m_objfile->per_bfd->msymbols.get (),
+ m_objfile->per_bfd->minimal_symbol_count
+ * sizeof (struct minimal_symbol));
/* Walk through the list of minimal symbol bunches, adding each symbol
to the new contiguous array of symbols. Note that we start with the
no longer using. */
mcount = compact_minimal_symbols (msymbols, mcount, m_objfile);
-
- ssize_t shrink_bytes
- = (mcount + 1 - alloc_count) * sizeof (struct minimal_symbol);
- obstack_blank_fast (&m_objfile->per_bfd->storage_obstack, shrink_bytes);
- msymbols = (struct minimal_symbol *)
- obstack_finish (&m_objfile->per_bfd->storage_obstack);
+ msym_holder.reset (XRESIZEVEC (struct minimal_symbol,
+ msym_holder.release (),
+ mcount));
/* Attach the minimal symbol table to the specified objfile.
The strings themselves are also located in the storage_obstack
of this objfile. */
m_objfile->per_bfd->minimal_symbol_count = mcount;
- m_objfile->per_bfd->msymbols = msymbols;
+ m_objfile->per_bfd->msymbols = std::move (msym_holder);
/* Now build the hash tables; we can't do this incrementally
at an earlier point since we weren't finished with the obstack
name and a zero value for the address. This makes it easy to walk
through the array when passed a pointer to somewhere in the middle
of it. There is also a count of the number of symbols, which does
- not include the terminating null symbol. The array itself, as well
- as all the data that it points to, should be allocated on the
- objfile_obstack for this file. */
+ not include the terminating null symbol. */
- minimal_symbol *msymbols = NULL;
+ gdb::unique_xmalloc_ptr<minimal_symbol> msymbols;
int minimal_symbol_count = 0;
/* The number of minimal symbols read, before any minimal symbol
minimal_symbol_iterator begin () const
{
- return minimal_symbol_iterator (m_objfile->per_bfd->msymbols);
+ return minimal_symbol_iterator (m_objfile->per_bfd->msymbols.get ());
}
minimal_symbol_iterator end () const
{
return minimal_symbol_iterator
- (m_objfile->per_bfd->msymbols
+ (m_objfile->per_bfd->msymbols.get ()
+ m_objfile->per_bfd->minimal_symbol_count);
}