/* Work with executable files, for GDB.
- Copyright (C) 1988-2015 Free Software Foundation, Inc.
+ Copyright (C) 1988-2016 Free Software Foundation, Inc.
This file is part of GDB.
exec_file_locate_attach (int pid, int from_tty)
{
char *exec_file, *full_exec_path = NULL;
+ struct cleanup *old_chain;
/* Do nothing if we already have an executable filename. */
exec_file = (char *) get_exec_file (0);
/* If gdb_sysroot is not empty and the discovered filename
is absolute then prefix the filename with gdb_sysroot. */
if (*gdb_sysroot != '\0' && IS_ABSOLUTE_PATH (exec_file))
- full_exec_path = exec_file_find (exec_file, NULL);
-
- if (full_exec_path == NULL)
+ {
+ full_exec_path = exec_file_find (exec_file, NULL);
+ if (full_exec_path == NULL)
+ return;
+ }
+ else
{
/* It's possible we don't have a full path, but rather just a
filename. Some targets, such as HP-UX, don't provide the
full_exec_path = xstrdup (exec_file);
}
+ old_chain = make_cleanup (xfree, full_exec_path);
+
exec_file_attach (full_exec_path, from_tty);
symbol_file_add_main (full_exec_path, from_tty);
+
+ do_cleanups (old_chain);
}
/* Set FILENAME as the new exec file.
#if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
if (scratch_chan < 0)
{
- char *exename = alloca (strlen (filename) + 5);
+ char *exename = (char *) alloca (strlen (filename) + 5);
strcat (strcpy (exename, filename), ".exe");
scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST,
if (!exec_bfd)
{
- error (_("\"%s\": could not open as an executable file: %s"),
+ error (_("\"%s\": could not open as an executable file: %s."),
scratch_pathname, bfd_errmsg (bfd_get_error ()));
}
if (new_count)
{
- table->sections = xrealloc (table->sections,
- sizeof (struct target_section) * new_count);
+ table->sections = XRESIZEVEC (struct target_section, table->sections,
+ new_count);
table->sections_end = table->sections + new_count;
}
else
count = bfd_count_sections (some_bfd);
if (*start)
xfree (* start);
- *start = (struct target_section *) xmalloc (count * sizeof (**start));
+ *start = XNEWVEC (struct target_section, count);
*end = *start;
bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end);
if (*end > *start + count)