3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine/*
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * This file and its contents are supplied under the terms of the
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * Common Development and Distribution License ("CDDL"), version 1.0.
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * You may only use this file in accordance with the terms of version
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * 1.0 of the CDDL.
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine *
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * A full copy of the text of the CDDL should have accompanied this
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * source. A copy of the CDDL is also available via the Internet at
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * http://www.illumos.org/license/CDDL.
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine/*
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * Copyright (c) 2014, Joyent, Inc.
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine#ifndef _PCORE_LINUX_H
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine#define _PCORE_LINUX_H
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine/*
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * Note that these structures can end up in both a 32-bit and 64-bit libproc.
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * Therefore, one should generally avoid using types whose size change between
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * ILP32 and LP64 and instead use the correct fixed width type. eg. long should
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * be int32_t and int64_t as appropriate to whether it's a 32-bit or 64-bit
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine * structure.
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine#ifdef __cplusplus
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaineextern "C" {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine#endif
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine/* Process Information */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_prpsinfo32 {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint8_t pr_state; /* Numeric process state */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int8_t pr_sname; /* Char for pr_state */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint8_t pr_zomb; /* Zombie */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int8_t pr_nice; /* Nice value */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t pr_flag; /* Flags */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint16_t pr_uid; /* User ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint16_t pr_gid; /* Group ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_pid; /* Process ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_ppid; /* Parent's process ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_pgrp; /* Group ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_sid; /* Session ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine char pr_fname[16]; /* Filename of executable */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine char pr_psargs[80]; /* Initial part of arg list */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_prpsinfo32_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_prpsinfo64 {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint8_t pr_state; /* Numeric process state */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int8_t pr_sname; /* Char for pr_state */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint8_t pr_zomb; /* Zombie */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int8_t pr_nice; /* Nice value */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t pr_flag; /* Flags */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t pr_uid; /* User ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t pr_gid; /* Group ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_pid; /* Process ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_ppid; /* Parent's process ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_pgrp; /* Group ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_sid; /* Session ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine char pr_fname[16]; /* Filename of executable */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine char pr_psargs[80]; /* Initial part of arg list */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_prpsinfo64_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_amd64_regs {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_r15;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_r14;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_r13;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_r12;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rbp;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rbx;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_r11;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_r10;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_r9;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_r8;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rax;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rcx;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rdx;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rsi;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rdi;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_orig_rax;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rip;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_cs;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_eflags;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_rsp;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_ss;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_fs_base;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_gs_base;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_ds;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_es;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_fs;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t lxr_gs;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_amd64_regs_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_ia32_regs {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_bx;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_cx;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_dx;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_si;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_di;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_bp;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_ax;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_ds;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_es;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_fs;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_gs;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_orig_ax;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_ip;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_cs;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_flags;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_sp;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t lxr_ss;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_ia32_regs_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_elf_siginfo {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t si_signo; /* Signal number */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t si_code; /* Extra code */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t si_errno; /* Errno */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_elf_siginfo_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_elf_timeval32 {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t tv_sec; /* Seconds */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t tv_usec; /* Microseconds */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_elf_timeval32_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_elf_timeval64 {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int64_t tv_sec; /* Seconds */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int64_t tv_usec; /* Microseconds */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_elf_timeval64_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine/* Thread Information */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_prstatus32 {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_siginfo_t pr_info; /* Singal Info */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint16_t pr_cursig; /* Current signal */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t pr_sigpend; /* Set of pending signals */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t pr_sighold; /* Set of held signals */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_pid; /* Process ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_ppid; /* Parent's process ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_pgrp; /* Group ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_sid; /* Session ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_timeval32_t pr_utime; /* User time */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_timeval32_t pr_stime; /* System time */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_timeval32_t pr_cutime; /* Cumulative user time */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_timeval32_t pr_cstime; /* Cumulative system time */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_ia32_regs_t pr_reg; /* CPU registers */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t pr_fpvalid; /* True if we have fp state */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_prstatus32_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontainetypedef struct lx_prstatus64 {
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_siginfo_t pr_info; /* Singal Info */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint16_t pr_cursig; /* Current signal */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t pr_sigpend; /* Set of pending signals */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint64_t pr_sighold; /* Set of held signals */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_pid; /* Process ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_ppid; /* Parent's process ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_pgrp; /* Group ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine int32_t pr_sid; /* Session ID */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_timeval64_t pr_utime; /* User time */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_timeval64_t pr_stime; /* System time */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_timeval64_t pr_cutime; /* Cumulative user time */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_elf_timeval64_t pr_cstime; /* Cumulative system time */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine lx_amd64_regs_t pr_reg; /* CPU registers */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine uint32_t pr_fpvalid; /* True if we have fp state */
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine} lx_prstatus64_t;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine#define LTIME_TO_TIMESPEC(dst, src) \
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine (dst).tv_sec = (src).tv_sec; \
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine (dst).tv_nsec = (src).tv_usec * 1000;
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine#ifdef __cplusplus
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine}
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine#endif
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine
3c457126d6dda7ae8bfeed1d0f7023b997a97622Timothy J Fontaine#endif /* _PCORE_LINUX_H */