Skip to content

Commit 57b136a

Browse files
committed
Add ptrace for non-apple BSDs
* Added ptrace and constants for all freebsdlike and netbsdlike OSs
1 parent 0bdb886 commit 57b136a

File tree

6 files changed

+78
-0
lines changed

6 files changed

+78
-0
lines changed

src/unix/bsd/freebsdlike/dragonfly/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,8 @@ pub const NOTE_CHILD: ::uint32_t = 0x00000004;
429429
pub const SO_SNDSPACE: ::c_int = 0x100a;
430430
pub const SO_CPUHINT: ::c_int = 0x1030;
431431

432+
pub const PT_FIRSTMACH: ::c_int = 32;
433+
432434
// https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/net/if.h#L101
433435
pub const IFF_UP: ::c_int = 0x1; // interface is up
434436
pub const IFF_BROADCAST: ::c_int = 0x2; // broadcast address valid

src/unix/bsd/freebsdlike/freebsd/mod.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,39 @@ pub const LOCAL_CREDS: ::c_int = 2;
474474
pub const LOCAL_CONNWAIT: ::c_int = 4;
475475
pub const LOCAL_VENDOR: ::c_int = SO_VENDOR;
476476

477+
pub const PT_LWPINFO: ::c_int = 13;
478+
pub const PT_GETNUMLWPS: ::c_int = 14;
479+
pub const PT_GETLWPLIST: ::c_int = 15;
480+
pub const PT_CLEARSTEP: ::c_int = 16;
481+
pub const PT_SETSTEP: ::c_int = 17;
482+
pub const PT_SUSPEND: ::c_int = 18;
483+
pub const PT_RESUME: ::c_int = 19;
484+
pub const PT_TO_SCE: ::c_int = 20;
485+
pub const PT_TO_SCX: ::c_int = 21;
486+
pub const PT_SYSCALL: ::c_int = 22;
487+
pub const PT_FOLLOW_FORK: ::c_int = 23;
488+
pub const PT_LWP_EVENTS: ::c_int = 24;
489+
pub const PT_GET_EVENT_MASK: ::c_int = 25;
490+
pub const PT_SET_EVENT_MASK: ::c_int = 26;
491+
pub const PT_GETREGS: ::c_int = 33;
492+
pub const PT_SETREGS: ::c_int = 34;
493+
pub const PT_GETFPREGS: ::c_int = 35;
494+
pub const PT_SETFPREGS: ::c_int = 36;
495+
pub const PT_GETDBREGS: ::c_int = 37;
496+
pub const PT_SETDBREGS: ::c_int = 38;
497+
pub const PT_VM_TIMESTAMP: ::c_int = 40;
498+
pub const PT_VM_ENTRY: ::c_int = 41;
499+
pub const PT_FIRSTMACH: ::c_int = 64;
500+
501+
pub const PTRACE_EXEC: ::c_int = 0x0001;
502+
pub const PTRACE_SCE: ::c_int = 0x0002;
503+
pub const PTRACE_SCX: ::c_int = 0x0004;
504+
pub const PTRACE_SYSCALL: ::c_int = PTRACE_SCE | PTRACE_SCX;
505+
pub const PTRACE_FORK: ::c_int = 0x0008;
506+
pub const PTRACE_LWP: ::c_int = 0x0010;
507+
pub const PTRACE_VFORK: ::c_int = 0x0020;
508+
pub const PTRACE_DEFAULT: ::c_int = PTRACE_EXEC;
509+
477510
pub const AF_SLOW: ::c_int = 33;
478511
pub const AF_SCLUSTER: ::c_int = 34;
479512
pub const AF_ARP: ::c_int = 35;

src/unix/bsd/freebsdlike/mod.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,18 @@ pub const PF_NATM: ::c_int = AF_NATM;
624624
pub const PF_ATM: ::c_int = AF_ATM;
625625
pub const PF_NETGRAPH: ::c_int = AF_NETGRAPH;
626626

627+
pub const PT_TRACE_ME: ::c_int = 0;
628+
pub const PT_READ_I: ::c_int = 1;
629+
pub const PT_READ_D: ::c_int = 2;
630+
pub const PT_WRITE_I: ::c_int = 4;
631+
pub const PT_WRITE_D: ::c_int = 5;
632+
pub const PT_CONTINUE: ::c_int = 7;
633+
pub const PT_KILL: ::c_int = 8;
634+
pub const PT_STEP: ::c_int = 9;
635+
pub const PT_ATTACH: ::c_int = 10;
636+
pub const PT_DETACH: ::c_int = 11;
637+
pub const PT_IO: ::c_int = 12;
638+
627639
pub const SOMAXCONN: ::c_int = 128;
628640

629641
pub const MSG_OOB: ::c_int = 0x00000001;
@@ -1205,6 +1217,10 @@ extern {
12051217
pub fn settimeofday(tv: *const ::timeval, tz: *const ::timezone) -> ::c_int;
12061218
pub fn getdomainname(name: *mut ::c_char, len: ::c_int) -> ::c_int;
12071219
pub fn setdomainname(name: *const ::c_char, len: ::c_int) -> ::c_int;
1220+
pub fn ptrace(request: ::c_int,
1221+
pid: ::pid_t,
1222+
addr: *mut ::c_char,
1223+
data: ::c_int) -> ::c_int;
12081224
}
12091225

12101226
cfg_if! {

src/unix/bsd/netbsdlike/mod.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,17 @@ pub const POSIX_MADV_DONTNEED : ::c_int = 4;
314314
pub const PTHREAD_CREATE_JOINABLE : ::c_int = 0;
315315
pub const PTHREAD_CREATE_DETACHED : ::c_int = 1;
316316

317+
pub const PT_TRACE_ME: ::c_int = 0;
318+
pub const PT_READ_I: ::c_int = 1;
319+
pub const PT_READ_D: ::c_int = 2;
320+
pub const PT_WRITE_I: ::c_int = 4;
321+
pub const PT_WRITE_D: ::c_int = 5;
322+
pub const PT_CONTINUE: ::c_int = 7;
323+
pub const PT_KILL: ::c_int = 8;
324+
pub const PT_ATTACH: ::c_int = 9;
325+
pub const PT_DETACH: ::c_int = 10;
326+
pub const PT_IO: ::c_int = 11;
327+
317328
// http://man.openbsd.org/OpenBSD-current/man2/clock_getres.2
318329
// The man page says clock_gettime(3) can accept various values as clockid_t but
319330
// http://fxr.watson.org/fxr/source/kern/kern_time.c?v=OPENBSD;im=excerpts#L161

src/unix/bsd/netbsdlike/netbsd/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,15 @@ pub const SOCK_NONBLOCK: ::c_int = 0x20000000;
969969

970970
pub const SIGSTKSZ : ::size_t = 40960;
971971

972+
pub const PT_DUMPCORE: ::c_int = 12;
973+
pub const PT_LWPINFO: ::c_int = 13;
974+
pub const PT_SYSCALL: ::c_int = 14;
975+
pub const PT_SYSCALLEMU: ::c_int = 15;
976+
pub const PT_SET_EVENT_MASK: ::c_int = 16;
977+
pub const PT_GET_EVENT_MASK: ::c_int = 17;
978+
pub const PT_GET_PROCESS_STATE: ::c_int = 18;
979+
pub const PT_FIRSTMACH: ::c_int = 32;
980+
972981
// dirfd() is a macro on netbsd to access
973982
// the first field of the struct where dirp points to:
974983
// http://cvsweb.netbsd.org/bsdweb.cgi/src/include/dirent.h?rev=1.36

src/unix/bsd/netbsdlike/openbsdlike/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub type pthread_cond_t = *mut ::c_void;
1414
pub type pthread_condattr_t = *mut ::c_void;
1515
pub type pthread_rwlock_t = *mut ::c_void;
1616
pub type pthread_rwlockattr_t = *mut ::c_void;
17+
pub type caddr_t = *mut ::c_char;
1718

1819
s! {
1920
pub struct dirent {
@@ -695,6 +696,8 @@ pub const SOCK_CLOEXEC: ::c_int = 0x8000;
695696
pub const SOCK_NONBLOCK: ::c_int = 0x4000;
696697
pub const SOCK_DNS: ::c_int = 0x1000;
697698

699+
pub const PTRACE_FORK: ::c_int = 0x0002;
700+
698701
pub const WCONTINUED: ::c_int = 8;
699702

700703
f! {
@@ -734,6 +737,10 @@ extern {
734737
pub fn getentropy(buf: *mut ::c_void, buflen: ::size_t) -> ::c_int;
735738
pub fn setresgid(rgid: ::gid_t, egid: ::gid_t, sgid: ::gid_t) -> ::c_int;
736739
pub fn setresuid(ruid: ::uid_t, euid: ::uid_t, suid: ::uid_t) -> ::c_int;
740+
pub fn ptrace(request: ::c_int,
741+
pid: ::pid_t,
742+
addr: caddr_t,
743+
data: ::c_int) -> ::c_int;
737744
}
738745

739746
cfg_if! {

0 commit comments

Comments
 (0)