bits.odin 42 KB

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