Index: gdb/linux-fork.c |
diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c |
index 028fcbc09d0feb35c27be4eee90f3acf19118302..1c325ef7a9495bb6df1e6790e35f63f159e93ef4 100644 |
--- a/gdb/linux-fork.c |
+++ b/gdb/linux-fork.c |
@@ -1,6 +1,6 @@ |
/* GNU/Linux native-dependent code for debugging multiple forks. |
- Copyright (C) 2005-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2005-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -25,15 +25,15 @@ |
#include "infcall.h" |
#include "objfiles.h" |
#include "gdb_assert.h" |
-#include "gdb_string.h" |
+#include <string.h> |
#include "linux-fork.h" |
#include "linux-nat.h" |
#include "gdbthread.h" |
+#include "source.h" |
#include <sys/ptrace.h> |
#include "gdb_wait.h" |
-#include <sys/param.h> |
-#include "gdb_dirent.h" |
+#include <dirent.h> |
#include <ctype.h> |
struct fork_info *fork_list; |
@@ -71,14 +71,14 @@ add_fork (pid_t pid) |
{ |
struct fork_info *fp; |
- if (fork_list == NULL && pid != PIDGET (inferior_ptid)) |
+ if (fork_list == NULL && pid != ptid_get_pid (inferior_ptid)) |
{ |
/* Special case -- if this is the first fork in the list |
(the list is hitherto empty), and if this new fork is |
NOT the current inferior_ptid, then add inferior_ptid |
first, as a special zeroeth fork id. */ |
highest_fork_num = -1; |
- add_fork (PIDGET (inferior_ptid)); /* safe recursion */ |
+ add_fork (ptid_get_pid (inferior_ptid)); /* safe recursion */ |
} |
fp = XZALLOC (struct fork_info); |
@@ -121,6 +121,8 @@ delete_fork (ptid_t ptid) |
fpprev = NULL; |
+ linux_nat_forget_process (ptid_get_pid (ptid)); |
+ |
for (fp = fork_list; fp; fpprev = fp, fp = fp->next) |
if (ptid_equal (fp->ptid, ptid)) |
break; |
@@ -266,7 +268,7 @@ fork_load_infrun_state (struct fork_info *fp) |
static void |
fork_save_infrun_state (struct fork_info *fp, int clobber_regs) |
{ |
- char path[MAXPATHLEN]; |
+ char path[PATH_MAX]; |
struct dirent *de; |
DIR *d; |
@@ -280,7 +282,8 @@ fork_save_infrun_state (struct fork_info *fp, int clobber_regs) |
{ |
/* Now save the 'state' (file position) of all open file descriptors. |
Unfortunately fork does not take care of that for us... */ |
- snprintf (path, MAXPATHLEN, "/proc/%ld/fd", (long) PIDGET (fp->ptid)); |
+ snprintf (path, PATH_MAX, "/proc/%ld/fd", |
+ (long) ptid_get_pid (fp->ptid)); |
if ((d = opendir (path)) != NULL) |
{ |
long tmp; |
@@ -331,7 +334,7 @@ linux_fork_killall (void) |
for (fp = fork_list; fp; fp = fp->next) |
{ |
- pid = PIDGET (fp->ptid); |
+ pid = ptid_get_pid (fp->ptid); |
do { |
/* Use SIGKILL instead of PTRACE_KILL because the former works even |
if the thread is running, while the later doesn't. */ |
@@ -384,13 +387,13 @@ linux_fork_mourn_inferior (void) |
the first available. */ |
void |
-linux_fork_detach (char *args, int from_tty) |
+linux_fork_detach (const char *args, int from_tty) |
{ |
/* OK, inferior_ptid is the one we are detaching from. We need to |
delete it from the fork_list, and switch to the next available |
fork. */ |
- if (ptrace (PTRACE_DETACH, PIDGET (inferior_ptid), 0, 0)) |
+ if (ptrace (PTRACE_DETACH, ptid_get_pid (inferior_ptid), 0, 0)) |
error (_("Unable to detach %s"), target_pid_to_str (inferior_ptid)); |
delete_fork (inferior_ptid); |
@@ -495,7 +498,7 @@ delete_checkpoint_command (char *args, int from_tty) |
error (_("\ |
Please switch to another checkpoint before deleting the current one")); |
- if (ptrace (PTRACE_KILL, PIDGET (ptid), 0, 0)) |
+ if (ptrace (PTRACE_KILL, ptid_get_pid (ptid), 0, 0)) |
error (_("Unable to kill pid %s"), target_pid_to_str (ptid)); |
fi = find_fork_ptid (ptid); |
@@ -514,7 +517,7 @@ Please switch to another checkpoint before deleting the current one")); |
if ((!find_thread_ptid (pptid) && find_fork_ptid (pptid)) |
|| (find_thread_ptid (pptid) && is_stopped (pptid))) |
{ |
- if (inferior_call_waitpid (pptid, PIDGET (ptid))) |
+ if (inferior_call_waitpid (pptid, ptid_get_pid (ptid))) |
warning (_("Unable to wait pid %s"), target_pid_to_str (ptid)); |
} |
} |
@@ -535,7 +538,7 @@ detach_checkpoint_command (char *args, int from_tty) |
error (_("\ |
Please switch to another checkpoint before detaching the current one")); |
- if (ptrace (PTRACE_DETACH, PIDGET (ptid), 0, 0)) |
+ if (ptrace (PTRACE_DETACH, ptid_get_pid (ptid), 0, 0)) |
error (_("Unable to detach %s"), target_pid_to_str (ptid)); |
if (from_tty) |
@@ -583,16 +586,17 @@ info_checkpoints_command (char *arg, int from_tty) |
sal = find_pc_line (pc, 0); |
if (sal.symtab) |
- printf_filtered (_(", file %s"), lbasename (sal.symtab->filename)); |
+ printf_filtered (_(", file %s"), |
+ symtab_to_filename_for_display (sal.symtab)); |
if (sal.line) |
printf_filtered (_(", line %d"), sal.line); |
if (!sal.symtab && !sal.line) |
{ |
- struct minimal_symbol *msym; |
+ struct bound_minimal_symbol msym; |
msym = lookup_minimal_symbol_by_pc (pc); |
- if (msym) |
- printf_filtered (", <%s>", SYMBOL_LINKAGE_NAME (msym)); |
+ if (msym.minsym) |
+ printf_filtered (", <%s>", SYMBOL_LINKAGE_NAME (msym.minsym)); |
} |
putchar_filtered ('\n'); |
@@ -677,7 +681,7 @@ checkpoint_command (char *args, int from_tty) |
/* Tell linux-nat.c that we're checkpointing this inferior. */ |
old_chain = make_cleanup_restore_integer (&checkpointing_pid); |
- checkpointing_pid = PIDGET (inferior_ptid); |
+ checkpointing_pid = ptid_get_pid (inferior_ptid); |
ret = call_function_by_hand (fork_fn, 0, &ret); |
do_cleanups (old_chain); |
@@ -728,7 +732,7 @@ linux_fork_context (struct fork_info *newfp, int from_tty) |
printf_filtered (_("Switching to %s\n"), |
target_pid_to_str (inferior_ptid)); |
- print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC); |
+ print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1); |
} |
/* Switch inferior process (checkpoint) context, by checkpoint id. */ |