aboutsummaryrefslogtreecommitdiff
path: root/core/sys/linux/bits.odin
diff options
context:
space:
mode:
Diffstat (limited to 'core/sys/linux/bits.odin')
-rw-r--r--core/sys/linux/bits.odin1400
1 files changed, 1400 insertions, 0 deletions
diff --git a/core/sys/linux/bits.odin b/core/sys/linux/bits.odin
new file mode 100644
index 000000000..b6b22dfdb
--- /dev/null
+++ b/core/sys/linux/bits.odin
@@ -0,0 +1,1400 @@
+package linux
+
+
+/// Represents an error returned by most of syscalls
+Errno :: enum i32 {
+ NONE = 0,
+ // Errno-base
+ EPERM = 1,
+ ENOENT = 2,
+ ESRCH = 3,
+ EINTR = 4,
+ EIO = 5,
+ ENXIO = 6,
+ E2BIG = 7,
+ ENOEXEC = 8,
+ EBADF = 9,
+ ECHILD = 10,
+ EAGAIN = 11,
+ ENOMEM = 12,
+ EACCES = 13,
+ EFAULT = 14,
+ ENOTBLK = 15,
+ EBUSY = 16,
+ EEXIST = 17,
+ EXDEV = 18,
+ ENODEV = 19,
+ ENOTDIR = 20,
+ EISDIR = 21,
+ EINVAL = 22,
+ ENFILE = 23,
+ EMFILE = 24,
+ ENOTTY = 25,
+ ETXTBSY = 26,
+ EFBIG = 27,
+ ENOSPC = 28,
+ ESPIPE = 29,
+ EROFS = 30,
+ EMLINK = 31,
+ EPIPE = 32,
+ EDOM = 33,
+ ERANGE = 34,
+ // Linux
+ EDEADLK = 35,
+ ENAMETOOLONG = 36,
+ ENOLCK = 37,
+ ENOSYS = 38,
+ ENOTEMPTY = 39,
+ ELOOP = 40,
+ ENOMSG = 42,
+ EIDRM = 43,
+ ECHRNG = 44,
+ EL2NSYNC = 45,
+ EL3HLT = 46,
+ EL3RST = 47,
+ ELNRNG = 48,
+ EUNATCH = 49,
+ ENOCSI = 50,
+ EL2HLT = 51,
+ EBADE = 52,
+ EBADR = 53,
+ EXFULL = 54,
+ ENOANO = 55,
+ EBADRQC = 56,
+ EBADSLT = 57,
+ EBFONT = 59,
+ ENOSTR = 60,
+ ENODATA = 61,
+ ETIME = 62,
+ ENOSR = 63,
+ ENONET = 64,
+ ENOPKG = 65,
+ EREMOTE = 66,
+ ENOLINK = 67,
+ EADV = 68,
+ ESRMNT = 69,
+ ECOMM = 70,
+ EPROTO = 71,
+ EMULTIHOP = 72,
+ EDOTDOT = 73,
+ EBADMSG = 74,
+ EOVERFLOW = 75,
+ ENOTUNIQ = 76,
+ EBADFD = 77,
+ EREMCHG = 78,
+ ELIBACC = 79,
+ ELIBBAD = 80,
+ ELIBSCN = 81,
+ ELIBMAX = 82,
+ ELIBEXEC = 83,
+ EILSEQ = 84,
+ ERESTART = 85,
+ ESTRPIPE = 86,
+ EUSERS = 87,
+ ENOTSOCK = 88,
+ EDESTADDRREQ = 89,
+ EMSGSIZE = 90,
+ EPROTOTYPE = 91,
+ ENOPROTOOPT = 92,
+ EPROTONOSUPPORT = 93,
+ ESOCKTNOSUPPORT = 94,
+ EOPNOTSUPP = 95,
+ EPFNOSUPPORT = 96,
+ EAFNOSUPPORT = 97,
+ EADDRINUSE = 98,
+ EADDRNOTAVAIL = 99,
+ ENETDOWN = 100,
+ ENETUNREACH = 101,
+ ENETRESET = 102,
+ ECONNABORTED = 103,
+ ECONNRESET = 104,
+ ENOBUFS = 105,
+ EISCONN = 106,
+ ENOTCONN = 107,
+ ESHUTDOWN = 108,
+ ETOOMANYREFS = 109,
+ ETIMEDOUT = 110,
+ ECONNREFUSED = 111,
+ EHOSTDOWN = 112,
+ EHOSTUNREACH = 113,
+ EALREADY = 114,
+ EINPROGRESS = 115,
+ ESTALE = 116,
+ EUCLEAN = 117,
+ ENOTNAM = 118,
+ ENAVAIL = 119,
+ EISNAM = 120,
+ EREMOTEIO = 121,
+ EDQUOT = 122,
+ ENOMEDIUM = 123,
+ EMEDIUMTYPE = 124,
+ ECANCELED = 125,
+ ENOKEY = 126,
+ EKEYEXPIRED = 127,
+ EKEYREVOKED = 128,
+ EKEYREJECTED = 129,
+ EOWNERDEAD = 130,
+ ENOTRECOVERABLE = 131,
+ ERFKILL = 132,
+ EHWPOISON = 133,
+ // Errno aliases
+ EWOULDBLOCK = EAGAIN,
+ EDEADLOCK = EDEADLK,
+}
+
+
+/// Bits for Open_Flags
+Open_Flags_Bits :: enum {
+ RDONLY = 0,
+ WRONLY = 1,
+ RDWR = 2,
+ CREAT = 6,
+ EXCL = 7,
+ NOCTTY = 8,
+ TRUNC = 9,
+ APPEND = 10,
+ NONBLOCK = 11,
+ DSYNC = 12,
+ ASYNC = 13,
+ DIRECT = 14,
+ DIRECTORY = 16,
+ NOFOLLOW = 17,
+ NOATIME = 18,
+ CLOEXEC = 19,
+ PATH = 21,
+}
+
+/// Bits for FD_Flags bitset
+FD_Flags_Bits :: enum {
+ SYMLINK_NOFOLLOW = 8,
+ REMOVEDIR = 9,
+ EACCESS = 9,
+ SYMLINK_FOLLOW = 10,
+ NO_AUTOMOUNT = 11,
+ EMPTY_PATH = 12,
+ STATX_FORCE_SYNC = 13,
+ STATX_DONT_SYNC = 14,
+ RECURSIVE = 15,
+}
+
+/// The bits for the Mode bitset.
+Mode_Bits :: enum {
+ IXOTH = 0, // 0o0000001
+ IWOTH = 1, // 0o0000002
+ IROTH = 2, // 0o0000004
+ IXGRP = 3, // 0o0000010
+ IWGRP = 4, // 0o0000020
+ IRGRP = 5, // 0o0000040
+ IXUSR = 6, // 0o0000100
+ IWUSR = 7, // 0o0000200
+ IRUSR = 8, // 0o0000400
+ ISVTX = 9, // 0o0001000
+ ISGID = 10, // 0o0002000
+ ISUID = 11, // 0o0004000
+ IFFIFO = 12, // 0o0010000
+ IFCHR = 13, // 0o0020000
+ IFDIR = 14, // 0o0040000
+ IFREG = 15, // 0o0100000
+}
+
+/// The bits used by the Statx_Mask bitset
+Statx_Mask_Bits :: enum {
+ TYPE = 0,
+ MODE = 1,
+ NLINK = 2,
+ UID = 3,
+ GID = 4,
+ ATIME = 5,
+ MTIME = 6,
+ CTIME = 7,
+ INO = 8,
+ SIZE = 9,
+ BLOCKS = 10,
+ BTIME = 11,
+ MNT_ID = 12,
+ DIOALIGN = 13,
+}
+
+/// Bits found in Statx_Attr bitset
+/// You should not use these directly
+Statx_Attr_Bits :: enum {
+ COMPRESSED = 2, // 0x00000004
+ IMMUTABLE = 4, // 0x00000010
+ APPEND = 5, // 0x00000020
+ NODUMP = 6, // 0x00000040
+ ENCRYPTED = 11, // 0x00000800
+ AUTOMOUNT = 12, // 0x00001000
+ MOUNT_ROOT = 13, // 0x00002000
+ VERITY = 20, // 0x00100000
+ DAX = 21, // 0x00200000
+}
+
+/// Magic bits for filesystems returned by Stat_FS
+FS_Magic :: enum u32 {
+ ADFS_SUPER_MAGIC = 0xadf5,
+ AFFS_SUPER_MAGIC = 0xadff,
+ AFS_SUPER_MAGIC = 0x5346414f,
+ ANON_INODE_FS_MAGIC = 0x09041934,
+ AUTOFS_SUPER_MAGIC = 0x0187,
+ BDEVFS_MAGIC = 0x62646576,
+ BEFS_SUPER_MAGIC = 0x42465331,
+ BFS_MAGIC = 0x1badface,
+ BINFMTFS_MAGIC = 0x42494e4d,
+ BPF_FS_MAGIC = 0xcafe4a11,
+ BTRFS_SUPER_MAGIC = 0x9123683e,
+ BTRFS_TEST_MAGIC = 0x73727279,
+ CGROUP_SUPER_MAGIC = 0x27e0eb,
+ CGROUP2_SUPER_MAGIC = 0x63677270,
+ CIFS_MAGIC_NUMBER = 0xff534d42,
+ CODA_SUPER_MAGIC = 0x73757245,
+ COH_SUPER_MAGIC = 0x012ff7b7,
+ CRAMFS_MAGIC = 0x28cd3d45,
+ DEBUGFS_MAGIC = 0x64626720,
+ DEVFS_SUPER_MAGIC = 0x1373,
+ DEVPTS_SUPER_MAGIC = 0x1cd1,
+ ECRYPTFS_SUPER_MAGIC = 0xf15f,
+ EFIVARFS_MAGIC = 0xde5e81e4,
+ EFS_SUPER_MAGIC = 0x00414a53,
+ EXT_SUPER_MAGIC = 0x137d,
+ EXT2_OLD_SUPER_MAGIC = 0xef51,
+ EXT2_SUPER_MAGIC = 0xef53,
+ EXT3_SUPER_MAGIC = 0xef53,
+ EXT4_SUPER_MAGIC = 0xef53,
+ F2FS_SUPER_MAGIC = 0xf2f52010,
+ FUSE_SUPER_MAGIC = 0x65735546,
+ FUTEXFS_SUPER_MAGIC = 0xbad1dea,
+ HFS_SUPER_MAGIC = 0x4244,
+ HOSTFS_SUPER_MAGIC = 0x00c0ffee,
+ HPFS_SUPER_MAGIC = 0xf995e849,
+ HUGETLBFS_MAGIC = 0x958458f6,
+ ISOFS_SUPER_MAGIC = 0x9660,
+ JFFS2_SUPER_MAGIC = 0x72b6,
+ JFS_SUPER_MAGIC = 0x3153464a,
+ MINIX_SUPER_MAGIC = 0x137f,
+ MINIX_SUPER_MAGIC2 = 0x138f,
+ MINIX2_SUPER_MAGIC = 0x2468,
+ MINIX2_SUPER_MAGIC2 = 0x2478,
+ MINIX3_SUPER_MAGIC = 0x4d5a,
+ MQUEUE_MAGIC = 0x19800202,
+ MSDOS_SUPER_MAGIC = 0x4d44,
+ MTD_INODE_FS_MAGIC = 0x11307854,
+ NCP_SUPER_MAGIC = 0x564c,
+ NFS_SUPER_MAGIC = 0x6969,
+ NILFS_SUPER_MAGIC = 0x3434,
+ NSFS_MAGIC = 0x6e736673,
+ NTFS_SB_MAGIC = 0x5346544e,
+ OCFS2_SUPER_MAGIC = 0x7461636f,
+ OPENPROM_SUPER_MAGIC = 0x9fa1,
+ OVERLAYFS_SUPER_MAGIC = 0x794c7630,
+ PIPEFS_MAGIC = 0x50495045,
+ PROC_SUPER_MAGIC = 0x9fa0,
+ PSTOREFS_MAGIC = 0x6165676c,
+ QNX4_SUPER_MAGIC = 0x002f,
+ QNX6_SUPER_MAGIC = 0x68191122,
+ RAMFS_MAGIC = 0x858458f6,
+ REISERFS_SUPER_MAGIC = 0x52654973,
+ ROMFS_MAGIC = 0x7275,
+ SECURITYFS_MAGIC = 0x73636673,
+ SELINUX_MAGIC = 0xf97cff8c,
+ SMACK_MAGIC = 0x43415d53,
+ SMB_SUPER_MAGIC = 0x517b,
+ SMB2_MAGIC_NUMBER = 0xfe534d42,
+ SOCKFS_MAGIC = 0x534f434b,
+ SQUASHFS_MAGIC = 0x73717368,
+ SYSFS_MAGIC = 0x62656572,
+ SYSV2_SUPER_MAGIC = 0x012ff7b6,
+ SYSV4_SUPER_MAGIC = 0x012ff7b5,
+ TMPFS_MAGIC = 0x01021994,
+ TRACEFS_MAGIC = 0x74726163,
+ UDF_SUPER_MAGIC = 0x15013346,
+ UFS_MAGIC = 0x00011954,
+ USBDEVICE_SUPER_MAGIC = 0x9fa2,
+ V9FS_MAGIC = 0x01021997,
+ VXFS_SUPER_MAGIC = 0xa501fcf5,
+ XENFS_SUPER_MAGIC = 0xabba1974,
+ XENIX_SUPER_MAGIC = 0x012ff7b4,
+ XFS_SUPER_MAGIC = 0x58465342,
+ _XIAFS_SUPER_MAGIC = 0x012fd16d,
+}
+
+/// Bits for FS_Flags bitset
+FS_Flags_Bits :: enum {
+ RDONLY = 0,
+ NOSUID = 1,
+ NODEV = 2,
+ NOEXEC = 3,
+ SYNCHRONOUS = 4,
+ VALID = 5,
+ MANDLOCK = 6,
+ NOATIME = 10,
+ NODIRATIME = 11,
+ RELATIME = 12,
+ NOSYMFOLLOW = 13,
+}
+
+Seek_Whence :: enum i16 {
+ SET = 0,
+ CUR = 1,
+ END = 2,
+ DATA = 3,
+ HOLE = 4,
+}
+
+/// Bits for Close_Range_Flags
+Close_Range_Flags_Bits :: enum {
+ CLOEXEC = 2,
+ UNSHARE = 1,
+}
+
+/// Bits for Rename_Flags
+Rename_Flags_Bits :: enum {
+ EXCHANGE = 1,
+ NOREPLACE = 0,
+ WHITEOUT = 2,
+}
+
+/// Type of the file in a directory entry
+Dirent_Type :: enum u8 {
+ UNKNOWN = 0,
+ FIFO = 1,
+ CHR = 2,
+ DIR = 4,
+ BLK = 6,
+ REG = 8,
+ LNK = 10,
+ SOCK = 12,
+ WHT = 14,
+}
+
+/// Type of a lock for fcntl.2
+FLock_Type :: enum i16 {
+ RDLCK = 0,
+ WRLCK = 1,
+ UNLCK = 2,
+}
+
+/// Bits for FD_Notifications
+FD_Notifications_Bits :: enum {
+ ACCESS = 0,
+ MODIFY = 1,
+ CREATE = 2,
+ DELETE = 3,
+ RENAME = 4,
+ ATTRIB = 5,
+ MULTISHOT = 31,
+}
+
+/// Bits for seal
+Seal_Bits :: enum {
+ SEAL = 0,
+ SHRINK = 1,
+ GROW = 2,
+ WRITE = 3,
+ FUTURE_WRITE = 4,
+}
+
+RW_Hint :: enum u64 {
+ WRITE_LIFE_NOT_SET = 0,
+ WRITE_LIFE_NONE = 1,
+ WRITE_LIFE_SHORT = 2,
+ WRITE_LIFE_MEDIUM = 3,
+ WRITE_LIFE_LONG = 4,
+ WRITE_LIFE_EXTREME = 5,
+}
+
+FD_Lease :: enum {
+ RDLCK = 0,
+ WRLCK = 1,
+ UNLCK = 2,
+}
+
+/// Kind of owner for FD_Owner
+F_Owner_Type :: enum i32 {
+ OWNER_TID = 0,
+ OWNER_PID = 1,
+ OWNER_PGRP = 2,
+}
+
+/// Command for fcntl.2
+FCntl_Command :: enum {
+ DUPFD = 0,
+ GETFD = 1,
+ SETFD = 2,
+ GETFL = 3,
+ SETFL = 4,
+ GETLK = 5,
+ SETLK = 6,
+ SETLKW = 7,
+ SETOWN = 8,
+ GETOWN = 9,
+ SETSIG = 10,
+ GETSIG = 11,
+ SETOWN_EX = 15,
+ GETOWN_EX = 16,
+ // OFD_GETLK = 36,
+ // OFD_SETLK = 37,
+ // OFD_SETLKW = 38,
+ SETLEASE = 1024,
+ GETLEASE = 1025,
+ NOTIFY = 1026,
+ DUPFD_CLOEXEC = 1030,
+ SETPIPE_SZ = 1031,
+ GETPIPE_SZ = 1032,
+ ADD_SEALS = 1033,
+ GET_SEALS = 1034,
+ GET_RW_HINT = 1035,
+ SET_RW_HINT = 1036,
+ GET_FILE_RW_HINT = 1037,
+ SET_FILE_RW_HINT = 1038,
+ // F_OK = 0,
+}
+
+Fd_Poll_Events_Bits :: enum {
+ IN = 0,
+ PRI = 1,
+ OUT = 2,
+ ERR = 3,
+ HUP = 4,
+ NVAL = 5,
+ RDNORM = 6,
+ RDBAND = 7,
+ WRNORM = 8,
+ WRBAND = 9,
+ MSG = 10,
+ REMOVE = 12,
+ RDHUP = 13,
+}
+
+/// Bits for Mem_Protection bitfield
+Mem_Protection_Bits :: enum{
+ READ = 0,
+ WRITE = 1,
+ EXEC = 2,
+ SEM = 3,
+ // platform-specific section start
+ ARM64_BTI = 4,
+ ARM64_MTE = 5,
+ // platform-specific section end
+ GROWSDOWN = 24,
+ GROWSUP = 25,
+}
+
+/// Bits for Map_Flags
+Map_Flags_Bits :: enum {
+ SHARED = 0,
+ PRIVATE = 1,
+ SHARED_VALIDATE = 2,
+ FIXED = 4,
+ ANONYMOUS = 5,
+ // platform-dependent section start
+ X86_32BIT = 6,
+ X86_ABOVE4G = 7,
+ // platform-dependent section end
+ GROWSDOWN = 8,
+ DENYWRITE = 11,
+ EXECUTABLE = 12,
+ LOCKED = 13,
+ NORESERVE = 14,
+ POPULATE = 15,
+ NONBLOCK = 16,
+ STACK = 17,
+ HUGETLB = 18,
+ SYNC = 19,
+ FIXED_NOREPLACE = 20,
+ UNINITIALIZED = 26,
+}
+
+/// Bits for MLock_Flags
+MLock_Flags_Bits :: enum {
+ ONFAULT = 0,
+}
+
+/// Bits for MSync_Flags
+MSync_Flags_Bits :: enum {
+ ASYNC = 0,
+ INVALIDATE = 1,
+ SYNC = 2,
+}
+
+/// Argument for madvice.2
+MAdvice :: enum {
+ NORMAL = 0,
+ RANDOM = 1,
+ SEQUENTIAL = 2,
+ WILLNEED = 3,
+ DONTNEED = 4,
+ FREE = 8,
+ REMOVE = 9,
+ DONTFORK = 10,
+ DOFORK = 11,
+ MERGEABLE = 12,
+ UNMERGEABLE = 13,
+ HUGEPAGE = 14,
+ NOHUGEPAGE = 15,
+ DONTDUMP = 16,
+ DODUMP = 17,
+ WIPEONFORK = 18,
+ KEEPONFORK = 19,
+ COLD = 20,
+ PAGEOUT = 21,
+ POPULATE_READ = 22,
+ POPULATE_WRITE = 23,
+ DONTNEED_LOCKED = 24,
+ COLLAPSE = 25,
+ HWPOISON = 100,
+ SOFT_OFFLINE = 101,
+}
+
+/// Bits for PKey_Access_Rights
+PKey_Access_Bits :: enum {
+ DISABLE_ACCESS = 0,
+ DISABLE_WRITE = 2,
+}
+
+/// Bits for MRemap_Flags
+MRemap_Flags_Bits :: enum {
+ MAYMOVE = 0,
+ FIXED = 1,
+ DONTUNMAP = 2,
+}
+
+/// Bits for Get_Random_Flags
+Get_Random_Flags_Bits :: enum {
+ RANDOM = 0,
+ NONBLOCK = 1,
+ INSECURE = 2,
+}
+
+/// Bits for Perf_Flags
+Perf_Flags_Bits :: enum {
+ FD_NO_GROUP = 0,
+ FD_OUTPUT = 1,
+ PID_CGROUP = 2,
+ FD_CLOEXEC = 3,
+}
+
+/// Union tag for Perf_Event_Attr struct
+Perf_Event_Type :: enum u32 {
+ HARDWARE = 0,
+ SOFTWARE = 1,
+ TRACEPOINT = 2,
+ HW_CACHE = 3,
+ RAW = 4,
+ BREAKPOINT = 5,
+}
+
+Perf_Event_Flags_Bits :: enum u64 {
+ Disabled = 0,
+ Inherit = 1,
+ Pinned = 2,
+ Exclusive = 3,
+ Exclude_User = 4,
+ Exclude_Kernel = 5,
+ Exclude_HV = 6,
+ Exclude_Idle = 7,
+ Mmap = 8,
+ Comm = 9,
+ Freq = 10,
+ Inherit_Stat = 11,
+ Enable_On_Exec = 12,
+ Task = 13,
+ Watermark = 14,
+ Precise_IP_0 = 15,
+ Precise_IP_1 = 16,
+ Mmap_Data = 17,
+ Sample_Id_All = 18,
+ Exclude_Host = 19,
+ Exclude_Guest = 20,
+ Exclude_Callchain_Kernel = 21,
+ Exclude_Callchain_User = 22,
+ Mmap2 = 23,
+ Comm_Exec = 24,
+ Use_Clockid = 25,
+ Context_Switch = 26,
+ Write_Backward = 27,
+ Namespaces = 28,
+ KSymbol = 29,
+ BPF_Event = 30,
+ Aux_Output = 31,
+ CGroup = 32,
+ Text_Poke = 33,
+ Build_Id = 34,
+ Inherit_Thread = 35,
+ Remove_On_Exec = 36,
+ Sigtrap = 37,
+}
+
+Perf_Cap_Flags_Bits :: enum u64 {
+ Bit0 = 0,
+ Bit0_Is_Deprecated = 1,
+ User_Rdpmc = 2,
+ User_Time = 3,
+ User_Time_Zero = 4,
+ User_Time_Short = 5,
+}
+
+/// Specifies the type of the hardware event that you want to get info about
+Perf_Hardware_Id :: enum u64 {
+ CPU_CYCLES = 0,
+ INSTRUCTIONS = 1,
+ CACHE_REFERENCES = 2,
+ CACHE_MISSES = 3,
+ BRANCH_INSTRUCTIONS = 4,
+ BRANCH_MISSES = 5,
+ BUS_CYCLES = 6,
+ STALLED_CYCLES_FRONTEND = 7,
+ STALLED_CYCLES_BACKEND = 8,
+ REF_CPU_CYCLES = 9,
+}
+
+/// Specifies the cache for the particular cache event that you want to get info about
+Perf_Hardware_Cache_Id :: enum u64 {
+ L1D = 0,
+ L1I = 1,
+ LL = 2,
+ DTLB = 3,
+ ITLB = 4,
+ BPU = 5,
+ NODE = 6,
+}
+
+/// Specifies the cache op that you want to get info about
+Perf_Hardware_Cache_Op_Id :: enum u64 {
+ READ = 0,
+ WRITE = 1,
+ PREFETCH = 2,
+}
+
+/// Specifies the cache operation result that you want to get info about
+Perf_Hardware_Cache_Result_Id :: enum u64 {
+ ACCESS = 0,
+ MISS = 1,
+}
+
+/// Specifies the particular software event that you want to get info about
+Perf_Software_Id :: enum u64 {
+ CPU_CLOCK = 0,
+ TASK_CLOCK = 1,
+ PAGE_FAULTS = 2,
+ CONTEXT_SWITCHES = 3,
+ CPU_MIGRATIONS = 4,
+ PAGE_FAULTS_MIN = 5,
+ PAGE_FAULTS_MAJ = 6,
+ ALIGNMENT_FAULTS = 7,
+ EMULATION_FAULTS = 8,
+ DUMMY = 9,
+ BPF_OUTPUT = 10,
+ CGROUP_SWITCHES = 11,
+
+}
+
+/// Specifies which values to include in the sample
+Perf_Event_Sample_Type_Bits :: enum {
+ IP = 0,
+ TID = 1,
+ TIME = 2,
+ ADDR = 3,
+ READ = 4,
+ CALLCHAIN = 5,
+ ID = 6,
+ CPU = 7,
+ PERIOD = 8,
+ STREAM_ID = 9,
+ RAW = 10,
+ BRANCH_STACK = 11,
+ REGS_USER = 12,
+ STACK_USER = 13,
+ WEIGHT = 14,
+ DATA_SRC = 15,
+ IDENTIFIER = 16,
+ TRANSACTION = 17,
+ REGS_INTR = 18,
+ PHYS_ADDR = 19,
+ AUX = 20,
+ CGROUP = 21,
+ DATA_PAGE_SIZE = 22,
+ CODE_PAGE_SIZE = 23,
+ WEIGHT_STRUCT = 24,
+}
+
+/// Describes field sets to include in mmaped page
+Perf_Read_Format :: enum {
+ TOTAL_TIME_ENABLED = 0,
+ TOTAL_TIME_RUNNING = 1,
+ ID = 2,
+ GROUP = 3,
+ LOST = 4,
+}
+
+/// Chooses the breakpoint type
+Hardware_Breakpoint_Type :: enum u32 {
+ EMPTY = 0,
+ R = 1,
+ W = 2,
+ X = 4,
+ RW = R | W,
+ INVALID = RW | X,
+}
+
+/// Bits for Branch_Sample_Type
+Branch_Sample_Type_Bits :: enum {
+ USER = 0,
+ KERNEL = 1,
+ HV = 2,
+ ANY = 3,
+ ANY_CALL = 4,
+ ANY_RETURN = 5,
+ IND_CALL = 6,
+ ABORT_TX = 7,
+ IN_TX = 8,
+ NO_TX = 9,
+ COND = 10,
+ CALL_STACK = 11,
+ IND_JUMP = 12,
+ CALL = 13,
+ NO_FLAGS = 14,
+ NO_CYCLES = 15,
+ TYPE_SAVE = 16,
+ HW_INDEX = 17,
+ PRIV_SAVE = 18,
+}
+
+/// Represent the type of Id
+Id_Type :: enum uint {
+ ALL = 0,
+ PID = 1,
+ PGID = 2,
+ PIDFD = 3,
+}
+
+/// Options for wait syscalls
+Wait_Option :: enum {
+ WNOHANG = 0,
+ WUNTRACED = 1,
+ WSTOPPED = 1,
+ WEXITED = 2,
+ WCONTINUED = 3,
+ WNOWAIT = 24,
+ // // For processes created using clone
+ __WNOTHREAD = 29,
+ __WALL = 30,
+ __WCLONE = 31,
+}
+
+/// Bits for flags for pidfd
+Pid_FD_Flags_Bits :: enum {
+ NONBLOCK = 11,
+}
+
+/// Priority for process, process group, user
+Priority_Which :: enum i32 {
+ PROCESS = 0,
+ PGRP = 1,
+ USER = 2,
+}
+
+Signal :: enum i32 {
+ // POSIX-defined signals
+ SIGINT = 2, // Interactive attention signal.
+ SIGILL = 4, // Illegal instruction.
+ SIGABRT = 6, // Abnormal termination.
+ SIGFPE = 8, // Erroneous arithmetic operation.
+ SIGSEGV = 11, // Invalid access to storage.
+ SIGTERM = 15, // Termination request.
+ // Other POSIX signals
+ SIGHUP = 1, // Hangup.
+ SIGQUIT = 3, // Quit.
+ SIGTRAP = 5, // Trace/breakpoint trap.
+ SIGKILL = 9, // Killed.
+ SIGPIPE = 13, // Broken pipe.
+ SIGALRM = 14, // Alarm clock.
+ // Adjustments needed for most linux systems
+ SIGSTKFLT = 16, // Stack fault (obsolete).
+ SIGPWR = 30, // Power failure imminent.
+ // Historical signals specified by POSIX.
+ SIGBUS = 7, // Bus error.
+ SIGSYS = 31, // Bad system call.
+ // New(er) POSIX signals (1003.1-2008, 1003.1-2013).
+ SIGURG = 23, // Urgent data is available at a socket.
+ SIGSTOP = 19, // Stop, unblockable.
+ SIGTSTP = 20, // Keyboard stop.
+ SIGCONT = 18, // Continue.
+ SIGCHLD = 17, // Child terminated or stopped.
+ SIGTTIN = 21, // Background read from control terminal.
+ SIGTTOU = 22, // Background write to control terminal.
+ SIGPOLL = 29, // Pollable event occurred (System V).
+ SIGXFSZ = 25, // File size limit exceeded.
+ SIGXCPU = 24, // CPU time limit exceeded.
+ SIGVTALRM = 26, // Virtual timer expired.
+ SIGPROF = 27, // Profiling timer expired.
+ SIGUSR1 = 10, // User-defined signal 1.
+ SIGUSR2 = 12, // User-defined signal 2.
+ // Nonstandard signals found in all modern POSIX systems (including both BSD and Linux).
+ SIGWINCH = 28, // Window size change (4.3 BSD, Sun).
+ // Archaic names for compatibility.
+ SIGIO = SIGPOLL, // I/O now possible (4.2 BSD).
+ SIGIOT = SIGABRT, // IOT instruction, abort() on a PDP-11.
+ SIGCLD = SIGCHLD, // Old System V name
+}
+
+Sig_Mask_Kind :: enum i32 {
+ SIG_BLOCK = 0,
+ SIG_UNBLOCK = 1,
+ SIG_SETMASK = 2,
+}
+
+Sig_Stack_Flag :: enum i32 {
+ DISABLE = 0,
+ ONSTACK = 1,
+ AUTODISARM = 31,
+}
+
+/// Type of socket to create
+/// For TCP you want to use SOCK_STREAM
+/// For UDP you want to use SOCK_DGRAM
+/// Also see Protocol
+Socket_Type :: enum {
+ STREAM = 1,
+ DGRAM = 2,
+ RAW = 3,
+ RDM = 4,
+ SEQPACKET = 5,
+ DCCP = 6,
+ PACKET = 10,
+}
+
+/// Bits for Socket_FD_Flags
+Socket_FD_Flags_Bits :: enum {
+ NONBLOCK = 14,
+ CLOEXEC = 25,
+}
+
+/// Protocol family
+Protocol_Family :: enum u16 {
+ UNSPEC = 0,
+ LOCAL = 1,
+ UNIX = LOCAL,
+ FILE = LOCAL,
+ INET = 2,
+ AX25 = 3,
+ IPX = 4,
+ APPLETALK = 5,
+ NETROM = 6,
+ BRIDGE = 7,
+ ATMPVC = 8,
+ X25 = 9,
+ INET6 = 10,
+ ROSE = 11,
+ DECnet = 12,
+ NETBEUI = 13,
+ SECURITY = 14,
+ KEY = 15,
+ NETLINK = 16,
+ ROUTE = NETLINK,
+ PACKET = 17,
+ ASH = 18,
+ ECONET = 19,
+ ATMSVC = 20,
+ RDS = 21,
+ SNA = 22,
+ IRDA = 23,
+ PPPOX = 24,
+ WANPIPE = 25,
+ LLC = 26,
+ IB = 27,
+ MPLS = 28,
+ CAN = 29,
+ TIPC = 30,
+ BLUETOOTH = 31,
+ IUCV = 32,
+ RXRPC = 33,
+ ISDN = 34,
+ PHONET = 35,
+ IEEE802154 = 36,
+ CAIF = 37,
+ ALG = 38,
+ NFC = 39,
+ VSOCK = 40,
+ KCM = 41,
+ QIPCRTR = 42,
+ SMC = 43,
+ XDP = 44,
+ MCTP = 45,
+}
+
+/// The protocol number according to IANA protocol number list
+/// Full list of protocol numbers:
+/// https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
+/// Supported by the OS protocols can be queried by reading:
+/// /etc/protocols
+Protocol :: enum {
+ HOPOPT = 0,
+ ICMP = 1,
+ IGMP = 2,
+ GGP = 3,
+ IPv4 = 4,
+ ST = 5,
+ TCP = 6,
+ CBT = 7,
+ EGP = 8,
+ IGP = 9,
+ BBN_RCC_MON = 10,
+ NVP_II = 11,
+ PUP = 12,
+ EMCON = 14,
+ XNET = 15,
+ CHAOS = 16,
+ UDP = 17,
+ MUX = 18,
+ DCN_MEAS = 19,
+ HMP = 20,
+ PRM = 21,
+ XNS_IDP = 22,
+ TRUNK_1 = 23,
+ TRUNK_2 = 24,
+ LEAF_1 = 25,
+ LEAF_2 = 26,
+ RDP = 27,
+ IRTP = 28,
+ ISO_TP4 = 29,
+ NETBLT = 30,
+ MFE_NSP = 31,
+ MERIT_INP = 32,
+ DCCP = 33,
+ THREE_PC = 34,
+ IDPR = 35,
+ XTP = 36,
+ DDP = 37,
+ IDPR_CMTP = 38,
+ TP_PlusPlus = 39,
+ IL = 40,
+ IPv6 = 41,
+ SDRP = 42,
+ IPv6_Route = 43,
+ IPv6_Frag = 44,
+ IDRP = 45,
+ RSVP = 46,
+ GRE = 47,
+ DSR = 48,
+ BNA = 49,
+ ESP = 50,
+ AH = 51,
+ I_NLSP = 52,
+ NARP = 54,
+ MOBILE = 55,
+ TLSP = 56,
+ SKIP = 57,
+ IPv6_ICMP = 58,
+ IPv6_NoNxt = 59,
+ IPv6_Opts = 60,
+ CFTP = 62,
+ SAT_EXPAK = 64,
+ KRYPTOLAN = 65,
+ RVD = 66,
+ IPPC = 67,
+ SAT_MON = 69,
+ VISA = 70,
+ IPCV = 71,
+ CPNX = 72,
+ CPHB = 73,
+ WSN = 74,
+ PVP = 75,
+ BR_SAT_MON = 76,
+ SUN_ND = 77,
+ WB_MON = 78,
+ WB_EXPAK = 79,
+ ISO_IP = 80,
+ VMTP = 81,
+ SECURE_VMTP = 82,
+ VINES = 83,
+ IPTM = 84,
+ NSFNET_IGP = 85,
+ DGP = 86,
+ TCF = 87,
+ EIGRP = 88,
+ OSPFIGP = 89,
+ Sprite_RPC = 90,
+ LARP = 91,
+ MTP = 92,
+ AX_25 = 93,
+ IPIP = 94,
+ SCC_SP = 96,
+ ETHERIP = 97,
+ ENCAP = 98,
+ GMTP = 100,
+ IFMP = 101,
+ PNNI = 102,
+ PIM = 103,
+ ARIS = 104,
+ SCPS = 105,
+ QNX = 106,
+ A_N = 107,
+ IPComp = 108,
+ SNP = 109,
+ Compaq_Peer = 110,
+ IPX_in_IP = 111,
+ VRRP = 112,
+ PGM = 113,
+ L2TP = 115,
+ DDX = 116,
+ IATP = 117,
+ STP = 118,
+ SRP = 119,
+ UTI = 120,
+ SMP = 121,
+ PTP = 123,
+ FIRE = 125,
+ CRTP = 126,
+ CRUDP = 127,
+ SSCOPMCE = 128,
+ IPLT = 129,
+ SPS = 130,
+ PIPE = 131,
+ SCTP = 132,
+ FC = 133,
+ RSVP_E2E_IGNORE = 134,
+ UDPLite = 136,
+ MPLS_in_IP = 137,
+ manet = 138,
+ HIP = 139,
+ Shim6 = 140,
+ WESP = 141,
+ ROHC = 142,
+ Ethernet = 143,
+ AGGFRAG = 144,
+ NSH = 145,
+ Reserved = 255,
+}
+
+/// API Level for get/setsockopt.2
+Socket_API_Level :: enum {
+ // Comes from <bits/socket-constants.h>
+ SOCKET = 1,
+ // Copy-pasted from protocol numbers
+ TCP = 6,
+ UDP = 17,
+ // Comes from <bits/socket.h>
+ RAW = 255,
+ DECNET = 261,
+ X25 = 262,
+ PACKET = 263,
+ ATM = 264,
+ AAL = 265,
+ IRDA = 266,
+ NETBEUI = 267,
+ LLC = 268,
+ DCCP = 269,
+ NETLINK = 270,
+ TIPC = 271,
+ RXRPC = 272,
+ PPPOL2TP = 273,
+ BLUETOOTH = 274,
+ PNPIPE = 275,
+ RDS = 276,
+ IUCV = 277,
+ CAIF = 278,
+ ALG = 279,
+ NFC = 280,
+ KCM = 281,
+ TLS = 282,
+ XDP = 283,
+ MPTCP = 284,
+ MCTP = 285,
+ SMC = 286,
+}
+
+/// If Socket_API_Level == .SOCKET, these are the options
+/// you can specify in get/setsockopt.2
+Socket_Option :: enum {
+ DEBUG = 1,
+ REUSEADDR = 2,
+ TYPE = 3,
+ ERROR = 4,
+ DONTROUTE = 5,
+ BROADCAST = 6,
+ SNDBUF = 7,
+ RCVBUF = 8,
+ SNDBUFFORCE = 32,
+ RCVBUFFORCE = 33,
+ KEEPALIVE = 9,
+ OOBINLINE = 10,
+ NO_CHECK = 11,
+ PRIORITY = 12,
+ LINGER = 13,
+ BSDCOMPAT = 14,
+ REUSEPORT = 15,
+ PASSCRED = 16,
+ PEERCRED = 17,
+ RCVLOWAT = 18,
+ SNDLOWAT = 19,
+ RCVTIMEO_OLD = 20,
+ SNDTIMEO_OLD = 21,
+ SECURITY_AUTHENTICATION = 22,
+ SECURITY_ENCRYPTION_TRANSPORT = 23,
+ SECURITY_ENCRYPTION_NETWORK = 24,
+ BINDTODEVICE = 25,
+ ATTACH_FILTER = 26,
+ DETACH_FILTER = 27,
+ GET_FILTER = ATTACH_FILTER,
+ PEERNAME = 28,
+ ACCEPTCONN = 30,
+ PEERSEC = 31,
+ PASSSEC = 34,
+ MARK = 36,
+ PROTOCOL = 38,
+ DOMAIN = 39,
+ RXQ_OVFL = 40,
+ WIFI_STATUS = 41,
+ PEEK_OFF = 42,
+ NOFCS = 43,
+ LOCK_FILTER = 44,
+ SELECT_ERR_QUEUE = 45,
+ BUSY_POLL = 46,
+ MAX_PACING_RATE = 47,
+ BPF_EXTENSIONS = 48,
+ INCOMING_CPU = 49,
+ ATTACH_BPF = 50,
+ DETACH_BPF = DETACH_FILTER,
+ ATTACH_REUSEPORT_CBPF = 51,
+ ATTACH_REUSEPORT_EBPF = 52,
+ CNX_ADVICE = 53,
+ TIMESTAMPING_OPT_STATS = 54,
+ MEMINFO = 55,
+ INCOMING_NAPI_ID = 56,
+ COOKIE = 57,
+ TIMESTAMPING_PKTINFO = 58,
+ PEERGROUPS = 59,
+ ZEROCOPY = 60,
+ TXTIME = 61,
+ BINDTOIFINDEX = 62,
+ TIMESTAMP_OLD = 29,
+ TIMESTAMPNS_OLD = 35,
+ TIMESTAMPING_OLD = 37,
+ TIMESTAMP_NEW = 63,
+ TIMESTAMPNS_NEW = 64,
+ TIMESTAMPING_NEW = 65,
+ RCVTIMEO_NEW = 66,
+ SNDTIMEO_NEW = 67,
+ DETACH_REUSEPORT_BPF = 68,
+ PREFER_BUSY_POLL = 69,
+ BUSY_POLL_BUDGET = 70,
+ NETNS_COOKIE = 71,
+ BUF_LOCK = 72,
+ RESERVE_MEM = 73,
+ TXREHASH = 74,
+ RCVMARK = 75,
+ // Hardcoded 64-bit Time. It's time to move on.
+ TIMESTAMP = TIMESTAMP_NEW,
+ TIMESTAMPNS = TIMESTAMPNS_NEW,
+ TIMESTAMPING = TIMESTAMPING_NEW,
+ RCVTIMEO = RCVTIMEO_NEW,
+ SNDTIMEO = SNDTIMEO_NEW,
+}
+
+Socket_UDP_Option :: enum {
+ CORK = 1,
+ ENCAP = 100,
+ NO_CHECK6_TX = 101,
+ NO_CHECK6_RX = 102,
+ SEGMENT = 103,
+ GRO = 104,
+}
+
+UPD_Encapsulation :: enum {
+ ENCAP_ESPINUDP_NON_IKE = 1,
+ ENCAP_ESPINUDP = 2,
+ ENCAP_L2TPINUDP = 3,
+ ENCAP_GTP0 = 4,
+ ENCAP_GTP1U = 5,
+}
+
+Socket_TCP_Option :: enum {
+ NODELAY = 1,
+ MAXSEG = 2,
+ CORK = 3,
+ KEEPIDLE = 4,
+ KEEPINTVL = 5,
+ KEEPCNT = 6,
+ SYNCNT = 7,
+ LINGER2 = 8,
+ DEFER_ACCEPT = 9,
+ WINDOW_CLAMP = 10,
+ INFO = 11,
+ QUICKACK = 12,
+ CONGESTION = 13,
+ MD5SIG = 14,
+ COOKIE_TRANSACTIONS = 15,
+ THIN_LINEAR_TIMEOUTS = 16,
+ THIN_DUPACK = 17,
+ USER_TIMEOUT = 18,
+ REPAIR = 19,
+ REPAIR_QUEUE = 20,
+ QUEUE_SEQ = 21,
+ REPAIR_OPTIONS = 22,
+ FASTOPEN = 23,
+ TIMESTAMP = 24,
+ NOTSENT_LOWAT = 25,
+ CC_INFO = 26,
+ SAVE_SYN = 27,
+ SAVED_SYN = 28,
+ REPAIR_WINDOW = 29,
+ FASTOPEN_CONNECT = 30,
+ ULP = 31,
+ MD5SIG_EXT = 32,
+ FASTOPEN_KEY = 33,
+ FASTOPEN_NO_COOKIE = 34,
+ ZEROCOPY_RECEIVE = 35,
+ INQ = 36,
+ CM_INQ = INQ,
+ TX_DELAY = 37,
+}
+
+/// Bits for Socket_Msg
+Socket_Msg_Bits :: enum {
+ OOB = 0,
+ PEEK = 1,
+ DONTROUTE = 2,
+ TRYHARD = DONTROUTE,
+ CTRUNC = 3,
+ PROXY = 4,
+ TRUNC = 5,
+ DONTWAIT = 6,
+ EOR = 7,
+ WAITALL = 8,
+ FIN = 9,
+ SYN = 10,
+ CONFIRM = 11,
+ RST = 12,
+ ERRQUEUE = 13,
+ NOSIGNAL = 14,
+ MORE = 15,
+ WAITFORONE = 16,
+ BATCH = 18,
+ ZEROCOPY = 22,
+ FASTOPEN = 29,
+ CMSG_CLOEXEC = 30,
+}
+
+/// Argument to shutdown.2
+Shutdown_How :: enum i32 {
+ RD = 0,
+ WR = 1,
+ RDWR = 2,
+}
+
+/// Second argument to futex.2 syscall
+Futex_Op :: enum u32 {
+ WAIT = 0,
+ WAKE = 1,
+ FD = 2,
+ REQUEUE = 3,
+ CMP_REQUEUE = 4,
+ WAKE_OP = 5,
+ LOCK_PI = 6,
+ UNLOCK_PI = 7,
+ TRYLOCK_PI = 8,
+ WAIT_BITSET = 9,
+ WAKE_BITSET = 10,
+ WAIT_REQUEUE_PI = 11,
+ CMP_REQUEUE_PI = 12,
+ LOCK_PI2 = 13,
+}
+
+/// Bits for Futex_Flags
+Futex_Flags_Bits :: enum {
+ PRIVATE = 7,
+ REALTIME = 8,
+}
+
+/// Kind of operation on futex, see FUTEX_WAKE_OP
+Futex_Arg_Op :: enum {
+ SET = 0, /* uaddr2 = oparg; */
+ ADD = 1, /* uaddr2 += oparg; */
+ OR = 2, /* uaddr2 |= oparg; */
+ ANDN = 3, /* uaddr2 &= ~oparg; */
+ XOR = 4, /* uaddr2 ^= oparg; */
+ PO2_SET = 0, /* uaddr2 = 1<<oparg; */
+ PO2_ADD = 1, /* uaddr2 += 1<<oparg; */
+ PO2_OR = 2, /* uaddr2 |= 1<<oparg; */
+ PO2_ANDN = 3, /* uaddr2 &= ~(1<<oparg); */
+ PO2_XOR = 4, /* uaddr2 ^= 1<<oparg; */
+}
+
+/// Kind of comparison operation on futex, see FUTEX_WAKE_OP
+Futex_Cmp_Op :: enum {
+ EQ = 0, /* if (oldval == cmparg) wake */
+ NE = 1, /* if (oldval != cmparg) wake */
+ LT = 2, /* if (oldval < cmparg) wake */
+ LE = 3, /* if (oldval <= cmparg) wake */
+ GT = 4, /* if (oldval > cmparg) wake */
+ GE = 5, /* if (oldval >= cmparg) wake */
+}
+
+/// The kind of resource limits
+RLimit_Kind :: enum i32 {
+ CPU = 0,
+ FSIZE = 1,
+ DATA = 2,
+ STACK = 3,
+ CORE = 4,
+ RSS = 5,
+ NOFILE = 7,
+ AS = 9,
+ NPROC = 6,
+ MEMLOCK = 8,
+ LOCKS = 10,
+ SIGPENDING = 11,
+ MSGQUEUE = 12,
+ NICE = 13,
+ RTPRIO = 14,
+ RTTIME = 15,
+ NLIMITS = 16,
+}
+
+/// Represents the user of resources
+RUsage_Who :: enum i32 {
+ CHILDREN = -1,
+ SELF = 0,
+ THREAD = 1,
+ LWP = THREAD,
+}
+
+/// Bits for Personality_Flags
+UNAME26 :: 17
+ADDR_NO_RANDOMIZE :: 18
+FDPIC_FUNCPTRS :: 19
+MMAP_PAGE_ZERO :: 20
+ADDR_COMPAT_LAYOUT :: 21
+READ_IMPLIES_EXEC :: 22
+ADDR_LIMIT_32BIT :: 23
+SHORT_INODE :: 24
+WHOLE_SECONDS :: 25
+STICKY_TIMEOUTS :: 26
+ADDR_LIMIT_3GB :: 27
+
+/// Personality type
+/// These go into the bottom 8 bits of the personality value
+PER_LINUX :: 0x0000
+PER_LINUX_32BIT :: 0x0000 | ADDR_LIMIT_32BIT
+PER_LINUX_FDPIC :: 0x0000 | FDPIC_FUNCPTRS
+PER_SVR4 :: 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO
+PER_SVR3 :: 0x0002 | STICKY_TIMEOUTS | SHORT_INODE
+PER_SCOSVR3 :: 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE
+PER_OSR5 :: 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS
+PER_WYSEV386 :: 0x0004 | STICKY_TIMEOUTS | SHORT_INODE
+PER_ISCR4 :: 0x0005 | STICKY_TIMEOUTS
+PER_BSD :: 0x0006
+PER_SUNOS :: 0x0006 | STICKY_TIMEOUTS
+PER_XENIX :: 0x0007 | STICKY_TIMEOUTS | SHORT_INODE
+PER_LINUX32 :: 0x0008
+PER_LINUX32_3GB :: 0x0008 | ADDR_LIMIT_3GB
+PER_IRIX32 :: 0x0009 | STICKY_TIMEOUTS
+PER_IRIXN32 :: 0x000a | STICKY_TIMEOUTS
+PER_IRIX64 :: 0x000b | STICKY_TIMEOUTS
+PER_RISCOS :: 0x000c
+PER_SOLARIS :: 0x000d | STICKY_TIMEOUTS
+PER_UW7 :: 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO
+PER_OSF4 :: 0x000f
+PER_HPUX :: 0x0010
+PER_MASK :: 0x00ff
+