bits.odin 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902
  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. /*
  500. Bits for Mem_Protection bitfield
  501. */
  502. Mem_Protection_Bits :: enum{
  503. READ = 0,
  504. WRITE = 1,
  505. EXEC = 2,
  506. SEM = 3,
  507. // platform-specific section start
  508. ARM64_BTI = 4,
  509. ARM64_MTE = 5,
  510. // platform-specific section end
  511. GROWSDOWN = 24,
  512. GROWSUP = 25,
  513. }
  514. /*
  515. Bits for Map_Flags
  516. */
  517. Map_Flags_Bits :: enum {
  518. SHARED = 0,
  519. PRIVATE = 1,
  520. SHARED_VALIDATE = 2,
  521. FIXED = 4,
  522. ANONYMOUS = 5,
  523. // platform-dependent section start
  524. X86_32BIT = 6,
  525. X86_ABOVE4G = 7,
  526. // platform-dependent section end
  527. GROWSDOWN = 8,
  528. DENYWRITE = 11,
  529. EXECUTABLE = 12,
  530. LOCKED = 13,
  531. NORESERVE = 14,
  532. POPULATE = 15,
  533. NONBLOCK = 16,
  534. STACK = 17,
  535. HUGETLB = 18,
  536. SYNC = 19,
  537. FIXED_NOREPLACE = 20,
  538. UNINITIALIZED = 26,
  539. }
  540. /*
  541. Bits for MLock_Flags
  542. */
  543. MLock_Flags_Bits :: enum {
  544. ONFAULT = 0,
  545. }
  546. /*
  547. Bits for MSync_Flags
  548. */
  549. MSync_Flags_Bits :: enum {
  550. ASYNC = 0,
  551. INVALIDATE = 1,
  552. SYNC = 2,
  553. }
  554. /*
  555. Argument for madvice(2)
  556. */
  557. MAdvice :: enum {
  558. NORMAL = 0,
  559. RANDOM = 1,
  560. SEQUENTIAL = 2,
  561. WILLNEED = 3,
  562. DONTNEED = 4,
  563. FREE = 8,
  564. REMOVE = 9,
  565. DONTFORK = 10,
  566. DOFORK = 11,
  567. MERGEABLE = 12,
  568. UNMERGEABLE = 13,
  569. HUGEPAGE = 14,
  570. NOHUGEPAGE = 15,
  571. DONTDUMP = 16,
  572. DODUMP = 17,
  573. WIPEONFORK = 18,
  574. KEEPONFORK = 19,
  575. COLD = 20,
  576. PAGEOUT = 21,
  577. POPULATE_READ = 22,
  578. POPULATE_WRITE = 23,
  579. DONTNEED_LOCKED = 24,
  580. COLLAPSE = 25,
  581. HWPOISON = 100,
  582. SOFT_OFFLINE = 101,
  583. }
  584. /*
  585. Bits for PKey_Access_Rights
  586. */
  587. PKey_Access_Bits :: enum {
  588. DISABLE_ACCESS = 0,
  589. DISABLE_WRITE = 2,
  590. }
  591. /*
  592. Bits for MRemap_Flags
  593. */
  594. MRemap_Flags_Bits :: enum {
  595. MAYMOVE = 0,
  596. FIXED = 1,
  597. DONTUNMAP = 2,
  598. }
  599. /*
  600. Bits for Get_Random_Flags
  601. */
  602. Get_Random_Flags_Bits :: enum {
  603. RANDOM = 0,
  604. NONBLOCK = 1,
  605. INSECURE = 2,
  606. }
  607. /*
  608. Bits for Perf_Flags
  609. */
  610. Perf_Flags_Bits :: enum {
  611. FD_NO_GROUP = 0,
  612. FD_OUTPUT = 1,
  613. PID_CGROUP = 2,
  614. FD_CLOEXEC = 3,
  615. }
  616. /*
  617. Union tag for Perf_Event_Attr struct
  618. */
  619. Perf_Event_Type :: enum u32 {
  620. HARDWARE = 0,
  621. SOFTWARE = 1,
  622. TRACEPOINT = 2,
  623. HW_CACHE = 3,
  624. RAW = 4,
  625. BREAKPOINT = 5,
  626. }
  627. Perf_Event_Flags_Bits :: enum u64 {
  628. Disabled = 0,
  629. Inherit = 1,
  630. Pinned = 2,
  631. Exclusive = 3,
  632. Exclude_User = 4,
  633. Exclude_Kernel = 5,
  634. Exclude_HV = 6,
  635. Exclude_Idle = 7,
  636. Mmap = 8,
  637. Comm = 9,
  638. Freq = 10,
  639. Inherit_Stat = 11,
  640. Enable_On_Exec = 12,
  641. Task = 13,
  642. Watermark = 14,
  643. Precise_IP_0 = 15,
  644. Precise_IP_1 = 16,
  645. Mmap_Data = 17,
  646. Sample_Id_All = 18,
  647. Exclude_Host = 19,
  648. Exclude_Guest = 20,
  649. Exclude_Callchain_Kernel = 21,
  650. Exclude_Callchain_User = 22,
  651. Mmap2 = 23,
  652. Comm_Exec = 24,
  653. Use_Clockid = 25,
  654. Context_Switch = 26,
  655. Write_Backward = 27,
  656. Namespaces = 28,
  657. KSymbol = 29,
  658. BPF_Event = 30,
  659. Aux_Output = 31,
  660. CGroup = 32,
  661. Text_Poke = 33,
  662. Build_Id = 34,
  663. Inherit_Thread = 35,
  664. Remove_On_Exec = 36,
  665. Sigtrap = 37,
  666. }
  667. Perf_Cap_Flags_Bits :: enum u64 {
  668. Bit0 = 0,
  669. Bit0_Is_Deprecated = 1,
  670. User_Rdpmc = 2,
  671. User_Time = 3,
  672. User_Time_Zero = 4,
  673. User_Time_Short = 5,
  674. }
  675. /*
  676. Specifies the type of the hardware event that you want to get info about
  677. */
  678. Perf_Hardware_Id :: enum u64 {
  679. CPU_CYCLES = 0,
  680. INSTRUCTIONS = 1,
  681. CACHE_REFERENCES = 2,
  682. CACHE_MISSES = 3,
  683. BRANCH_INSTRUCTIONS = 4,
  684. BRANCH_MISSES = 5,
  685. BUS_CYCLES = 6,
  686. STALLED_CYCLES_FRONTEND = 7,
  687. STALLED_CYCLES_BACKEND = 8,
  688. REF_CPU_CYCLES = 9,
  689. }
  690. /*
  691. Specifies the cache for the particular cache event that you want to get info about
  692. */
  693. Perf_Hardware_Cache_Id :: enum u64 {
  694. L1D = 0,
  695. L1I = 1,
  696. LL = 2,
  697. DTLB = 3,
  698. ITLB = 4,
  699. BPU = 5,
  700. NODE = 6,
  701. }
  702. /*
  703. Specifies the cache op that you want to get info about
  704. */
  705. Perf_Hardware_Cache_Op_Id :: enum u64 {
  706. READ = 0,
  707. WRITE = 1,
  708. PREFETCH = 2,
  709. }
  710. /*
  711. Specifies the cache operation result that you want to get info about
  712. */
  713. Perf_Hardware_Cache_Result_Id :: enum u64 {
  714. ACCESS = 0,
  715. MISS = 1,
  716. }
  717. /*
  718. Specifies the particular software event that you want to get info about
  719. */
  720. Perf_Software_Id :: enum u64 {
  721. CPU_CLOCK = 0,
  722. TASK_CLOCK = 1,
  723. PAGE_FAULTS = 2,
  724. CONTEXT_SWITCHES = 3,
  725. CPU_MIGRATIONS = 4,
  726. PAGE_FAULTS_MIN = 5,
  727. PAGE_FAULTS_MAJ = 6,
  728. ALIGNMENT_FAULTS = 7,
  729. EMULATION_FAULTS = 8,
  730. DUMMY = 9,
  731. BPF_OUTPUT = 10,
  732. CGROUP_SWITCHES = 11,
  733. }
  734. /*
  735. Specifies which values to include in the sample
  736. */
  737. Perf_Event_Sample_Type_Bits :: enum {
  738. IP = 0,
  739. TID = 1,
  740. TIME = 2,
  741. ADDR = 3,
  742. READ = 4,
  743. CALLCHAIN = 5,
  744. ID = 6,
  745. CPU = 7,
  746. PERIOD = 8,
  747. STREAM_ID = 9,
  748. RAW = 10,
  749. BRANCH_STACK = 11,
  750. REGS_USER = 12,
  751. STACK_USER = 13,
  752. WEIGHT = 14,
  753. DATA_SRC = 15,
  754. IDENTIFIER = 16,
  755. TRANSACTION = 17,
  756. REGS_INTR = 18,
  757. PHYS_ADDR = 19,
  758. AUX = 20,
  759. CGROUP = 21,
  760. DATA_PAGE_SIZE = 22,
  761. CODE_PAGE_SIZE = 23,
  762. WEIGHT_STRUCT = 24,
  763. }
  764. /// Describes field sets to include in mmaped page
  765. Perf_Read_Format_Bits :: enum {
  766. TOTAL_TIME_ENABLED = 0,
  767. TOTAL_TIME_RUNNING = 1,
  768. ID = 2,
  769. GROUP = 3,
  770. LOST = 4,
  771. }
  772. /*
  773. Chooses the breakpoint type
  774. */
  775. Hardware_Breakpoint_Type :: enum u32 {
  776. EMPTY = 0,
  777. R = 1,
  778. W = 2,
  779. X = 4,
  780. RW = R | W,
  781. INVALID = RW | X,
  782. }
  783. /*
  784. Bits for Branch_Sample_Type
  785. */
  786. Branch_Sample_Type_Bits :: enum {
  787. USER = 0,
  788. KERNEL = 1,
  789. HV = 2,
  790. ANY = 3,
  791. ANY_CALL = 4,
  792. ANY_RETURN = 5,
  793. IND_CALL = 6,
  794. ABORT_TX = 7,
  795. IN_TX = 8,
  796. NO_TX = 9,
  797. COND = 10,
  798. CALL_STACK = 11,
  799. IND_JUMP = 12,
  800. CALL = 13,
  801. NO_FLAGS = 14,
  802. NO_CYCLES = 15,
  803. TYPE_SAVE = 16,
  804. HW_INDEX = 17,
  805. PRIV_SAVE = 18,
  806. }
  807. /*
  808. Represent the type of Id
  809. */
  810. Id_Type :: enum uint {
  811. ALL = 0,
  812. PID = 1,
  813. PGID = 2,
  814. PIDFD = 3,
  815. }
  816. /*
  817. Options for wait syscalls
  818. */
  819. Wait_Option :: enum {
  820. WNOHANG = 0,
  821. WUNTRACED = 1,
  822. WSTOPPED = 1,
  823. WEXITED = 2,
  824. WCONTINUED = 3,
  825. WNOWAIT = 24,
  826. // // For processes created using clone
  827. __WNOTHREAD = 29,
  828. __WALL = 30,
  829. __WCLONE = 31,
  830. }
  831. /*
  832. Bits for flags for pidfd
  833. */
  834. Pid_FD_Flags_Bits :: enum {
  835. NONBLOCK = 11,
  836. }
  837. /*
  838. Priority for process, process group, user
  839. */
  840. Priority_Which :: enum i32 {
  841. PROCESS = 0,
  842. PGRP = 1,
  843. USER = 2,
  844. }
  845. Signal :: enum i32 {
  846. // POSIX-defined signals
  847. SIGINT = 2, // Interactive attention signal.
  848. SIGILL = 4, // Illegal instruction.
  849. SIGABRT = 6, // Abnormal termination.
  850. SIGFPE = 8, // Erroneous arithmetic operation.
  851. SIGSEGV = 11, // Invalid access to storage.
  852. SIGTERM = 15, // Termination request.
  853. // Other POSIX signals
  854. SIGHUP = 1, // Hangup.
  855. SIGQUIT = 3, // Quit.
  856. SIGTRAP = 5, // Trace/breakpoint trap.
  857. SIGKILL = 9, // Killed.
  858. SIGPIPE = 13, // Broken pipe.
  859. SIGALRM = 14, // Alarm clock.
  860. // Adjustments needed for most linux systems
  861. SIGSTKFLT = 16, // Stack fault (obsolete).
  862. SIGPWR = 30, // Power failure imminent.
  863. // Historical signals specified by POSIX.
  864. SIGBUS = 7, // Bus error.
  865. SIGSYS = 31, // Bad system call.
  866. // New(er) POSIX signals (1003.1-2008, 1003.1-2013).
  867. SIGURG = 23, // Urgent data is available at a socket.
  868. SIGSTOP = 19, // Stop, unblockable.
  869. SIGTSTP = 20, // Keyboard stop.
  870. SIGCONT = 18, // Continue.
  871. SIGCHLD = 17, // Child terminated or stopped.
  872. SIGTTIN = 21, // Background read from control terminal.
  873. SIGTTOU = 22, // Background write to control terminal.
  874. SIGPOLL = 29, // Pollable event occurred (System V).
  875. SIGXFSZ = 25, // File size limit exceeded.
  876. SIGXCPU = 24, // CPU time limit exceeded.
  877. SIGVTALRM = 26, // Virtual timer expired.
  878. SIGPROF = 27, // Profiling timer expired.
  879. SIGUSR1 = 10, // User-defined signal 1.
  880. SIGUSR2 = 12, // User-defined signal 2.
  881. // Nonstandard signals found in all modern POSIX systems (including both BSD and Linux).
  882. SIGWINCH = 28, // Window size change (4.3 BSD, Sun).
  883. // Archaic names for compatibility.
  884. SIGIO = SIGPOLL, // I/O now possible (4.2 BSD).
  885. SIGIOT = SIGABRT, // IOT instruction, abort() on a PDP-11.
  886. SIGCLD = SIGCHLD, // Old System V name
  887. }
  888. Sig_Mask_Kind :: enum i32 {
  889. SIG_BLOCK = 0,
  890. SIG_UNBLOCK = 1,
  891. SIG_SETMASK = 2,
  892. }
  893. Sig_Stack_Flag :: enum i32 {
  894. DISABLE = 0,
  895. ONSTACK = 1,
  896. AUTODISARM = 31,
  897. }
  898. Sig_Action_Flag :: enum u32 {
  899. NOCLDSTOP = 0,
  900. NOCLDWAIT = 1,
  901. SIGINFO = 2,
  902. UNSUPPORTED = 10,
  903. EXPOSE_TAGBITS = 11,
  904. RESTORER = 26,
  905. ONSTACK = 27,
  906. RESTART = 28,
  907. NODEFER = 30,
  908. RESETHAND = 31,
  909. }
  910. /*
  911. Translation of code in Sig_Info for when signo is SIGCHLD
  912. */
  913. Sig_Child_Code :: enum {
  914. NONE,
  915. EXITED,
  916. KILLED,
  917. DUMPED,
  918. TRAPPED,
  919. STOPPED,
  920. CONTINUED,
  921. }
  922. /*
  923. Type of socket to create
  924. - For TCP you want to use SOCK_STREAM
  925. - For UDP you want to use SOCK_DGRAM
  926. Also see `Protocol`
  927. */
  928. Socket_Type :: enum {
  929. STREAM = 1,
  930. DGRAM = 2,
  931. RAW = 3,
  932. RDM = 4,
  933. SEQPACKET = 5,
  934. DCCP = 6,
  935. PACKET = 10,
  936. }
  937. /*
  938. Bits for Socket_FD_Flags
  939. */
  940. Socket_FD_Flags_Bits :: enum {
  941. NONBLOCK = 11,
  942. CLOEXEC = 19,
  943. }
  944. /*
  945. Protocol family
  946. */
  947. Protocol_Family :: enum u16 {
  948. UNSPEC = 0,
  949. LOCAL = 1,
  950. UNIX = LOCAL,
  951. FILE = LOCAL,
  952. INET = 2,
  953. AX25 = 3,
  954. IPX = 4,
  955. APPLETALK = 5,
  956. NETROM = 6,
  957. BRIDGE = 7,
  958. ATMPVC = 8,
  959. X25 = 9,
  960. INET6 = 10,
  961. ROSE = 11,
  962. DECnet = 12,
  963. NETBEUI = 13,
  964. SECURITY = 14,
  965. KEY = 15,
  966. NETLINK = 16,
  967. ROUTE = NETLINK,
  968. PACKET = 17,
  969. ASH = 18,
  970. ECONET = 19,
  971. ATMSVC = 20,
  972. RDS = 21,
  973. SNA = 22,
  974. IRDA = 23,
  975. PPPOX = 24,
  976. WANPIPE = 25,
  977. LLC = 26,
  978. IB = 27,
  979. MPLS = 28,
  980. CAN = 29,
  981. TIPC = 30,
  982. BLUETOOTH = 31,
  983. IUCV = 32,
  984. RXRPC = 33,
  985. ISDN = 34,
  986. PHONET = 35,
  987. IEEE802154 = 36,
  988. CAIF = 37,
  989. ALG = 38,
  990. NFC = 39,
  991. VSOCK = 40,
  992. KCM = 41,
  993. QIPCRTR = 42,
  994. SMC = 43,
  995. XDP = 44,
  996. MCTP = 45,
  997. }
  998. /*
  999. The protocol number according to IANA protocol number list
  1000. Full list of protocol numbers:
  1001. https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
  1002. Supported by the OS protocols can be queried by reading:
  1003. /etc/protocols
  1004. */
  1005. Protocol :: enum {
  1006. HOPOPT = 0,
  1007. ICMP = 1,
  1008. IGMP = 2,
  1009. GGP = 3,
  1010. IPv4 = 4,
  1011. ST = 5,
  1012. TCP = 6,
  1013. CBT = 7,
  1014. EGP = 8,
  1015. IGP = 9,
  1016. BBN_RCC_MON = 10,
  1017. NVP_II = 11,
  1018. PUP = 12,
  1019. EMCON = 14,
  1020. XNET = 15,
  1021. CHAOS = 16,
  1022. UDP = 17,
  1023. MUX = 18,
  1024. DCN_MEAS = 19,
  1025. HMP = 20,
  1026. PRM = 21,
  1027. XNS_IDP = 22,
  1028. TRUNK_1 = 23,
  1029. TRUNK_2 = 24,
  1030. LEAF_1 = 25,
  1031. LEAF_2 = 26,
  1032. RDP = 27,
  1033. IRTP = 28,
  1034. ISO_TP4 = 29,
  1035. NETBLT = 30,
  1036. MFE_NSP = 31,
  1037. MERIT_INP = 32,
  1038. DCCP = 33,
  1039. THREE_PC = 34,
  1040. IDPR = 35,
  1041. XTP = 36,
  1042. DDP = 37,
  1043. IDPR_CMTP = 38,
  1044. TP_PlusPlus = 39,
  1045. IL = 40,
  1046. IPv6 = 41,
  1047. SDRP = 42,
  1048. IPv6_Route = 43,
  1049. IPv6_Frag = 44,
  1050. IDRP = 45,
  1051. RSVP = 46,
  1052. GRE = 47,
  1053. DSR = 48,
  1054. BNA = 49,
  1055. ESP = 50,
  1056. AH = 51,
  1057. I_NLSP = 52,
  1058. NARP = 54,
  1059. MOBILE = 55,
  1060. TLSP = 56,
  1061. SKIP = 57,
  1062. IPv6_ICMP = 58,
  1063. IPv6_NoNxt = 59,
  1064. IPv6_Opts = 60,
  1065. CFTP = 62,
  1066. SAT_EXPAK = 64,
  1067. KRYPTOLAN = 65,
  1068. RVD = 66,
  1069. IPPC = 67,
  1070. SAT_MON = 69,
  1071. VISA = 70,
  1072. IPCV = 71,
  1073. CPNX = 72,
  1074. CPHB = 73,
  1075. WSN = 74,
  1076. PVP = 75,
  1077. BR_SAT_MON = 76,
  1078. SUN_ND = 77,
  1079. WB_MON = 78,
  1080. WB_EXPAK = 79,
  1081. ISO_IP = 80,
  1082. VMTP = 81,
  1083. SECURE_VMTP = 82,
  1084. VINES = 83,
  1085. IPTM = 84,
  1086. NSFNET_IGP = 85,
  1087. DGP = 86,
  1088. TCF = 87,
  1089. EIGRP = 88,
  1090. OSPFIGP = 89,
  1091. Sprite_RPC = 90,
  1092. LARP = 91,
  1093. MTP = 92,
  1094. AX_25 = 93,
  1095. IPIP = 94,
  1096. SCC_SP = 96,
  1097. ETHERIP = 97,
  1098. ENCAP = 98,
  1099. GMTP = 100,
  1100. IFMP = 101,
  1101. PNNI = 102,
  1102. PIM = 103,
  1103. ARIS = 104,
  1104. SCPS = 105,
  1105. QNX = 106,
  1106. A_N = 107,
  1107. IPComp = 108,
  1108. SNP = 109,
  1109. Compaq_Peer = 110,
  1110. IPX_in_IP = 111,
  1111. VRRP = 112,
  1112. PGM = 113,
  1113. L2TP = 115,
  1114. DDX = 116,
  1115. IATP = 117,
  1116. STP = 118,
  1117. SRP = 119,
  1118. UTI = 120,
  1119. SMP = 121,
  1120. PTP = 123,
  1121. FIRE = 125,
  1122. CRTP = 126,
  1123. CRUDP = 127,
  1124. SSCOPMCE = 128,
  1125. IPLT = 129,
  1126. SPS = 130,
  1127. PIPE = 131,
  1128. SCTP = 132,
  1129. FC = 133,
  1130. RSVP_E2E_IGNORE = 134,
  1131. UDPLite = 136,
  1132. MPLS_in_IP = 137,
  1133. manet = 138,
  1134. HIP = 139,
  1135. Shim6 = 140,
  1136. WESP = 141,
  1137. ROHC = 142,
  1138. Ethernet = 143,
  1139. AGGFRAG = 144,
  1140. NSH = 145,
  1141. Reserved = 255,
  1142. }
  1143. /*
  1144. API Level for getsockopt(2)/setsockopt(2)
  1145. */
  1146. Socket_API_Level :: enum {
  1147. // Comes from <bits/socket-constants.h>
  1148. SOCKET = 1,
  1149. // Copy-pasted from protocol numbers
  1150. TCP = 6,
  1151. UDP = 17,
  1152. // Comes from <bits/socket.h>
  1153. RAW = 255,
  1154. DECNET = 261,
  1155. X25 = 262,
  1156. PACKET = 263,
  1157. ATM = 264,
  1158. AAL = 265,
  1159. IRDA = 266,
  1160. NETBEUI = 267,
  1161. LLC = 268,
  1162. DCCP = 269,
  1163. NETLINK = 270,
  1164. TIPC = 271,
  1165. RXRPC = 272,
  1166. PPPOL2TP = 273,
  1167. BLUETOOTH = 274,
  1168. PNPIPE = 275,
  1169. RDS = 276,
  1170. IUCV = 277,
  1171. CAIF = 278,
  1172. ALG = 279,
  1173. NFC = 280,
  1174. KCM = 281,
  1175. TLS = 282,
  1176. XDP = 283,
  1177. MPTCP = 284,
  1178. MCTP = 285,
  1179. SMC = 286,
  1180. }
  1181. /*
  1182. If Socket_API_Level == .SOCKET, these are the options
  1183. you can specify in getsockopt(2)/setsockopt(2)
  1184. */
  1185. Socket_Option :: enum {
  1186. DEBUG = 1,
  1187. REUSEADDR = 2,
  1188. TYPE = 3,
  1189. ERROR = 4,
  1190. DONTROUTE = 5,
  1191. BROADCAST = 6,
  1192. SNDBUF = 7,
  1193. RCVBUF = 8,
  1194. SNDBUFFORCE = 32,
  1195. RCVBUFFORCE = 33,
  1196. KEEPALIVE = 9,
  1197. OOBINLINE = 10,
  1198. NO_CHECK = 11,
  1199. PRIORITY = 12,
  1200. LINGER = 13,
  1201. BSDCOMPAT = 14,
  1202. REUSEPORT = 15,
  1203. PASSCRED = 16,
  1204. PEERCRED = 17,
  1205. RCVLOWAT = 18,
  1206. SNDLOWAT = 19,
  1207. RCVTIMEO_OLD = 20,
  1208. SNDTIMEO_OLD = 21,
  1209. SECURITY_AUTHENTICATION = 22,
  1210. SECURITY_ENCRYPTION_TRANSPORT = 23,
  1211. SECURITY_ENCRYPTION_NETWORK = 24,
  1212. BINDTODEVICE = 25,
  1213. ATTACH_FILTER = 26,
  1214. DETACH_FILTER = 27,
  1215. GET_FILTER = ATTACH_FILTER,
  1216. PEERNAME = 28,
  1217. ACCEPTCONN = 30,
  1218. PEERSEC = 31,
  1219. PASSSEC = 34,
  1220. MARK = 36,
  1221. PROTOCOL = 38,
  1222. DOMAIN = 39,
  1223. RXQ_OVFL = 40,
  1224. WIFI_STATUS = 41,
  1225. PEEK_OFF = 42,
  1226. NOFCS = 43,
  1227. LOCK_FILTER = 44,
  1228. SELECT_ERR_QUEUE = 45,
  1229. BUSY_POLL = 46,
  1230. MAX_PACING_RATE = 47,
  1231. BPF_EXTENSIONS = 48,
  1232. INCOMING_CPU = 49,
  1233. ATTACH_BPF = 50,
  1234. DETACH_BPF = DETACH_FILTER,
  1235. ATTACH_REUSEPORT_CBPF = 51,
  1236. ATTACH_REUSEPORT_EBPF = 52,
  1237. CNX_ADVICE = 53,
  1238. TIMESTAMPING_OPT_STATS = 54,
  1239. MEMINFO = 55,
  1240. INCOMING_NAPI_ID = 56,
  1241. COOKIE = 57,
  1242. TIMESTAMPING_PKTINFO = 58,
  1243. PEERGROUPS = 59,
  1244. ZEROCOPY = 60,
  1245. TXTIME = 61,
  1246. BINDTOIFINDEX = 62,
  1247. TIMESTAMP_OLD = 29,
  1248. TIMESTAMPNS_OLD = 35,
  1249. TIMESTAMPING_OLD = 37,
  1250. TIMESTAMP_NEW = 63,
  1251. TIMESTAMPNS_NEW = 64,
  1252. TIMESTAMPING_NEW = 65,
  1253. RCVTIMEO_NEW = 66,
  1254. SNDTIMEO_NEW = 67,
  1255. DETACH_REUSEPORT_BPF = 68,
  1256. PREFER_BUSY_POLL = 69,
  1257. BUSY_POLL_BUDGET = 70,
  1258. NETNS_COOKIE = 71,
  1259. BUF_LOCK = 72,
  1260. RESERVE_MEM = 73,
  1261. TXREHASH = 74,
  1262. RCVMARK = 75,
  1263. TIMESTAMP = TIMESTAMP_OLD when _SOCKET_OPTION_OLD else TIMESTAMP_NEW,
  1264. TIMESTAMPNS = TIMESTAMPNS_OLD when _SOCKET_OPTION_OLD else TIMESTAMPNS_NEW,
  1265. TIMESTAMPING = TIMESTAMPING_OLD when _SOCKET_OPTION_OLD else TIMESTAMPING_NEW,
  1266. RCVTIMEO = RCVTIMEO_OLD when _SOCKET_OPTION_OLD else RCVTIMEO_NEW,
  1267. SNDTIMEO = SNDTIMEO_OLD when _SOCKET_OPTION_OLD else SNDTIMEO_NEW,
  1268. }
  1269. @(private)
  1270. _SOCKET_OPTION_OLD :: size_of(rawptr) == 8 /* || size_of(time_t) == size_of(__kernel_long_t) */
  1271. Socket_UDP_Option :: enum {
  1272. CORK = 1,
  1273. ENCAP = 100,
  1274. NO_CHECK6_TX = 101,
  1275. NO_CHECK6_RX = 102,
  1276. SEGMENT = 103,
  1277. GRO = 104,
  1278. }
  1279. UPD_Encapsulation :: enum {
  1280. ENCAP_ESPINUDP_NON_IKE = 1,
  1281. ENCAP_ESPINUDP = 2,
  1282. ENCAP_L2TPINUDP = 3,
  1283. ENCAP_GTP0 = 4,
  1284. ENCAP_GTP1U = 5,
  1285. }
  1286. Socket_TCP_Option :: enum {
  1287. NODELAY = 1,
  1288. MAXSEG = 2,
  1289. CORK = 3,
  1290. KEEPIDLE = 4,
  1291. KEEPINTVL = 5,
  1292. KEEPCNT = 6,
  1293. SYNCNT = 7,
  1294. LINGER2 = 8,
  1295. DEFER_ACCEPT = 9,
  1296. WINDOW_CLAMP = 10,
  1297. INFO = 11,
  1298. QUICKACK = 12,
  1299. CONGESTION = 13,
  1300. MD5SIG = 14,
  1301. COOKIE_TRANSACTIONS = 15,
  1302. THIN_LINEAR_TIMEOUTS = 16,
  1303. THIN_DUPACK = 17,
  1304. USER_TIMEOUT = 18,
  1305. REPAIR = 19,
  1306. REPAIR_QUEUE = 20,
  1307. QUEUE_SEQ = 21,
  1308. REPAIR_OPTIONS = 22,
  1309. FASTOPEN = 23,
  1310. TIMESTAMP = 24,
  1311. NOTSENT_LOWAT = 25,
  1312. CC_INFO = 26,
  1313. SAVE_SYN = 27,
  1314. SAVED_SYN = 28,
  1315. REPAIR_WINDOW = 29,
  1316. FASTOPEN_CONNECT = 30,
  1317. ULP = 31,
  1318. MD5SIG_EXT = 32,
  1319. FASTOPEN_KEY = 33,
  1320. FASTOPEN_NO_COOKIE = 34,
  1321. ZEROCOPY_RECEIVE = 35,
  1322. INQ = 36,
  1323. CM_INQ = INQ,
  1324. TX_DELAY = 37,
  1325. }
  1326. /*
  1327. Bits for Socket_Msg
  1328. */
  1329. Socket_Msg_Bits :: enum {
  1330. OOB = 0,
  1331. PEEK = 1,
  1332. DONTROUTE = 2,
  1333. TRYHARD = DONTROUTE,
  1334. CTRUNC = 3,
  1335. PROXY = 4,
  1336. TRUNC = 5,
  1337. DONTWAIT = 6,
  1338. EOR = 7,
  1339. WAITALL = 8,
  1340. FIN = 9,
  1341. SYN = 10,
  1342. CONFIRM = 11,
  1343. RST = 12,
  1344. ERRQUEUE = 13,
  1345. NOSIGNAL = 14,
  1346. MORE = 15,
  1347. WAITFORONE = 16,
  1348. BATCH = 18,
  1349. ZEROCOPY = 22,
  1350. FASTOPEN = 29,
  1351. CMSG_CLOEXEC = 30,
  1352. }
  1353. /*
  1354. Argument to shutdown(2)
  1355. */
  1356. Shutdown_How :: enum i32 {
  1357. RD = 0,
  1358. WR = 1,
  1359. RDWR = 2,
  1360. }
  1361. /*
  1362. Second argument to futex(2) syscall
  1363. */
  1364. Futex_Op :: enum u32 {
  1365. WAIT = 0,
  1366. WAKE = 1,
  1367. FD = 2,
  1368. REQUEUE = 3,
  1369. CMP_REQUEUE = 4,
  1370. WAKE_OP = 5,
  1371. LOCK_PI = 6,
  1372. UNLOCK_PI = 7,
  1373. TRYLOCK_PI = 8,
  1374. WAIT_BITSET = 9,
  1375. WAKE_BITSET = 10,
  1376. WAIT_REQUEUE_PI = 11,
  1377. CMP_REQUEUE_PI = 12,
  1378. LOCK_PI2 = 13,
  1379. }
  1380. /*
  1381. Bits for Futex_Flags
  1382. */
  1383. Futex_Flags_Bits :: enum {
  1384. PRIVATE = 7,
  1385. REALTIME = 8,
  1386. }
  1387. /*
  1388. Kind of operation on futex, see FUTEX_WAKE_OP
  1389. */
  1390. Futex_Arg_Op :: enum {
  1391. SET = 0, /* uaddr2 = oparg */
  1392. ADD = 1, /* uaddr2 += oparg */
  1393. OR = 2, /* uaddr2 |= oparg */
  1394. ANDN = 3, /* uaddr2 &= ~oparg */
  1395. XOR = 4, /* uaddr2 ^= oparg */
  1396. PO2_SET = 0, /* uaddr2 = 1<<oparg */
  1397. PO2_ADD = 1, /* uaddr2 += 1<<oparg */
  1398. PO2_OR = 2, /* uaddr2 |= 1<<oparg */
  1399. PO2_ANDN = 3, /* uaddr2 &~= 1<<oparg */
  1400. PO2_XOR = 4, /* uaddr2 ^= 1<<oparg */
  1401. }
  1402. /*
  1403. Kind of comparison operation on futex, see FUTEX_WAKE_OP
  1404. */
  1405. Futex_Cmp_Op :: enum {
  1406. EQ = 0, /* if (oldval == cmparg) wake */
  1407. NE = 1, /* if (oldval != cmparg) wake */
  1408. LT = 2, /* if (oldval < cmparg) wake */
  1409. LE = 3, /* if (oldval <= cmparg) wake */
  1410. GT = 4, /* if (oldval > cmparg) wake */
  1411. GE = 5, /* if (oldval >= cmparg) wake */
  1412. }
  1413. /*
  1414. The kind of resource limits
  1415. */
  1416. RLimit_Kind :: enum i32 {
  1417. CPU = 0,
  1418. FSIZE = 1,
  1419. DATA = 2,
  1420. STACK = 3,
  1421. CORE = 4,
  1422. RSS = 5,
  1423. NOFILE = 7,
  1424. AS = 9,
  1425. NPROC = 6,
  1426. MEMLOCK = 8,
  1427. LOCKS = 10,
  1428. SIGPENDING = 11,
  1429. MSGQUEUE = 12,
  1430. NICE = 13,
  1431. RTPRIO = 14,
  1432. RTTIME = 15,
  1433. NLIMITS = 16,
  1434. }
  1435. /*
  1436. Represents the user of resources
  1437. */
  1438. RUsage_Who :: enum i32 {
  1439. CHILDREN = -1,
  1440. SELF = 0,
  1441. THREAD = 1,
  1442. LWP = THREAD,
  1443. }
  1444. /*
  1445. Bits for Personality_Flags
  1446. */
  1447. UNAME26 :: 17
  1448. ADDR_NO_RANDOMIZE :: 18
  1449. FDPIC_FUNCPTRS :: 19
  1450. MMAP_PAGE_ZERO :: 20
  1451. ADDR_COMPAT_LAYOUT :: 21
  1452. READ_IMPLIES_EXEC :: 22
  1453. ADDR_LIMIT_32BIT :: 23
  1454. SHORT_INODE :: 24
  1455. WHOLE_SECONDS :: 25
  1456. STICKY_TIMEOUTS :: 26
  1457. ADDR_LIMIT_3GB :: 27
  1458. /*
  1459. Personality type
  1460. These go into the bottom 8 bits of the personality value
  1461. */
  1462. PER_LINUX :: 0x0000
  1463. PER_LINUX_32BIT :: 0x0000 | ADDR_LIMIT_32BIT
  1464. PER_LINUX_FDPIC :: 0x0000 | FDPIC_FUNCPTRS
  1465. PER_SVR4 :: 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO
  1466. PER_SVR3 :: 0x0002 | STICKY_TIMEOUTS | SHORT_INODE
  1467. PER_SCOSVR3 :: 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE
  1468. PER_OSR5 :: 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS
  1469. PER_WYSEV386 :: 0x0004 | STICKY_TIMEOUTS | SHORT_INODE
  1470. PER_ISCR4 :: 0x0005 | STICKY_TIMEOUTS
  1471. PER_BSD :: 0x0006
  1472. PER_SUNOS :: 0x0006 | STICKY_TIMEOUTS
  1473. PER_XENIX :: 0x0007 | STICKY_TIMEOUTS | SHORT_INODE
  1474. PER_LINUX32 :: 0x0008
  1475. PER_LINUX32_3GB :: 0x0008 | ADDR_LIMIT_3GB
  1476. PER_IRIX32 :: 0x0009 | STICKY_TIMEOUTS
  1477. PER_IRIXN32 :: 0x000a | STICKY_TIMEOUTS
  1478. PER_IRIX64 :: 0x000b | STICKY_TIMEOUTS
  1479. PER_RISCOS :: 0x000c
  1480. PER_SOLARIS :: 0x000d | STICKY_TIMEOUTS
  1481. PER_UW7 :: 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO
  1482. PER_OSF4 :: 0x000f
  1483. PER_HPUX :: 0x0010
  1484. PER_MASK :: 0x00ff
  1485. /*
  1486. Bits for access modes for shared memory
  1487. */
  1488. IPC_Mode_Bits :: enum {
  1489. WROTH = 1,
  1490. RDOTH = 2,
  1491. WRGRP = 4,
  1492. RDGRP = 5,
  1493. WRUSR = 7,
  1494. RDUSR = 8,
  1495. DEST = 9,
  1496. LOCKED = 10,
  1497. }
  1498. /*
  1499. Shared memory flags bits
  1500. */
  1501. IPC_Flags_Bits :: enum {
  1502. IPC_CREAT = 9,
  1503. IPC_EXCL = 10,
  1504. IPC_NOWAIT = 11,
  1505. // Semaphore
  1506. SEM_UNDO = 9,
  1507. // Shared memory
  1508. SHM_HUGETLB = 11,
  1509. SHM_NORESERVE = 12,
  1510. SHM_RDONLY = 12,
  1511. SHM_RND = 13,
  1512. SHM_REMAP = 14,
  1513. SHM_EXEC = 15,
  1514. // Message queue
  1515. MSG_NOERROR = 12,
  1516. MSG_EXCEPT = 13,
  1517. MSG_COPY = 14,
  1518. }
  1519. /*
  1520. IPC memory commands
  1521. */
  1522. IPC_Cmd :: enum i16 {
  1523. // IPC common
  1524. IPC_RMID = 0,
  1525. IPC_SET = 1,
  1526. IPC_STAT = 2,
  1527. // Shared memory
  1528. SHM_LOCK = 11,
  1529. SHM_UNLOCK = 12,
  1530. SHM_STAT = 13,
  1531. SHM_INFO = 14,
  1532. SHM_STAT_ANY = 15,
  1533. // Semaphore
  1534. GETPID = 11,
  1535. GETVAL = 12,
  1536. GETALL = 13,
  1537. GETNCNT = 14,
  1538. GETZCNT = 15,
  1539. SETVAL = 16,
  1540. SETALL = 17,
  1541. SEM_STAT = 18,
  1542. SEM_INFO = 19,
  1543. SEM_STAT_ANY = 20,
  1544. // Message queue
  1545. MSG_STAT = 11,
  1546. MSG_INFO = 12,
  1547. MSG_STAT_ANY = 13,
  1548. }
  1549. /*
  1550. File locking operation bits
  1551. */
  1552. FLock_Op_Bits :: enum {
  1553. SH = 1,
  1554. EX = 2,
  1555. NB = 4,
  1556. UN = 8,
  1557. }
  1558. /*
  1559. ptrace requests
  1560. */
  1561. PTrace_Request :: enum {
  1562. TRACEME = 0,
  1563. PEEKTEXT = 1,
  1564. PEEKDATA = 2,
  1565. PEEKUSER = 3,
  1566. POKETEXT = 4,
  1567. POKEDATA = 5,
  1568. POKEUSER = 6,
  1569. CONT = 7,
  1570. KILL = 8,
  1571. SINGLESTEP = 9,
  1572. GETREGS = 12,
  1573. SETREGS = 13,
  1574. GETFPREGS = 14,
  1575. SETFPREGS = 15,
  1576. ATTACH = 16,
  1577. DETACH = 17,
  1578. GETFPXREGS = 18,
  1579. SETFPXREGS = 19,
  1580. SYSCALL = 24,
  1581. GET_THREAD_AREA = 25,
  1582. SET_THREAD_AREA = 26,
  1583. ARCH_PRCTL = 30,
  1584. SYSEMU = 31,
  1585. SYSEMU_SINGLESTEP = 32,
  1586. SINGLEBLOCK = 33,
  1587. SETOPTIONS = 0x4200,
  1588. GETEVENTMSG = 0x4201,
  1589. GETSIGINFO = 0x4202,
  1590. SETSIGINFO = 0x4203,
  1591. GETREGSET = 0x4204,
  1592. SETREGSET = 0x4205,
  1593. SEIZE = 0x4206,
  1594. INTERRUPT = 0x4207,
  1595. LISTEN = 0x4208,
  1596. PEEKSIGINFO = 0x4209,
  1597. GETSIGMASK = 0x420a,
  1598. SETSIGMASK = 0x420b,
  1599. SECCOMP_GET_FILTER = 0x420c,
  1600. SECCOMP_GET_METADATA = 0x420d,
  1601. GET_SYSCALL_INFO = 0x420e,
  1602. GET_RSEQ_CONFIGURATION = 0x420f,
  1603. }
  1604. /*
  1605. ptrace options
  1606. */
  1607. PTrace_Options_Bits :: enum {
  1608. TRACESYSGOOD = 0,
  1609. TRACEFORK = 1,
  1610. TRACEVFORK = 2,
  1611. TRACECLONE = 3,
  1612. TRACEEXEC = 4,
  1613. TRACEVFORKDONE = 5,
  1614. TRACEEXIT = 6,
  1615. TRACESECCOMP = 7,
  1616. EXITKILL = 20,
  1617. SUSPEND_SECCOMP = 21,
  1618. }
  1619. /*
  1620. ptrace event codes.
  1621. */
  1622. PTrace_Event_Code :: enum {
  1623. EVENT_FORK = 1,
  1624. EVENT_VFORK = 2,
  1625. EVENT_CLONE = 3,
  1626. EVENT_EXEC = 4,
  1627. EVENT_VFORK_DONE = 5,
  1628. EVENT_EXIT = 6,
  1629. EVENT_SECCOMP = 7,
  1630. EVENT_STOP = 128,
  1631. }
  1632. /*
  1633. ptrace's get syscall info operation.
  1634. */
  1635. PTrace_Get_Syscall_Info_Op :: enum u8 {
  1636. NONE = 0,
  1637. ENTRY = 1,
  1638. EXIT = 2,
  1639. SECCOMP = 3,
  1640. }
  1641. /*
  1642. ptrace's PEEKSIGINFO flags bits
  1643. */
  1644. PTrace_Peek_Sig_Info_Flags_Bits :: enum {
  1645. SHARED = 0,
  1646. }
  1647. /*
  1648. Syslog actions.
  1649. */
  1650. Syslog_Action :: enum i32 {
  1651. CLOSE = 0,
  1652. OPEN = 1,
  1653. READ = 2,
  1654. READ_ALL = 3,
  1655. READ_CLEAR = 4,
  1656. CLEAR = 5,
  1657. CONSOLE_OFF = 6,
  1658. CONSOLE_ON = 7,
  1659. CONSOLE_LEVEL = 8,
  1660. SIZE_UNREAD = 9,
  1661. SIZE_BUFFER = 10,
  1662. }
  1663. /*
  1664. Bits for splice flags.
  1665. */
  1666. Splice_Flags_Bits :: enum {
  1667. MOVE = 0x01,
  1668. NONBLOCK = 0x02,
  1669. MORE = 0x04,
  1670. GIFT = 0x08,
  1671. }
  1672. /*
  1673. Clock IDs for various system clocks.
  1674. */
  1675. Clock_Id :: enum {
  1676. REALTIME = 0,
  1677. MONOTONIC = 1,
  1678. PROCESS_CPUTIME_ID = 2,
  1679. THREAD_CPUTIME_ID = 3,
  1680. MONOTONIC_RAW = 4,
  1681. REALTIME_COARSE = 5,
  1682. MONOTONIC_COARSE = 6,
  1683. BOOTTIME = 7,
  1684. REALTIME_ALARM = 8,
  1685. BOOTTIME_ALARM = 9,
  1686. }
  1687. /*
  1688. Bits for POSIX interval timer flags.
  1689. */
  1690. ITimer_Flags_Bits :: enum {
  1691. ABSTIME = 1,
  1692. }
  1693. /*
  1694. Bits for epoll_create(2) flags.
  1695. */
  1696. EPoll_Flags_Bits :: enum {
  1697. FDCLOEXEC = 19,
  1698. }
  1699. EPoll_Event_Kind :: enum u32 {
  1700. IN = 0x001,
  1701. PRI = 0x002,
  1702. OUT = 0x004,
  1703. RDNORM = 0x040,
  1704. RDBAND = 0x080,
  1705. WRNORM = 0x100,
  1706. WRBAND = 0x200,
  1707. MSG = 0x400,
  1708. ERR = 0x008,
  1709. HUP = 0x010,
  1710. RDHUP = 0x2000,
  1711. EXCLUSIVE = 1<<28,
  1712. WAKEUP = 1<<29,
  1713. ONESHOT = 1<<30,
  1714. ET = 1<<31,
  1715. }
  1716. EPoll_Ctl_Opcode :: enum i32 {
  1717. ADD = 1,
  1718. DEL = 2,
  1719. MOD = 3,
  1720. }
  1721. /*
  1722. Bits for execveat(2) flags.
  1723. */
  1724. Execveat_Flags_Bits :: enum {
  1725. AT_SYMLINK_NOFOLLOW = 8,
  1726. AT_EMPTY_PATH = 12,
  1727. }
  1728. RISCV_HWProbe_Key :: enum i64 {
  1729. UNSUPPORTED = -1,
  1730. MVENDORID = 0,
  1731. MARCHID = 1,
  1732. MIMPID = 2,
  1733. BASE_BEHAVIOR = 3,
  1734. IMA_EXT_0 = 4,
  1735. // Deprecated, try `.MISALIGNED_SCALAR_PERF` first, if that is `.UNSUPPORTED`, use this.
  1736. CPUPERF_0 = 5,
  1737. ZICBOZ_BLOCK_SIZE = 6,
  1738. HIGHEST_VIRT_ADDRESS = 7,
  1739. TIME_CSR_FREQ = 8,
  1740. MISALIGNED_SCALAR_PERF = 9,
  1741. }
  1742. RISCV_HWProbe_Flags_Bits :: enum {
  1743. WHICH_CPUS,
  1744. }
  1745. RISCV_HWProbe_Base_Behavior_Bits :: enum {
  1746. IMA,
  1747. }
  1748. RISCV_HWProbe_IMA_Ext_0_Bits :: enum {
  1749. FD,
  1750. C,
  1751. V,
  1752. EXT_ZBA,
  1753. EXT_ZBB,
  1754. EXT_ZBS,
  1755. EXT_ZICBOZ,
  1756. EXT_ZBC,
  1757. EXT_ZBKB,
  1758. EXT_ZBKC,
  1759. EXT_ZBKX,
  1760. EXT_ZKND,
  1761. EXT_ZKNE,
  1762. EXT_ZKNH,
  1763. EXT_ZKSED,
  1764. EXT_ZKSH,
  1765. EXT_ZKT,
  1766. EXT_ZVBB,
  1767. EXT_ZVBC,
  1768. EXT_ZVKB,
  1769. EXT_ZVKG,
  1770. EXT_ZVKNED,
  1771. EXT_ZVKNHA,
  1772. EXT_ZVKNHB,
  1773. EXT_ZVKSED,
  1774. EXT_ZVKSH,
  1775. EXT_ZVKT,
  1776. EXT_ZFH,
  1777. EXT_ZFHMIN,
  1778. EXT_ZIHINTNTL,
  1779. EXT_ZVFH,
  1780. EXT_ZVFHMIN,
  1781. EXT_ZFA,
  1782. EXT_ZTSO,
  1783. EXT_ZACAS,
  1784. EXT_ZICOND,
  1785. EXT_ZIHINTPAUSE,
  1786. EXT_ZVE32X,
  1787. EXT_ZVE32F,
  1788. EXT_ZVE64X,
  1789. EXT_ZVE64F,
  1790. EXT_ZVE64D,
  1791. EXT_ZIMOP,
  1792. EXT_ZCA,
  1793. EXT_ZCB,
  1794. EXT_ZCD,
  1795. EXT_ZCF,
  1796. EXT_ZCMOP,
  1797. EXT_ZAWRS,
  1798. }
  1799. RISCV_HWProbe_Misaligned_Scalar_Perf :: enum {
  1800. UNKNOWN,
  1801. EMULATED,
  1802. SLOW,
  1803. FAST,
  1804. UNSUPPORTED,
  1805. }