mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 12:03:41 +08:00
Add obstack_strdup overload taking a std::string
This adds an obstack_strdup overload that takes a std::string, and changes a few spots in gdb to use it. gdb/ChangeLog 2019-08-06 Tom Tromey <tom@tromey.com> * symfile.c (reread_symbols): Use obstack_strdup. * stabsread.c (read_type): Use obstack_strdup. * gdb_obstack.h (obstack_strdup): New overload. * dwarf2read.c (dwarf2_compute_name, create_dwo_unit_in_dwp_v1) (create_dwo_unit_in_dwp_v2, build_error_marker_type) (dwarf2_canonicalize_name): Use obstack_strdup. * dbxread.c (read_dbx_symtab): Use obstack_strdup. * cp-support.c (inspect_type, replace_typedefs_qualified_name): Use obstack_strdup.
This commit is contained in:
parent
f25102f7b1
commit
efba19b06a
@ -1,3 +1,15 @@
|
||||
2019-08-06 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* symfile.c (reread_symbols): Use obstack_strdup.
|
||||
* stabsread.c (read_type): Use obstack_strdup.
|
||||
* gdb_obstack.h (obstack_strdup): New overload.
|
||||
* dwarf2read.c (dwarf2_compute_name, create_dwo_unit_in_dwp_v1)
|
||||
(create_dwo_unit_in_dwp_v2, build_error_marker_type)
|
||||
(dwarf2_canonicalize_name): Use obstack_strdup.
|
||||
* dbxread.c (read_dbx_symtab): Use obstack_strdup.
|
||||
* cp-support.c (inspect_type, replace_typedefs_qualified_name):
|
||||
Use obstack_strdup.
|
||||
|
||||
2019-08-06 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* gdb_obstack.h (obstack_strdup): Define.
|
||||
|
@ -244,7 +244,7 @@ inspect_type (struct demangle_parse_info *info,
|
||||
}
|
||||
|
||||
len = buf.size ();
|
||||
name = (char *) obstack_copy0 (&info->obstack, buf.c_str (), len);
|
||||
name = obstack_strdup (&info->obstack, buf.string ());
|
||||
|
||||
/* Turn the result into a new tree. Note that this
|
||||
tree will contain pointers into NAME, so NAME cannot
|
||||
@ -315,9 +315,7 @@ replace_typedefs_qualified_name (struct demangle_parse_info *info,
|
||||
|
||||
buf.write (d_left (comp)->u.s_name.s, d_left (comp)->u.s_name.len);
|
||||
newobj.type = DEMANGLE_COMPONENT_NAME;
|
||||
newobj.u.s_name.s
|
||||
= (char *) obstack_copy0 (&info->obstack,
|
||||
buf.c_str (), buf.size ());
|
||||
newobj.u.s_name.s = obstack_strdup (&info->obstack, buf.string ());
|
||||
newobj.u.s_name.len = buf.size ();
|
||||
if (inspect_type (info, &newobj, finder, data))
|
||||
{
|
||||
@ -379,9 +377,7 @@ replace_typedefs_qualified_name (struct demangle_parse_info *info,
|
||||
with a DEMANGLE_COMPONENT_NAME node containing the whole
|
||||
name. */
|
||||
ret_comp->type = DEMANGLE_COMPONENT_NAME;
|
||||
ret_comp->u.s_name.s
|
||||
= (char *) obstack_copy0 (&info->obstack,
|
||||
buf.c_str (), buf.size ());
|
||||
ret_comp->u.s_name.s = obstack_strdup (&info->obstack, buf.string ());
|
||||
ret_comp->u.s_name.len = buf.size ();
|
||||
inspect_type (info, ret_comp, finder, data);
|
||||
}
|
||||
|
@ -1440,9 +1440,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
|
||||
if (!new_name.empty ())
|
||||
{
|
||||
sym_len = new_name.length ();
|
||||
sym_name = (char *) obstack_copy0 (&objfile->objfile_obstack,
|
||||
new_name.c_str (),
|
||||
sym_len);
|
||||
sym_name = obstack_strdup (&objfile->objfile_obstack,
|
||||
new_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10945,10 +10945,8 @@ dwarf2_compute_name (const char *name,
|
||||
INTERMEDIATE_NAME is already canonical, then we need to
|
||||
copy it to the appropriate obstack. */
|
||||
if (canonical_name == NULL || canonical_name == intermediate_name.c_str ())
|
||||
name = ((const char *)
|
||||
obstack_copy0 (&objfile->per_bfd->storage_obstack,
|
||||
intermediate_name.c_str (),
|
||||
intermediate_name.length ()));
|
||||
name = obstack_strdup (&objfile->per_bfd->storage_obstack,
|
||||
intermediate_name);
|
||||
else
|
||||
name = canonical_name;
|
||||
}
|
||||
@ -12416,10 +12414,8 @@ create_dwo_unit_in_dwp_v1 (struct dwarf2_per_objfile *dwarf2_per_objfile,
|
||||
virtual_dwo_name.c_str ());
|
||||
}
|
||||
dwo_file = new struct dwo_file;
|
||||
dwo_file->dwo_name
|
||||
= (const char *) obstack_copy0 (&objfile->objfile_obstack,
|
||||
virtual_dwo_name.c_str (),
|
||||
virtual_dwo_name.size ());
|
||||
dwo_file->dwo_name = obstack_strdup (&objfile->objfile_obstack,
|
||||
virtual_dwo_name);
|
||||
dwo_file->comp_dir = comp_dir;
|
||||
dwo_file->sections.abbrev = sections.abbrev;
|
||||
dwo_file->sections.line = sections.line;
|
||||
@ -12614,10 +12610,8 @@ create_dwo_unit_in_dwp_v2 (struct dwarf2_per_objfile *dwarf2_per_objfile,
|
||||
virtual_dwo_name.c_str ());
|
||||
}
|
||||
dwo_file = new struct dwo_file;
|
||||
dwo_file->dwo_name
|
||||
= (const char *) obstack_copy0 (&objfile->objfile_obstack,
|
||||
virtual_dwo_name.c_str (),
|
||||
virtual_dwo_name.size ());
|
||||
dwo_file->dwo_name = obstack_strdup (&objfile->objfile_obstack,
|
||||
virtual_dwo_name);
|
||||
dwo_file->comp_dir = comp_dir;
|
||||
dwo_file->sections.abbrev =
|
||||
create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.abbrev,
|
||||
@ -22101,8 +22095,7 @@ build_error_marker_type (struct dwarf2_cu *cu, struct die_info *die)
|
||||
objfile_name (objfile),
|
||||
sect_offset_str (cu->header.sect_off),
|
||||
sect_offset_str (die->sect_off));
|
||||
saved = (char *) obstack_copy0 (&objfile->objfile_obstack,
|
||||
message.c_str (), message.length ());
|
||||
saved = obstack_strdup (&objfile->objfile_obstack, message);
|
||||
|
||||
return init_type (objfile, TYPE_CODE_ERROR, 0, saved);
|
||||
}
|
||||
@ -22638,9 +22631,7 @@ dwarf2_canonicalize_name (const char *name, struct dwarf2_cu *cu,
|
||||
if (!canon_name.empty ())
|
||||
{
|
||||
if (canon_name != name)
|
||||
name = (const char *) obstack_copy0 (obstack,
|
||||
canon_name.c_str (),
|
||||
canon_name.length ());
|
||||
name = obstack_strdup (obstack, canon_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -95,6 +95,16 @@ obstack_strdup (struct obstack *obstackp, const char *string)
|
||||
return (char *) obstack_copy0 (obstackp, string, strlen (string));
|
||||
}
|
||||
|
||||
/* Duplicate STRING, returning an equivalent string that's allocated on the
|
||||
obstack OBSTACKP. */
|
||||
|
||||
static inline char *
|
||||
obstack_strdup (struct obstack *obstackp, const std::string &string)
|
||||
{
|
||||
return (char *) obstack_copy0 (obstackp, string.c_str (),
|
||||
string.size ());
|
||||
}
|
||||
|
||||
/* An obstack that frees itself on scope exit. */
|
||||
struct auto_obstack : obstack
|
||||
{
|
||||
|
@ -1654,12 +1654,8 @@ again:
|
||||
|
||||
std::string new_name = cp_canonicalize_string (name);
|
||||
if (!new_name.empty ())
|
||||
{
|
||||
type_name
|
||||
= (char *) obstack_copy0 (&objfile->objfile_obstack,
|
||||
new_name.c_str (),
|
||||
new_name.length ());
|
||||
}
|
||||
type_name = obstack_strdup (&objfile->objfile_obstack,
|
||||
new_name);
|
||||
}
|
||||
if (type_name == NULL)
|
||||
{
|
||||
|
@ -2596,9 +2596,7 @@ reread_symbols (void)
|
||||
set_objfile_per_bfd (objfile);
|
||||
|
||||
objfile->original_name
|
||||
= (char *) obstack_copy0 (&objfile->objfile_obstack,
|
||||
original_name.c_str (),
|
||||
original_name.size ());
|
||||
= obstack_strdup (&objfile->objfile_obstack, original_name);
|
||||
|
||||
/* Reset the sym_fns pointer. The ELF reader can change it
|
||||
based on whether .gdb_index is present, and we need it to
|
||||
|
Loading…
Reference in New Issue
Block a user