aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2012-02-27 16:22:16 +0000
committerPedro Alves <palves@redhat.com>2012-02-27 16:22:16 +0000
commit644cebc98ce121ef7e6a8c0d1867ae01e936b41b (patch)
treef4eee5e5d107abfb51774b8dabae8706ad8232a1
parentc14d7ab2b61d410e10380fcdc21985cdcd88f810 (diff)
downloadgdb-644cebc98ce121ef7e6a8c0d1867ae01e936b41b.zip
gdb-644cebc98ce121ef7e6a8c0d1867ae01e936b41b.tar.gz
gdb-644cebc98ce121ef7e6a8c0d1867ae01e936b41b.tar.bz2
2012-02-27 Pedro Alves <palves@redhat.com>
gdb/gdbserver/ * linux-low.c (pid_is_stopped): Delete, moved to common/. (linux_attach_lwp_1): Adjust to use linux_proc_pid_is_stopped. gdb/ * linux-nat.c (pid_is_stopped): Delete, moved to common/. (linux_nat_post_attach_wait): Adjust to use linux_proc_pid_is_stopped. * common/linux-procfs.h (linux_proc_pid_is_stopped): Declare. * common/linux-procfs.c (linux_proc_pid_is_stopped): New function, based on pid_is_stopped from both linux-nat.c and gdbserver/linux-low.c, and renamed.
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/common/linux-procfs.c31
-rw-r--r--gdb/common/linux-procfs.h5
-rw-r--r--gdb/gdbserver/ChangeLog5
-rw-r--r--gdb/gdbserver/linux-low.c33
-rw-r--r--gdb/linux-nat.c33
6 files changed, 53 insertions, 64 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0772ee8..e2379f4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+2012-02-27 Pedro Alves <palves@redhat.com>
+
+ * linux-nat.c (pid_is_stopped): Delete, moved to common/.
+ (linux_nat_post_attach_wait): Adjust to use
+ linux_proc_pid_is_stopped.
+ * common/linux-procfs.h (linux_proc_pid_is_stopped): Declare.
+ * common/linux-procfs.c (linux_proc_pid_is_stopped): New function,
+ based on pid_is_stopped from both linux-nat.c and
+ gdbserver/linux-low.c, and renamed.
+
2012-02-24 Maciej W. Rozycki <macro@codesourcery.com>
* remote.c (remote_watchpoint_addr_within_range): New function.
diff --git a/gdb/common/linux-procfs.c b/gdb/common/linux-procfs.c
index 421f36e..165383e 100644
--- a/gdb/common/linux-procfs.c
+++ b/gdb/common/linux-procfs.c
@@ -53,3 +53,34 @@ linux_proc_get_tgid (int lwpid)
return tgid;
}
+
+/* Detect `T (stopped)' in `/proc/PID/status'.
+ Other states including `T (tracing stop)' are reported as false. */
+
+int
+linux_proc_pid_is_stopped (pid_t pid)
+{
+ FILE *status_file;
+ char buf[100];
+ int retval = 0;
+
+ snprintf (buf, sizeof (buf), "/proc/%d/status", (int) pid);
+ status_file = fopen (buf, "r");
+ if (status_file != NULL)
+ {
+ int have_state = 0;
+
+ while (fgets (buf, sizeof (buf), status_file))
+ {
+ if (strncmp (buf, "State:", 6) == 0)
+ {
+ have_state = 1;
+ break;
+ }
+ }
+ if (have_state && strstr (buf, "T (stopped)") != NULL)
+ retval = 1;
+ fclose (status_file);
+ }
+ return retval;
+}
diff --git a/gdb/common/linux-procfs.h b/gdb/common/linux-procfs.h
index a4ba4a1..c1e5547 100644
--- a/gdb/common/linux-procfs.h
+++ b/gdb/common/linux-procfs.h
@@ -26,4 +26,9 @@
extern int linux_proc_get_tgid (int lwpid);
+/* Detect `T (stopped)' in `/proc/PID/status'.
+ Other states including `T (tracing stop)' are reported as false. */
+
+extern int linux_proc_pid_is_stopped (pid_t pid);
+
#endif /* COMMON_LINUX_PROCFS_H */
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index b6d9ce9..fed95bf 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,10 @@
2012-02-27 Pedro Alves <palves@redhat.com>
+ * linux-low.c (pid_is_stopped): Delete, moved to common/.
+ (linux_attach_lwp_1): Adjust to use linux_proc_pid_is_stopped.
+
+2012-02-27 Pedro Alves <palves@redhat.com>
+
PR server/9684
* linux-low.c (pid_is_stopped): New.
(linux_attach_lwp_1): Handle attaching to 'T (stopped)' processes.
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index f2887e6..8f57ee3 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -598,37 +598,6 @@ linux_create_inferior (char *program, char **allargs)
return pid;
}
-/* Detect `T (stopped)' in `/proc/PID/status'.
- Other states including `T (tracing stop)' are reported as false. */
-
-static int
-pid_is_stopped (pid_t pid)
-{
- FILE *status_file;
- char buf[100];
- int retval = 0;
-
- snprintf (buf, sizeof (buf), "/proc/%d/status", (int) pid);
- status_file = fopen (buf, "r");
- if (status_file != NULL)
- {
- int have_state = 0;
-
- while (fgets (buf, sizeof (buf), status_file))
- {
- if (strncmp (buf, "State:", 6) == 0)
- {
- have_state = 1;
- break;
- }
- }
- if (have_state && strstr (buf, "T (stopped)") != NULL)
- retval = 1;
- fclose (status_file);
- }
- return retval;
-}
-
/* Attach to an inferior process. */
static void
@@ -674,7 +643,7 @@ linux_attach_lwp_1 (unsigned long lwpid, int initial)
ptrace call on this LWP. */
new_lwp->must_set_ptrace_flags = 1;
- if (pid_is_stopped (lwpid))
+ if (linux_proc_pid_is_stopped (lwpid))
{
if (debug_threads)
fprintf (stderr,
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 3731096..e426387 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -1356,37 +1356,6 @@ exit_lwp (struct lwp_info *lp)
delete_lwp (lp->ptid);
}
-/* Detect `T (stopped)' in `/proc/PID/status'.
- Other states including `T (tracing stop)' are reported as false. */
-
-static int
-pid_is_stopped (pid_t pid)
-{
- FILE *status_file;
- char buf[100];
- int retval = 0;
-
- snprintf (buf, sizeof (buf), "/proc/%d/status", (int) pid);
- status_file = fopen (buf, "r");
- if (status_file != NULL)
- {
- int have_state = 0;
-
- while (fgets (buf, sizeof (buf), status_file))
- {
- if (strncmp (buf, "State:", 6) == 0)
- {
- have_state = 1;
- break;
- }
- }
- if (have_state && strstr (buf, "T (stopped)") != NULL)
- retval = 1;
- fclose (status_file);
- }
- return retval;
-}
-
/* Wait for the LWP specified by LP, which we have just attached to.
Returns a wait status for that LWP, to cache. */
@@ -1397,7 +1366,7 @@ linux_nat_post_attach_wait (ptid_t ptid, int first, int *cloned,
pid_t new_pid, pid = GET_LWP (ptid);
int status;
- if (pid_is_stopped (pid))
+ if (linux_proc_pid_is_stopped (pid))
{
if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog,