Skip to content

Commit b2d3b4a

Browse files
committed
wait: support ptrace events for Linux
1 parent 7fa7206 commit b2d3b4a

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

src/sys/wait.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const WSTOPPED: WaitPidFlag = WUNTRACED;
4242
pub enum WaitStatus {
4343
Exited(pid_t, i8),
4444
Signaled(pid_t, signal::SigNum, bool),
45-
Stopped(pid_t, signal::SigNum),
45+
Stopped(pid_t, signal::SigNum, c_int),
4646
Continued(pid_t),
4747
StillAlive
4848
}
@@ -51,6 +51,7 @@ pub enum WaitStatus {
5151
target_os = "android"))]
5252
mod status {
5353
use sys::signal;
54+
use libc::c_int;
5455

5556
pub fn exited(status: i32) -> bool {
5657
(status & 0x7F) == 0
@@ -80,6 +81,10 @@ mod status {
8081
((status & 0xFF00) >> 8) as signal::SigNum
8182
}
8283

84+
pub fn stop_additional(status: i32) -> c_int {
85+
(status >> 16) as c_int
86+
}
87+
8388
pub fn continued(status: i32) -> bool {
8489
status == 0xFFFF
8590
}
@@ -89,6 +94,7 @@ mod status {
8994
target_os = "ios"))]
9095
mod status {
9196
use sys::signal;
97+
use libc::c_int;
9298

9399
const WCOREFLAG: i32 = 0x80;
94100
const WSTOPPED: i32 = 0x7f;
@@ -105,6 +111,10 @@ mod status {
105111
(status >> 8) as signal::SigNum
106112
}
107113

114+
pub fn stop_additional(status: i32) -> c_int {
115+
0
116+
}
117+
108118
pub fn continued(status: i32) -> bool {
109119
wstatus(status) == WSTOPPED && stop_signal(status) == 0x13
110120
}
@@ -136,6 +146,7 @@ mod status {
136146
target_os = "netbsd"))]
137147
mod status {
138148
use sys::signal;
149+
use libc::c_int;
139150

140151
const WCOREFLAG: i32 = 0x80;
141152
const WSTOPPED: i32 = 0x7f;
@@ -152,6 +163,10 @@ mod status {
152163
(status >> 8) as signal::SigNum
153164
}
154165

166+
pub fn stop_additional(status: i32) -> c_int {
167+
0
168+
}
169+
155170
pub fn signaled(status: i32) -> bool {
156171
wstatus(status) != WSTOPPED && wstatus(status) != 0 && status != 0x13
157172
}
@@ -183,7 +198,7 @@ fn decode(pid : pid_t, status: i32) -> WaitStatus {
183198
} else if status::signaled(status) {
184199
WaitStatus::Signaled(pid, status::term_signal(status), status::dumped_core(status))
185200
} else if status::stopped(status) {
186-
WaitStatus::Stopped(pid, status::stop_signal(status))
201+
WaitStatus::Stopped(pid, status::stop_signal(status), status::stop_additional(status))
187202
} else {
188203
assert!(status::continued(status));
189204
WaitStatus::Continued(pid)

0 commit comments

Comments
 (0)