From: John Baldwin Date: Sat, 25 Jun 2016 04:06:36 +0000 (-0700) Subject: Move fbsd_resume and related functions below fork following helper code. X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=8607ea632c806235554aa2336cf01bf3758c1264;hp=bb2a62e694953c099c41d49f59947d3d91cc7c27;p=deliverable%2Fbinutils-gdb.git 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b6bf7fa592..1a51fb231c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2016-07-01 John Baldwin + + * 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 * fbsd-nat.c (fbsd_follow_fork): Only detach child if diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c index 099971282e..daf4580a57 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. */