Commit 3dd0afe787

David CARLIER <devnexen@gmail.com>
2023-04-30 15:32:12
std.c: adding freebsd's kinfo_proc type.
1 parent 297b5d1
Changed files (1)
lib
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;