Introduce exec_file_locate_attach
This commit adds a new function, exec_file_locate_attach, which works like exec_file_attach except that, instead of a filename argument, it takes an integer process ID and attempts to determine the executable filename from that. gdb/ChangeLog: * gdbcore.h (exec_file_locate_attach): New declaration. * exec.c (exec_file_locate_attach): New function, factored out from... * infcmd.c (attach_command_post_wait): ...here.
This commit is contained in:
parent
92209ddfdc
commit
a10de6046f
4 changed files with 47 additions and 23 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-04-17 Gary Benson <gbenson@redhat.com>
|
||||
|
||||
* gdbcore.h (exec_file_locate_attach): New declaration.
|
||||
* exec.c (exec_file_locate_attach): New function, factored
|
||||
out from...
|
||||
* infcmd.c (attach_command_post_wait): ...here.
|
||||
|
||||
2015-04-17 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* MAINTAINERS: Add myself for Blackfin/write-after-approval.
|
||||
|
|
31
gdb/exec.c
31
gdb/exec.c
|
@ -134,6 +134,37 @@ exec_file_clear (int from_tty)
|
|||
printf_unfiltered (_("No executable file now.\n"));
|
||||
}
|
||||
|
||||
/* See gdbcore.h. */
|
||||
|
||||
void
|
||||
exec_file_locate_attach (int pid, int from_tty)
|
||||
{
|
||||
char *exec_file, *full_exec_path = NULL;
|
||||
|
||||
/* Do nothing if we already have an executable filename. */
|
||||
exec_file = (char *) get_exec_file (0);
|
||||
if (exec_file != NULL)
|
||||
return;
|
||||
|
||||
/* Try to determine a filename from the process itself. */
|
||||
exec_file = target_pid_to_exec_file (pid);
|
||||
if (exec_file == NULL)
|
||||
return;
|
||||
|
||||
/* 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 path, sigh.
|
||||
|
||||
Attempt to qualify the filename against the source path.
|
||||
(If that fails, we'll just fall back on the original
|
||||
filename. Not much more we can do...) */
|
||||
if (!source_full_path_of (exec_file, &full_exec_path))
|
||||
full_exec_path = xstrdup (exec_file);
|
||||
|
||||
exec_file_attach (full_exec_path, from_tty);
|
||||
symbol_file_add_main (full_exec_path, from_tty);
|
||||
}
|
||||
|
||||
/* Set FILENAME as the new exec file.
|
||||
|
||||
This function is intended to be behave essentially the same
|
||||
|
|
|
@ -150,6 +150,13 @@ extern void core_file_command (char *filename, int from_tty);
|
|||
|
||||
extern void exec_file_attach (const char *filename, int from_tty);
|
||||
|
||||
/* If the filename of the main executable is unknown, attempt to
|
||||
determine it. If a filename is determined, proceed as though
|
||||
it was just specified with the "file" command. Do nothing if
|
||||
the filename of the main executable is already known. */
|
||||
|
||||
extern void exec_file_locate_attach (int pid, int from_tty);
|
||||
|
||||
extern void exec_file_clear (int from_tty);
|
||||
|
||||
extern void validate_files (void);
|
||||
|
|
25
gdb/infcmd.c
25
gdb/infcmd.c
|
@ -2462,8 +2462,6 @@ proceed_after_attach (int pid)
|
|||
static void
|
||||
attach_command_post_wait (char *args, int from_tty, int async_exec)
|
||||
{
|
||||
char *exec_file;
|
||||
char *full_exec_path = NULL;
|
||||
struct inferior *inferior;
|
||||
|
||||
inferior = current_inferior ();
|
||||
|
@ -2471,27 +2469,8 @@ attach_command_post_wait (char *args, int from_tty, int async_exec)
|
|||
|
||||
/* If no exec file is yet known, try to determine it from the
|
||||
process itself. */
|
||||
exec_file = (char *) get_exec_file (0);
|
||||
if (!exec_file)
|
||||
{
|
||||
exec_file = target_pid_to_exec_file (ptid_get_pid (inferior_ptid));
|
||||
if (exec_file)
|
||||
{
|
||||
/* 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 path, sigh.
|
||||
|
||||
Attempt to qualify the filename against the source path.
|
||||
(If that fails, we'll just fall back on the original
|
||||
filename. Not much more we can do...) */
|
||||
|
||||
if (!source_full_path_of (exec_file, &full_exec_path))
|
||||
full_exec_path = xstrdup (exec_file);
|
||||
|
||||
exec_file_attach (full_exec_path, from_tty);
|
||||
symbol_file_add_main (full_exec_path, from_tty);
|
||||
}
|
||||
}
|
||||
if (get_exec_file (0) == NULL)
|
||||
exec_file_locate_attach (ptid_get_pid (inferior_ptid), from_tty);
|
||||
else
|
||||
{
|
||||
reopen_exec_file ();
|
||||
|
|
Loading…
Reference in a new issue