diff options
author | John Baldwin <jhb@FreeBSD.org> | 2016-06-24 21:06:36 -0700 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2016-07-01 08:33:19 -0700 |
commit | 8607ea632c806235554aa2336cf01bf3758c1264 (patch) | |
tree | 16cfa0b86299e3685cadef73a26e779519f16597 /gdb | |
parent | bb2a62e694953c099c41d49f59947d3d91cc7c27 (diff) | |
download | gdb-8607ea632c806235554aa2336cf01bf3758c1264.zip gdb-8607ea632c806235554aa2336cf01bf3758c1264.tar.gz gdb-8607ea632c806235554aa2336cf01bf3758c1264.tar.bz2 |
Move fbsd_resume and related functions below fork following helper code.
gdb/ChangeLog:
* fbsd-nat.c (super_resume): Move earlier next to "super_wait".
(resume_one_thread_cb): Move below fork following helper code.
(resume_all_threads_cb): Likewise.
(fbsd_resume): Likewise.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/fbsd-nat.c | 127 |
2 files changed, 70 insertions, 64 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b6bf7fa..1a51fb2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2016-07-01 John Baldwin <jhb@FreeBSD.org> + * fbsd-nat.c (super_resume): Move earlier next to "super_wait". + (resume_one_thread_cb): Move below fork following helper code. + (resume_all_threads_cb): Likewise. + (fbsd_resume): Likewise. + +2016-07-01 John Baldwin <jhb@FreeBSD.org> + * fbsd-nat.c (fbsd_follow_fork): Only detach child if "detach_fork" is true. diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c index 0999712..daf4580 100644 --- a/gdb/fbsd-nat.c +++ b/gdb/fbsd-nat.c @@ -281,6 +281,10 @@ fbsd_xfer_partial (struct target_ops *ops, enum target_object object, #ifdef PT_LWPINFO static int debug_fbsd_lwp; +static void (*super_resume) (struct target_ops *, + ptid_t, + int, + enum gdb_signal); static ptid_t (*super_wait) (struct target_ops *, ptid_t, struct target_waitstatus *, @@ -492,70 +496,6 @@ fbsd_update_thread_list (struct target_ops *ops) #endif } -static void (*super_resume) (struct target_ops *, - ptid_t, - int, - enum gdb_signal); - -static int -resume_one_thread_cb (struct thread_info *tp, void *data) -{ - ptid_t *ptid = (ptid_t *) data; - int request; - - if (ptid_get_pid (tp->ptid) != ptid_get_pid (*ptid)) - return 0; - - if (ptid_get_lwp (tp->ptid) == ptid_get_lwp (*ptid)) - request = PT_RESUME; - else - request = PT_SUSPEND; - - if (ptrace (request, ptid_get_lwp (tp->ptid), NULL, 0) == -1) - perror_with_name (("ptrace")); - return 0; -} - -static int -resume_all_threads_cb (struct thread_info *tp, void *data) -{ - ptid_t *filter = (ptid_t *) data; - - if (!ptid_match (tp->ptid, *filter)) - return 0; - - if (ptrace (PT_RESUME, ptid_get_lwp (tp->ptid), NULL, 0) == -1) - perror_with_name (("ptrace")); - return 0; -} - -/* Implement the "to_resume" target_ops method. */ - -static void -fbsd_resume (struct target_ops *ops, - ptid_t ptid, int step, enum gdb_signal signo) -{ - - if (debug_fbsd_lwp) - fprintf_unfiltered (gdb_stdlog, - "FLWP: fbsd_resume for ptid (%d, %ld, %ld)\n", - ptid_get_pid (ptid), ptid_get_lwp (ptid), - ptid_get_tid (ptid)); - if (ptid_lwp_p (ptid)) - { - /* If ptid is a specific LWP, suspend all other LWPs in the process. */ - iterate_over_threads (resume_one_thread_cb, &ptid); - } - else - { - /* If ptid is a wildcard, resume all matching threads (they won't run - until the process is continued however). */ - iterate_over_threads (resume_all_threads_cb, &ptid); - ptid = inferior_ptid; - } - super_resume (ops, ptid, step, signo); -} - #ifdef TDP_RFPPWAIT /* To catch fork events, PT_FOLLOW_FORK is set on every traced process @@ -638,6 +578,65 @@ fbsd_is_child_pending (pid_t pid) } #endif +static int +resume_one_thread_cb (struct thread_info *tp, void *data) +{ + ptid_t *ptid = (ptid_t *) data; + int request; + + if (ptid_get_pid (tp->ptid) != ptid_get_pid (*ptid)) + return 0; + + if (ptid_get_lwp (tp->ptid) == ptid_get_lwp (*ptid)) + request = PT_RESUME; + else + request = PT_SUSPEND; + + if (ptrace (request, ptid_get_lwp (tp->ptid), NULL, 0) == -1) + perror_with_name (("ptrace")); + return 0; +} + +static int +resume_all_threads_cb (struct thread_info *tp, void *data) +{ + ptid_t *filter = (ptid_t *) data; + + if (!ptid_match (tp->ptid, *filter)) + return 0; + + if (ptrace (PT_RESUME, ptid_get_lwp (tp->ptid), NULL, 0) == -1) + perror_with_name (("ptrace")); + return 0; +} + +/* Implement the "to_resume" target_ops method. */ + +static void +fbsd_resume (struct target_ops *ops, + ptid_t ptid, int step, enum gdb_signal signo) +{ + + if (debug_fbsd_lwp) + fprintf_unfiltered (gdb_stdlog, + "FLWP: fbsd_resume for ptid (%d, %ld, %ld)\n", + ptid_get_pid (ptid), ptid_get_lwp (ptid), + ptid_get_tid (ptid)); + if (ptid_lwp_p (ptid)) + { + /* If ptid is a specific LWP, suspend all other LWPs in the process. */ + iterate_over_threads (resume_one_thread_cb, &ptid); + } + else + { + /* If ptid is a wildcard, resume all matching threads (they won't run + until the process is continued however). */ + iterate_over_threads (resume_all_threads_cb, &ptid); + ptid = inferior_ptid; + } + super_resume (ops, ptid, step, signo); +} + /* Wait for the child specified by PTID to do something. Return the process ID of the child, or MINUS_ONE_PTID in case of error; store the status in *OURSTATUS. */ |