From c0c9f665d9d4cdcef59cc7951396d843a7ea6a48 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 18 May 2018 14:30:25 -0600 Subject: [PATCH] Use std::string in reread_symbols This removes a cleanup from reread_symbols by using std::string. This fixes a memory leak, because this cleanup is ordinarily discarded, not run. Tested by the buildbot. ChangeLog 2018-05-21 Tom Tromey * symfile.c (reread_symbols): Use std::string for original_name. --- gdb/ChangeLog | 4 ++++ gdb/symfile.c | 9 ++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7f281d477d9..8c6e5ff4683 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2018-05-21 Tom Tromey + + * symfile.c (reread_symbols): Use std::string for original_name. + 2018-05-21 Tom Tromey * dwarf2read.c (dwarf2_read_debug_names): Use std::unique_ptr. diff --git a/gdb/symfile.c b/gdb/symfile.c index 1f5d7618775..7bc03fbb8f1 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -2316,7 +2316,6 @@ reread_symbols (void) struct cleanup *old_cleanups; struct section_offsets *offsets; int num_offsets; - char *original_name; printf_unfiltered (_("`%s' has changed; re-reading symbols.\n"), objfile_name (objfile)); @@ -2382,8 +2381,7 @@ reread_symbols (void) error (_("Can't open %s to read symbols."), obfd_filename); } - original_name = xstrdup (objfile->original_name); - make_cleanup (xfree, original_name); + std::string original_name = objfile->original_name; /* bfd_openr sets cacheable to true, which is what we want. */ if (!bfd_check_format (objfile->obfd, bfd_object)) @@ -2429,8 +2427,9 @@ reread_symbols (void) set_objfile_per_bfd (objfile); objfile->original_name - = (char *) obstack_copy0 (&objfile->objfile_obstack, original_name, - strlen (original_name)); + = (char *) obstack_copy0 (&objfile->objfile_obstack, + original_name.c_str (), + original_name.size ()); /* Reset the sym_fns pointer. The ELF reader can change it based on whether .gdb_index is present, and we need it to -- 2.30.2