Page MenuHomeFreeBSD

D20689.id.diff
No OneTemporary

D20689.id.diff

Index: head/sys/amd64/linux/linux_ptrace.c
===================================================================
--- head/sys/amd64/linux/linux_ptrace.c
+++ head/sys/amd64/linux/linux_ptrace.c
@@ -72,6 +72,8 @@
#define LINUX_PTRACE_GETREGSET 0x4204
#define LINUX_PTRACE_SEIZE 0x4206
+#define LINUX_PTRACE_EVENT_EXIT 6
+
#define LINUX_PTRACE_O_TRACESYSGOOD 1
#define LINUX_PTRACE_O_TRACEFORK 2
#define LINUX_PTRACE_O_TRACEVFORK 4
@@ -139,6 +141,9 @@
if ((pem->ptrace_flags & LINUX_PTRACE_O_TRACESYSGOOD) &&
lwpinfo.pl_flags & PL_FLAG_SCX)
status |= (LINUX_SIGTRAP | 0x80) << 8;
+ if ((pem->ptrace_flags & LINUX_PTRACE_O_TRACEEXIT) &&
+ lwpinfo.pl_flags & PL_FLAG_EXITED)
+ status |= (LINUX_SIGTRAP | LINUX_PTRACE_EVENT_EXIT << 8) << 8;
LINUX_PEM_SUNLOCK(pem);
return (status);
@@ -359,9 +364,9 @@
mask |= PTRACE_VFORK; /* XXX: Close enough? */
if (data & LINUX_PTRACE_O_TRACEEXIT) {
- linux_msg(td, "PTRACE_O_TRACEEXIT not implemented; "
- "returning EINVAL");
- return (EINVAL);
+ pem->ptrace_flags |= LINUX_PTRACE_O_TRACEEXIT;
+ } else {
+ pem->ptrace_flags &= ~LINUX_PTRACE_O_TRACEEXIT;
}
return (kern_ptrace(td, PT_SET_EVENT_MASK, pid, &mask, sizeof(mask)));

File Metadata

Mime Type
text/plain
Expires
Sat, Aug 8, 3:32 AM (8 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36179105
Default Alt Text
D20689.id.diff (1 KB)

Event Timeline