Remove two cleanups using std::string
This patches removes cleanups from a couple of spots by using std::string rather than manual memory management. Regression tested by the buildbot, though note that I don't believe the buildbot actually exercises the machoread code. gdb/ChangeLog 2018-03-13 Tom Tromey <tom@tromey.com> * machoread.c (macho_check_dsym): Change filenamep to a std::string*. (macho_symfile_read): Update. * symfile.c (load_command): Use std::string.
This commit is contained in:
parent
e45ad1239d
commit
b577b6af8e
3 changed files with 26 additions and 37 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2018-03-13 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* machoread.c (macho_check_dsym): Change filenamep to a
|
||||||
|
std::string*.
|
||||||
|
(macho_symfile_read): Update.
|
||||||
|
* symfile.c (load_command): Use std::string.
|
||||||
|
|
||||||
2018-03-12 Andrew Burgess <andrew.burgess@embecosm.com>
|
2018-03-12 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* riscv-tdep.c (riscv_sw_breakpoint_from_kind): Add localization
|
* riscv-tdep.c (riscv_sw_breakpoint_from_kind): Add localization
|
||||||
|
|
|
@ -750,12 +750,12 @@ macho_symfile_read_all_oso (VEC (oso_el) **oso_vector_ptr,
|
||||||
#define DSYM_SUFFIX ".dSYM/Contents/Resources/DWARF/"
|
#define DSYM_SUFFIX ".dSYM/Contents/Resources/DWARF/"
|
||||||
|
|
||||||
/* Check if a dsym file exists for OBJFILE. If so, returns a bfd for it
|
/* Check if a dsym file exists for OBJFILE. If so, returns a bfd for it
|
||||||
and return *FILENAMEP with its original xmalloc-ated filename.
|
and return *FILENAMEP with its original filename.
|
||||||
Return NULL if no valid dsym file is found (FILENAMEP is not used in
|
Return NULL if no valid dsym file is found (FILENAMEP is not used in
|
||||||
such case). */
|
such case). */
|
||||||
|
|
||||||
static gdb_bfd_ref_ptr
|
static gdb_bfd_ref_ptr
|
||||||
macho_check_dsym (struct objfile *objfile, char **filenamep)
|
macho_check_dsym (struct objfile *objfile, std::string *filenamep)
|
||||||
{
|
{
|
||||||
size_t name_len = strlen (objfile_name (objfile));
|
size_t name_len = strlen (objfile_name (objfile));
|
||||||
size_t dsym_len = strlen (DSYM_SUFFIX);
|
size_t dsym_len = strlen (DSYM_SUFFIX);
|
||||||
|
@ -804,7 +804,7 @@ macho_check_dsym (struct objfile *objfile, char **filenamep)
|
||||||
objfile_name (objfile));
|
objfile_name (objfile));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
*filenamep = xstrdup (dsym_filename);
|
*filenamep = std::string (dsym_filename);
|
||||||
return dsym_bfd;
|
return dsym_bfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -821,7 +821,7 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
|
||||||
be in the executable. */
|
be in the executable. */
|
||||||
if (bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC))
|
if (bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC))
|
||||||
{
|
{
|
||||||
char *dsym_filename;
|
std::string dsym_filename;
|
||||||
|
|
||||||
/* Process the normal symbol table first. */
|
/* Process the normal symbol table first. */
|
||||||
storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
|
storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
|
||||||
|
@ -865,8 +865,6 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
|
||||||
{
|
{
|
||||||
struct bfd_section *asect, *dsect;
|
struct bfd_section *asect, *dsect;
|
||||||
|
|
||||||
make_cleanup (xfree, dsym_filename);
|
|
||||||
|
|
||||||
if (mach_o_debug_level > 0)
|
if (mach_o_debug_level > 0)
|
||||||
printf_unfiltered (_("dsym file found\n"));
|
printf_unfiltered (_("dsym file found\n"));
|
||||||
|
|
||||||
|
@ -882,7 +880,7 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add the dsym file as a separate file. */
|
/* Add the dsym file as a separate file. */
|
||||||
symbol_file_add_separate (dsym_bfd.get (), dsym_filename,
|
symbol_file_add_separate (dsym_bfd.get (), dsym_filename.c_str (),
|
||||||
symfile_flags, objfile);
|
symfile_flags, objfile);
|
||||||
|
|
||||||
/* Don't try to read dwarf2 from main file or shared libraries. */
|
/* Don't try to read dwarf2 from main file or shared libraries. */
|
||||||
|
|
|
@ -1789,8 +1789,6 @@ find_sym_fns (bfd *abfd)
|
||||||
static void
|
static void
|
||||||
load_command (const char *arg, int from_tty)
|
load_command (const char *arg, int from_tty)
|
||||||
{
|
{
|
||||||
struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
|
|
||||||
|
|
||||||
dont_repeat ();
|
dont_repeat ();
|
||||||
|
|
||||||
/* The user might be reloading because the binary has changed. Take
|
/* The user might be reloading because the binary has changed. Take
|
||||||
|
@ -1798,40 +1796,28 @@ load_command (const char *arg, int from_tty)
|
||||||
reopen_exec_file ();
|
reopen_exec_file ();
|
||||||
reread_symbols ();
|
reread_symbols ();
|
||||||
|
|
||||||
|
std::string temp;
|
||||||
if (arg == NULL)
|
if (arg == NULL)
|
||||||
{
|
{
|
||||||
const char *parg;
|
const char *parg, *prev;
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
parg = arg = get_exec_file (1);
|
arg = get_exec_file (1);
|
||||||
|
|
||||||
/* Count how many \ " ' tab space there are in the name. */
|
/* We may need to quote this string so buildargv can pull it
|
||||||
|
apart. */
|
||||||
|
prev = parg = arg;
|
||||||
while ((parg = strpbrk (parg, "\\\"'\t ")))
|
while ((parg = strpbrk (parg, "\\\"'\t ")))
|
||||||
{
|
{
|
||||||
parg++;
|
temp.append (prev, parg - prev);
|
||||||
count++;
|
prev = parg++;
|
||||||
|
temp.push_back ('\\');
|
||||||
}
|
}
|
||||||
|
/* If we have not copied anything yet, then we didn't see a
|
||||||
if (count)
|
character to quote, and we can just leave ARG unchanged. */
|
||||||
|
if (!temp.empty ())
|
||||||
{
|
{
|
||||||
/* We need to quote this string so buildargv can pull it apart. */
|
temp.append (prev);
|
||||||
char *temp = (char *) xmalloc (strlen (arg) + count + 1 );
|
arg = temp.c_str ();
|
||||||
char *ptemp = temp;
|
|
||||||
const char *prev;
|
|
||||||
|
|
||||||
make_cleanup (xfree, temp);
|
|
||||||
|
|
||||||
prev = parg = arg;
|
|
||||||
while ((parg = strpbrk (parg, "\\\"'\t ")))
|
|
||||||
{
|
|
||||||
strncpy (ptemp, prev, parg - prev);
|
|
||||||
ptemp += parg - prev;
|
|
||||||
prev = parg++;
|
|
||||||
*ptemp++ = '\\';
|
|
||||||
}
|
|
||||||
strcpy (ptemp, prev);
|
|
||||||
|
|
||||||
arg = temp;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1840,8 +1826,6 @@ load_command (const char *arg, int from_tty)
|
||||||
/* After re-loading the executable, we don't really know which
|
/* After re-loading the executable, we don't really know which
|
||||||
overlays are mapped any more. */
|
overlays are mapped any more. */
|
||||||
overlay_cache_invalid = 1;
|
overlay_cache_invalid = 1;
|
||||||
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This version of "load" should be usable for any target. Currently
|
/* This version of "load" should be usable for any target. Currently
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue