diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig index 352c12c695..ddcbe3b8da 100644 --- a/lib/std/c/freebsd.zig +++ b/lib/std/c/freebsd.zig @@ -64,6 +64,7 @@ pub extern "c" fn getpid() pid_t; pub extern "c" fn kinfo_getfile(pid: pid_t, cntp: *c_int) ?[*]kinfo_file; pub extern "c" fn kinfo_getvmmap(pid: pid_t, cntp: *c_int) ?[*]kinfo_vmentry; +pub extern "c" fn kinfo_getproc(pid: pid_t) ?[*]kinfo_proc; pub extern "c" fn cpuset_getaffinity(level: cpulevel_t, which: cpuwhich_t, id: id_t, setsize: usize, mask: *cpuset_t) c_int; pub extern "c" fn cpuset_setaffinity(level: cpulevel_t, which: cpuwhich_t, id: id_t, setsize: usize, mask: *const cpuset_t) c_int; @@ -676,6 +677,191 @@ comptime { std.debug.assert(@sizeOf(kinfo_vmentry) == KINFO_VMENTRY_SIZE); } +pub const WMESGLEN = 8; +pub const LOCKNAMELEN = 8; +pub const TDNAMLEN = 16; +pub const COMMLEN = 19; +pub const MAXCOMLEN = 19; +pub const KI_EMULNAMELEN = 16; +pub const KI_NGROUPS = 16; +pub const LOGNAMELEN = 17; +pub const LOGINCLASSLEN = 17; + +pub const KI_NSPARE_INT = 2; +pub const KI_NSPARE_LONG = 12; +pub const KI_NSPARE_PTR = 5; + +pub const RUSAGE_SELF = 0; +pub const RUSAGE_CHILDREN = -1; +pub const RUSAGE_THREAD = 1; + +pub const proc = opaque {}; +pub const thread = opaque {}; +pub const vnode = opaque {}; +pub const filedesc = opaque {}; +pub const pwddesc = opaque {}; +pub const vmspace = opaque {}; +pub const pcb = opaque {}; +pub const lwpid_t = i32; +pub const fixpt_t = u32; +pub const vm_size_t = usize; +pub const segsz_t = isize; + +pub const itimerval = extern struct { + interval: timeval, + value: timeval, +}; + +pub const pstats = extern struct { + cru: rusage, + timer: [3]itimerval, + prof: extern struct { + base: u8, + size: c_ulong, + off: c_ulong, + scale: c_ulong, + }, + start: timeval, +}; + +pub const user = extern struct { + stats: pstats, + kproc: kinfo_proc, +}; + +pub const pargs = extern struct { + ref: c_uint, + length: c_uint, + args: [1]u8, +}; + +pub const priority = extern struct { + class: u8, + level: u8, + native: u8, + user: u8, +}; + +pub const rusage = extern struct { + utime: timeval, + stime: timeval, + maxrss: c_long, + ixrss: c_long, + idrss: c_long, + isrss: c_long, + minflt: c_long, + majflt: c_long, + nswap: c_long, + inblock: c_long, + oublock: c_long, + msgsnd: c_long, + msgrcv: c_long, + nsignals: c_long, + nvcsw: c_long, + nivcsw: c_long, +}; + +pub const kinfo_proc = extern struct { + structsize: c_int, + layout: c_int, + args: *pargs, + paddr: *proc, + addr: *user, + tracep: *vnode, + textvp: *vnode, + fd: *filedesc, + vmspace: *vmspace, + wchan: ?*const anyopaque, + pid: pid_t, + ppid: pid_t, + pgid: pid_t, + tpgid: pid_t, + sid: pid_t, + tsid: pid_t, + jobc: c_short, + spare_short1: c_short, + tdev_freebsd11: u32, + siglist: sigset_t, + sigmask: sigset_t, + sigignore: sigset_t, + sigcatch: sigset_t, + uid: uid_t, + ruid: uid_t, + svuid: uid_t, + rgid: gid_t, + svgid: gid_t, + ngroups: c_short, + spare_short2: c_short, + groups: [KI_NGROUPS]gid_t, + size: vm_size_t, + rssize: segsz_t, + swrss: segsz_t, + tsize: segsz_t, + dsize: segsz_t, + ssize: segsz_t, + xstat: c_ushort, + acflag: c_ushort, + pctcpu: fixpt_t, + estcpu: c_uint, + slptime: c_uint, + swtime: c_uint, + cow: c_uint, + runtime: u64, + start: timeval, + childtime: timeval, + flag: c_long, + kiflag: c_long, + traceflag: c_int, + stat: u8, + nice: i8, + lock: u8, + rqindex: u8, + oncpu_old: u8, + lastcpu_old: u8, + tdname: [TDNAMLEN + 1]u8, + wmesg: [WMESGLEN + 1]u8, + login: [LOGNAMELEN + 1]u8, + lockname: [LOCKNAMELEN + 1]u8, + comm: [COMMLEN + 1]u8, + emul: [KI_EMULNAMELEN + 1]u8, + loginclass: [LOGINCLASSLEN + 1]u8, + moretdname: [MAXCOMLEN - TDNAMLEN + 1]u8, + sparestrings: [46]u8, + spareints: [KI_NSPARE_INT]c_int, + tdev: u64, + oncpu: c_int, + lastcpu: c_int, + tracer: c_int, + flag2: c_int, + fibnum: c_int, + cr_flags: c_uint, + jid: c_int, + numthreads: c_int, + tid: lwpid_t, + pri: priority, + rusage: rusage, + rusage_ch: rusage, + pcb: *pcb, + stack: ?*anyopaque, + udata: ?*anyopaque, + tdaddr: *thread, + pd: *pwddesc, + spareptrs: [KI_NSPARE_PTR]?*anyopaque, + sparelongs: [KI_NSPARE_LONG]c_long, + sflag: c_long, + tdflag: c_long, +}; + +pub const KINFO_PROC_SIZE = switch (builtin.cpu.arch) { + .x86 => 768, + .arm => 816, + else => 1088, +}; + +comptime { + assert(@sizeOf(kinfo_proc) == KINFO_PROC_SIZE); +} + pub const CTL = struct { pub const KERN = 1; pub const DEBUG = 5;