diff options
author | Don Breazeal <donb@codesourcery.com> | 2014-09-19 10:54:34 -0700 |
---|---|---|
committer | Don Breazeal <donb@codesourcery.com> | 2014-09-19 10:54:34 -0700 |
commit | 89a5711c561ad1e9a435221bc056ecd86a1aa628 (patch) | |
tree | 182adf2870d0e927e79e685205ea36c8bf40783e /gdb/nat/linux-ptrace.c | |
parent | e00d879a2e9169759518dd419d19f1b3dcb6f709 (diff) | |
download | gdb-89a5711c561ad1e9a435221bc056ecd86a1aa628.zip gdb-89a5711c561ad1e9a435221bc056ecd86a1aa628.tar.gz gdb-89a5711c561ad1e9a435221bc056ecd86a1aa628.tar.bz2 |
Refactor ptrace extended event status.
This commit implements functions for identifying and extracting extended
ptrace event information from a Linux wait status. These are just
convenience functions intended to hide the ">> 16" used to extract the
event from the wait status word, replacing the hard-coded shift with a more
descriptive function call. This is preparatory work for implementation of
follow-fork and detach-on-fork for extended-remote linux targets.
gdb/ChangeLog:
* linux-nat.c (linux_handle_extended_wait): Call
linux_ptrace_get_extended_event.
(wait_lwp): Call linux_is_extended_waitstatus.
(linux_nat_filter_event): Call linux_ptrace_get_extended_event
and linux_is_extended_waitstatus.
* nat/linux-ptrace.c (linux_test_for_tracefork): Call
linux_ptrace_get_extended_event.
(linux_ptrace_get_extended_event): New function.
(linux_is_extended_waitstatus): New function.
* nat/linux-ptrace.h (linux_ptrace_get_extended_event)
(linux_is_extended_waitstatus): New declarations.
gdb/gdbserver/ChangeLog:
* linux-low.c (handle_extended_wait): Call
linux_ptrace_get_extended_event.
(get_stop_pc, get_detach_signal, linux_low_filter_event): Call
linux_is_extended_waitstatus.
---
Diffstat (limited to 'gdb/nat/linux-ptrace.c')
-rw-r--r-- | gdb/nat/linux-ptrace.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gdb/nat/linux-ptrace.c b/gdb/nat/linux-ptrace.c index 6275516..8bc3f16 100644 --- a/gdb/nat/linux-ptrace.c +++ b/gdb/nat/linux-ptrace.c @@ -416,7 +416,7 @@ linux_test_for_tracefork (int child_pid) /* Check if we received a fork event notification. */ if (ret == child_pid && WIFSTOPPED (status) - && status >> 16 == PTRACE_EVENT_FORK) + && linux_ptrace_get_extended_event (status) == PTRACE_EVENT_FORK) { /* We did receive a fork event notification. Make sure its PID is reported. */ @@ -550,3 +550,19 @@ linux_ptrace_set_additional_flags (int flags) { additional_flags = flags; } + +/* Extract extended ptrace event from wait status. */ + +int +linux_ptrace_get_extended_event (int wstat) +{ + return (wstat >> 16); +} + +/* Determine whether wait status denotes an extended event. */ + +int +linux_is_extended_waitstatus (int wstat) +{ + return (linux_ptrace_get_extended_event (wstat) != 0); +} |