bits.odin 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966
  1. package linux
  2. import "base:intrinsics"
  3. @(private)
  4. log2 :: intrinsics.constant_log2
  5. /*
  6. Represents an error returned by most of syscalls
  7. */
  8. Errno :: enum i32 {
  9. NONE = 0,
  10. // Errno-base
  11. EPERM = 1,
  12. ENOENT = 2,
  13. ESRCH = 3,
  14. EINTR = 4,
  15. EIO = 5,
  16. ENXIO = 6,
  17. E2BIG = 7,
  18. ENOEXEC = 8,
  19. EBADF = 9,
  20. ECHILD = 10,
  21. EAGAIN = 11,
  22. ENOMEM = 12,
  23. EACCES = 13,
  24. EFAULT = 14,
  25. ENOTBLK = 15,
  26. EBUSY = 16,
  27. EEXIST = 17,
  28. EXDEV = 18,
  29. ENODEV = 19,
  30. ENOTDIR = 20,
  31. EISDIR = 21,
  32. EINVAL = 22,
  33. ENFILE = 23,
  34. EMFILE = 24,
  35. ENOTTY = 25,
  36. ETXTBSY = 26,
  37. EFBIG = 27,
  38. ENOSPC = 28,
  39. ESPIPE = 29,
  40. EROFS = 30,
  41. EMLINK = 31,
  42. EPIPE = 32,
  43. EDOM = 33,
  44. ERANGE = 34,
  45. // Linux
  46. EDEADLK = 35,
  47. ENAMETOOLONG = 36,
  48. ENOLCK = 37,
  49. ENOSYS = 38,
  50. ENOTEMPTY = 39,
  51. ELOOP = 40,
  52. EUNKNOWN_41 = 41,
  53. ENOMSG = 42,
  54. EIDRM = 43,
  55. ECHRNG = 44,
  56. EL2NSYNC = 45,
  57. EL3HLT = 46,
  58. EL3RST = 47,
  59. ELNRNG = 48,
  60. EUNATCH = 49,
  61. ENOCSI = 50,
  62. EL2HLT = 51,
  63. EBADE = 52,
  64. EBADR = 53,
  65. EXFULL = 54,
  66. ENOANO = 55,
  67. EBADRQC = 56,
  68. EBADSLT = 57,
  69. EUNKNOWN_58 = 58,
  70. EBFONT = 59,
  71. ENOSTR = 60,
  72. ENODATA = 61,
  73. ETIME = 62,
  74. ENOSR = 63,
  75. ENONET = 64,
  76. ENOPKG = 65,
  77. EREMOTE = 66,
  78. ENOLINK = 67,
  79. EADV = 68,
  80. ESRMNT = 69,
  81. ECOMM = 70,
  82. EPROTO = 71,
  83. EMULTIHOP = 72,
  84. EDOTDOT = 73,
  85. EBADMSG = 74,
  86. EOVERFLOW = 75,
  87. ENOTUNIQ = 76,
  88. EBADFD = 77,
  89. EREMCHG = 78,
  90. ELIBACC = 79,
  91. ELIBBAD = 80,
  92. ELIBSCN = 81,
  93. ELIBMAX = 82,
  94. ELIBEXEC = 83,
  95. EILSEQ = 84,
  96. ERESTART = 85,
  97. ESTRPIPE = 86,
  98. EUSERS = 87,
  99. ENOTSOCK = 88,
  100. EDESTADDRREQ = 89,
  101. EMSGSIZE = 90,
  102. EPROTOTYPE = 91,
  103. ENOPROTOOPT = 92,
  104. EPROTONOSUPPORT = 93,
  105. ESOCKTNOSUPPORT = 94,
  106. EOPNOTSUPP = 95,
  107. EPFNOSUPPORT = 96,
  108. EAFNOSUPPORT = 97,
  109. EADDRINUSE = 98,
  110. EADDRNOTAVAIL = 99,
  111. ENETDOWN = 100,
  112. ENETUNREACH = 101,
  113. ENETRESET = 102,
  114. ECONNABORTED = 103,
  115. ECONNRESET = 104,
  116. ENOBUFS = 105,
  117. EISCONN = 106,
  118. ENOTCONN = 107,
  119. ESHUTDOWN = 108,
  120. ETOOMANYREFS = 109,
  121. ETIMEDOUT = 110,
  122. ECONNREFUSED = 111,
  123. EHOSTDOWN = 112,
  124. EHOSTUNREACH = 113,
  125. EALREADY = 114,
  126. EINPROGRESS = 115,
  127. ESTALE = 116,
  128. EUCLEAN = 117,
  129. ENOTNAM = 118,
  130. ENAVAIL = 119,
  131. EISNAM = 120,
  132. EREMOTEIO = 121,
  133. EDQUOT = 122,
  134. ENOMEDIUM = 123,
  135. EMEDIUMTYPE = 124,
  136. ECANCELED = 125,
  137. ENOKEY = 126,
  138. EKEYEXPIRED = 127,
  139. EKEYREVOKED = 128,
  140. EKEYREJECTED = 129,
  141. EOWNERDEAD = 130,
  142. ENOTRECOVERABLE = 131,
  143. ERFKILL = 132,
  144. EHWPOISON = 133,
  145. // Errno aliases
  146. EWOULDBLOCK = EAGAIN,
  147. EDEADLOCK = EDEADLK,
  148. }
  149. /*
  150. Bits for Open_Flags.
  151. RDONLY flag is not present, because it has the value of 0, i.e. it is the
  152. default, unless WRONLY or RDWR is specified.
  153. */
  154. when ODIN_ARCH != .arm64 && ODIN_ARCH != .arm32 {
  155. Open_Flags_Bits :: enum {
  156. WRONLY = 0,
  157. RDWR = 1,
  158. CREAT = 6,
  159. EXCL = 7,
  160. NOCTTY = 8,
  161. TRUNC = 9,
  162. APPEND = 10,
  163. NONBLOCK = 11,
  164. DSYNC = 12,
  165. ASYNC = 13,
  166. DIRECT = 14,
  167. LARGEFILE = 15,
  168. DIRECTORY = 16,
  169. NOFOLLOW = 17,
  170. NOATIME = 18,
  171. CLOEXEC = 19,
  172. PATH = 21,
  173. }
  174. // https://github.com/torvalds/linux/blob/7367539ad4b0f8f9b396baf02110962333719a48/include/uapi/asm-generic/fcntl.h#L19
  175. #assert(1 << uint(Open_Flags_Bits.WRONLY) == 0o0000000_1)
  176. #assert(1 << uint(Open_Flags_Bits.RDWR) == 0o0000000_2)
  177. #assert(1 << uint(Open_Flags_Bits.CREAT) == 0o00000_100)
  178. #assert(1 << uint(Open_Flags_Bits.EXCL) == 0o00000_200)
  179. #assert(1 << uint(Open_Flags_Bits.NOCTTY) == 0o00000_400)
  180. #assert(1 << uint(Open_Flags_Bits.TRUNC) == 0o0000_1000)
  181. #assert(1 << uint(Open_Flags_Bits.APPEND) == 0o0000_2000)
  182. #assert(1 << uint(Open_Flags_Bits.NONBLOCK) == 0o0000_4000)
  183. #assert(1 << uint(Open_Flags_Bits.DSYNC) == 0o000_10000)
  184. #assert(1 << uint(Open_Flags_Bits.ASYNC) == 0o000_20000)
  185. #assert(1 << uint(Open_Flags_Bits.DIRECT) == 0o000_40000)
  186. #assert(1 << uint(Open_Flags_Bits.LARGEFILE) == 0o00_100000)
  187. #assert(1 << uint(Open_Flags_Bits.DIRECTORY) == 0o00_200000)
  188. #assert(1 << uint(Open_Flags_Bits.NOFOLLOW) == 0o00_400000)
  189. #assert(1 << uint(Open_Flags_Bits.NOATIME) == 0o0_1000000)
  190. #assert(1 << uint(Open_Flags_Bits.CLOEXEC) == 0o0_2000000)
  191. #assert(1 << uint(Open_Flags_Bits.PATH) == 0o_10000000)
  192. } else {
  193. Open_Flags_Bits :: enum {
  194. WRONLY = 0,
  195. RDWR = 1,
  196. CREAT = 6,
  197. EXCL = 7,
  198. NOCTTY = 8,
  199. TRUNC = 9,
  200. APPEND = 10,
  201. NONBLOCK = 11,
  202. DSYNC = 12,
  203. ASYNC = 13,
  204. DIRECTORY = 14,
  205. NOFOLLOW = 15,
  206. DIRECT = 16,
  207. LARGEFILE = 17,
  208. NOATIME = 18,
  209. CLOEXEC = 19,
  210. PATH = 21,
  211. }
  212. }
  213. /*
  214. Bits for FD_Flags bitset
  215. */
  216. FD_Flags_Bits :: enum {
  217. SYMLINK_NOFOLLOW = 8,
  218. REMOVEDIR = 9,
  219. EACCESS = 9,
  220. SYMLINK_FOLLOW = 10,
  221. NO_AUTOMOUNT = 11,
  222. EMPTY_PATH = 12,
  223. STATX_FORCE_SYNC = 13,
  224. STATX_DONT_SYNC = 14,
  225. RECURSIVE = 15,
  226. }
  227. /*
  228. The bits for the Mode bitset.
  229. */
  230. Mode_Bits :: enum {
  231. IXOTH = 0, // 0o0000001
  232. IWOTH = 1, // 0o0000002
  233. IROTH = 2, // 0o0000004
  234. IXGRP = 3, // 0o0000010
  235. IWGRP = 4, // 0o0000020
  236. IRGRP = 5, // 0o0000040
  237. IXUSR = 6, // 0o0000100
  238. IWUSR = 7, // 0o0000200
  239. IRUSR = 8, // 0o0000400
  240. ISVTX = 9, // 0o0001000
  241. ISGID = 10, // 0o0002000
  242. ISUID = 11, // 0o0004000
  243. IFIFO = 12, // 0o0010000
  244. IFCHR = 13, // 0o0020000
  245. IFDIR = 14, // 0o0040000
  246. IFREG = 15, // 0o0100000
  247. }
  248. /*
  249. The bits used by the Statx_Mask bitset
  250. */
  251. Statx_Mask_Bits :: enum {
  252. TYPE = 0,
  253. MODE = 1,
  254. NLINK = 2,
  255. UID = 3,
  256. GID = 4,
  257. ATIME = 5,
  258. MTIME = 6,
  259. CTIME = 7,
  260. INO = 8,
  261. SIZE = 9,
  262. BLOCKS = 10,
  263. BTIME = 11,
  264. MNT_ID = 12,
  265. DIOALIGN = 13,
  266. }
  267. /*
  268. Bits found in Statx_Attr bitset
  269. You should not use these directly
  270. */
  271. Statx_Attr_Bits :: enum {
  272. COMPRESSED = 2, // 0x00000004
  273. IMMUTABLE = 4, // 0x00000010
  274. APPEND = 5, // 0x00000020
  275. NODUMP = 6, // 0x00000040
  276. ENCRYPTED = 11, // 0x00000800
  277. AUTOMOUNT = 12, // 0x00001000
  278. MOUNT_ROOT = 13, // 0x00002000
  279. VERITY = 20, // 0x00100000
  280. DAX = 21, // 0x00200000
  281. }
  282. /*
  283. Magic bits for filesystems returned by Stat_FS
  284. */
  285. FS_Magic :: enum u32 {
  286. ADFS_SUPER_MAGIC = 0xadf5,
  287. AFFS_SUPER_MAGIC = 0xadff,
  288. AFS_SUPER_MAGIC = 0x5346414f,
  289. ANON_INODE_FS_MAGIC = 0x09041934,
  290. AUTOFS_SUPER_MAGIC = 0x0187,
  291. BDEVFS_MAGIC = 0x62646576,
  292. BEFS_SUPER_MAGIC = 0x42465331,
  293. BFS_MAGIC = 0x1badface,
  294. BINFMTFS_MAGIC = 0x42494e4d,
  295. BPF_FS_MAGIC = 0xcafe4a11,
  296. BTRFS_SUPER_MAGIC = 0x9123683e,
  297. BTRFS_TEST_MAGIC = 0x73727279,
  298. CGROUP_SUPER_MAGIC = 0x27e0eb,
  299. CGROUP2_SUPER_MAGIC = 0x63677270,
  300. CIFS_MAGIC_NUMBER = 0xff534d42,
  301. CODA_SUPER_MAGIC = 0x73757245,
  302. COH_SUPER_MAGIC = 0x012ff7b7,
  303. CRAMFS_MAGIC = 0x28cd3d45,
  304. DEBUGFS_MAGIC = 0x64626720,
  305. DEVFS_SUPER_MAGIC = 0x1373,
  306. DEVPTS_SUPER_MAGIC = 0x1cd1,
  307. ECRYPTFS_SUPER_MAGIC = 0xf15f,
  308. EFIVARFS_MAGIC = 0xde5e81e4,
  309. EFS_SUPER_MAGIC = 0x00414a53,
  310. EXT_SUPER_MAGIC = 0x137d,
  311. EXT2_OLD_SUPER_MAGIC = 0xef51,
  312. EXT2_SUPER_MAGIC = 0xef53,
  313. EXT3_SUPER_MAGIC = 0xef53,
  314. EXT4_SUPER_MAGIC = 0xef53,
  315. F2FS_SUPER_MAGIC = 0xf2f52010,
  316. FUSE_SUPER_MAGIC = 0x65735546,
  317. FUTEXFS_SUPER_MAGIC = 0xbad1dea,
  318. HFS_SUPER_MAGIC = 0x4244,
  319. HOSTFS_SUPER_MAGIC = 0x00c0ffee,
  320. HPFS_SUPER_MAGIC = 0xf995e849,
  321. HUGETLBFS_MAGIC = 0x958458f6,
  322. ISOFS_SUPER_MAGIC = 0x9660,
  323. JFFS2_SUPER_MAGIC = 0x72b6,
  324. JFS_SUPER_MAGIC = 0x3153464a,
  325. MINIX_SUPER_MAGIC = 0x137f,
  326. MINIX_SUPER_MAGIC2 = 0x138f,
  327. MINIX2_SUPER_MAGIC = 0x2468,
  328. MINIX2_SUPER_MAGIC2 = 0x2478,
  329. MINIX3_SUPER_MAGIC = 0x4d5a,
  330. MQUEUE_MAGIC = 0x19800202,
  331. MSDOS_SUPER_MAGIC = 0x4d44,
  332. MTD_INODE_FS_MAGIC = 0x11307854,
  333. NCP_SUPER_MAGIC = 0x564c,
  334. NFS_SUPER_MAGIC = 0x6969,
  335. NILFS_SUPER_MAGIC = 0x3434,
  336. NSFS_MAGIC = 0x6e736673,
  337. NTFS_SB_MAGIC = 0x5346544e,
  338. OCFS2_SUPER_MAGIC = 0x7461636f,
  339. OPENPROM_SUPER_MAGIC = 0x9fa1,
  340. OVERLAYFS_SUPER_MAGIC = 0x794c7630,
  341. PIPEFS_MAGIC = 0x50495045,
  342. PROC_SUPER_MAGIC = 0x9fa0,
  343. PSTOREFS_MAGIC = 0x6165676c,
  344. QNX4_SUPER_MAGIC = 0x002f,
  345. QNX6_SUPER_MAGIC = 0x68191122,
  346. RAMFS_MAGIC = 0x858458f6,
  347. REISERFS_SUPER_MAGIC = 0x52654973,
  348. ROMFS_MAGIC = 0x7275,
  349. SECURITYFS_MAGIC = 0x73636673,
  350. SELINUX_MAGIC = 0xf97cff8c,
  351. SMACK_MAGIC = 0x43415d53,
  352. SMB_SUPER_MAGIC = 0x517b,
  353. SMB2_MAGIC_NUMBER = 0xfe534d42,
  354. SOCKFS_MAGIC = 0x534f434b,
  355. SQUASHFS_MAGIC = 0x73717368,
  356. SYSFS_MAGIC = 0x62656572,
  357. SYSV2_SUPER_MAGIC = 0x012ff7b6,
  358. SYSV4_SUPER_MAGIC = 0x012ff7b5,
  359. TMPFS_MAGIC = 0x01021994,
  360. TRACEFS_MAGIC = 0x74726163,
  361. UDF_SUPER_MAGIC = 0x15013346,
  362. UFS_MAGIC = 0x00011954,
  363. USBDEVICE_SUPER_MAGIC = 0x9fa2,
  364. V9FS_MAGIC = 0x01021997,
  365. VXFS_SUPER_MAGIC = 0xa501fcf5,
  366. XENFS_SUPER_MAGIC = 0xabba1974,
  367. XENIX_SUPER_MAGIC = 0x012ff7b4,
  368. XFS_SUPER_MAGIC = 0x58465342,
  369. _XIAFS_SUPER_MAGIC = 0x012fd16d,
  370. }
  371. /*
  372. Bits for FS_Flags bitset
  373. */
  374. FS_Flags_Bits :: enum {
  375. RDONLY = 0,
  376. NOSUID = 1,
  377. NODEV = 2,
  378. NOEXEC = 3,
  379. SYNCHRONOUS = 4,
  380. VALID = 5,
  381. MANDLOCK = 6,
  382. NOATIME = 10,
  383. NODIRATIME = 11,
  384. RELATIME = 12,
  385. NOSYMFOLLOW = 13,
  386. }
  387. Seek_Whence :: enum i16 {
  388. SET = 0,
  389. CUR = 1,
  390. END = 2,
  391. DATA = 3,
  392. HOLE = 4,
  393. }
  394. /*
  395. Bits for Close_Range_Flags
  396. */
  397. Close_Range_Flags_Bits :: enum {
  398. CLOEXEC = 2,
  399. UNSHARE = 1,
  400. }
  401. /*
  402. Bits for Rename_Flags
  403. */
  404. Rename_Flags_Bits :: enum {
  405. EXCHANGE = 1,
  406. NOREPLACE = 0,
  407. WHITEOUT = 2,
  408. }
  409. /*
  410. Type of the file in a directory entry
  411. */
  412. Dirent_Type :: enum u8 {
  413. UNKNOWN = 0,
  414. FIFO = 1,
  415. CHR = 2,
  416. DIR = 4,
  417. BLK = 6,
  418. REG = 8,
  419. LNK = 10,
  420. SOCK = 12,
  421. WHT = 14,
  422. }
  423. /*
  424. Type of a lock for fcntl(2)
  425. */
  426. FLock_Type :: enum i16 {
  427. RDLCK = 0,
  428. WRLCK = 1,
  429. UNLCK = 2,
  430. }
  431. /*
  432. Bits for FD_Notifications
  433. */
  434. FD_Notifications_Bits :: enum {
  435. ACCESS = 0,
  436. MODIFY = 1,
  437. CREATE = 2,
  438. DELETE = 3,
  439. RENAME = 4,
  440. ATTRIB = 5,
  441. MULTISHOT = 31,
  442. }
  443. /*
  444. Bits for seal
  445. */
  446. Seal_Bits :: enum {
  447. SEAL = 0,
  448. SHRINK = 1,
  449. GROW = 2,
  450. WRITE = 3,
  451. FUTURE_WRITE = 4,
  452. }
  453. RW_Hint :: enum u64 {
  454. WRITE_LIFE_NOT_SET = 0,
  455. WRITE_LIFE_NONE = 1,
  456. WRITE_LIFE_SHORT = 2,
  457. WRITE_LIFE_MEDIUM = 3,
  458. WRITE_LIFE_LONG = 4,
  459. WRITE_LIFE_EXTREME = 5,
  460. }
  461. FD_Lease :: enum {
  462. RDLCK = 0,
  463. WRLCK = 1,
  464. UNLCK = 2,
  465. }
  466. /*
  467. Kind of owner for FD_Owner
  468. */
  469. F_Owner_Type :: enum i32 {
  470. OWNER_TID = 0,
  471. OWNER_PID = 1,
  472. OWNER_PGRP = 2,
  473. }
  474. /*
  475. Command for fcntl(2)
  476. */
  477. FCntl_Command :: enum {
  478. DUPFD = 0,
  479. GETFD = 1,
  480. SETFD = 2,
  481. GETFL = 3,
  482. SETFL = 4,
  483. GETLK = 5,
  484. SETLK = 6,
  485. SETLKW = 7,
  486. SETOWN = 8,
  487. GETOWN = 9,
  488. SETSIG = 10,
  489. GETSIG = 11,
  490. SETOWN_EX = 15,
  491. GETOWN_EX = 16,
  492. // OFD_GETLK = 36,
  493. // OFD_SETLK = 37,
  494. // OFD_SETLKW = 38,
  495. SETLEASE = 1024,
  496. GETLEASE = 1025,
  497. NOTIFY = 1026,
  498. DUPFD_CLOEXEC = 1030,
  499. SETPIPE_SZ = 1031,
  500. GETPIPE_SZ = 1032,
  501. ADD_SEALS = 1033,
  502. GET_SEALS = 1034,
  503. GET_RW_HINT = 1035,
  504. SET_RW_HINT = 1036,
  505. GET_FILE_RW_HINT = 1037,
  506. SET_FILE_RW_HINT = 1038,
  507. // F_OK = 0,
  508. }
  509. Fd_Poll_Events_Bits :: enum {
  510. IN = 0,
  511. PRI = 1,
  512. OUT = 2,
  513. ERR = 3,
  514. HUP = 4,
  515. NVAL = 5,
  516. RDNORM = 6,
  517. RDBAND = 7,
  518. WRNORM = 8,
  519. WRBAND = 9,
  520. MSG = 10,
  521. REMOVE = 12,
  522. RDHUP = 13,
  523. }
  524. Inotify_Init_Bits :: enum {
  525. NONBLOCK = 11,
  526. CLOEXEC = 19,
  527. }
  528. Inotify_Event_Bits :: enum u32 {
  529. ACCESS = 0,
  530. MODIFY = 1,
  531. ATTRIB = 2,
  532. CLOSE_WRITE = 3,
  533. CLOSE_NOWRITE = 4,
  534. OPEN = 5,
  535. MOVED_FROM = 6,
  536. MOVED_TO = 7,
  537. CREATE = 8,
  538. DELETE = 9,
  539. DELETE_SELF = 10,
  540. MOVE_SELF = 11,
  541. UNMOUNT = 13,
  542. Q_OVERFLOW = 14,
  543. IGNORED = 15,
  544. ONLYDIR = 24,
  545. DONT_FOLLOW = 25,
  546. EXCL_UNLINK = 26,
  547. MASK_CREATE = 28,
  548. MASK_ADD = 29,
  549. ISDIR = 30,
  550. ONESHOT = 31,
  551. }
  552. /*
  553. Bits for Mem_Protection bitfield
  554. */
  555. Mem_Protection_Bits :: enum {
  556. READ = 0,
  557. WRITE = 1,
  558. EXEC = 2,
  559. SEM = 3,
  560. // platform-specific section start
  561. ARM64_BTI = 4,
  562. ARM64_MTE = 5,
  563. // platform-specific section end
  564. GROWSDOWN = 24,
  565. GROWSUP = 25,
  566. }
  567. /*
  568. Bits for Map_Flags
  569. See `constants.odin` for `MAP_SHARED_VALIDATE` and `MAP_HUGE_16KB`, et al.
  570. */
  571. Map_Flags_Bits :: enum {
  572. SHARED = 0,
  573. PRIVATE = 1,
  574. DROPPABLE = 3,
  575. FIXED = 4,
  576. ANONYMOUS = 5,
  577. // platform-dependent section start
  578. X86_32BIT = 6,
  579. X86_ABOVE4G = 7,
  580. // platform-dependent section end
  581. GROWSDOWN = 8,
  582. DENYWRITE = 11,
  583. EXECUTABLE = 12,
  584. LOCKED = 13,
  585. NORESERVE = 14,
  586. POPULATE = 15,
  587. NONBLOCK = 16,
  588. STACK = 17,
  589. HUGETLB = 18,
  590. SYNC = 19,
  591. FIXED_NOREPLACE = 20,
  592. UNINITIALIZED = 26,
  593. }
  594. /*
  595. Bits for MLock_Flags
  596. */
  597. MLock_Flags_Bits :: enum {
  598. ONFAULT = 0,
  599. }
  600. /*
  601. Bits for MSync_Flags
  602. */
  603. MSync_Flags_Bits :: enum {
  604. ASYNC = 0,
  605. INVALIDATE = 1,
  606. SYNC = 2,
  607. }
  608. /*
  609. Argument for madvice(2)
  610. */
  611. MAdvice :: enum {
  612. NORMAL = 0,
  613. RANDOM = 1,
  614. SEQUENTIAL = 2,
  615. WILLNEED = 3,
  616. DONTNEED = 4,
  617. FREE = 8,
  618. REMOVE = 9,
  619. DONTFORK = 10,
  620. DOFORK = 11,
  621. MERGEABLE = 12,
  622. UNMERGEABLE = 13,
  623. HUGEPAGE = 14,
  624. NOHUGEPAGE = 15,
  625. DONTDUMP = 16,
  626. DODUMP = 17,
  627. WIPEONFORK = 18,
  628. KEEPONFORK = 19,
  629. COLD = 20,
  630. PAGEOUT = 21,
  631. POPULATE_READ = 22,
  632. POPULATE_WRITE = 23,
  633. DONTNEED_LOCKED = 24,
  634. COLLAPSE = 25,
  635. HWPOISON = 100,
  636. SOFT_OFFLINE = 101,
  637. }
  638. /*
  639. Bits for PKey_Access_Rights
  640. */
  641. PKey_Access_Bits :: enum {
  642. DISABLE_ACCESS = 0,
  643. DISABLE_WRITE = 2,
  644. }
  645. /*
  646. Bits for MRemap_Flags
  647. */
  648. MRemap_Flags_Bits :: enum {
  649. MAYMOVE = 0,
  650. FIXED = 1,
  651. DONTUNMAP = 2,
  652. }
  653. /*
  654. Bits for Get_Random_Flags
  655. */
  656. Get_Random_Flags_Bits :: enum {
  657. RANDOM = 0,
  658. NONBLOCK = 1,
  659. INSECURE = 2,
  660. }
  661. /*
  662. Bits for Perf_Flags
  663. */
  664. Perf_Flags_Bits :: enum {
  665. FD_NO_GROUP = 0,
  666. FD_OUTPUT = 1,
  667. PID_CGROUP = 2,
  668. FD_CLOEXEC = 3,
  669. }
  670. /*
  671. Union tag for Perf_Event_Attr struct
  672. */
  673. Perf_Event_Type :: enum u32 {
  674. HARDWARE = 0,
  675. SOFTWARE = 1,
  676. TRACEPOINT = 2,
  677. HW_CACHE = 3,
  678. RAW = 4,
  679. BREAKPOINT = 5,
  680. }
  681. Perf_Event_Flags_Bits :: enum u64 {
  682. Disabled = 0,
  683. Inherit = 1,
  684. Pinned = 2,
  685. Exclusive = 3,
  686. Exclude_User = 4,
  687. Exclude_Kernel = 5,
  688. Exclude_HV = 6,
  689. Exclude_Idle = 7,
  690. Mmap = 8,
  691. Comm = 9,
  692. Freq = 10,
  693. Inherit_Stat = 11,
  694. Enable_On_Exec = 12,
  695. Task = 13,
  696. Watermark = 14,
  697. Precise_IP_0 = 15,
  698. Precise_IP_1 = 16,
  699. Mmap_Data = 17,
  700. Sample_Id_All = 18,
  701. Exclude_Host = 19,
  702. Exclude_Guest = 20,
  703. Exclude_Callchain_Kernel = 21,
  704. Exclude_Callchain_User = 22,
  705. Mmap2 = 23,
  706. Comm_Exec = 24,
  707. Use_Clockid = 25,
  708. Context_Switch = 26,
  709. Write_Backward = 27,
  710. Namespaces = 28,
  711. KSymbol = 29,
  712. BPF_Event = 30,
  713. Aux_Output = 31,
  714. CGroup = 32,
  715. Text_Poke = 33,
  716. Build_Id = 34,
  717. Inherit_Thread = 35,
  718. Remove_On_Exec = 36,
  719. Sigtrap = 37,
  720. }
  721. Perf_Cap_Flags_Bits :: enum u64 {
  722. Bit0 = 0,
  723. Bit0_Is_Deprecated = 1,
  724. User_Rdpmc = 2,
  725. User_Time = 3,
  726. User_Time_Zero = 4,
  727. User_Time_Short = 5,
  728. }
  729. /*
  730. Specifies the type of the hardware event that you want to get info about
  731. */
  732. Perf_Hardware_Id :: enum u64 {
  733. CPU_CYCLES = 0,
  734. INSTRUCTIONS = 1,
  735. CACHE_REFERENCES = 2,
  736. CACHE_MISSES = 3,
  737. BRANCH_INSTRUCTIONS = 4,
  738. BRANCH_MISSES = 5,
  739. BUS_CYCLES = 6,
  740. STALLED_CYCLES_FRONTEND = 7,
  741. STALLED_CYCLES_BACKEND = 8,
  742. REF_CPU_CYCLES = 9,
  743. }
  744. /*
  745. Specifies the cache for the particular cache event that you want to get info about
  746. */
  747. Perf_Hardware_Cache_Id :: enum u64 {
  748. L1D = 0,
  749. L1I = 1,
  750. LL = 2,
  751. DTLB = 3,
  752. ITLB = 4,
  753. BPU = 5,
  754. NODE = 6,
  755. }
  756. /*
  757. Specifies the cache op that you want to get info about
  758. */
  759. Perf_Hardware_Cache_Op_Id :: enum u64 {
  760. READ = 0,
  761. WRITE = 1,
  762. PREFETCH = 2,
  763. }
  764. /*
  765. Specifies the cache operation result that you want to get info about
  766. */
  767. Perf_Hardware_Cache_Result_Id :: enum u64 {
  768. ACCESS = 0,
  769. MISS = 1,
  770. }
  771. /*
  772. Specifies the particular software event that you want to get info about
  773. */
  774. Perf_Software_Id :: enum u64 {
  775. CPU_CLOCK = 0,
  776. TASK_CLOCK = 1,
  777. PAGE_FAULTS = 2,
  778. CONTEXT_SWITCHES = 3,
  779. CPU_MIGRATIONS = 4,
  780. PAGE_FAULTS_MIN = 5,
  781. PAGE_FAULTS_MAJ = 6,
  782. ALIGNMENT_FAULTS = 7,
  783. EMULATION_FAULTS = 8,
  784. DUMMY = 9,
  785. BPF_OUTPUT = 10,
  786. CGROUP_SWITCHES = 11,
  787. }
  788. /*
  789. Specifies which values to include in the sample
  790. */
  791. Perf_Event_Sample_Type_Bits :: enum {
  792. IP = 0,
  793. TID = 1,
  794. TIME = 2,
  795. ADDR = 3,
  796. READ = 4,
  797. CALLCHAIN = 5,
  798. ID = 6,
  799. CPU = 7,
  800. PERIOD = 8,
  801. STREAM_ID = 9,
  802. RAW = 10,
  803. BRANCH_STACK = 11,
  804. REGS_USER = 12,
  805. STACK_USER = 13,
  806. WEIGHT = 14,
  807. DATA_SRC = 15,
  808. IDENTIFIER = 16,
  809. TRANSACTION = 17,
  810. REGS_INTR = 18,
  811. PHYS_ADDR = 19,
  812. AUX = 20,
  813. CGROUP = 21,
  814. DATA_PAGE_SIZE = 22,
  815. CODE_PAGE_SIZE = 23,
  816. WEIGHT_STRUCT = 24,
  817. }
  818. /// Describes field sets to include in mmaped page
  819. Perf_Read_Format_Bits :: enum {
  820. TOTAL_TIME_ENABLED = 0,
  821. TOTAL_TIME_RUNNING = 1,
  822. ID = 2,
  823. GROUP = 3,
  824. LOST = 4,
  825. }
  826. /*
  827. Chooses the breakpoint type
  828. */
  829. Hardware_Breakpoint_Type :: enum u32 {
  830. EMPTY = 0,
  831. R = 1,
  832. W = 2,
  833. X = 4,
  834. RW = R | W,
  835. INVALID = RW | X,
  836. }
  837. /*
  838. Bits for Branch_Sample_Type
  839. */
  840. Branch_Sample_Type_Bits :: enum {
  841. USER = 0,
  842. KERNEL = 1,
  843. HV = 2,
  844. ANY = 3,
  845. ANY_CALL = 4,
  846. ANY_RETURN = 5,
  847. IND_CALL = 6,
  848. ABORT_TX = 7,
  849. IN_TX = 8,
  850. NO_TX = 9,
  851. COND = 10,
  852. CALL_STACK = 11,
  853. IND_JUMP = 12,
  854. CALL = 13,
  855. NO_FLAGS = 14,
  856. NO_CYCLES = 15,
  857. TYPE_SAVE = 16,
  858. HW_INDEX = 17,
  859. PRIV_SAVE = 18,
  860. }
  861. /*
  862. Represent the type of Id
  863. */
  864. Id_Type :: enum uint {
  865. ALL = 0,
  866. PID = 1,
  867. PGID = 2,
  868. PIDFD = 3,
  869. }
  870. /*
  871. Options for wait syscalls
  872. */
  873. Wait_Option :: enum {
  874. WNOHANG = 0,
  875. WUNTRACED = 1,
  876. WSTOPPED = 1,
  877. WEXITED = 2,
  878. WCONTINUED = 3,
  879. WNOWAIT = 24,
  880. // // For processes created using clone
  881. __WNOTHREAD = 29,
  882. __WALL = 30,
  883. __WCLONE = 31,
  884. }
  885. /*
  886. Bits for flags for pidfd
  887. */
  888. Pid_FD_Flags_Bits :: enum {
  889. NONBLOCK = 11,
  890. }
  891. /*
  892. Priority for process, process group, user
  893. */
  894. Priority_Which :: enum i32 {
  895. PROCESS = 0,
  896. PGRP = 1,
  897. USER = 2,
  898. }
  899. Signal :: enum i32 {
  900. // POSIX-defined signals
  901. SIGINT = 2, // Interactive attention signal.
  902. SIGILL = 4, // Illegal instruction.
  903. SIGABRT = 6, // Abnormal termination.
  904. SIGFPE = 8, // Erroneous arithmetic operation.
  905. SIGSEGV = 11, // Invalid access to storage.
  906. SIGTERM = 15, // Termination request.
  907. // Other POSIX signals
  908. SIGHUP = 1, // Hangup.
  909. SIGQUIT = 3, // Quit.
  910. SIGTRAP = 5, // Trace/breakpoint trap.
  911. SIGKILL = 9, // Killed.
  912. SIGPIPE = 13, // Broken pipe.
  913. SIGALRM = 14, // Alarm clock.
  914. // Adjustments needed for most linux systems
  915. SIGSTKFLT = 16, // Stack fault (obsolete).
  916. SIGPWR = 30, // Power failure imminent.
  917. // Historical signals specified by POSIX.
  918. SIGBUS = 7, // Bus error.
  919. SIGSYS = 31, // Bad system call.
  920. // New(er) POSIX signals (1003.1-2008, 1003.1-2013).
  921. SIGURG = 23, // Urgent data is available at a socket.
  922. SIGSTOP = 19, // Stop, unblockable.
  923. SIGTSTP = 20, // Keyboard stop.
  924. SIGCONT = 18, // Continue.
  925. SIGCHLD = 17, // Child terminated or stopped.
  926. SIGTTIN = 21, // Background read from control terminal.
  927. SIGTTOU = 22, // Background write to control terminal.
  928. SIGPOLL = 29, // Pollable event occurred (System V).
  929. SIGXFSZ = 25, // File size limit exceeded.
  930. SIGXCPU = 24, // CPU time limit exceeded.
  931. SIGVTALRM = 26, // Virtual timer expired.
  932. SIGPROF = 27, // Profiling timer expired.
  933. SIGUSR1 = 10, // User-defined signal 1.
  934. SIGUSR2 = 12, // User-defined signal 2.
  935. // Nonstandard signals found in all modern POSIX systems (including both BSD and Linux).
  936. SIGWINCH = 28, // Window size change (4.3 BSD, Sun).
  937. // Archaic names for compatibility.
  938. SIGIO = SIGPOLL, // I/O now possible (4.2 BSD).
  939. SIGIOT = SIGABRT, // IOT instruction, abort() on a PDP-11.
  940. SIGCLD = SIGCHLD, // Old System V name
  941. }
  942. Sig_Mask_Kind :: enum i32 {
  943. SIG_BLOCK = 0,
  944. SIG_UNBLOCK = 1,
  945. SIG_SETMASK = 2,
  946. }
  947. Sig_Stack_Flag :: enum i32 {
  948. DISABLE = 0,
  949. ONSTACK = 1,
  950. AUTODISARM = 31,
  951. }
  952. Sig_Action_Flag :: enum u32 {
  953. NOCLDSTOP = 0,
  954. NOCLDWAIT = 1,
  955. SIGINFO = 2,
  956. UNSUPPORTED = 10,
  957. EXPOSE_TAGBITS = 11,
  958. RESTORER = 26,
  959. ONSTACK = 27,
  960. RESTART = 28,
  961. NODEFER = 30,
  962. RESETHAND = 31,
  963. }
  964. /*
  965. Translation of code in Sig_Info for when signo is SIGCHLD
  966. */
  967. Sig_Child_Code :: enum {
  968. NONE,
  969. EXITED,
  970. KILLED,
  971. DUMPED,
  972. TRAPPED,
  973. STOPPED,
  974. CONTINUED,
  975. }
  976. /*
  977. Type of socket to create
  978. - For TCP you want to use SOCK_STREAM
  979. - For UDP you want to use SOCK_DGRAM
  980. Also see `Protocol`
  981. */
  982. Socket_Type :: enum {
  983. STREAM = 1,
  984. DGRAM = 2,
  985. RAW = 3,
  986. RDM = 4,
  987. SEQPACKET = 5,
  988. DCCP = 6,
  989. PACKET = 10,
  990. }
  991. /*
  992. Bits for Socket_FD_Flags
  993. */
  994. Socket_FD_Flags_Bits :: enum {
  995. NONBLOCK = 11,
  996. CLOEXEC = 19,
  997. }
  998. /*
  999. Protocol family
  1000. */
  1001. Protocol_Family :: enum u16 {
  1002. UNSPEC = 0,
  1003. LOCAL = 1,
  1004. UNIX = LOCAL,
  1005. FILE = LOCAL,
  1006. INET = 2,
  1007. AX25 = 3,
  1008. IPX = 4,
  1009. APPLETALK = 5,
  1010. NETROM = 6,
  1011. BRIDGE = 7,
  1012. ATMPVC = 8,
  1013. X25 = 9,
  1014. INET6 = 10,
  1015. ROSE = 11,
  1016. DECnet = 12,
  1017. NETBEUI = 13,
  1018. SECURITY = 14,
  1019. KEY = 15,
  1020. NETLINK = 16,
  1021. ROUTE = NETLINK,
  1022. PACKET = 17,
  1023. ASH = 18,
  1024. ECONET = 19,
  1025. ATMSVC = 20,
  1026. RDS = 21,
  1027. SNA = 22,
  1028. IRDA = 23,
  1029. PPPOX = 24,
  1030. WANPIPE = 25,
  1031. LLC = 26,
  1032. IB = 27,
  1033. MPLS = 28,
  1034. CAN = 29,
  1035. TIPC = 30,
  1036. BLUETOOTH = 31,
  1037. IUCV = 32,
  1038. RXRPC = 33,
  1039. ISDN = 34,
  1040. PHONET = 35,
  1041. IEEE802154 = 36,
  1042. CAIF = 37,
  1043. ALG = 38,
  1044. NFC = 39,
  1045. VSOCK = 40,
  1046. KCM = 41,
  1047. QIPCRTR = 42,
  1048. SMC = 43,
  1049. XDP = 44,
  1050. MCTP = 45,
  1051. }
  1052. /*
  1053. The protocol number according to IANA protocol number list
  1054. Full list of protocol numbers:
  1055. https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
  1056. Supported by the OS protocols can be queried by reading:
  1057. /etc/protocols
  1058. */
  1059. Protocol :: enum {
  1060. HOPOPT = 0,
  1061. ICMP = 1,
  1062. IGMP = 2,
  1063. GGP = 3,
  1064. IPv4 = 4,
  1065. ST = 5,
  1066. TCP = 6,
  1067. CBT = 7,
  1068. EGP = 8,
  1069. IGP = 9,
  1070. BBN_RCC_MON = 10,
  1071. NVP_II = 11,
  1072. PUP = 12,
  1073. EMCON = 14,
  1074. XNET = 15,
  1075. CHAOS = 16,
  1076. UDP = 17,
  1077. MUX = 18,
  1078. DCN_MEAS = 19,
  1079. HMP = 20,
  1080. PRM = 21,
  1081. XNS_IDP = 22,
  1082. TRUNK_1 = 23,
  1083. TRUNK_2 = 24,
  1084. LEAF_1 = 25,
  1085. LEAF_2 = 26,
  1086. RDP = 27,
  1087. IRTP = 28,
  1088. ISO_TP4 = 29,
  1089. NETBLT = 30,
  1090. MFE_NSP = 31,
  1091. MERIT_INP = 32,
  1092. DCCP = 33,
  1093. THREE_PC = 34,
  1094. IDPR = 35,
  1095. XTP = 36,
  1096. DDP = 37,
  1097. IDPR_CMTP = 38,
  1098. TP_PlusPlus = 39,
  1099. IL = 40,
  1100. IPv6 = 41,
  1101. SDRP = 42,
  1102. IPv6_Route = 43,
  1103. IPv6_Frag = 44,
  1104. IDRP = 45,
  1105. RSVP = 46,
  1106. GRE = 47,
  1107. DSR = 48,
  1108. BNA = 49,
  1109. ESP = 50,
  1110. AH = 51,
  1111. I_NLSP = 52,
  1112. NARP = 54,
  1113. MOBILE = 55,
  1114. TLSP = 56,
  1115. SKIP = 57,
  1116. IPv6_ICMP = 58,
  1117. IPv6_NoNxt = 59,
  1118. IPv6_Opts = 60,
  1119. CFTP = 62,
  1120. SAT_EXPAK = 64,
  1121. KRYPTOLAN = 65,
  1122. RVD = 66,
  1123. IPPC = 67,
  1124. SAT_MON = 69,
  1125. VISA = 70,
  1126. IPCV = 71,
  1127. CPNX = 72,
  1128. CPHB = 73,
  1129. WSN = 74,
  1130. PVP = 75,
  1131. BR_SAT_MON = 76,
  1132. SUN_ND = 77,
  1133. WB_MON = 78,
  1134. WB_EXPAK = 79,
  1135. ISO_IP = 80,
  1136. VMTP = 81,
  1137. SECURE_VMTP = 82,
  1138. VINES = 83,
  1139. IPTM = 84,
  1140. NSFNET_IGP = 85,
  1141. DGP = 86,
  1142. TCF = 87,
  1143. EIGRP = 88,
  1144. OSPFIGP = 89,
  1145. Sprite_RPC = 90,
  1146. LARP = 91,
  1147. MTP = 92,
  1148. AX_25 = 93,
  1149. IPIP = 94,
  1150. SCC_SP = 96,
  1151. ETHERIP = 97,
  1152. ENCAP = 98,
  1153. GMTP = 100,
  1154. IFMP = 101,
  1155. PNNI = 102,
  1156. PIM = 103,
  1157. ARIS = 104,
  1158. SCPS = 105,
  1159. QNX = 106,
  1160. A_N = 107,
  1161. IPComp = 108,
  1162. SNP = 109,
  1163. Compaq_Peer = 110,
  1164. IPX_in_IP = 111,
  1165. VRRP = 112,
  1166. PGM = 113,
  1167. L2TP = 115,
  1168. DDX = 116,
  1169. IATP = 117,
  1170. STP = 118,
  1171. SRP = 119,
  1172. UTI = 120,
  1173. SMP = 121,
  1174. PTP = 123,
  1175. FIRE = 125,
  1176. CRTP = 126,
  1177. CRUDP = 127,
  1178. SSCOPMCE = 128,
  1179. IPLT = 129,
  1180. SPS = 130,
  1181. PIPE = 131,
  1182. SCTP = 132,
  1183. FC = 133,
  1184. RSVP_E2E_IGNORE = 134,
  1185. UDPLite = 136,
  1186. MPLS_in_IP = 137,
  1187. manet = 138,
  1188. HIP = 139,
  1189. Shim6 = 140,
  1190. WESP = 141,
  1191. ROHC = 142,
  1192. Ethernet = 143,
  1193. AGGFRAG = 144,
  1194. NSH = 145,
  1195. Reserved = 255,
  1196. }
  1197. /*
  1198. API Level for getsockopt(2)/setsockopt(2)
  1199. */
  1200. Socket_API_Level :: enum {
  1201. // Comes from <bits/socket-constants.h>
  1202. SOCKET = 1,
  1203. // Copy-pasted from protocol numbers
  1204. TCP = 6,
  1205. UDP = 17,
  1206. // Comes from <bits/socket.h>
  1207. RAW = 255,
  1208. DECNET = 261,
  1209. X25 = 262,
  1210. PACKET = 263,
  1211. ATM = 264,
  1212. AAL = 265,
  1213. IRDA = 266,
  1214. NETBEUI = 267,
  1215. LLC = 268,
  1216. DCCP = 269,
  1217. NETLINK = 270,
  1218. TIPC = 271,
  1219. RXRPC = 272,
  1220. PPPOL2TP = 273,
  1221. BLUETOOTH = 274,
  1222. PNPIPE = 275,
  1223. RDS = 276,
  1224. IUCV = 277,
  1225. CAIF = 278,
  1226. ALG = 279,
  1227. NFC = 280,
  1228. KCM = 281,
  1229. TLS = 282,
  1230. XDP = 283,
  1231. MPTCP = 284,
  1232. MCTP = 285,
  1233. SMC = 286,
  1234. }
  1235. /*
  1236. If Socket_API_Level == .SOCKET, these are the options
  1237. you can specify in getsockopt(2)/setsockopt(2)
  1238. */
  1239. Socket_Option :: enum {
  1240. DEBUG = 1,
  1241. REUSEADDR = 2,
  1242. TYPE = 3,
  1243. ERROR = 4,
  1244. DONTROUTE = 5,
  1245. BROADCAST = 6,
  1246. SNDBUF = 7,
  1247. RCVBUF = 8,
  1248. SNDBUFFORCE = 32,
  1249. RCVBUFFORCE = 33,
  1250. KEEPALIVE = 9,
  1251. OOBINLINE = 10,
  1252. NO_CHECK = 11,
  1253. PRIORITY = 12,
  1254. LINGER = 13,
  1255. BSDCOMPAT = 14,
  1256. REUSEPORT = 15,
  1257. PASSCRED = 16,
  1258. PEERCRED = 17,
  1259. RCVLOWAT = 18,
  1260. SNDLOWAT = 19,
  1261. RCVTIMEO_OLD = 20,
  1262. SNDTIMEO_OLD = 21,
  1263. SECURITY_AUTHENTICATION = 22,
  1264. SECURITY_ENCRYPTION_TRANSPORT = 23,
  1265. SECURITY_ENCRYPTION_NETWORK = 24,
  1266. BINDTODEVICE = 25,
  1267. ATTACH_FILTER = 26,
  1268. DETACH_FILTER = 27,
  1269. GET_FILTER = ATTACH_FILTER,
  1270. PEERNAME = 28,
  1271. ACCEPTCONN = 30,
  1272. PEERSEC = 31,
  1273. PASSSEC = 34,
  1274. IP_ADD_MEMBERSHIP = 35,
  1275. MARK = 36,
  1276. PROTOCOL = 38,
  1277. DOMAIN = 39,
  1278. RXQ_OVFL = 40,
  1279. WIFI_STATUS = 41,
  1280. PEEK_OFF = 42,
  1281. NOFCS = 43,
  1282. LOCK_FILTER = 44,
  1283. SELECT_ERR_QUEUE = 45,
  1284. BUSY_POLL = 46,
  1285. MAX_PACING_RATE = 47,
  1286. BPF_EXTENSIONS = 48,
  1287. INCOMING_CPU = 49,
  1288. ATTACH_BPF = 50,
  1289. DETACH_BPF = DETACH_FILTER,
  1290. ATTACH_REUSEPORT_CBPF = 51,
  1291. ATTACH_REUSEPORT_EBPF = 52,
  1292. CNX_ADVICE = 53,
  1293. TIMESTAMPING_OPT_STATS = 54,
  1294. MEMINFO = 55,
  1295. INCOMING_NAPI_ID = 56,
  1296. COOKIE = 57,
  1297. TIMESTAMPING_PKTINFO = 58,
  1298. PEERGROUPS = 59,
  1299. ZEROCOPY = 60,
  1300. TXTIME = 61,
  1301. BINDTOIFINDEX = 62,
  1302. TIMESTAMP_OLD = 29,
  1303. TIMESTAMPNS_OLD = 35,
  1304. TIMESTAMPING_OLD = 37,
  1305. TIMESTAMP_NEW = 63,
  1306. TIMESTAMPNS_NEW = 64,
  1307. TIMESTAMPING_NEW = 65,
  1308. RCVTIMEO_NEW = 66,
  1309. SNDTIMEO_NEW = 67,
  1310. DETACH_REUSEPORT_BPF = 68,
  1311. PREFER_BUSY_POLL = 69,
  1312. BUSY_POLL_BUDGET = 70,
  1313. NETNS_COOKIE = 71,
  1314. BUF_LOCK = 72,
  1315. RESERVE_MEM = 73,
  1316. TXREHASH = 74,
  1317. RCVMARK = 75,
  1318. TIMESTAMP = TIMESTAMP_OLD when _SOCKET_OPTION_OLD else TIMESTAMP_NEW,
  1319. TIMESTAMPNS = TIMESTAMPNS_OLD when _SOCKET_OPTION_OLD else TIMESTAMPNS_NEW,
  1320. TIMESTAMPING = TIMESTAMPING_OLD when _SOCKET_OPTION_OLD else TIMESTAMPING_NEW,
  1321. RCVTIMEO = RCVTIMEO_OLD when _SOCKET_OPTION_OLD else RCVTIMEO_NEW,
  1322. SNDTIMEO = SNDTIMEO_OLD when _SOCKET_OPTION_OLD else SNDTIMEO_NEW,
  1323. }
  1324. @(private)
  1325. _SOCKET_OPTION_OLD :: size_of(rawptr) == 8 /* || size_of(time_t) == size_of(__kernel_long_t) */
  1326. Socket_UDP_Option :: enum {
  1327. CORK = 1,
  1328. ENCAP = 100,
  1329. NO_CHECK6_TX = 101,
  1330. NO_CHECK6_RX = 102,
  1331. SEGMENT = 103,
  1332. GRO = 104,
  1333. }
  1334. UPD_Encapsulation :: enum {
  1335. ENCAP_ESPINUDP_NON_IKE = 1,
  1336. ENCAP_ESPINUDP = 2,
  1337. ENCAP_L2TPINUDP = 3,
  1338. ENCAP_GTP0 = 4,
  1339. ENCAP_GTP1U = 5,
  1340. }
  1341. Socket_TCP_Option :: enum {
  1342. NODELAY = 1,
  1343. MAXSEG = 2,
  1344. CORK = 3,
  1345. KEEPIDLE = 4,
  1346. KEEPINTVL = 5,
  1347. KEEPCNT = 6,
  1348. SYNCNT = 7,
  1349. LINGER2 = 8,
  1350. DEFER_ACCEPT = 9,
  1351. WINDOW_CLAMP = 10,
  1352. INFO = 11,
  1353. QUICKACK = 12,
  1354. CONGESTION = 13,
  1355. MD5SIG = 14,
  1356. COOKIE_TRANSACTIONS = 15,
  1357. THIN_LINEAR_TIMEOUTS = 16,
  1358. THIN_DUPACK = 17,
  1359. USER_TIMEOUT = 18,
  1360. REPAIR = 19,
  1361. REPAIR_QUEUE = 20,
  1362. QUEUE_SEQ = 21,
  1363. REPAIR_OPTIONS = 22,
  1364. FASTOPEN = 23,
  1365. TIMESTAMP = 24,
  1366. NOTSENT_LOWAT = 25,
  1367. CC_INFO = 26,
  1368. SAVE_SYN = 27,
  1369. SAVED_SYN = 28,
  1370. REPAIR_WINDOW = 29,
  1371. FASTOPEN_CONNECT = 30,
  1372. ULP = 31,
  1373. MD5SIG_EXT = 32,
  1374. FASTOPEN_KEY = 33,
  1375. FASTOPEN_NO_COOKIE = 34,
  1376. ZEROCOPY_RECEIVE = 35,
  1377. INQ = 36,
  1378. CM_INQ = INQ,
  1379. TX_DELAY = 37,
  1380. }
  1381. /*
  1382. Bits for Socket_Msg
  1383. */
  1384. Socket_Msg_Bits :: enum {
  1385. OOB = 0,
  1386. PEEK = 1,
  1387. DONTROUTE = 2,
  1388. TRYHARD = DONTROUTE,
  1389. CTRUNC = 3,
  1390. PROXY = 4,
  1391. TRUNC = 5,
  1392. DONTWAIT = 6,
  1393. EOR = 7,
  1394. WAITALL = 8,
  1395. FIN = 9,
  1396. SYN = 10,
  1397. CONFIRM = 11,
  1398. RST = 12,
  1399. ERRQUEUE = 13,
  1400. NOSIGNAL = 14,
  1401. MORE = 15,
  1402. WAITFORONE = 16,
  1403. BATCH = 18,
  1404. ZEROCOPY = 22,
  1405. FASTOPEN = 29,
  1406. CMSG_CLOEXEC = 30,
  1407. }
  1408. /*
  1409. Argument to shutdown(2)
  1410. */
  1411. Shutdown_How :: enum i32 {
  1412. RD = 0,
  1413. WR = 1,
  1414. RDWR = 2,
  1415. }
  1416. /*
  1417. Second argument to futex(2) syscall
  1418. */
  1419. Futex_Op :: enum u32 {
  1420. WAIT = 0,
  1421. WAKE = 1,
  1422. FD = 2,
  1423. REQUEUE = 3,
  1424. CMP_REQUEUE = 4,
  1425. WAKE_OP = 5,
  1426. LOCK_PI = 6,
  1427. UNLOCK_PI = 7,
  1428. TRYLOCK_PI = 8,
  1429. WAIT_BITSET = 9,
  1430. WAKE_BITSET = 10,
  1431. WAIT_REQUEUE_PI = 11,
  1432. CMP_REQUEUE_PI = 12,
  1433. LOCK_PI2 = 13,
  1434. }
  1435. /*
  1436. Bits for Futex_Flags
  1437. */
  1438. Futex_Flags_Bits :: enum {
  1439. PRIVATE = 7,
  1440. REALTIME = 8,
  1441. }
  1442. /*
  1443. Kind of operation on futex, see FUTEX_WAKE_OP
  1444. */
  1445. Futex_Arg_Op :: enum {
  1446. SET = 0, /* uaddr2 = oparg */
  1447. ADD = 1, /* uaddr2 += oparg */
  1448. OR = 2, /* uaddr2 |= oparg */
  1449. ANDN = 3, /* uaddr2 &= ~oparg */
  1450. XOR = 4, /* uaddr2 ^= oparg */
  1451. PO2_SET = 0, /* uaddr2 = 1<<oparg */
  1452. PO2_ADD = 1, /* uaddr2 += 1<<oparg */
  1453. PO2_OR = 2, /* uaddr2 |= 1<<oparg */
  1454. PO2_ANDN = 3, /* uaddr2 &~= 1<<oparg */
  1455. PO2_XOR = 4, /* uaddr2 ^= 1<<oparg */
  1456. }
  1457. /*
  1458. Kind of comparison operation on futex, see FUTEX_WAKE_OP
  1459. */
  1460. Futex_Cmp_Op :: enum {
  1461. EQ = 0, /* if (oldval == cmparg) wake */
  1462. NE = 1, /* if (oldval != cmparg) wake */
  1463. LT = 2, /* if (oldval < cmparg) wake */
  1464. LE = 3, /* if (oldval <= cmparg) wake */
  1465. GT = 4, /* if (oldval > cmparg) wake */
  1466. GE = 5, /* if (oldval >= cmparg) wake */
  1467. }
  1468. /*
  1469. The kind of resource limits
  1470. */
  1471. RLimit_Kind :: enum i32 {
  1472. CPU = 0,
  1473. FSIZE = 1,
  1474. DATA = 2,
  1475. STACK = 3,
  1476. CORE = 4,
  1477. RSS = 5,
  1478. NOFILE = 7,
  1479. AS = 9,
  1480. NPROC = 6,
  1481. MEMLOCK = 8,
  1482. LOCKS = 10,
  1483. SIGPENDING = 11,
  1484. MSGQUEUE = 12,
  1485. NICE = 13,
  1486. RTPRIO = 14,
  1487. RTTIME = 15,
  1488. NLIMITS = 16,
  1489. }
  1490. /*
  1491. Represents the user of resources
  1492. */
  1493. RUsage_Who :: enum i32 {
  1494. CHILDREN = -1,
  1495. SELF = 0,
  1496. THREAD = 1,
  1497. LWP = THREAD,
  1498. }
  1499. /*
  1500. Bits for Personality_Flags
  1501. */
  1502. UNAME26 :: 17
  1503. ADDR_NO_RANDOMIZE :: 18
  1504. FDPIC_FUNCPTRS :: 19
  1505. MMAP_PAGE_ZERO :: 20
  1506. ADDR_COMPAT_LAYOUT :: 21
  1507. READ_IMPLIES_EXEC :: 22
  1508. ADDR_LIMIT_32BIT :: 23
  1509. SHORT_INODE :: 24
  1510. WHOLE_SECONDS :: 25
  1511. STICKY_TIMEOUTS :: 26
  1512. ADDR_LIMIT_3GB :: 27
  1513. /*
  1514. Personality type
  1515. These go into the bottom 8 bits of the personality value
  1516. */
  1517. PER_LINUX :: 0x0000
  1518. PER_LINUX_32BIT :: 0x0000 | ADDR_LIMIT_32BIT
  1519. PER_LINUX_FDPIC :: 0x0000 | FDPIC_FUNCPTRS
  1520. PER_SVR4 :: 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO
  1521. PER_SVR3 :: 0x0002 | STICKY_TIMEOUTS | SHORT_INODE
  1522. PER_SCOSVR3 :: 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE
  1523. PER_OSR5 :: 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS
  1524. PER_WYSEV386 :: 0x0004 | STICKY_TIMEOUTS | SHORT_INODE
  1525. PER_ISCR4 :: 0x0005 | STICKY_TIMEOUTS
  1526. PER_BSD :: 0x0006
  1527. PER_SUNOS :: 0x0006 | STICKY_TIMEOUTS
  1528. PER_XENIX :: 0x0007 | STICKY_TIMEOUTS | SHORT_INODE
  1529. PER_LINUX32 :: 0x0008
  1530. PER_LINUX32_3GB :: 0x0008 | ADDR_LIMIT_3GB
  1531. PER_IRIX32 :: 0x0009 | STICKY_TIMEOUTS
  1532. PER_IRIXN32 :: 0x000a | STICKY_TIMEOUTS
  1533. PER_IRIX64 :: 0x000b | STICKY_TIMEOUTS
  1534. PER_RISCOS :: 0x000c
  1535. PER_SOLARIS :: 0x000d | STICKY_TIMEOUTS
  1536. PER_UW7 :: 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO
  1537. PER_OSF4 :: 0x000f
  1538. PER_HPUX :: 0x0010
  1539. PER_MASK :: 0x00ff
  1540. /*
  1541. Bits for SystemV IPC flags.
  1542. In this enum, access modes are common for any shared memory. Prefixed
  1543. entries (i.e. `IPC_` or `SHM_`) denote flags, where `IPC_` are common flags
  1544. for all SystemV IPC primitives, and `SHM_`, `SEM_` and `MSG_` are specific
  1545. to shared memory segments, semaphores and message queues respectively.
  1546. These bits overlap, because they are meant to be used within the
  1547. context of specific procedures. Creation flags, used for `*get` procedures,
  1548. and usage flags used by all other IPC procedures. Do not mix creation and
  1549. usage flags, as well as flags prefixed differently (excluding `IPC_`
  1550. prefix).
  1551. */
  1552. IPC_Flags_Bits :: enum {
  1553. // Access modes for shared memory.
  1554. WROTH = 1,
  1555. RDOTH = 2,
  1556. WRGRP = 4,
  1557. RDGRP = 5,
  1558. WRUSR = 7,
  1559. RDUSR = 8,
  1560. // Creation flags for shared memory.
  1561. IPC_CREAT = 9,
  1562. IPC_EXCL = 10,
  1563. SHM_HUGETLB = 11,
  1564. SHM_NORESERVE = 12,
  1565. // Usage flags for shared memory.
  1566. IPC_NOWAIT = 11,
  1567. SEM_UNDO = 9,
  1568. SHM_RDONLY = 12,
  1569. SHM_RND = 13,
  1570. SHM_REMAP = 14,
  1571. SHM_EXEC = 15,
  1572. MSG_NOERROR = 12,
  1573. MSG_EXCEPT = 13,
  1574. MSG_COPY = 14,
  1575. }
  1576. /*
  1577. IPC memory commands
  1578. */
  1579. IPC_Cmd :: enum i16 {
  1580. // IPC common
  1581. IPC_RMID = 0,
  1582. IPC_SET = 1,
  1583. IPC_STAT = 2,
  1584. // Shared memory
  1585. SHM_LOCK = 11,
  1586. SHM_UNLOCK = 12,
  1587. SHM_STAT = 13,
  1588. SHM_INFO = 14,
  1589. SHM_STAT_ANY = 15,
  1590. // Semaphore
  1591. GETPID = 11,
  1592. GETVAL = 12,
  1593. GETALL = 13,
  1594. GETNCNT = 14,
  1595. GETZCNT = 15,
  1596. SETVAL = 16,
  1597. SETALL = 17,
  1598. SEM_STAT = 18,
  1599. SEM_INFO = 19,
  1600. SEM_STAT_ANY = 20,
  1601. // Message queue
  1602. MSG_STAT = 11,
  1603. MSG_INFO = 12,
  1604. MSG_STAT_ANY = 13,
  1605. }
  1606. /*
  1607. File locking operation bits
  1608. */
  1609. FLock_Op_Bits :: enum {
  1610. SH = 1,
  1611. EX = 2,
  1612. NB = 4,
  1613. UN = 8,
  1614. }
  1615. /*
  1616. ptrace requests
  1617. */
  1618. PTrace_Request :: enum {
  1619. TRACEME = 0,
  1620. PEEKTEXT = 1,
  1621. PEEKDATA = 2,
  1622. PEEKUSER = 3,
  1623. POKETEXT = 4,
  1624. POKEDATA = 5,
  1625. POKEUSER = 6,
  1626. CONT = 7,
  1627. KILL = 8,
  1628. SINGLESTEP = 9,
  1629. GETREGS = 12,
  1630. SETREGS = 13,
  1631. GETFPREGS = 14,
  1632. SETFPREGS = 15,
  1633. ATTACH = 16,
  1634. DETACH = 17,
  1635. GETFPXREGS = 18,
  1636. SETFPXREGS = 19,
  1637. SYSCALL = 24,
  1638. GET_THREAD_AREA = 25,
  1639. SET_THREAD_AREA = 26,
  1640. ARCH_PRCTL = 30,
  1641. SYSEMU = 31,
  1642. SYSEMU_SINGLESTEP = 32,
  1643. SINGLEBLOCK = 33,
  1644. SETOPTIONS = 0x4200,
  1645. GETEVENTMSG = 0x4201,
  1646. GETSIGINFO = 0x4202,
  1647. SETSIGINFO = 0x4203,
  1648. GETREGSET = 0x4204,
  1649. SETREGSET = 0x4205,
  1650. SEIZE = 0x4206,
  1651. INTERRUPT = 0x4207,
  1652. LISTEN = 0x4208,
  1653. PEEKSIGINFO = 0x4209,
  1654. GETSIGMASK = 0x420a,
  1655. SETSIGMASK = 0x420b,
  1656. SECCOMP_GET_FILTER = 0x420c,
  1657. SECCOMP_GET_METADATA = 0x420d,
  1658. GET_SYSCALL_INFO = 0x420e,
  1659. GET_RSEQ_CONFIGURATION = 0x420f,
  1660. }
  1661. /*
  1662. ptrace options
  1663. */
  1664. PTrace_Options_Bits :: enum {
  1665. TRACESYSGOOD = 0,
  1666. TRACEFORK = 1,
  1667. TRACEVFORK = 2,
  1668. TRACECLONE = 3,
  1669. TRACEEXEC = 4,
  1670. TRACEVFORKDONE = 5,
  1671. TRACEEXIT = 6,
  1672. TRACESECCOMP = 7,
  1673. EXITKILL = 20,
  1674. SUSPEND_SECCOMP = 21,
  1675. }
  1676. /*
  1677. ptrace event codes.
  1678. */
  1679. PTrace_Event_Code :: enum {
  1680. EVENT_FORK = 1,
  1681. EVENT_VFORK = 2,
  1682. EVENT_CLONE = 3,
  1683. EVENT_EXEC = 4,
  1684. EVENT_VFORK_DONE = 5,
  1685. EVENT_EXIT = 6,
  1686. EVENT_SECCOMP = 7,
  1687. EVENT_STOP = 128,
  1688. }
  1689. /*
  1690. ptrace's get syscall info operation.
  1691. */
  1692. PTrace_Get_Syscall_Info_Op :: enum u8 {
  1693. NONE = 0,
  1694. ENTRY = 1,
  1695. EXIT = 2,
  1696. SECCOMP = 3,
  1697. }
  1698. /*
  1699. ptrace's PEEKSIGINFO flags bits
  1700. */
  1701. PTrace_Peek_Sig_Info_Flags_Bits :: enum {
  1702. SHARED = 0,
  1703. }
  1704. /*
  1705. Syslog actions.
  1706. */
  1707. Syslog_Action :: enum i32 {
  1708. CLOSE = 0,
  1709. OPEN = 1,
  1710. READ = 2,
  1711. READ_ALL = 3,
  1712. READ_CLEAR = 4,
  1713. CLEAR = 5,
  1714. CONSOLE_OFF = 6,
  1715. CONSOLE_ON = 7,
  1716. CONSOLE_LEVEL = 8,
  1717. SIZE_UNREAD = 9,
  1718. SIZE_BUFFER = 10,
  1719. }
  1720. /*
  1721. Bits for splice flags.
  1722. */
  1723. Splice_Flags_Bits :: enum {
  1724. MOVE = 0x01,
  1725. NONBLOCK = 0x02,
  1726. MORE = 0x04,
  1727. GIFT = 0x08,
  1728. }
  1729. /*
  1730. Clock IDs for various system clocks.
  1731. */
  1732. Clock_Id :: enum {
  1733. REALTIME = 0,
  1734. MONOTONIC = 1,
  1735. PROCESS_CPUTIME_ID = 2,
  1736. THREAD_CPUTIME_ID = 3,
  1737. MONOTONIC_RAW = 4,
  1738. REALTIME_COARSE = 5,
  1739. MONOTONIC_COARSE = 6,
  1740. BOOTTIME = 7,
  1741. REALTIME_ALARM = 8,
  1742. BOOTTIME_ALARM = 9,
  1743. }
  1744. /*
  1745. Bits for POSIX interval timer flags.
  1746. */
  1747. ITimer_Flags_Bits :: enum {
  1748. ABSTIME = 0,
  1749. }
  1750. /*
  1751. Bits for epoll_create(2) flags.
  1752. */
  1753. EPoll_Flags_Bits :: enum {
  1754. FDCLOEXEC = 19,
  1755. }
  1756. EPoll_Event_Kind :: enum u32 {
  1757. IN = log2(0x001),
  1758. PRI = log2(0x002),
  1759. OUT = log2(0x004),
  1760. RDNORM = log2(0x040),
  1761. RDBAND = log2(0x080),
  1762. WRNORM = log2(0x100),
  1763. WRBAND = log2(0x200),
  1764. MSG = log2(0x400),
  1765. ERR = log2(0x008),
  1766. HUP = log2(0x010),
  1767. RDHUP = log2(0x2000),
  1768. EXCLUSIVE = log2(1<<28),
  1769. WAKEUP = log2(1<<29),
  1770. ONESHOT = log2(1<<30),
  1771. ET = log2(1<<31),
  1772. }
  1773. EPoll_Event_Set :: bit_set[EPoll_Event_Kind; u32]
  1774. EPoll_Ctl_Opcode :: enum i32 {
  1775. ADD = 1,
  1776. DEL = 2,
  1777. MOD = 3,
  1778. }
  1779. /*
  1780. Bits for execveat(2) flags.
  1781. */
  1782. Execveat_Flags_Bits :: enum {
  1783. AT_SYMLINK_NOFOLLOW = 8,
  1784. AT_EMPTY_PATH = 12,
  1785. }
  1786. RISCV_HWProbe_Key :: enum i64 {
  1787. UNSUPPORTED = -1,
  1788. MVENDORID = 0,
  1789. MARCHID = 1,
  1790. MIMPID = 2,
  1791. BASE_BEHAVIOR = 3,
  1792. IMA_EXT_0 = 4,
  1793. // Deprecated, try `.MISALIGNED_SCALAR_PERF` first, if that is `.UNSUPPORTED`, use this.
  1794. CPUPERF_0 = 5,
  1795. ZICBOZ_BLOCK_SIZE = 6,
  1796. HIGHEST_VIRT_ADDRESS = 7,
  1797. TIME_CSR_FREQ = 8,
  1798. MISALIGNED_SCALAR_PERF = 9,
  1799. }
  1800. RISCV_HWProbe_Flags_Bits :: enum {
  1801. WHICH_CPUS,
  1802. }
  1803. RISCV_HWProbe_Base_Behavior_Bits :: enum {
  1804. IMA,
  1805. }
  1806. RISCV_HWProbe_IMA_Ext_0_Bits :: enum {
  1807. FD,
  1808. C,
  1809. V,
  1810. EXT_ZBA,
  1811. EXT_ZBB,
  1812. EXT_ZBS,
  1813. EXT_ZICBOZ,
  1814. EXT_ZBC,
  1815. EXT_ZBKB,
  1816. EXT_ZBKC,
  1817. EXT_ZBKX,
  1818. EXT_ZKND,
  1819. EXT_ZKNE,
  1820. EXT_ZKNH,
  1821. EXT_ZKSED,
  1822. EXT_ZKSH,
  1823. EXT_ZKT,
  1824. EXT_ZVBB,
  1825. EXT_ZVBC,
  1826. EXT_ZVKB,
  1827. EXT_ZVKG,
  1828. EXT_ZVKNED,
  1829. EXT_ZVKNHA,
  1830. EXT_ZVKNHB,
  1831. EXT_ZVKSED,
  1832. EXT_ZVKSH,
  1833. EXT_ZVKT,
  1834. EXT_ZFH,
  1835. EXT_ZFHMIN,
  1836. EXT_ZIHINTNTL,
  1837. EXT_ZVFH,
  1838. EXT_ZVFHMIN,
  1839. EXT_ZFA,
  1840. EXT_ZTSO,
  1841. EXT_ZACAS,
  1842. EXT_ZICOND,
  1843. EXT_ZIHINTPAUSE,
  1844. EXT_ZVE32X,
  1845. EXT_ZVE32F,
  1846. EXT_ZVE64X,
  1847. EXT_ZVE64F,
  1848. EXT_ZVE64D,
  1849. EXT_ZIMOP,
  1850. EXT_ZCA,
  1851. EXT_ZCB,
  1852. EXT_ZCD,
  1853. EXT_ZCF,
  1854. EXT_ZCMOP,
  1855. EXT_ZAWRS,
  1856. }
  1857. RISCV_HWProbe_Misaligned_Scalar_Perf :: enum {
  1858. UNKNOWN,
  1859. EMULATED,
  1860. SLOW,
  1861. FAST,
  1862. UNSUPPORTED,
  1863. }