From 644cebc98ce121ef7e6a8c0d1867ae01e936b41b Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 27 Feb 2012 16:22:16 +0000 Subject: 2012-02-27 Pedro Alves 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. --- gdb/common/linux-procfs.c | 31 +++++++++++++++++++++++++++++++ gdb/common/linux-procfs.h | 5 +++++ 2 files changed, 36 insertions(+) (limited to 'gdb/common') 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 */ -- cgit v1.1