@zigc/lib 0.16.0-test.1 → 0.17.0-dev.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/LICENSE +19 -0
  2. package/c/fcntl.zig +6 -1
  3. package/c/inttypes.zig +0 -10
  4. package/c/math.zig +138 -114
  5. package/c/pthread.zig +57 -0
  6. package/c/search.zig +1 -27
  7. package/c/stdlib/drand48.zig +0 -57
  8. package/c/stdlib.zig +0 -100
  9. package/c/string.zig +20 -7
  10. package/c/strings.zig +0 -38
  11. package/c/stropts.zig +17 -0
  12. package/c/unistd.zig +27 -26
  13. package/c/wchar.zig +10 -0
  14. package/c.zig +3 -2
  15. package/compiler/aro/aro/Attribute/names.zig +604 -589
  16. package/compiler/aro/aro/Attribute.zig +202 -116
  17. package/compiler/aro/aro/Builtins/common.zig +874 -863
  18. package/compiler/aro/aro/Builtins/eval.zig +15 -7
  19. package/compiler/aro/aro/Builtins.zig +0 -1
  20. package/compiler/aro/aro/CodeGen.zig +8 -7
  21. package/compiler/aro/aro/Compilation.zig +137 -111
  22. package/compiler/aro/aro/Diagnostics.zig +21 -17
  23. package/compiler/aro/aro/Driver/GCCDetector.zig +635 -0
  24. package/compiler/aro/aro/Driver.zig +138 -63
  25. package/compiler/aro/aro/LangOpts.zig +12 -2
  26. package/compiler/aro/aro/Parser/Diagnostic.zig +79 -19
  27. package/compiler/aro/aro/Parser.zig +352 -153
  28. package/compiler/aro/aro/Pragma.zig +3 -2
  29. package/compiler/aro/aro/Preprocessor/Diagnostic.zig +21 -0
  30. package/compiler/aro/aro/Preprocessor.zig +136 -62
  31. package/compiler/aro/aro/Target.zig +17 -12
  32. package/compiler/aro/aro/Tokenizer.zig +31 -14
  33. package/compiler/aro/aro/Toolchain.zig +4 -7
  34. package/compiler/aro/aro/Tree.zig +178 -148
  35. package/compiler/aro/aro/TypeStore.zig +82 -24
  36. package/compiler/aro/aro/Value.zig +13 -17
  37. package/compiler/aro/aro/features.zig +1 -0
  38. package/compiler/aro/aro/pragmas/message.zig +3 -2
  39. package/compiler/aro/aro/pragmas/once.zig +0 -1
  40. package/compiler/aro/aro/record_layout.zig +3 -3
  41. package/compiler/aro/aro/text_literal.zig +3 -2
  42. package/compiler/aro/assembly_backend/x86_64.zig +7 -8
  43. package/compiler/aro/backend/Assembly.zig +1 -2
  44. package/compiler/aro/backend/Interner.zig +2 -2
  45. package/compiler/aro/backend/Ir.zig +100 -92
  46. package/compiler/aro/include/ptrcheck.h +49 -0
  47. package/compiler/aro/main.zig +26 -10
  48. package/compiler/build_runner.zig +1 -2
  49. package/compiler/objdump.zig +93 -0
  50. package/compiler/reduce/Walk.zig +7 -7
  51. package/compiler/reduce.zig +5 -1
  52. package/compiler/resinator/compile.zig +2 -2
  53. package/compiler/resinator/main.zig +7 -1
  54. package/compiler/resinator/preprocess.zig +1 -3
  55. package/compiler/std-docs.zig +8 -1
  56. package/compiler/test_runner.zig +194 -62
  57. package/compiler/translate-c/MacroTranslator.zig +80 -11
  58. package/compiler/translate-c/PatternList.zig +1 -9
  59. package/compiler/translate-c/Scope.zig +43 -6
  60. package/compiler/translate-c/Translator.zig +369 -127
  61. package/compiler/translate-c/ast.zig +19 -11
  62. package/compiler/translate-c/main.zig +76 -17
  63. package/compiler_rt/cos.zig +140 -53
  64. package/compiler_rt/divmodei4.zig +40 -17
  65. package/compiler_rt/exp.zig +1 -6
  66. package/compiler_rt/exp2.zig +1 -6
  67. package/compiler_rt/exp_f128.zig +377 -0
  68. package/compiler_rt/fabs.zig +0 -2
  69. package/compiler_rt/fma.zig +0 -2
  70. package/compiler_rt/fmax.zig +0 -2
  71. package/compiler_rt/fmin.zig +0 -2
  72. package/compiler_rt/fmod.zig +0 -2
  73. package/compiler_rt/limb64.zig +1127 -0
  74. package/compiler_rt/log.zig +0 -2
  75. package/compiler_rt/log10.zig +0 -2
  76. package/compiler_rt/log2.zig +0 -2
  77. package/compiler_rt/long_double.zig +37 -0
  78. package/compiler_rt/mulXi3.zig +1 -1
  79. package/compiler_rt/mulo.zig +6 -1
  80. package/compiler_rt/rem_pio2l.zig +173 -0
  81. package/compiler_rt/round.zig +0 -2
  82. package/compiler_rt/sin.zig +139 -56
  83. package/compiler_rt/sincos.zig +277 -72
  84. package/compiler_rt/sqrt.zig +0 -2
  85. package/compiler_rt/ssp.zig +1 -1
  86. package/compiler_rt/tan.zig +117 -48
  87. package/compiler_rt/trig.zig +256 -6
  88. package/compiler_rt/trunc.zig +0 -2
  89. package/compiler_rt/udivmodei4.zig +28 -0
  90. package/compiler_rt.zig +2 -0
  91. package/fuzzer.zig +857 -307
  92. package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
  93. package/libc/musl/src/math/pow.c +343 -0
  94. package/package.json +1 -1
  95. package/std/Build/Cache.zig +6 -6
  96. package/std/Build/Fuzz.zig +6 -19
  97. package/std/Build/Module.zig +1 -1
  98. package/std/Build/Step/CheckObject.zig +3 -3
  99. package/std/Build/Step/Compile.zig +18 -1
  100. package/std/Build/Step/ConfigHeader.zig +49 -33
  101. package/std/Build/Step/InstallArtifact.zig +18 -0
  102. package/std/Build/Step/Run.zig +538 -89
  103. package/std/Build/Step/TranslateC.zig +0 -6
  104. package/std/Build/Step.zig +10 -19
  105. package/std/Build/WebServer.zig +31 -19
  106. package/std/Build/abi.zig +47 -11
  107. package/std/Build.zig +17 -17
  108. package/std/Io/Dir.zig +7 -2
  109. package/std/Io/Dispatch.zig +5 -13
  110. package/std/Io/File/Reader.zig +3 -1
  111. package/std/Io/File/Writer.zig +8 -6
  112. package/std/Io/File.zig +1 -0
  113. package/std/Io/Kqueue.zig +2 -2
  114. package/std/Io/Reader.zig +8 -9
  115. package/std/Io/Semaphore.zig +112 -17
  116. package/std/Io/Terminal.zig +1 -1
  117. package/std/Io/Threaded.zig +352 -180
  118. package/std/Io/Uring.zig +15 -16
  119. package/std/Io/Writer.zig +46 -42
  120. package/std/Io/net.zig +11 -11
  121. package/std/Io.zig +1052 -20
  122. package/std/SemanticVersion.zig +1 -1
  123. package/std/Target/Query.zig +2 -2
  124. package/std/Target.zig +53 -7
  125. package/std/Thread.zig +8 -3
  126. package/std/array_hash_map.zig +105 -573
  127. package/std/array_list.zig +22 -31
  128. package/std/bit_set.zig +22 -6
  129. package/std/builtin/assembly.zig +68 -0
  130. package/std/builtin.zig +4 -0
  131. package/std/c/haiku.zig +3 -0
  132. package/std/c/serenity.zig +1 -6
  133. package/std/c.zig +106 -24
  134. package/std/compress/flate/Compress.zig +3 -3
  135. package/std/compress/flate/Decompress.zig +2 -3
  136. package/std/compress/zstd/Decompress.zig +2 -4
  137. package/std/crypto/Certificate/Bundle.zig +15 -1
  138. package/std/crypto/Certificate.zig +13 -1
  139. package/std/crypto/ascon.zig +75 -33
  140. package/std/crypto/codecs/asn1/Oid.zig +12 -1
  141. package/std/crypto/codecs/asn1.zig +33 -18
  142. package/std/crypto/codecs/base64_hex_ct.zig +16 -8
  143. package/std/crypto/ml_kem.zig +2 -9
  144. package/std/crypto/tls/Client.zig +79 -4
  145. package/std/crypto/tls.zig +1 -1
  146. package/std/crypto.zig +1 -0
  147. package/std/debug/Dwarf.zig +29 -9
  148. package/std/debug/Info.zig +4 -0
  149. package/std/debug/MachOFile.zig +46 -8
  150. package/std/debug/Pdb.zig +540 -37
  151. package/std/debug/SelfInfo/Elf.zig +19 -18
  152. package/std/debug/SelfInfo/MachO.zig +18 -7
  153. package/std/debug/SelfInfo/Windows.zig +138 -36
  154. package/std/debug.zig +181 -66
  155. package/std/enums.zig +25 -19
  156. package/std/fmt.zig +8 -3
  157. package/std/fs/path.zig +6 -4
  158. package/std/heap/ArenaAllocator.zig +145 -154
  159. package/std/heap/BufferFirstAllocator.zig +165 -0
  160. package/std/heap/debug_allocator.zig +7 -7
  161. package/std/heap.zig +2 -126
  162. package/std/http/Client.zig +31 -30
  163. package/std/http.zig +14 -13
  164. package/std/json/Scanner.zig +2 -2
  165. package/std/json/Stringify.zig +3 -3
  166. package/std/json/dynamic.zig +4 -4
  167. package/std/math/big/int.zig +16 -17
  168. package/std/mem/Allocator.zig +4 -5
  169. package/std/mem.zig +48 -0
  170. package/std/os/emscripten.zig +2 -18
  171. package/std/os/linux/IoUring.zig +2 -0
  172. package/std/os/linux/aarch64.zig +41 -12
  173. package/std/os/linux/arc.zig +173 -0
  174. package/std/os/linux/arm.zig +41 -12
  175. package/std/os/linux/hexagon.zig +33 -11
  176. package/std/os/linux/loongarch32.zig +41 -13
  177. package/std/os/linux/loongarch64.zig +41 -12
  178. package/std/os/linux/m68k.zig +41 -13
  179. package/std/os/linux/mips.zig +67 -36
  180. package/std/os/linux/mips64.zig +60 -29
  181. package/std/os/linux/mipsn32.zig +60 -29
  182. package/std/os/linux/or1k.zig +41 -12
  183. package/std/os/linux/powerpc.zig +41 -12
  184. package/std/os/linux/powerpc64.zig +41 -12
  185. package/std/os/linux/riscv32.zig +41 -12
  186. package/std/os/linux/riscv64.zig +41 -12
  187. package/std/os/linux/s390x.zig +44 -7
  188. package/std/os/linux/sparc64.zig +83 -52
  189. package/std/os/linux/thumb.zig +52 -36
  190. package/std/os/linux/x32.zig +41 -12
  191. package/std/os/linux/x86.zig +42 -13
  192. package/std/os/linux/x86_64.zig +41 -12
  193. package/std/os/linux.zig +419 -438
  194. package/std/os/uefi/tables/boot_services.zig +9 -8
  195. package/std/os/windows.zig +2 -2
  196. package/std/os.zig +41 -0
  197. package/std/pdb.zig +143 -4
  198. package/std/posix.zig +6 -12
  199. package/std/priority_dequeue.zig +13 -12
  200. package/std/priority_queue.zig +5 -4
  201. package/std/process/Child.zig +1 -1
  202. package/std/process/Environ.zig +1 -1
  203. package/std/process.zig +1 -1
  204. package/std/sort.zig +3 -3
  205. package/std/start.zig +17 -4
  206. package/std/std.zig +19 -6
  207. package/std/testing/FailingAllocator.zig +4 -4
  208. package/std/testing/Smith.zig +37 -2
  209. package/std/zig/Ast/Render.zig +187 -459
  210. package/std/zig/Ast.zig +0 -4
  211. package/std/zig/AstGen.zig +86 -103
  212. package/std/zig/AstRlAnnotate.zig +0 -11
  213. package/std/zig/AstSmith.zig +2602 -0
  214. package/std/zig/BuiltinFn.zig +0 -32
  215. package/std/zig/Client.zig +8 -3
  216. package/std/zig/LibCInstallation.zig +4 -3
  217. package/std/zig/Parse.zig +90 -81
  218. package/std/zig/Server.zig +26 -0
  219. package/std/zig/WindowsSdk.zig +13 -13
  220. package/std/zig/Zir.zig +66 -62
  221. package/std/zig/ZonGen.zig +6 -5
  222. package/std/zig/c_translation/helpers.zig +14 -9
  223. package/std/zig/llvm/Builder.zig +119 -60
  224. package/std/zig/system.zig +20 -4
  225. package/std/zig/tokenizer.zig +2 -1
  226. package/std/zig.zig +7 -10
  227. package/std/zip.zig +5 -5
  228. package/zig.h +340 -1
  229. package/compiler/aro/aro/Driver/Filesystem.zig +0 -241
  230. package/libc/mingw/complex/cabs.c +0 -48
  231. package/libc/mingw/complex/cabsf.c +0 -48
  232. package/libc/mingw/complex/cacos.c +0 -50
  233. package/libc/mingw/complex/cacosf.c +0 -50
  234. package/libc/mingw/complex/carg.c +0 -48
  235. package/libc/mingw/complex/cargf.c +0 -48
  236. package/libc/mingw/complex/casin.c +0 -50
  237. package/libc/mingw/complex/casinf.c +0 -50
  238. package/libc/mingw/complex/catan.c +0 -50
  239. package/libc/mingw/complex/catanf.c +0 -50
  240. package/libc/mingw/complex/ccos.c +0 -50
  241. package/libc/mingw/complex/ccosf.c +0 -50
  242. package/libc/mingw/complex/cexp.c +0 -48
  243. package/libc/mingw/complex/cexpf.c +0 -48
  244. package/libc/mingw/complex/cimag.c +0 -48
  245. package/libc/mingw/complex/cimagf.c +0 -48
  246. package/libc/mingw/complex/clog.c +0 -48
  247. package/libc/mingw/complex/clog10.c +0 -49
  248. package/libc/mingw/complex/clog10f.c +0 -49
  249. package/libc/mingw/complex/clogf.c +0 -48
  250. package/libc/mingw/complex/conj.c +0 -48
  251. package/libc/mingw/complex/conjf.c +0 -48
  252. package/libc/mingw/complex/cpow.c +0 -48
  253. package/libc/mingw/complex/cpowf.c +0 -48
  254. package/libc/mingw/complex/cproj.c +0 -48
  255. package/libc/mingw/complex/cprojf.c +0 -48
  256. package/libc/mingw/complex/creal.c +0 -48
  257. package/libc/mingw/complex/crealf.c +0 -48
  258. package/libc/mingw/complex/csin.c +0 -50
  259. package/libc/mingw/complex/csinf.c +0 -50
  260. package/libc/mingw/complex/csqrt.c +0 -48
  261. package/libc/mingw/complex/csqrtf.c +0 -48
  262. package/libc/mingw/complex/ctan.c +0 -50
  263. package/libc/mingw/complex/ctanf.c +0 -50
  264. package/libc/mingw/math/arm/s_rint.c +0 -86
  265. package/libc/mingw/math/arm/s_rintf.c +0 -51
  266. package/libc/mingw/math/arm/sincos.S +0 -30
  267. package/libc/mingw/math/arm-common/sincosl.c +0 -13
  268. package/libc/mingw/math/arm64/rint.c +0 -12
  269. package/libc/mingw/math/arm64/rintf.c +0 -12
  270. package/libc/mingw/math/arm64/sincos.S +0 -32
  271. package/libc/mingw/math/bsd_private_base.h +0 -148
  272. package/libc/mingw/math/fdiml.c +0 -24
  273. package/libc/mingw/math/frexpf.c +0 -13
  274. package/libc/mingw/math/frexpl.c +0 -71
  275. package/libc/mingw/math/x86/acosf.c +0 -29
  276. package/libc/mingw/math/x86/atanf.c +0 -23
  277. package/libc/mingw/math/x86/atanl.c +0 -18
  278. package/libc/mingw/math/x86/cos.def.h +0 -65
  279. package/libc/mingw/math/x86/cosl.c +0 -46
  280. package/libc/mingw/math/x86/cosl_internal.S +0 -55
  281. package/libc/mingw/math/x86/ldexp.c +0 -23
  282. package/libc/mingw/math/x86/scalbn.S +0 -41
  283. package/libc/mingw/math/x86/scalbnf.S +0 -40
  284. package/libc/mingw/math/x86/sin.def.h +0 -65
  285. package/libc/mingw/math/x86/sinl.c +0 -46
  286. package/libc/mingw/math/x86/sinl_internal.S +0 -58
  287. package/libc/mingw/math/x86/tanl.S +0 -62
  288. package/libc/mingw/misc/btowc.c +0 -28
  289. package/libc/mingw/misc/wcstof.c +0 -66
  290. package/libc/mingw/misc/wcstoimax.c +0 -132
  291. package/libc/mingw/misc/wcstoumax.c +0 -126
  292. package/libc/mingw/misc/wctob.c +0 -29
  293. package/libc/mingw/misc/winbs_uint64.c +0 -6
  294. package/libc/mingw/misc/winbs_ulong.c +0 -6
  295. package/libc/mingw/misc/winbs_ushort.c +0 -6
  296. package/libc/mingw/stdio/_Exit.c +0 -10
  297. package/libc/mingw/stdio/_findfirst64i32.c +0 -21
  298. package/libc/mingw/stdio/_findnext64i32.c +0 -21
  299. package/libc/mingw/stdio/_fstat64i32.c +0 -37
  300. package/libc/mingw/stdio/_stat64i32.c +0 -37
  301. package/libc/mingw/stdio/_wfindfirst64i32.c +0 -21
  302. package/libc/mingw/stdio/_wfindnext64i32.c +0 -21
  303. package/libc/mingw/stdio/_wstat64i32.c +0 -37
  304. package/libc/mingw/winpthreads/spinlock.c +0 -82
  305. package/libc/musl/src/legacy/isastream.c +0 -7
  306. package/libc/musl/src/legacy/valloc.c +0 -8
  307. package/libc/musl/src/linux/tee.c +0 -8
  308. package/libc/musl/src/math/__cosl.c +0 -96
  309. package/libc/musl/src/math/__sinl.c +0 -78
  310. package/libc/musl/src/math/__tanl.c +0 -143
  311. package/libc/musl/src/math/aarch64/lrint.c +0 -10
  312. package/libc/musl/src/math/aarch64/lrintf.c +0 -10
  313. package/libc/musl/src/math/aarch64/rintf.c +0 -7
  314. package/libc/musl/src/math/cosl.c +0 -39
  315. package/libc/musl/src/math/fdim.c +0 -10
  316. package/libc/musl/src/math/fdimf.c +0 -10
  317. package/libc/musl/src/math/fdiml.c +0 -18
  318. package/libc/musl/src/math/finite.c +0 -7
  319. package/libc/musl/src/math/finitef.c +0 -7
  320. package/libc/musl/src/math/frexp.c +0 -23
  321. package/libc/musl/src/math/frexpf.c +0 -23
  322. package/libc/musl/src/math/frexpl.c +0 -29
  323. package/libc/musl/src/math/i386/lrint.c +0 -8
  324. package/libc/musl/src/math/i386/lrintf.c +0 -8
  325. package/libc/musl/src/math/i386/rintf.c +0 -7
  326. package/libc/musl/src/math/lrint.c +0 -72
  327. package/libc/musl/src/math/lrintf.c +0 -8
  328. package/libc/musl/src/math/powerpc64/lrint.c +0 -16
  329. package/libc/musl/src/math/powerpc64/lrintf.c +0 -16
  330. package/libc/musl/src/math/rintf.c +0 -30
  331. package/libc/musl/src/math/s390x/rintf.c +0 -15
  332. package/libc/musl/src/math/sincosl.c +0 -60
  333. package/libc/musl/src/math/sinl.c +0 -41
  334. package/libc/musl/src/math/tanl.c +0 -29
  335. package/libc/musl/src/math/x32/lrint.s +0 -5
  336. package/libc/musl/src/math/x32/lrintf.s +0 -5
  337. package/libc/musl/src/math/x86_64/lrint.c +0 -8
  338. package/libc/musl/src/math/x86_64/lrintf.c +0 -8
  339. package/libc/musl/src/string/strdup.c +0 -10
  340. package/libc/musl/src/string/strndup.c +0 -12
  341. package/libc/musl/src/string/wcsdup.c +0 -10
  342. package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
  343. package/libc/musl/src/thread/pthread_spin_init.c +0 -6
  344. package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
  345. package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
  346. package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
  347. package/libc/musl/src/unistd/dup2.c +0 -20
  348. package/libc/musl/src/unistd/dup3.c +0 -26
  349. package/libc/wasi/libc-bottom-half/sources/reallocarray.c +0 -14
  350. package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
  351. package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
  352. package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
package/std/os/linux.zig CHANGED
@@ -31,6 +31,7 @@ test {
31
31
 
32
32
  const arch_bits = switch (native_arch) {
33
33
  .aarch64, .aarch64_be => @import("linux/aarch64.zig"),
34
+ .arc, .arceb => @import("linux/arc.zig"),
34
35
  .arm, .armeb, .thumb, .thumbeb => @import("linux/arm.zig"),
35
36
  .hexagon => @import("linux/hexagon.zig"),
36
37
  .loongarch32 => @import("linux/loongarch32.zig"),
@@ -58,6 +59,7 @@ const arch_bits = switch (native_arch) {
58
59
 
59
60
  const syscall_bits = if (native_arch.isThumb()) @import("linux/thumb.zig") else arch_bits;
60
61
 
62
+ pub const syscall_arg_t = syscall_bits.syscall_arg_t;
61
63
  pub const syscall0 = syscall_bits.syscall0;
62
64
  pub const syscall1 = syscall_bits.syscall1;
63
65
  pub const syscall2 = syscall_bits.syscall2;
@@ -77,9 +79,9 @@ pub fn clone(
77
79
  stack: usize,
78
80
  flags: u32,
79
81
  arg: usize,
80
- ptid: ?*i32,
82
+ ptid: ?*pid_t,
81
83
  tp: usize, // aka tls
82
- ctid: ?*i32,
84
+ ctid: ?*pid_t,
83
85
  ) usize {
84
86
  // Can't directly call a naked function; cast to C calling convention first.
85
87
  return @as(*const fn (
@@ -87,9 +89,9 @@ pub fn clone(
87
89
  usize,
88
90
  u32,
89
91
  usize,
90
- ?*i32,
92
+ ?*pid_t,
91
93
  usize,
92
- ?*i32,
94
+ ?*pid_t,
93
95
  ) callconv(.c) usize, @ptrCast(&syscall_bits.clone))(func, stack, flags, arg, ptid, tp, ctid);
94
96
  }
95
97
 
@@ -97,6 +99,8 @@ pub const ARCH = arch_bits.ARCH;
97
99
  pub const HWCAP = arch_bits.HWCAP;
98
100
  pub const SC = arch_bits.SC;
99
101
  pub const VDSO = arch_bits.VDSO;
102
+ pub const user_desc = arch_bits.user_desc;
103
+
100
104
  pub const blkcnt_t = u64;
101
105
  pub const blksize_t = u32;
102
106
  pub const dev_t = u64;
@@ -104,8 +108,13 @@ pub const ino_t = u64;
104
108
  pub const mode_t = u32;
105
109
  pub const nlink_t = u32;
106
110
  pub const off_t = i64;
111
+ pub const pid_t = i32;
112
+ pub const fd_t = i32;
113
+ pub const socket_t = fd_t;
114
+ pub const uid_t = u32;
115
+ pub const gid_t = u32;
116
+ pub const clock_t = isize;
107
117
  pub const time_t = arch_bits.time_t;
108
- pub const user_desc = arch_bits.user_desc;
109
118
 
110
119
  pub const tls = @import("linux/tls.zig");
111
120
  pub const BPF = @import("linux/bpf.zig");
@@ -274,7 +283,13 @@ pub const MAP = switch (native_arch) {
274
283
  UNINITIALIZED: bool = false,
275
284
  _: u5 = 0,
276
285
  },
277
- .hexagon, .m68k, .or1k, .s390x => packed struct(u32) {
286
+ .arc,
287
+ .arceb,
288
+ .hexagon,
289
+ .m68k,
290
+ .or1k,
291
+ .s390x,
292
+ => packed struct(u32) {
278
293
  TYPE: MAP_TYPE,
279
294
  FIXED: bool = false,
280
295
  ANONYMOUS: bool = false,
@@ -451,7 +466,12 @@ pub const O = switch (native_arch) {
451
466
  TMPFILE: bool = false,
452
467
  _23: u9 = 0,
453
468
  },
454
- .hexagon, .or1k, .s390x => packed struct(u32) {
469
+ .arc,
470
+ .arceb,
471
+ .hexagon,
472
+ .or1k,
473
+ .s390x,
474
+ => packed struct(u32) {
455
475
  ACCMODE: ACCMODE = .RDONLY,
456
476
  _2: u4 = 0,
457
477
  CREAT: bool = false,
@@ -554,9 +574,11 @@ fn getauxvalImpl(index: usize) callconv(.c) usize {
554
574
  // in a even-aligned register pair.
555
575
  const require_aligned_register_pair =
556
576
  builtin.cpu.arch.isArm() or
577
+ builtin.cpu.arch == .csky or
557
578
  builtin.cpu.arch == .hexagon or
558
579
  builtin.cpu.arch.isMIPS32() or
559
- builtin.cpu.arch.isPowerPC32();
580
+ builtin.cpu.arch.isPowerPC32() or
581
+ builtin.cpu.arch.isXtensa();
560
582
 
561
583
  // Split a 64bit value into a {LSB,MSB} pair.
562
584
  // The LE/BE variants specify the endianness to assume.
@@ -599,13 +621,13 @@ pub fn brk(addr: usize) usize {
599
621
  return syscall1(.brk, addr);
600
622
  }
601
623
 
602
- pub fn dup(old: i32) usize {
603
- return syscall1(.dup, @as(usize, @bitCast(@as(isize, old))));
624
+ pub fn dup(old: fd_t) usize {
625
+ return syscall1(.dup, @as(u32, @bitCast(old)));
604
626
  }
605
627
 
606
- pub fn dup2(old: i32, new: i32) usize {
628
+ pub fn dup2(old: fd_t, new: fd_t) usize {
607
629
  if (@hasField(SYS, "dup2")) {
608
- return syscall2(.dup2, @as(usize, @bitCast(@as(isize, old))), @as(usize, @bitCast(@as(isize, new))));
630
+ return syscall2(.dup2, @as(u32, @bitCast(old)), @as(u32, @bitCast(new)));
609
631
  } else {
610
632
  if (old == new) {
611
633
  if (std.debug.runtime_safety) {
@@ -614,13 +636,13 @@ pub fn dup2(old: i32, new: i32) usize {
614
636
  }
615
637
  return @as(usize, @intCast(old));
616
638
  } else {
617
- return syscall3(.dup3, @as(usize, @bitCast(@as(isize, old))), @as(usize, @bitCast(@as(isize, new))), 0);
639
+ return syscall3(.dup3, @as(u32, @bitCast(old)), @as(u32, @bitCast(new)), 0);
618
640
  }
619
641
  }
620
642
  }
621
643
 
622
- pub fn dup3(old: i32, new: i32, flags: u32) usize {
623
- return syscall3(.dup3, @as(usize, @bitCast(@as(isize, old))), @as(usize, @bitCast(@as(isize, new))), flags);
644
+ pub fn dup3(old: fd_t, new: fd_t, flags: u32) usize {
645
+ return syscall3(.dup3, @as(u32, @bitCast(old)), @as(u32, @bitCast(new)), flags);
624
646
  }
625
647
 
626
648
  pub fn chdir(path: [*:0]const u8) usize {
@@ -628,7 +650,7 @@ pub fn chdir(path: [*:0]const u8) usize {
628
650
  }
629
651
 
630
652
  pub fn fchdir(fd: fd_t) usize {
631
- return syscall1(.fchdir, @as(usize, @bitCast(@as(isize, fd))));
653
+ return syscall1(.fchdir, @as(u32, @bitCast(fd)));
632
654
  }
633
655
 
634
656
  pub fn chroot(path: [*:0]const u8) usize {
@@ -650,7 +672,7 @@ pub const EXECVEAT = packed struct(u32) {
650
672
  };
651
673
 
652
674
  pub fn execveat(dirfd: fd_t, path: [*:0]const u8, argv: [*:null]const ?[*:0]const u8, envp: [*:null]const ?[*:0]const u8, flags: EXECVEAT) usize {
653
- return syscall5(.execveat, fd_to_usize(dirfd), @intFromPtr(path), @intFromPtr(argv), @intFromPtr(envp), @as(u32, @bitCast(flags)));
675
+ return syscall5(.execveat, @as(u32, @bitCast(dirfd)), @intFromPtr(path), @intFromPtr(argv), @intFromPtr(envp), @as(u32, @bitCast(flags)));
654
676
  }
655
677
 
656
678
  pub fn fork() usize {
@@ -663,37 +685,28 @@ pub fn fork() usize {
663
685
  }
664
686
  }
665
687
 
666
- /// This must be inline, and inline call the syscall function, because if the
667
- /// child does a return it will clobber the parent's stack.
668
- /// It is advised to avoid this function and use clone instead, because
669
- /// the compiler is not aware of how vfork affects control flow and you may
670
- /// see different results in optimized builds.
671
- pub inline fn vfork() usize {
672
- return @call(.always_inline, syscall0, .{.vfork});
673
- }
674
-
675
- pub fn futimens(fd: i32, times: ?*const [2]timespec) usize {
688
+ pub fn futimens(fd: fd_t, times: ?*const [2]timespec) usize {
676
689
  return utimensat(fd, null, times, 0);
677
690
  }
678
691
 
679
- pub fn utimensat(dirfd: i32, path: ?[*:0]const u8, times: ?*const [2]timespec, flags: u32) usize {
692
+ pub fn utimensat(dirfd: fd_t, path: ?[*:0]const u8, times: ?*const [2]timespec, flags: u32) usize {
680
693
  return syscall4(
681
694
  if (@hasField(SYS, "utimensat") and native_arch != .hexagon) .utimensat else .utimensat_time64,
682
- @as(usize, @bitCast(@as(isize, dirfd))),
695
+ @as(u32, @bitCast(dirfd)),
683
696
  @intFromPtr(path),
684
697
  @intFromPtr(times),
685
698
  flags,
686
699
  );
687
700
  }
688
701
 
689
- pub fn fallocate(fd: i32, mode: i32, offset: i64, length: i64) usize {
690
- if (usize_bits < 64) {
702
+ pub fn fallocate(fd: fd_t, mode: mode_t, offset: off_t, length: off_t) usize {
703
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) {
691
704
  const offset_halves = splitValue64(offset);
692
705
  const length_halves = splitValue64(length);
693
706
  return syscall6(
694
707
  .fallocate,
695
- @as(usize, @bitCast(@as(isize, fd))),
696
- @as(usize, @bitCast(@as(isize, mode))),
708
+ @as(u32, @bitCast(fd)),
709
+ mode,
697
710
  offset_halves[0],
698
711
  offset_halves[1],
699
712
  length_halves[0],
@@ -702,8 +715,8 @@ pub fn fallocate(fd: i32, mode: i32, offset: i64, length: i64) usize {
702
715
  } else {
703
716
  return syscall4(
704
717
  .fallocate,
705
- @as(usize, @bitCast(@as(isize, fd))),
706
- @as(usize, @bitCast(@as(isize, mode))),
718
+ @as(u32, @bitCast(fd)),
719
+ mode,
707
720
  @as(u64, @bitCast(offset)),
708
721
  @as(u64, @bitCast(length)),
709
722
  );
@@ -874,21 +887,21 @@ pub fn getcwd(buf: [*]u8, size: usize) usize {
874
887
  return syscall2(.getcwd, @intFromPtr(buf), size);
875
888
  }
876
889
 
877
- pub fn getdents(fd: i32, dirp: [*]u8, len: usize) usize {
890
+ pub fn getdents(fd: fd_t, dirp: [*]u8, len: c_uint) usize {
878
891
  return syscall3(
879
892
  .getdents,
880
- @as(usize, @bitCast(@as(isize, fd))),
893
+ @as(u32, @bitCast(fd)),
881
894
  @intFromPtr(dirp),
882
- @min(len, maxInt(c_int)),
895
+ len,
883
896
  );
884
897
  }
885
898
 
886
- pub fn getdents64(fd: i32, dirp: [*]u8, len: usize) usize {
899
+ pub fn getdents64(fd: fd_t, dirp: [*]u8, len: c_uint) usize {
887
900
  return syscall3(
888
901
  .getdents64,
889
- @as(usize, @bitCast(@as(isize, fd))),
902
+ @as(u32, @bitCast(fd)),
890
903
  @intFromPtr(dirp),
891
- @min(len, maxInt(c_int)),
904
+ len,
892
905
  );
893
906
  }
894
907
 
@@ -896,12 +909,12 @@ pub fn inotify_init1(flags: u32) usize {
896
909
  return syscall1(.inotify_init1, flags);
897
910
  }
898
911
 
899
- pub fn inotify_add_watch(fd: i32, pathname: [*:0]const u8, mask: u32) usize {
900
- return syscall3(.inotify_add_watch, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(pathname), mask);
912
+ pub fn inotify_add_watch(fd: fd_t, pathname: [*:0]const u8, mask: u32) usize {
913
+ return syscall3(.inotify_add_watch, @as(u32, @bitCast(fd)), @intFromPtr(pathname), mask);
901
914
  }
902
915
 
903
- pub fn inotify_rm_watch(fd: i32, wd: i32) usize {
904
- return syscall2(.inotify_rm_watch, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, wd))));
916
+ pub fn inotify_rm_watch(fd: fd_t, wd: fd_t) usize {
917
+ return syscall2(.inotify_rm_watch, @as(u32, @bitCast(fd)), @as(u32, @bitCast(wd)));
905
918
  }
906
919
 
907
920
  pub fn fanotify_init(flags: fanotify.InitFlags, event_f_flags: u32) usize {
@@ -915,24 +928,24 @@ pub fn fanotify_mark(
915
928
  dirfd: fd_t,
916
929
  pathname: ?[*:0]const u8,
917
930
  ) usize {
918
- if (usize_bits < 64) {
931
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) {
919
932
  const mask_halves = splitValue64(@bitCast(mask));
920
933
  return syscall6(
921
934
  .fanotify_mark,
922
- @bitCast(@as(isize, fd)),
935
+ @as(u32, @bitCast(fd)),
923
936
  @as(u32, @bitCast(flags)),
924
937
  mask_halves[0],
925
938
  mask_halves[1],
926
- @bitCast(@as(isize, dirfd)),
939
+ @as(u32, @bitCast(dirfd)),
927
940
  @intFromPtr(pathname),
928
941
  );
929
942
  } else {
930
943
  return syscall5(
931
944
  .fanotify_mark,
932
- @bitCast(@as(isize, fd)),
945
+ @as(u32, @bitCast(fd)),
933
946
  @as(u32, @bitCast(flags)),
934
- @bitCast(mask),
935
- @bitCast(@as(isize, dirfd)),
947
+ @as(u64, @bitCast(mask)),
948
+ @as(u32, @bitCast(dirfd)),
936
949
  @intFromPtr(pathname),
937
950
  );
938
951
  }
@@ -941,7 +954,7 @@ pub fn fanotify_mark(
941
954
  pub fn name_to_handle_at(
942
955
  dirfd: fd_t,
943
956
  pathname: [*:0]const u8,
944
- handle: *std.os.linux.file_handle,
957
+ handle: *file_handle,
945
958
  mount_id: *i32,
946
959
  flags: u32,
947
960
  ) usize {
@@ -959,27 +972,27 @@ pub fn readlink(noalias path: [*:0]const u8, noalias buf_ptr: [*]u8, buf_len: us
959
972
  if (@hasField(SYS, "readlink")) {
960
973
  return syscall3(.readlink, @intFromPtr(path), @intFromPtr(buf_ptr), buf_len);
961
974
  } else {
962
- return syscall4(.readlinkat, @as(usize, @bitCast(@as(isize, AT.FDCWD))), @intFromPtr(path), @intFromPtr(buf_ptr), buf_len);
975
+ return syscall4(.readlinkat, @as(u32, @bitCast(@as(i32, AT.FDCWD))), @intFromPtr(path), @intFromPtr(buf_ptr), buf_len);
963
976
  }
964
977
  }
965
978
 
966
- pub fn readlinkat(dirfd: i32, noalias path: [*:0]const u8, noalias buf_ptr: [*]u8, buf_len: usize) usize {
967
- return syscall4(.readlinkat, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), @intFromPtr(buf_ptr), buf_len);
979
+ pub fn readlinkat(dirfd: fd_t, noalias path: [*:0]const u8, noalias buf_ptr: [*]u8, buf_len: usize) usize {
980
+ return syscall4(.readlinkat, @as(u32, @bitCast(dirfd)), @intFromPtr(path), @intFromPtr(buf_ptr), buf_len);
968
981
  }
969
982
 
970
983
  pub fn mkdir(path: [*:0]const u8, mode: mode_t) usize {
971
984
  if (@hasField(SYS, "mkdir")) {
972
985
  return syscall2(.mkdir, @intFromPtr(path), mode);
973
986
  } else {
974
- return syscall3(.mkdirat, @as(usize, @bitCast(@as(isize, AT.FDCWD))), @intFromPtr(path), mode);
987
+ return syscall3(.mkdirat, @as(u32, @bitCast(@as(i32, AT.FDCWD))), @intFromPtr(path), mode);
975
988
  }
976
989
  }
977
990
 
978
- pub fn mkdirat(dirfd: i32, path: [*:0]const u8, mode: mode_t) usize {
979
- return syscall3(.mkdirat, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), mode);
991
+ pub fn mkdirat(dirfd: fd_t, path: [*:0]const u8, mode: mode_t) usize {
992
+ return syscall3(.mkdirat, @as(u32, @bitCast(dirfd)), @intFromPtr(path), mode);
980
993
  }
981
994
 
982
- pub fn mknod(path: [*:0]const u8, mode: u32, dev: u32) usize {
995
+ pub fn mknod(path: [*:0]const u8, mode: mode_t, dev: dev_t) usize {
983
996
  if (@hasField(SYS, "mknod")) {
984
997
  return syscall3(.mknod, @intFromPtr(path), mode, dev);
985
998
  } else {
@@ -987,8 +1000,8 @@ pub fn mknod(path: [*:0]const u8, mode: u32, dev: u32) usize {
987
1000
  }
988
1001
  }
989
1002
 
990
- pub fn mknodat(dirfd: i32, path: [*:0]const u8, mode: u32, dev: u32) usize {
991
- return syscall4(.mknodat, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), mode, dev);
1003
+ pub fn mknodat(dirfd: dev_t, path: [*:0]const u8, mode: mode_t, dev: dev_t) usize {
1004
+ return syscall4(.mknodat, @as(u32, @bitCast(dirfd)), @intFromPtr(path), mode, dev);
992
1005
  }
993
1006
 
994
1007
  pub fn mount(special: ?[*:0]const u8, dir: [*:0]const u8, fstype: ?[*:0]const u8, flags: u32, data: usize) usize {
@@ -1024,7 +1037,14 @@ pub const MOVE_MOUNT = packed struct(u32) {
1024
1037
  };
1025
1038
 
1026
1039
  pub fn move_mount(from_dirfd: fd_t, from_path: [*:0]const u8, to_dirfd: fd_t, to_path: [*:0]const u8, flags: MOVE_MOUNT) usize {
1027
- return syscall5(.move_mount, fd_to_usize(from_dirfd), @intFromPtr(from_path), fd_to_usize(to_dirfd), @intFromPtr(to_path), @as(u32, @bitCast(flags)));
1040
+ return syscall5(
1041
+ .move_mount,
1042
+ @as(u32, @bitCast(from_dirfd)),
1043
+ @intFromPtr(from_path),
1044
+ @as(u32, @bitCast(to_dirfd)),
1045
+ @intFromPtr(to_path),
1046
+ @as(u32, @bitCast(flags)),
1047
+ );
1028
1048
  }
1029
1049
 
1030
1050
  pub const MOUNT_ATTR = packed struct(u32) {
@@ -1056,7 +1076,7 @@ pub const MOUNT_ATTR = packed struct(u32) {
1056
1076
  };
1057
1077
 
1058
1078
  pub fn mount_setattr(dirfd: fd_t, path: [*:0]const u8, flags: MOUNT_ATTR) usize {
1059
- return syscall3(.mount_setattr, fd_to_usize(dirfd), @intFromPtr(path), @as(u32, @bitCast(flags)));
1079
+ return syscall3(.mount_setattr, @as(u32, @bitCast(dirfd)), @intFromPtr(path), @as(u32, @bitCast(flags)));
1060
1080
  }
1061
1081
 
1062
1082
  pub const FSOPEN = packed struct(u32) {
@@ -1089,7 +1109,7 @@ pub const FSCONFIG_CMD = enum(u32) {
1089
1109
  };
1090
1110
 
1091
1111
  pub fn fsconfig(fd: fd_t, cmd: FSCONFIG_CMD, key: ?[*:0]const u8, value: ?[*:0]const u8, aux: u32) usize {
1092
- return syscall5(.fsconfig, fd_to_usize(fd), @intFromEnum(cmd), @intFromPtr(key), @intFromPtr(value), aux);
1112
+ return syscall5(.fsconfig, @as(u32, @bitCast(fd)), @intFromEnum(cmd), @intFromPtr(key), @intFromPtr(value), aux);
1093
1113
  }
1094
1114
 
1095
1115
  pub const FSMOUNT = packed struct(u32) {
@@ -1099,7 +1119,7 @@ pub const FSMOUNT = packed struct(u32) {
1099
1119
  };
1100
1120
 
1101
1121
  pub fn fsmount(fsfd: fd_t, flags: FSMOUNT, attr_flags: MOUNT_ATTR) usize {
1102
- return syscall3(.fsmount, fd_to_usize(fsfd), @as(u32, @bitCast(flags)), @as(u32, @bitCast(attr_flags)));
1122
+ return syscall3(.fsmount, @as(u32, @bitCast(fsfd)), @as(u32, @bitCast(flags)), @as(u32, @bitCast(attr_flags)));
1103
1123
  }
1104
1124
 
1105
1125
  pub const FSPICK = packed struct(u32) {
@@ -1112,7 +1132,7 @@ pub const FSPICK = packed struct(u32) {
1112
1132
  };
1113
1133
 
1114
1134
  pub fn fspick(dirfd: fd_t, path: [*:0]const u8, flags: FSPICK) usize {
1115
- return syscall3(.fspick, fd_to_usize(dirfd), @intFromPtr(path), @as(u32, @bitCast(flags)));
1135
+ return syscall3(.fspick, @as(u32, @bitCast(dirfd)), @intFromPtr(path), @as(u32, @bitCast(flags)));
1116
1136
  }
1117
1137
 
1118
1138
  pub fn pivot_root(new_root: [*:0]const u8, put_old: [*:0]const u8) usize {
@@ -1127,7 +1147,7 @@ fn mmap2Unit() u64 {
1127
1147
  };
1128
1148
  }
1129
1149
 
1130
- pub fn mmap(address: ?[*]u8, length: usize, prot: PROT, flags: MAP, fd: i32, offset: i64) usize {
1150
+ pub fn mmap(address: ?[*]u8, length: usize, prot: PROT, flags: MAP, fd: fd_t, offset: off_t) usize {
1131
1151
  if (@hasField(SYS, "mmap2")) {
1132
1152
  return syscall6(
1133
1153
  .mmap2,
@@ -1135,7 +1155,7 @@ pub fn mmap(address: ?[*]u8, length: usize, prot: PROT, flags: MAP, fd: i32, off
1135
1155
  length,
1136
1156
  @as(u32, @bitCast(prot)),
1137
1157
  @as(u32, @bitCast(flags)),
1138
- @bitCast(@as(isize, fd)),
1158
+ @as(u32, @bitCast(fd)),
1139
1159
  @truncate(@as(u64, @bitCast(offset)) / mmap2Unit()),
1140
1160
  );
1141
1161
  } else {
@@ -1148,7 +1168,7 @@ pub fn mmap(address: ?[*]u8, length: usize, prot: PROT, flags: MAP, fd: i32, off
1148
1168
  length,
1149
1169
  @as(u32, @bitCast(prot)),
1150
1170
  @as(u32, @bitCast(flags)),
1151
- @bitCast(@as(isize, fd)),
1171
+ @as(u32, @bitCast(fd)),
1152
1172
  @as(u64, @bitCast(offset)),
1153
1173
  }),
1154
1174
  ) else syscall6(
@@ -1157,7 +1177,7 @@ pub fn mmap(address: ?[*]u8, length: usize, prot: PROT, flags: MAP, fd: i32, off
1157
1177
  length,
1158
1178
  @as(u32, @bitCast(prot)),
1159
1179
  @as(u32, @bitCast(flags)),
1160
- @bitCast(@as(isize, fd)),
1180
+ @as(u32, @bitCast(fd)),
1161
1181
  @as(u64, @bitCast(offset)),
1162
1182
  );
1163
1183
  }
@@ -1264,70 +1284,142 @@ pub fn ppoll(fds: [*]pollfd, n: nfds_t, timeout: ?*timespec, sigmask: ?*const si
1264
1284
  );
1265
1285
  }
1266
1286
 
1267
- pub fn read(fd: i32, buf: [*]u8, count: usize) usize {
1268
- return syscall3(.read, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(buf), count);
1287
+ pub fn read(fd: fd_t, buf: [*]u8, count: usize) usize {
1288
+ return syscall3(.read, @as(u32, @bitCast(fd)), @intFromPtr(buf), count);
1269
1289
  }
1270
1290
 
1271
- pub fn preadv(fd: i32, iov: [*]const iovec, count: usize, offset: i64) usize {
1291
+ pub fn pread(fd: fd_t, buf: [*]u8, count: usize, offset: off_t) usize {
1292
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) {
1293
+ const offset_halves = splitValue64(offset);
1294
+ if (require_aligned_register_pair) {
1295
+ return syscall6(
1296
+ .pread64,
1297
+ @as(u32, @bitCast(fd)),
1298
+ @intFromPtr(buf),
1299
+ count,
1300
+ 0,
1301
+ offset_halves[0],
1302
+ offset_halves[1],
1303
+ );
1304
+ } else {
1305
+ return syscall5(
1306
+ .pread64,
1307
+ @as(u32, @bitCast(fd)),
1308
+ @intFromPtr(buf),
1309
+ count,
1310
+ offset_halves[0],
1311
+ offset_halves[1],
1312
+ );
1313
+ }
1314
+ } else {
1315
+ return syscall4(
1316
+ .pread64,
1317
+ @as(u32, @bitCast(fd)),
1318
+ @intFromPtr(buf),
1319
+ count,
1320
+ @as(u64, @bitCast(offset)),
1321
+ );
1322
+ }
1323
+ }
1324
+
1325
+ pub fn readv(fd: fd_t, iov: [*]const iovec, count: usize) usize {
1326
+ return syscall3(.readv, @as(u32, @bitCast(fd)), @intFromPtr(iov), count);
1327
+ }
1328
+
1329
+ pub fn preadv(fd: fd_t, iov: [*]const iovec, count: usize, offset: off_t) usize {
1272
1330
  const offset_u: u64 = @bitCast(offset);
1273
1331
  return syscall5(
1274
1332
  .preadv,
1275
- @as(usize, @bitCast(@as(isize, fd))),
1333
+ @as(u32, @bitCast(fd)),
1276
1334
  @intFromPtr(iov),
1277
1335
  count,
1278
1336
  // Kernel expects the offset is split into largest natural word-size.
1279
1337
  // See following link for detail:
1280
1338
  // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=601cc11d054ae4b5e9b5babec3d8e4667a2cb9b5
1281
- @as(usize, @truncate(offset_u)),
1282
- if (usize_bits < 64) @as(usize, @truncate(offset_u >> 32)) else 0,
1339
+ @truncate(offset_u),
1340
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) @truncate(offset_u >> 32) else 0,
1283
1341
  );
1284
1342
  }
1285
1343
 
1286
- pub fn preadv2(fd: i32, iov: [*]const iovec, count: usize, offset: i64, flags: kernel_rwf) usize {
1344
+ pub fn preadv2(fd: fd_t, iov: [*]const iovec, count: usize, offset: off_t, flags: kernel_rwf) usize {
1287
1345
  const offset_u: u64 = @bitCast(offset);
1288
1346
  return syscall6(
1289
1347
  .preadv2,
1290
- @as(usize, @bitCast(@as(isize, fd))),
1348
+ @as(u32, @bitCast(fd)),
1291
1349
  @intFromPtr(iov),
1292
1350
  count,
1293
1351
  // See comments in preadv
1294
- @as(usize, @truncate(offset_u)),
1295
- if (usize_bits < 64) @as(usize, @truncate(offset_u >> 32)) else 0,
1352
+ @truncate(offset_u),
1353
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) @truncate(offset_u >> 32) else 0,
1296
1354
  flags,
1297
1355
  );
1298
1356
  }
1299
1357
 
1300
- pub fn readv(fd: i32, iov: [*]const iovec, count: usize) usize {
1301
- return syscall3(.readv, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(iov), count);
1358
+ pub fn write(fd: fd_t, buf: [*]const u8, count: usize) usize {
1359
+ return syscall3(.write, @as(u32, @bitCast(fd)), @intFromPtr(buf), count);
1302
1360
  }
1303
1361
 
1304
- pub fn writev(fd: i32, iov: [*]const iovec_const, count: usize) usize {
1305
- return syscall3(.writev, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(iov), count);
1362
+ pub fn pwrite(fd: fd_t, buf: [*]const u8, count: usize, offset: off_t) usize {
1363
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) {
1364
+ const offset_halves = splitValue64(offset);
1365
+ if (require_aligned_register_pair) {
1366
+ return syscall6(
1367
+ .pwrite64,
1368
+ @as(u32, @bitCast(fd)),
1369
+ @intFromPtr(buf),
1370
+ count,
1371
+ 0,
1372
+ offset_halves[0],
1373
+ offset_halves[1],
1374
+ );
1375
+ } else {
1376
+ return syscall5(
1377
+ .pwrite64,
1378
+ @as(u32, @bitCast(fd)),
1379
+ @intFromPtr(buf),
1380
+ count,
1381
+ offset_halves[0],
1382
+ offset_halves[1],
1383
+ );
1384
+ }
1385
+ } else {
1386
+ return syscall4(
1387
+ .pwrite64,
1388
+ @as(u32, @bitCast(fd)),
1389
+ @intFromPtr(buf),
1390
+ count,
1391
+ @as(u64, @bitCast(offset)),
1392
+ );
1393
+ }
1394
+ }
1395
+
1396
+ pub fn writev(fd: fd_t, iov: [*]const iovec_const, count: usize) usize {
1397
+ return syscall3(.writev, @as(u32, @bitCast(fd)), @intFromPtr(iov), count);
1306
1398
  }
1307
1399
 
1308
- pub fn pwritev(fd: i32, iov: [*]const iovec_const, count: usize, offset: i64) usize {
1400
+ pub fn pwritev(fd: fd_t, iov: [*]const iovec_const, count: usize, offset: off_t) usize {
1309
1401
  const offset_u: u64 = @bitCast(offset);
1310
1402
  return syscall5(
1311
1403
  .pwritev,
1312
- @as(usize, @bitCast(@as(isize, fd))),
1404
+ @as(u32, @bitCast(fd)),
1313
1405
  @intFromPtr(iov),
1314
1406
  count,
1315
1407
  // See comments in preadv
1316
- @as(usize, @truncate(offset_u)),
1317
- if (usize_bits < 64) @as(usize, @truncate(offset_u >> 32)) else 0,
1408
+ @truncate(offset_u),
1409
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) @truncate(offset_u >> 32) else 0,
1318
1410
  );
1319
1411
  }
1320
1412
 
1321
- pub fn pwritev2(fd: i32, iov: [*]const iovec_const, count: usize, offset: i64, flags: kernel_rwf) usize {
1413
+ pub fn pwritev2(fd: fd_t, iov: [*]const iovec_const, count: usize, offset: off_t, flags: kernel_rwf) usize {
1322
1414
  const offset_u: u64 = @bitCast(offset);
1323
1415
  return syscall6(
1324
1416
  .pwritev2,
1325
- @as(usize, @bitCast(@as(isize, fd))),
1417
+ @as(u32, @bitCast(fd)),
1326
1418
  @intFromPtr(iov),
1327
1419
  count,
1328
1420
  // See comments in preadv
1329
- @as(usize, @truncate(offset_u)),
1330
- if (usize_bits < 64) @as(usize, @truncate(offset_u >> 32)) else 0,
1421
+ @truncate(offset_u),
1422
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) @truncate(offset_u >> 32) else 0,
1331
1423
  flags,
1332
1424
  );
1333
1425
  }
@@ -1336,7 +1428,7 @@ pub fn rmdir(path: [*:0]const u8) usize {
1336
1428
  if (@hasField(SYS, "rmdir")) {
1337
1429
  return syscall1(.rmdir, @intFromPtr(path));
1338
1430
  } else {
1339
- return syscall3(.unlinkat, @as(usize, @bitCast(@as(isize, AT.FDCWD))), @intFromPtr(path), AT.REMOVEDIR);
1431
+ return syscall3(.unlinkat, @as(u32, @bitCast(@as(i32, AT.FDCWD))), @intFromPtr(path), AT.REMOVEDIR);
1340
1432
  }
1341
1433
  }
1342
1434
 
@@ -1344,54 +1436,15 @@ pub fn symlink(existing: [*:0]const u8, new: [*:0]const u8) usize {
1344
1436
  if (@hasField(SYS, "symlink")) {
1345
1437
  return syscall2(.symlink, @intFromPtr(existing), @intFromPtr(new));
1346
1438
  } else {
1347
- return syscall3(.symlinkat, @intFromPtr(existing), @as(usize, @bitCast(@as(isize, AT.FDCWD))), @intFromPtr(new));
1439
+ return syscall3(.symlinkat, @intFromPtr(existing), @as(u32, @bitCast(@as(i32, AT.FDCWD))), @intFromPtr(new));
1348
1440
  }
1349
1441
  }
1350
1442
 
1351
- pub fn symlinkat(existing: [*:0]const u8, newfd: i32, newpath: [*:0]const u8) usize {
1352
- return syscall3(.symlinkat, @intFromPtr(existing), @as(usize, @bitCast(@as(isize, newfd))), @intFromPtr(newpath));
1353
- }
1354
-
1355
- pub fn pread(fd: i32, buf: [*]u8, count: usize, offset: i64) usize {
1356
- if (@hasField(SYS, "pread64") and usize_bits < 64) {
1357
- const offset_halves = splitValue64(offset);
1358
- if (require_aligned_register_pair) {
1359
- return syscall6(
1360
- .pread64,
1361
- @as(usize, @bitCast(@as(isize, fd))),
1362
- @intFromPtr(buf),
1363
- count,
1364
- 0,
1365
- offset_halves[0],
1366
- offset_halves[1],
1367
- );
1368
- } else {
1369
- return syscall5(
1370
- .pread64,
1371
- @as(usize, @bitCast(@as(isize, fd))),
1372
- @intFromPtr(buf),
1373
- count,
1374
- offset_halves[0],
1375
- offset_halves[1],
1376
- );
1377
- }
1378
- } else {
1379
- // Some architectures (eg. 64bit SPARC) pread is called pread64.
1380
- const syscall_number = if (!@hasField(SYS, "pread") and @hasField(SYS, "pread64"))
1381
- .pread64
1382
- else
1383
- .pread;
1384
- return syscall4(
1385
- syscall_number,
1386
- @as(usize, @bitCast(@as(isize, fd))),
1387
- @intFromPtr(buf),
1388
- count,
1389
- @as(u64, @bitCast(offset)),
1390
- );
1391
- }
1443
+ pub fn symlinkat(existing: [*:0]const u8, newfd: fd_t, newpath: [*:0]const u8) usize {
1444
+ return syscall3(.symlinkat, @intFromPtr(existing), @as(u32, @bitCast(newfd)), @intFromPtr(newpath));
1392
1445
  }
1393
1446
 
1394
- pub fn access(path: [*:0]const u8, mode: u32) usize {
1447
+ pub fn access(path: [*:0]const u8, mode: mode_t) usize {
1395
1448
  if (@hasField(SYS, "access")) {
1396
1449
  return syscall2(.access, @intFromPtr(path), mode);
1397
1450
  } else {
@@ -1399,19 +1452,19 @@ pub fn access(path: [*:0]const u8, mode: u32) usize {
1399
1452
  }
1400
1453
  }
1401
1454
 
1402
- pub fn faccessat(dirfd: i32, path: [*:0]const u8, mode: u32, flags: u32) usize {
1455
+ pub fn faccessat(dirfd: fd_t, path: [*:0]const u8, mode: mode_t, flags: u32) usize {
1403
1456
  if (flags == 0) {
1404
- return syscall3(.faccessat, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), mode);
1457
+ return syscall3(.faccessat, @as(u32, @bitCast(dirfd)), @intFromPtr(path), mode);
1405
1458
  }
1406
- return syscall4(.faccessat2, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), mode, flags);
1459
+ return syscall4(.faccessat2, @as(u32, @bitCast(dirfd)), @intFromPtr(path), mode, flags);
1407
1460
  }
1408
1461
 
1409
1462
  pub fn acct(path: [*:0]const u8) usize {
1410
1463
  return syscall1(.acct, @intFromPtr(path));
1411
1464
  }
1412
1465
 
1413
- pub fn pipe(fd: *[2]i32) usize {
1414
- if (comptime (native_arch.isMIPS() or native_arch.isSPARC())) {
1466
+ pub fn pipe(fd: *[2]fd_t) usize {
1467
+ if (native_arch.isMIPS() or native_arch.isSPARC()) {
1415
1468
  return syscall_pipe(fd);
1416
1469
  } else if (@hasField(SYS, "pipe")) {
1417
1470
  return syscall1(.pipe, @intFromPtr(fd));
@@ -1420,21 +1473,17 @@ pub fn pipe(fd: *[2]i32) usize {
1420
1473
  }
1421
1474
  }
1422
1475
 
1423
- pub fn pipe2(fd: *[2]i32, flags: O) usize {
1476
+ pub fn pipe2(fd: *[2]fd_t, flags: O) usize {
1424
1477
  return syscall2(.pipe2, @intFromPtr(fd), @as(u32, @bitCast(flags)));
1425
1478
  }
1426
1479
 
1427
- pub fn write(fd: i32, buf: [*]const u8, count: usize) usize {
1428
- return syscall3(.write, @bitCast(@as(isize, fd)), @intFromPtr(buf), count);
1429
- }
1430
-
1431
- pub fn ftruncate(fd: i32, length: i64) usize {
1432
- if (@hasField(SYS, "ftruncate64") and usize_bits < 64) {
1480
+ pub fn ftruncate(fd: fd_t, length: off_t) usize {
1481
+ if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) {
1433
1482
  const length_halves = splitValue64(length);
1434
1483
  if (require_aligned_register_pair) {
1435
1484
  return syscall4(
1436
1485
  .ftruncate64,
1437
- @as(usize, @bitCast(@as(isize, fd))),
1486
+ @as(u32, @bitCast(fd)),
1438
1487
  0,
1439
1488
  length_halves[0],
1440
1489
  length_halves[1],
@@ -1442,7 +1491,7 @@ pub fn ftruncate(fd: i32, length: i64) usize {
1442
1491
  } else {
1443
1492
  return syscall3(
1444
1493
  .ftruncate64,
1445
- @as(usize, @bitCast(@as(isize, fd))),
1494
+ @as(u32, @bitCast(fd)),
1446
1495
  length_halves[0],
1447
1496
  length_halves[1],
1448
1497
  );
@@ -1450,48 +1499,8 @@ pub fn ftruncate(fd: i32, length: i64) usize {
1450
1499
  } else {
1451
1500
  return syscall2(
1452
1501
  .ftruncate,
1453
- @as(usize, @bitCast(@as(isize, fd))),
1454
- @as(usize, @bitCast(length)),
1455
- );
1456
- }
1457
- }
1458
-
1459
- pub fn pwrite(fd: i32, buf: [*]const u8, count: usize, offset: i64) usize {
1460
- if (@hasField(SYS, "pwrite64") and usize_bits < 64) {
1461
- const offset_halves = splitValue64(offset);
1462
-
1463
- if (require_aligned_register_pair) {
1464
- return syscall6(
1465
- .pwrite64,
1466
- @as(usize, @bitCast(@as(isize, fd))),
1467
- @intFromPtr(buf),
1468
- count,
1469
- 0,
1470
- offset_halves[0],
1471
- offset_halves[1],
1472
- );
1473
- } else {
1474
- return syscall5(
1475
- .pwrite64,
1476
- @as(usize, @bitCast(@as(isize, fd))),
1477
- @intFromPtr(buf),
1478
- count,
1479
- offset_halves[0],
1480
- offset_halves[1],
1481
- );
1482
- }
1483
- } else {
1484
- // Some architectures (eg. 64bit SPARC) pwrite is called pwrite64.
1485
- const syscall_number = if (!@hasField(SYS, "pwrite") and @hasField(SYS, "pwrite64"))
1486
- .pwrite64
1487
- else
1488
- .pwrite;
1489
- return syscall4(
1490
- syscall_number,
1491
- @as(usize, @bitCast(@as(isize, fd))),
1492
- @intFromPtr(buf),
1493
- count,
1494
- @as(u64, @bitCast(offset)),
1502
+ @as(u32, @bitCast(fd)),
1503
+ @as(u64, @bitCast(length)),
1495
1504
  );
1496
1505
  }
1497
1506
  }
@@ -1502,50 +1511,50 @@ pub fn rename(old: [*:0]const u8, new: [*:0]const u8) usize {
1502
1511
  } else if (@hasField(SYS, "renameat")) {
1503
1512
  return syscall4(
1504
1513
  .renameat,
1505
- @as(usize, @bitCast(@as(isize, AT.FDCWD))),
1514
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1506
1515
  @intFromPtr(old),
1507
- @as(usize, @bitCast(@as(isize, AT.FDCWD))),
1516
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1508
1517
  @intFromPtr(new),
1509
1518
  );
1510
1519
  } else {
1511
1520
  return syscall5(
1512
1521
  .renameat2,
1513
- @as(usize, @bitCast(@as(isize, AT.FDCWD))),
1522
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1514
1523
  @intFromPtr(old),
1515
- @as(usize, @bitCast(@as(isize, AT.FDCWD))),
1524
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1516
1525
  @intFromPtr(new),
1517
1526
  0,
1518
1527
  );
1519
1528
  }
1520
1529
  }
1521
1530
 
1522
- pub fn renameat(oldfd: i32, oldpath: [*:0]const u8, newfd: i32, newpath: [*:0]const u8) usize {
1531
+ pub fn renameat(oldfd: fd_t, oldpath: [*:0]const u8, newfd: fd_t, newpath: [*:0]const u8) usize {
1523
1532
  if (@hasField(SYS, "renameat")) {
1524
1533
  return syscall4(
1525
1534
  .renameat,
1526
- @as(usize, @bitCast(@as(isize, oldfd))),
1535
+ @as(u32, @bitCast(oldfd)),
1527
1536
  @intFromPtr(oldpath),
1528
- @as(usize, @bitCast(@as(isize, newfd))),
1537
+ @as(u32, @bitCast(newfd)),
1529
1538
  @intFromPtr(newpath),
1530
1539
  );
1531
1540
  } else {
1532
1541
  return syscall5(
1533
1542
  .renameat2,
1534
- @as(usize, @bitCast(@as(isize, oldfd))),
1543
+ @as(u32, @bitCast(oldfd)),
1535
1544
  @intFromPtr(oldpath),
1536
- @as(usize, @bitCast(@as(isize, newfd))),
1545
+ @as(u32, @bitCast(newfd)),
1537
1546
  @intFromPtr(newpath),
1538
1547
  0,
1539
1548
  );
1540
1549
  }
1541
1550
  }
1542
1551
 
1543
- pub fn renameat2(oldfd: i32, oldpath: [*:0]const u8, newfd: i32, newpath: [*:0]const u8, flags: RENAME) usize {
1552
+ pub fn renameat2(oldfd: fd_t, oldpath: [*:0]const u8, newfd: fd_t, newpath: [*:0]const u8, flags: RENAME) usize {
1544
1553
  return syscall5(
1545
1554
  .renameat2,
1546
- @as(usize, @bitCast(@as(isize, oldfd))),
1555
+ @as(u32, @bitCast(oldfd)),
1547
1556
  @intFromPtr(oldpath),
1548
- @as(usize, @bitCast(@as(isize, newfd))),
1557
+ @as(u32, @bitCast(newfd)),
1549
1558
  @intFromPtr(newpath),
1550
1559
  @as(u32, @bitCast(flags)),
1551
1560
  );
@@ -1557,7 +1566,7 @@ pub fn open(path: [*:0]const u8, flags: O, perm: mode_t) usize {
1557
1566
  } else {
1558
1567
  return syscall4(
1559
1568
  .openat,
1560
- @bitCast(@as(isize, AT.FDCWD)),
1569
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1561
1570
  @intFromPtr(path),
1562
1571
  @as(u32, @bitCast(flags)),
1563
1572
  perm,
@@ -1569,13 +1578,13 @@ pub fn create(path: [*:0]const u8, perm: mode_t) usize {
1569
1578
  return syscall2(.creat, @intFromPtr(path), perm);
1570
1579
  }
1571
1580
 
1572
- pub fn openat(dirfd: i32, path: [*:0]const u8, flags: O, mode: mode_t) usize {
1581
+ pub fn openat(dirfd: fd_t, path: [*:0]const u8, flags: O, mode: mode_t) usize {
1573
1582
  // dirfd could be negative, for example AT.FDCWD is -100
1574
- return syscall4(.openat, @bitCast(@as(isize, dirfd)), @intFromPtr(path), @as(u32, @bitCast(flags)), mode);
1583
+ return syscall4(.openat, @as(u32, @bitCast(dirfd)), @intFromPtr(path), @as(u32, @bitCast(flags)), mode);
1575
1584
  }
1576
1585
 
1577
1586
  /// See also `clone` (from the arch-specific include)
1578
- pub fn clone5(flags: usize, child_stack_ptr: usize, parent_tid: *i32, child_tid: *i32, newtls: usize) usize {
1587
+ pub fn clone5(flags: usize, child_stack_ptr: usize, parent_tid: *pid_t, child_tid: *pid_t, newtls: usize) usize {
1579
1588
  return syscall5(.clone, flags, child_stack_ptr, @intFromPtr(parent_tid), @intFromPtr(child_tid), newtls);
1580
1589
  }
1581
1590
 
@@ -1584,8 +1593,13 @@ pub fn clone2(flags: u32, child_stack_ptr: usize) usize {
1584
1593
  return syscall2(.clone, flags, child_stack_ptr);
1585
1594
  }
1586
1595
 
1596
+ /// This call cannot fail, and the return value is the caller's thread id
1597
+ pub fn set_tid_address(tidptr: ?*pid_t) pid_t {
1598
+ return @intCast(@as(u32, @truncate(syscall1(.set_tid_address, @intFromPtr(tidptr)))));
1599
+ }
1600
+
1587
1601
  pub fn close(fd: fd_t) usize {
1588
- return syscall1(.close, @as(usize, @bitCast(@as(isize, fd))));
1602
+ return syscall1(.close, @as(u32, @bitCast(fd)));
1589
1603
  }
1590
1604
 
1591
1605
  pub const CLOSE_RANGE = packed struct(u32) {
@@ -1597,11 +1611,11 @@ pub const CLOSE_RANGE = packed struct(u32) {
1597
1611
  };
1598
1612
 
1599
1613
  pub fn close_range(first: fd_t, last: fd_t, flags: CLOSE_RANGE) usize {
1600
- return syscall3(.close_range, fd_to_usize(first), fd_to_usize(last), @as(u32, @bitCast(flags)));
1614
+ return syscall3(.close_range, @as(u32, @bitCast(first)), @as(u32, @bitCast(last)), @as(u32, @bitCast(flags)));
1601
1615
  }
1602
1616
 
1603
- pub fn fchmod(fd: i32, mode: mode_t) usize {
1604
- return syscall2(.fchmod, @as(usize, @bitCast(@as(isize, fd))), mode);
1617
+ pub fn fchmod(fd: fd_t, mode: mode_t) usize {
1618
+ return syscall2(.fchmod, @as(u32, @bitCast(fd)), mode);
1605
1619
  }
1606
1620
 
1607
1621
  pub fn chmod(path: [*:0]const u8, mode: mode_t) usize {
@@ -1612,16 +1626,16 @@ pub fn chmod(path: [*:0]const u8, mode: mode_t) usize {
1612
1626
  }
1613
1627
  }
1614
1628
 
1615
- pub fn fchown(fd: i32, owner: uid_t, group: gid_t) usize {
1629
+ pub fn fchown(fd: fd_t, owner: uid_t, group: gid_t) usize {
1616
1630
  if (@hasField(SYS, "fchown32")) {
1617
- return syscall3(.fchown32, @as(usize, @bitCast(@as(isize, fd))), owner, group);
1631
+ return syscall3(.fchown32, @as(u32, @bitCast(fd)), owner, group);
1618
1632
  } else {
1619
- return syscall3(.fchown, @as(usize, @bitCast(@as(isize, fd))), owner, group);
1633
+ return syscall3(.fchown, @as(u32, @bitCast(fd)), owner, group);
1620
1634
  }
1621
1635
  }
1622
1636
 
1623
- pub fn fchownat(fd: i32, path: [*:0]const u8, owner: uid_t, group: gid_t, flags: u32) usize {
1624
- return syscall5(.fchownat, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(path), owner, group, flags);
1637
+ pub fn fchownat(fd: fd_t, path: [*:0]const u8, owner: uid_t, group: gid_t, flags: u32) usize {
1638
+ return syscall5(.fchownat, @as(u32, @bitCast(fd)), @intFromPtr(path), owner, group, flags);
1625
1639
  }
1626
1640
 
1627
1641
  pub fn chown(path: [*:0]const u8, owner: uid_t, group: gid_t) usize {
@@ -1644,40 +1658,40 @@ pub fn lchown(path: [*:0]const u8, owner: uid_t, group: gid_t) usize {
1644
1658
  }
1645
1659
  }
1646
1660
 
1647
- pub fn fchmodat(fd: i32, path: [*:0]const u8, mode: mode_t) usize {
1648
- return syscall3(.fchmodat, @bitCast(@as(isize, fd)), @intFromPtr(path), mode);
1661
+ pub fn fchmodat(fd: fd_t, path: [*:0]const u8, mode: mode_t) usize {
1662
+ return syscall3(.fchmodat, @as(u32, @bitCast(fd)), @intFromPtr(path), mode);
1649
1663
  }
1650
1664
 
1651
- pub fn fchmodat2(fd: i32, path: [*:0]const u8, mode: mode_t, flags: u32) usize {
1652
- return syscall4(.fchmodat2, @bitCast(@as(isize, fd)), @intFromPtr(path), mode, flags);
1665
+ pub fn fchmodat2(fd: fd_t, path: [*:0]const u8, mode: mode_t, flags: u32) usize {
1666
+ return syscall4(.fchmodat2, @as(u32, @bitCast(fd)), @intFromPtr(path), mode, flags);
1653
1667
  }
1654
1668
 
1655
1669
  /// Can only be called on 32 bit systems. For 64 bit see `lseek`.
1656
- pub fn llseek(fd: i32, offset: u64, result: ?*u64, whence: usize) usize {
1670
+ pub fn llseek(fd: fd_t, offset: off_t, result: ?*off_t, whence: u32) usize {
1657
1671
  // NOTE: The offset parameter splitting is independent from the target
1658
1672
  // endianness.
1659
1673
  return syscall5(
1660
1674
  .llseek,
1661
- @as(usize, @bitCast(@as(isize, fd))),
1662
- @as(usize, @truncate(offset >> 32)),
1663
- @as(usize, @truncate(offset)),
1675
+ @as(u32, @bitCast(fd)),
1676
+ @truncate(@as(u64, @bitCast(offset >> 32))),
1677
+ @truncate(@as(u64, @bitCast(offset))),
1664
1678
  @intFromPtr(result),
1665
1679
  whence,
1666
1680
  );
1667
1681
  }
1668
1682
 
1669
1683
  /// Can only be called on 64 bit systems. For 32 bit see `llseek`.
1670
- pub fn lseek(fd: i32, offset: i64, whence: usize) usize {
1671
- return syscall3(.lseek, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(offset)), whence);
1684
+ pub fn lseek(fd: fd_t, offset: off_t, whence: u32) usize {
1685
+ return syscall3(.lseek, @as(u32, @bitCast(fd)), @as(u64, @bitCast(offset)), whence);
1672
1686
  }
1673
1687
 
1674
1688
  pub fn exit(status: i32) noreturn {
1675
- _ = syscall1(.exit, @as(usize, @bitCast(@as(isize, status))));
1689
+ _ = syscall1(.exit, @as(u32, @bitCast(status)));
1676
1690
  unreachable;
1677
1691
  }
1678
1692
 
1679
1693
  pub fn exit_group(status: i32) noreturn {
1680
- _ = syscall1(.exit_group, @as(usize, @bitCast(@as(isize, status))));
1694
+ _ = syscall1(.exit_group, @as(u32, @bitCast(status)));
1681
1695
  unreachable;
1682
1696
  }
1683
1697
 
@@ -1743,15 +1757,15 @@ pub fn getrandom(buf: [*]u8, count: usize, flags: u32) usize {
1743
1757
  }
1744
1758
 
1745
1759
  pub fn kill(pid: pid_t, sig: SIG) usize {
1746
- return syscall2(.kill, @as(usize, @bitCast(@as(isize, pid))), @intFromEnum(sig));
1760
+ return syscall2(.kill, @as(u32, @bitCast(pid)), @intFromEnum(sig));
1747
1761
  }
1748
1762
 
1749
1763
  pub fn tkill(tid: pid_t, sig: SIG) usize {
1750
- return syscall2(.tkill, @as(usize, @bitCast(@as(isize, tid))), @intFromEnum(sig));
1764
+ return syscall2(.tkill, @as(u32, @bitCast(tid)), @intFromEnum(sig));
1751
1765
  }
1752
1766
 
1753
1767
  pub fn tgkill(tgid: pid_t, tid: pid_t, sig: SIG) usize {
1754
- return syscall3(.tgkill, @as(usize, @bitCast(@as(isize, tgid))), @as(usize, @bitCast(@as(isize, tid))), @intFromEnum(sig));
1768
+ return syscall3(.tgkill, @as(u32, @bitCast(tgid)), @as(u32, @bitCast(tid)), @intFromEnum(sig));
1755
1769
  }
1756
1770
 
1757
1771
  pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) usize {
@@ -1764,9 +1778,9 @@ pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) usize {
1764
1778
  } else {
1765
1779
  return syscall5(
1766
1780
  .linkat,
1767
- @as(usize, @bitCast(@as(isize, AT.FDCWD))),
1781
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1768
1782
  @intFromPtr(oldpath),
1769
- @as(usize, @bitCast(@as(isize, AT.FDCWD))),
1783
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1770
1784
  @intFromPtr(newpath),
1771
1785
  0,
1772
1786
  );
@@ -1776,9 +1790,9 @@ pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) usize {
1776
1790
  pub fn linkat(oldfd: fd_t, oldpath: [*:0]const u8, newfd: fd_t, newpath: [*:0]const u8, flags: u32) usize {
1777
1791
  return syscall5(
1778
1792
  .linkat,
1779
- @as(usize, @bitCast(@as(isize, oldfd))),
1793
+ @as(u32, @bitCast(oldfd)),
1780
1794
  @intFromPtr(oldpath),
1781
- @as(usize, @bitCast(@as(isize, newfd))),
1795
+ @as(u32, @bitCast(newfd)),
1782
1796
  @intFromPtr(newpath),
1783
1797
  flags,
1784
1798
  );
@@ -1788,33 +1802,33 @@ pub fn unlink(path: [*:0]const u8) usize {
1788
1802
  if (@hasField(SYS, "unlink")) {
1789
1803
  return syscall1(.unlink, @intFromPtr(path));
1790
1804
  } else {
1791
- return syscall3(.unlinkat, @as(usize, @bitCast(@as(isize, AT.FDCWD))), @intFromPtr(path), 0);
1805
+ return syscall3(.unlinkat, @as(u32, @bitCast(@as(i32, AT.FDCWD))), @intFromPtr(path), 0);
1792
1806
  }
1793
1807
  }
1794
1808
 
1795
- pub fn unlinkat(dirfd: i32, path: [*:0]const u8, flags: u32) usize {
1796
- return syscall3(.unlinkat, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), flags);
1809
+ pub fn unlinkat(dirfd: fd_t, path: [*:0]const u8, flags: u32) usize {
1810
+ return syscall3(.unlinkat, @as(u32, @bitCast(dirfd)), @intFromPtr(path), flags);
1797
1811
  }
1798
1812
 
1799
- pub fn waitpid(pid: pid_t, status: *u32, flags: u32) usize {
1800
- return syscall4(.wait4, @as(usize, @bitCast(@as(isize, pid))), @intFromPtr(status), flags, 0);
1813
+ pub fn waitpid(pid: pid_t, status: *i32, flags: u32) usize {
1814
+ return syscall4(.wait4, @as(u32, @bitCast(pid)), @intFromPtr(status), flags, 0);
1801
1815
  }
1802
1816
 
1803
- pub fn wait4(pid: pid_t, status: *u32, flags: u32, usage: ?*rusage) usize {
1817
+ pub fn wait4(pid: pid_t, status: *i32, flags: u32, usage: ?*rusage) usize {
1804
1818
  return syscall4(
1805
1819
  .wait4,
1806
- @as(usize, @bitCast(@as(isize, pid))),
1820
+ @as(u32, @bitCast(pid)),
1807
1821
  @intFromPtr(status),
1808
1822
  flags,
1809
1823
  @intFromPtr(usage),
1810
1824
  );
1811
1825
  }
1812
1826
 
1813
- pub fn waitid(id_type: P, id: i32, infop: *siginfo_t, flags: u32, usage: ?*rusage) usize {
1827
+ pub fn waitid(id_type: P, id: pid_t, infop: *siginfo_t, flags: u32, usage: ?*rusage) usize {
1814
1828
  return syscall5(
1815
1829
  .waitid,
1816
1830
  @intFromEnum(id_type),
1817
- @as(usize, @bitCast(@as(isize, id))),
1831
+ @as(u32, @bitCast(id)),
1818
1832
  @intFromPtr(infop),
1819
1833
  flags,
1820
1834
  @intFromPtr(usage),
@@ -1913,14 +1927,14 @@ pub const Flock = extern struct {
1913
1927
 
1914
1928
  pub fn fcntl(fd: fd_t, cmd: i32, arg: usize) usize {
1915
1929
  if (@hasField(SYS, "fcntl64")) {
1916
- return syscall3(.fcntl64, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, cmd))), arg);
1930
+ return syscall3(.fcntl64, @as(u32, @bitCast(fd)), @as(u32, @bitCast(cmd)), arg);
1917
1931
  } else {
1918
- return syscall3(.fcntl, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, cmd))), arg);
1932
+ return syscall3(.fcntl, @as(u32, @bitCast(fd)), @as(u32, @bitCast(cmd)), arg);
1919
1933
  }
1920
1934
  }
1921
1935
 
1922
1936
  pub fn flock(fd: fd_t, operation: i32) usize {
1923
- return syscall2(.flock, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, operation))));
1937
+ return syscall2(.flock, @as(u32, @bitCast(fd)), @as(u32, @bitCast(operation)));
1924
1938
  }
1925
1939
 
1926
1940
  pub const Elf_Symndx = if (native_arch == .s390x) u64 else u32;
@@ -1960,7 +1974,7 @@ fn init_vdso_clock_gettime(clk: clockid_t, ts: *timespec) callconv(.c) usize {
1960
1974
  pub fn clock_getres(clk_id: clockid_t, tp: *timespec) usize {
1961
1975
  return syscall2(
1962
1976
  if (@hasField(SYS, "clock_getres") and native_arch != .hexagon) .clock_getres else .clock_getres_time64,
1963
- @as(usize, @intFromEnum(clk_id)),
1977
+ @intFromEnum(clk_id),
1964
1978
  @intFromPtr(tp),
1965
1979
  );
1966
1980
  }
@@ -1968,7 +1982,7 @@ pub fn clock_getres(clk_id: clockid_t, tp: *timespec) usize {
1968
1982
  pub fn clock_settime(clk_id: clockid_t, tp: *const timespec) usize {
1969
1983
  return syscall2(
1970
1984
  if (@hasField(SYS, "clock_settime") and native_arch != .hexagon) .clock_settime else .clock_settime64,
1971
- @as(usize, @intFromEnum(clk_id)),
1985
+ @intFromEnum(clk_id),
1972
1986
  @intFromPtr(tp),
1973
1987
  );
1974
1988
  }
@@ -2122,11 +2136,11 @@ pub fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) usize {
2122
2136
  }
2123
2137
 
2124
2138
  pub fn setpgid(pid: pid_t, pgid: pid_t) usize {
2125
- return syscall2(.setpgid, @intCast(pid), @intCast(pgid));
2139
+ return syscall2(.setpgid, @as(u32, @bitCast(pid)), @as(u32, @bitCast(pgid)));
2126
2140
  }
2127
2141
 
2128
2142
  pub fn getpgid(pid: pid_t) usize {
2129
- return syscall1(.getpgid, @intCast(pid));
2143
+ return syscall1(.getpgid, @as(u32, @bitCast(pid)));
2130
2144
  }
2131
2145
 
2132
2146
  pub fn getgroups(size: usize, list: ?[*]gid_t) usize {
@@ -2150,7 +2164,7 @@ pub fn setsid() usize {
2150
2164
  }
2151
2165
 
2152
2166
  pub fn getsid(pid: pid_t) usize {
2153
- return syscall1(.getsid, @intCast(pid));
2167
+ return syscall1(.getsid, @as(u32, @bitCast(pid)));
2154
2168
  }
2155
2169
 
2156
2170
  pub fn getpid() pid_t {
@@ -2221,8 +2235,6 @@ pub fn sigaction(sig: SIG, noalias act: ?*const Sigaction, noalias oact: ?*Sigac
2221
2235
  return 0;
2222
2236
  }
2223
2237
 
2224
- const usize_bits = @typeInfo(usize).int.bits;
2225
-
2226
2238
  /// Defined as one greater than the largest defined signal number.
2227
2239
  pub const NSIG = if (is_mips) 128 else 65;
2228
2240
 
@@ -2283,18 +2295,18 @@ pub fn sigismember(set: *const sigset_t, sig: SIG) bool {
2283
2295
  return ((set.*)[index.word] & index.mask) != 0;
2284
2296
  }
2285
2297
 
2286
- pub fn getsockname(fd: i32, noalias addr: *sockaddr, noalias len: *socklen_t) usize {
2298
+ pub fn getsockname(fd: fd_t, noalias addr: *sockaddr, noalias len: *socklen_t) usize {
2287
2299
  if (native_arch == .x86) {
2288
- return socketcall(SC.getsockname, &[3]usize{ @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @intFromPtr(len) });
2300
+ return socketcall(SC.getsockname, &[3]usize{ @as(u32, @bitCast(fd)), @intFromPtr(addr), @intFromPtr(len) });
2289
2301
  }
2290
- return syscall3(.getsockname, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @intFromPtr(len));
2302
+ return syscall3(.getsockname, @as(u32, @bitCast(fd)), @intFromPtr(addr), @intFromPtr(len));
2291
2303
  }
2292
2304
 
2293
- pub fn getpeername(fd: i32, noalias addr: *sockaddr, noalias len: *socklen_t) usize {
2305
+ pub fn getpeername(fd: fd_t, noalias addr: *sockaddr, noalias len: *socklen_t) usize {
2294
2306
  if (native_arch == .x86) {
2295
- return socketcall(SC.getpeername, &[3]usize{ @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @intFromPtr(len) });
2307
+ return socketcall(SC.getpeername, &[3]usize{ @as(u32, @bitCast(fd)), @intFromPtr(addr), @intFromPtr(len) });
2296
2308
  }
2297
- return syscall3(.getpeername, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @intFromPtr(len));
2309
+ return syscall3(.getpeername, @as(u32, @bitCast(fd)), @intFromPtr(addr), @intFromPtr(len));
2298
2310
  }
2299
2311
 
2300
2312
  pub fn socket(domain: u32, socket_type: u32, protocol: u32) usize {
@@ -2304,58 +2316,52 @@ pub fn socket(domain: u32, socket_type: u32, protocol: u32) usize {
2304
2316
  return syscall3(.socket, domain, socket_type, protocol);
2305
2317
  }
2306
2318
 
2307
- pub fn setsockopt(fd: i32, level: i32, optname: u32, optval: [*]const u8, optlen: socklen_t) usize {
2319
+ pub fn setsockopt(fd: fd_t, level: i32, optname: u32, optval: [*]const u8, optlen: socklen_t) usize {
2308
2320
  if (native_arch == .x86) {
2309
- return socketcall(SC.setsockopt, &[5]usize{ @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, level))), optname, @intFromPtr(optval), @as(usize, @intCast(optlen)) });
2321
+ return socketcall(SC.setsockopt, &[5]usize{ @as(u32, @bitCast(fd)), @as(usize, @bitCast(@as(isize, level))), optname, @intFromPtr(optval), @as(usize, @intCast(optlen)) });
2310
2322
  }
2311
- return syscall5(.setsockopt, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, level))), optname, @intFromPtr(optval), @as(usize, @intCast(optlen)));
2323
+ return syscall5(.setsockopt, @as(u32, @bitCast(fd)), @as(usize, @bitCast(@as(isize, level))), optname, @intFromPtr(optval), @as(usize, @intCast(optlen)));
2312
2324
  }
2313
2325
 
2314
- pub fn getsockopt(fd: i32, level: i32, optname: u32, noalias optval: [*]u8, noalias optlen: *socklen_t) usize {
2326
+ pub fn getsockopt(fd: fd_t, level: i32, optname: u32, noalias optval: [*]u8, noalias optlen: *socklen_t) usize {
2315
2327
  if (native_arch == .x86) {
2316
- return socketcall(SC.getsockopt, &[5]usize{ @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, level))), optname, @intFromPtr(optval), @intFromPtr(optlen) });
2328
+ return socketcall(SC.getsockopt, &[5]usize{ @as(u32, @bitCast(fd)), @as(usize, @bitCast(@as(isize, level))), optname, @intFromPtr(optval), @intFromPtr(optlen) });
2317
2329
  }
2318
- return syscall5(.getsockopt, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, level))), optname, @intFromPtr(optval), @intFromPtr(optlen));
2330
+ return syscall5(.getsockopt, @as(u32, @bitCast(fd)), @as(usize, @bitCast(@as(isize, level))), optname, @intFromPtr(optval), @intFromPtr(optlen));
2319
2331
  }
2320
2332
 
2321
- pub fn sendmsg(fd: i32, msg: *const msghdr_const, flags: u32) usize {
2322
- const fd_usize = @as(usize, @bitCast(@as(isize, fd)));
2323
- const msg_usize = @intFromPtr(msg);
2333
+ pub fn sendmsg(fd: fd_t, msg: *const msghdr_const, flags: u32) usize {
2324
2334
  if (native_arch == .x86) {
2325
- return socketcall(SC.sendmsg, &[3]usize{ fd_usize, msg_usize, flags });
2335
+ return socketcall(SC.sendmsg, &[3]usize{ @as(u32, @bitCast(fd)), @intFromPtr(msg), flags });
2326
2336
  } else {
2327
- return syscall3(.sendmsg, fd_usize, msg_usize, flags);
2337
+ return syscall3(.sendmsg, @as(u32, @bitCast(fd)), @intFromPtr(msg), flags);
2328
2338
  }
2329
2339
  }
2330
2340
 
2331
- pub fn sendmmsg(fd: i32, msgvec: [*]mmsghdr, vlen: u32, flags: u32) usize {
2332
- return syscall4(.sendmmsg, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(msgvec), vlen, flags);
2341
+ pub fn sendmmsg(fd: fd_t, msgvec: [*]mmsghdr, vlen: u32, flags: u32) usize {
2342
+ return syscall4(.sendmmsg, @as(u32, @bitCast(fd)), @intFromPtr(msgvec), vlen, flags);
2333
2343
  }
2334
2344
 
2335
- pub fn connect(fd: i32, addr: *const anyopaque, len: socklen_t) usize {
2336
- const fd_usize = @as(usize, @bitCast(@as(isize, fd)));
2337
- const addr_usize = @intFromPtr(addr);
2345
+ pub fn connect(fd: fd_t, addr: *const anyopaque, len: socklen_t) usize {
2338
2346
  if (native_arch == .x86) {
2339
- return socketcall(SC.connect, &[3]usize{ fd_usize, addr_usize, len });
2347
+ return socketcall(SC.connect, &[3]usize{ @as(u32, @bitCast(fd)), @intFromPtr(addr), len });
2340
2348
  } else {
2341
- return syscall3(.connect, fd_usize, addr_usize, len);
2349
+ return syscall3(.connect, @as(u32, @bitCast(fd)), @intFromPtr(addr), len);
2342
2350
  }
2343
2351
  }
2344
2352
 
2345
- pub fn recvmsg(fd: i32, msg: *msghdr, flags: u32) usize {
2346
- const fd_usize = @as(usize, @bitCast(@as(isize, fd)));
2347
- const msg_usize = @intFromPtr(msg);
2353
+ pub fn recvmsg(fd: fd_t, msg: *msghdr, flags: u32) usize {
2348
2354
  if (native_arch == .x86) {
2349
- return socketcall(SC.recvmsg, &[3]usize{ fd_usize, msg_usize, flags });
2355
+ return socketcall(SC.recvmsg, &[3]usize{ @as(u32, @bitCast(fd)), @intFromPtr(msg), flags });
2350
2356
  } else {
2351
- return syscall3(.recvmsg, fd_usize, msg_usize, flags);
2357
+ return syscall3(.recvmsg, @as(u32, @bitCast(fd)), @intFromPtr(msg), flags);
2352
2358
  }
2353
2359
  }
2354
2360
 
2355
- pub fn recvmmsg(fd: i32, msgvec: ?[*]mmsghdr, vlen: u32, flags: u32, timeout: ?*timespec) usize {
2361
+ pub fn recvmmsg(fd: fd_t, msgvec: ?[*]mmsghdr, vlen: u32, flags: u32, timeout: ?*timespec) usize {
2356
2362
  return syscall5(
2357
2363
  if (@hasField(SYS, "recvmmsg") and native_arch != .hexagon) .recvmmsg else .recvmmsg_time64,
2358
- @as(usize, @bitCast(@as(isize, fd))),
2364
+ @as(u32, @bitCast(fd)),
2359
2365
  @intFromPtr(msgvec),
2360
2366
  vlen,
2361
2367
  flags,
@@ -2364,43 +2370,39 @@ pub fn recvmmsg(fd: i32, msgvec: ?[*]mmsghdr, vlen: u32, flags: u32, timeout: ?*
2364
2370
  }
2365
2371
 
2366
2372
  pub fn recvfrom(
2367
- fd: i32,
2373
+ fd: fd_t,
2368
2374
  noalias buf: [*]u8,
2369
2375
  len: usize,
2370
2376
  flags: u32,
2371
2377
  noalias addr: ?*sockaddr,
2372
2378
  noalias alen: ?*socklen_t,
2373
2379
  ) usize {
2374
- const fd_usize = @as(usize, @bitCast(@as(isize, fd)));
2375
- const buf_usize = @intFromPtr(buf);
2376
- const addr_usize = @intFromPtr(addr);
2377
- const alen_usize = @intFromPtr(alen);
2378
2380
  if (native_arch == .x86) {
2379
- return socketcall(SC.recvfrom, &[6]usize{ fd_usize, buf_usize, len, flags, addr_usize, alen_usize });
2381
+ return socketcall(SC.recvfrom, &[6]usize{ @as(u32, @bitCast(fd)), @intFromPtr(buf), len, flags, @intFromPtr(addr), @intFromPtr(alen) });
2380
2382
  } else {
2381
- return syscall6(.recvfrom, fd_usize, buf_usize, len, flags, addr_usize, alen_usize);
2383
+ return syscall6(.recvfrom, @as(u32, @bitCast(fd)), @intFromPtr(buf), len, flags, @intFromPtr(addr), @intFromPtr(alen));
2382
2384
  }
2383
2385
  }
2384
2386
 
2385
- pub fn shutdown(fd: i32, how: i32) usize {
2387
+ pub fn shutdown(fd: fd_t, how: i32) usize {
2386
2388
  if (native_arch == .x86) {
2387
- return socketcall(SC.shutdown, &[2]usize{ @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, how))) });
2389
+ return socketcall(SC.shutdown, &[2]usize{ @as(u32, @bitCast(fd)), @as(u32, @bitCast(how)) });
2388
2390
  }
2389
- return syscall2(.shutdown, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, how))));
2391
+ return syscall2(.shutdown, @as(u32, @bitCast(fd)), @as(u32, @bitCast(how)));
2390
2392
  }
2391
2393
 
2392
- pub fn bind(fd: i32, addr: *const sockaddr, len: socklen_t) usize {
2394
+ pub fn bind(fd: fd_t, addr: *const sockaddr, len: socklen_t) usize {
2393
2395
  if (native_arch == .x86) {
2394
- return socketcall(SC.bind, &[3]usize{ @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @as(usize, @intCast(len)) });
2396
+ return socketcall(SC.bind, &[3]usize{ @as(u32, @bitCast(fd)), @intFromPtr(addr), len });
2395
2397
  }
2396
- return syscall3(.bind, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @as(usize, @intCast(len)));
2398
+ return syscall3(.bind, @as(u32, @bitCast(fd)), @intFromPtr(addr), len);
2397
2399
  }
2398
2400
 
2399
- pub fn listen(fd: i32, backlog: u32) usize {
2401
+ pub fn listen(fd: fd_t, backlog: u32) usize {
2400
2402
  if (native_arch == .x86) {
2401
- return socketcall(SC.listen, &[2]usize{ @as(usize, @bitCast(@as(isize, fd))), backlog });
2403
+ return socketcall(SC.listen, &[2]usize{ @as(u32, @bitCast(fd)), backlog });
2402
2404
  }
2403
- return syscall2(.listen, @as(usize, @bitCast(@as(isize, fd))), backlog);
2405
+ return syscall2(.listen, @as(u32, @bitCast(fd)), backlog);
2404
2406
  }
2405
2407
 
2406
2408
  pub fn sendto(fd: i32, buf: [*]const u8, len: usize, flags: u32, addr: ?*const sockaddr, alen: socklen_t) usize {
@@ -2410,51 +2412,41 @@ pub fn sendto(fd: i32, buf: [*]const u8, len: usize, flags: u32, addr: ?*const s
2410
2412
  return syscall6(.sendto, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(buf), len, flags, @intFromPtr(addr), @as(usize, @intCast(alen)));
2411
2413
  }
2412
2414
 
2413
- pub fn sendfile(outfd: i32, infd: i32, offset: ?*i64, count: usize) usize {
2414
- if (@hasField(SYS, "sendfile64")) {
2415
- return syscall4(
2416
- .sendfile64,
2417
- @as(usize, @bitCast(@as(isize, outfd))),
2418
- @as(usize, @bitCast(@as(isize, infd))),
2419
- @intFromPtr(offset),
2420
- count,
2421
- );
2422
- } else {
2423
- return syscall4(
2424
- .sendfile,
2425
- @as(usize, @bitCast(@as(isize, outfd))),
2426
- @as(usize, @bitCast(@as(isize, infd))),
2427
- @intFromPtr(offset),
2428
- count,
2429
- );
2430
- }
2415
+ pub fn sendfile(outfd: fd_t, infd: fd_t, offset: ?*off_t, count: usize) usize {
2416
+ return syscall4(
2417
+ if (@hasField(SYS, "sendfile64")) .sendfile64 else .sendfile,
2418
+ @as(u32, @bitCast(outfd)),
2419
+ @as(u32, @bitCast(infd)),
2420
+ @intFromPtr(offset),
2421
+ count,
2422
+ );
2431
2423
  }
2432
2424
 
2433
- pub fn socketpair(domain: u32, socket_type: u32, protocol: u32, fd: *[2]i32) usize {
2425
+ pub fn socketpair(domain: u32, socket_type: u32, protocol: u32, fd: *[2]fd_t) usize {
2434
2426
  if (native_arch == .x86) {
2435
2427
  return socketcall(SC.socketpair, &[4]usize{ domain, socket_type, protocol, @intFromPtr(fd) });
2436
2428
  }
2437
2429
  return syscall4(.socketpair, domain, socket_type, protocol, @intFromPtr(fd));
2438
2430
  }
2439
2431
 
2440
- pub fn accept(fd: i32, noalias addr: ?*sockaddr, noalias len: ?*socklen_t) usize {
2432
+ pub fn accept(fd: fd_t, noalias addr: ?*sockaddr, noalias len: ?*socklen_t) usize {
2441
2433
  if (native_arch == .x86) {
2442
- return socketcall(SC.accept, &[4]usize{ @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @intFromPtr(len), 0 });
2434
+ return socketcall(SC.accept, &[4]usize{ @as(u32, @bitCast(fd)), @intFromPtr(addr), @intFromPtr(len), 0 });
2443
2435
  }
2444
2436
  return accept4(fd, addr, len, 0);
2445
2437
  }
2446
2438
 
2447
- pub fn accept4(fd: i32, noalias addr: ?*sockaddr, noalias len: ?*socklen_t, flags: u32) usize {
2439
+ pub fn accept4(fd: fd_t, noalias addr: ?*sockaddr, noalias len: ?*socklen_t, flags: u32) usize {
2448
2440
  if (native_arch == .x86) {
2449
- return socketcall(SC.accept4, &[4]usize{ @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @intFromPtr(len), flags });
2441
+ return socketcall(SC.accept4, &[4]usize{ @as(u32, @bitCast(fd)), @intFromPtr(addr), @intFromPtr(len), flags });
2450
2442
  }
2451
- return syscall4(.accept4, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(addr), @intFromPtr(len), flags);
2443
+ return syscall4(.accept4, @as(u32, @bitCast(fd)), @intFromPtr(addr), @intFromPtr(len), flags);
2452
2444
  }
2453
2445
 
2454
- pub fn statx(dirfd: i32, path: [*:0]const u8, flags: u32, mask: STATX, statx_buf: *Statx) usize {
2446
+ pub fn statx(dirfd: fd_t, path: [*:0]const u8, flags: u32, mask: STATX, statx_buf: *Statx) usize {
2455
2447
  return syscall5(
2456
2448
  .statx,
2457
- @as(usize, @bitCast(@as(isize, dirfd))),
2449
+ @as(u32, @bitCast(dirfd)),
2458
2450
  @intFromPtr(path),
2459
2451
  flags,
2460
2452
  @as(u32, @bitCast(mask)),
@@ -2471,7 +2463,7 @@ pub fn llistxattr(path: [*:0]const u8, list: [*]u8, size: usize) usize {
2471
2463
  }
2472
2464
 
2473
2465
  pub fn flistxattr(fd: fd_t, list: [*]u8, size: usize) usize {
2474
- return syscall3(.flistxattr, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(list), size);
2466
+ return syscall3(.flistxattr, @as(u32, @bitCast(fd)), @intFromPtr(list), size);
2475
2467
  }
2476
2468
 
2477
2469
  pub fn getxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]u8, size: usize) usize {
@@ -2483,7 +2475,7 @@ pub fn lgetxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]u8, size: u
2483
2475
  }
2484
2476
 
2485
2477
  pub fn fgetxattr(fd: fd_t, name: [*:0]const u8, value: [*]u8, size: usize) usize {
2486
- return syscall4(.fgetxattr, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(name), @intFromPtr(value), size);
2478
+ return syscall4(.fgetxattr, @as(u32, @bitCast(fd)), @intFromPtr(name), @intFromPtr(value), size);
2487
2479
  }
2488
2480
 
2489
2481
  pub fn setxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]const u8, size: usize, flags: usize) usize {
@@ -2495,7 +2487,7 @@ pub fn lsetxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]const u8, s
2495
2487
  }
2496
2488
 
2497
2489
  pub fn fsetxattr(fd: fd_t, name: [*:0]const u8, value: [*]const u8, size: usize, flags: usize) usize {
2498
- return syscall5(.fsetxattr, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(name), @intFromPtr(value), size, flags);
2490
+ return syscall5(.fsetxattr, @as(u32, @bitCast(fd)), @intFromPtr(name), @intFromPtr(value), size, flags);
2499
2491
  }
2500
2492
 
2501
2493
  pub fn removexattr(path: [*:0]const u8, name: [*:0]const u8) usize {
@@ -2506,8 +2498,8 @@ pub fn lremovexattr(path: [*:0]const u8, name: [*:0]const u8) usize {
2506
2498
  return syscall2(.lremovexattr, @intFromPtr(path), @intFromPtr(name));
2507
2499
  }
2508
2500
 
2509
- pub fn fremovexattr(fd: usize, name: [*:0]const u8) usize {
2510
- return syscall2(.fremovexattr, fd, @intFromPtr(name));
2501
+ pub fn fremovexattr(fd: fd_t, name: [*:0]const u8) usize {
2502
+ return syscall2(.fremovexattr, @as(u32, @bitCast(fd)), @intFromPtr(name));
2511
2503
  }
2512
2504
 
2513
2505
  pub const sched_param = extern struct {
@@ -2537,27 +2529,27 @@ pub const SCHED = packed struct(i32) {
2537
2529
  };
2538
2530
 
2539
2531
  pub fn sched_setparam(pid: pid_t, param: *const sched_param) usize {
2540
- return syscall2(.sched_setparam, @as(usize, @bitCast(@as(isize, pid))), @intFromPtr(param));
2532
+ return syscall2(.sched_setparam, @as(u32, @bitCast(pid)), @intFromPtr(param));
2541
2533
  }
2542
2534
 
2543
2535
  pub fn sched_getparam(pid: pid_t, param: *sched_param) usize {
2544
- return syscall2(.sched_getparam, @as(usize, @bitCast(@as(isize, pid))), @intFromPtr(param));
2536
+ return syscall2(.sched_getparam, @as(u32, @bitCast(pid)), @intFromPtr(param));
2545
2537
  }
2546
2538
 
2547
2539
  pub fn sched_setscheduler(pid: pid_t, policy: SCHED, param: *const sched_param) usize {
2548
- return syscall3(.sched_setscheduler, @as(usize, @bitCast(@as(isize, pid))), @intCast(@as(u32, @bitCast(policy))), @intFromPtr(param));
2540
+ return syscall3(.sched_setscheduler, @as(u32, @bitCast(pid)), @as(u32, @bitCast(policy)), @intFromPtr(param));
2549
2541
  }
2550
2542
 
2551
2543
  pub fn sched_getscheduler(pid: pid_t) usize {
2552
- return syscall1(.sched_getscheduler, @as(usize, @bitCast(@as(isize, pid))));
2544
+ return syscall1(.sched_getscheduler, @as(u32, @bitCast(pid)));
2553
2545
  }
2554
2546
 
2555
2547
  pub fn sched_get_priority_max(policy: SCHED) usize {
2556
- return syscall1(.sched_get_priority_max, @intCast(@as(u32, @bitCast(policy))));
2548
+ return syscall1(.sched_get_priority_max, @as(u32, @bitCast(policy)));
2557
2549
  }
2558
2550
 
2559
2551
  pub fn sched_get_priority_min(policy: SCHED) usize {
2560
- return syscall1(.sched_get_priority_min, @intCast(@as(u32, @bitCast(policy))));
2552
+ return syscall1(.sched_get_priority_min, @as(u32, @bitCast(policy)));
2561
2553
  }
2562
2554
 
2563
2555
  pub fn getcpu(cpu: ?*usize, node: ?*usize) usize {
@@ -2576,24 +2568,24 @@ pub const sched_attr = extern struct {
2576
2568
  period: u64 = 0,
2577
2569
  };
2578
2570
 
2579
- pub fn sched_setattr(pid: pid_t, attr: *const sched_attr, flags: usize) usize {
2580
- return syscall3(.sched_setattr, @as(usize, @bitCast(@as(isize, pid))), @intFromPtr(attr), flags);
2571
+ pub fn sched_setattr(pid: pid_t, attr: *const sched_attr, flags: u32) usize {
2572
+ return syscall3(.sched_setattr, @as(u32, @bitCast(pid)), @intFromPtr(attr), flags);
2581
2573
  }
2582
2574
 
2583
- pub fn sched_getattr(pid: pid_t, attr: *sched_attr, size: usize, flags: usize) usize {
2584
- return syscall4(.sched_getattr, @as(usize, @bitCast(@as(isize, pid))), @intFromPtr(attr), size, flags);
2575
+ pub fn sched_getattr(pid: pid_t, attr: *sched_attr, size: u32, flags: u32) usize {
2576
+ return syscall4(.sched_getattr, @as(u32, @bitCast(pid)), @intFromPtr(attr), size, flags);
2585
2577
  }
2586
2578
 
2587
2579
  pub fn sched_rr_get_interval(pid: pid_t, tp: *timespec) usize {
2588
- return syscall2(.sched_rr_get_interval, @as(usize, @bitCast(@as(isize, pid))), @intFromPtr(tp));
2580
+ return syscall2(.sched_rr_get_interval, @as(u32, @bitCast(pid)), @intFromPtr(tp));
2589
2581
  }
2590
2582
 
2591
2583
  pub fn sched_yield() usize {
2592
2584
  return syscall0(.sched_yield);
2593
2585
  }
2594
2586
 
2595
- pub fn sched_getaffinity(pid: pid_t, size: usize, set: *cpu_set_t) usize {
2596
- const rc = syscall3(.sched_getaffinity, @as(usize, @bitCast(@as(isize, pid))), size, @intFromPtr(set));
2587
+ pub fn sched_getaffinity(pid: pid_t, size: u32, set: *cpu_set_t) usize {
2588
+ const rc = syscall3(.sched_getaffinity, @as(u32, @bitCast(pid)), size, @intFromPtr(set));
2597
2589
  if (@as(isize, @bitCast(rc)) < 0) return rc;
2598
2590
  if (rc < size) @memset(@as([*]u8, @ptrCast(set))[rc..size], 0);
2599
2591
  return 0;
@@ -2601,7 +2593,7 @@ pub fn sched_getaffinity(pid: pid_t, size: usize, set: *cpu_set_t) usize {
2601
2593
 
2602
2594
  pub fn sched_setaffinity(pid: pid_t, set: *const cpu_set_t) !void {
2603
2595
  const size = @sizeOf(cpu_set_t);
2604
- const rc = syscall3(.sched_setaffinity, @as(usize, @bitCast(@as(isize, pid))), size, @intFromPtr(set));
2596
+ const rc = syscall3(.sched_setaffinity, @as(u32, @bitCast(pid)), size, @intFromPtr(set));
2605
2597
 
2606
2598
  switch (errno(rc)) {
2607
2599
  .SUCCESS => return,
@@ -2613,25 +2605,25 @@ pub fn epoll_create() usize {
2613
2605
  return epoll_create1(0);
2614
2606
  }
2615
2607
 
2616
- pub fn epoll_create1(flags: usize) usize {
2608
+ pub fn epoll_create1(flags: u32) usize {
2617
2609
  return syscall1(.epoll_create1, flags);
2618
2610
  }
2619
2611
 
2620
- pub fn epoll_ctl(epoll_fd: i32, op: u32, fd: i32, ev: ?*epoll_event) usize {
2621
- return syscall4(.epoll_ctl, @as(usize, @bitCast(@as(isize, epoll_fd))), @as(usize, @intCast(op)), @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(ev));
2612
+ pub fn epoll_ctl(epoll_fd: fd_t, op: u32, fd: fd_t, ev: ?*epoll_event) usize {
2613
+ return syscall4(.epoll_ctl, @as(u32, @bitCast(epoll_fd)), op, @as(u32, @bitCast(fd)), @intFromPtr(ev));
2622
2614
  }
2623
2615
 
2624
- pub fn epoll_wait(epoll_fd: i32, events: [*]epoll_event, maxevents: u32, timeout: i32) usize {
2616
+ pub fn epoll_wait(epoll_fd: fd_t, events: [*]epoll_event, maxevents: u32, timeout: i32) usize {
2625
2617
  return epoll_pwait(epoll_fd, events, maxevents, timeout, null);
2626
2618
  }
2627
2619
 
2628
- pub fn epoll_pwait(epoll_fd: i32, events: [*]epoll_event, maxevents: u32, timeout: i32, sigmask: ?*const sigset_t) usize {
2620
+ pub fn epoll_pwait(epoll_fd: fd_t, events: [*]epoll_event, maxevents: u32, timeout: i32, sigmask: ?*const sigset_t) usize {
2629
2621
  return syscall6(
2630
2622
  .epoll_pwait,
2631
- @as(usize, @bitCast(@as(isize, epoll_fd))),
2623
+ @as(u32, @bitCast(epoll_fd)),
2632
2624
  @intFromPtr(events),
2633
- @as(usize, @intCast(maxevents)),
2634
- @as(usize, @bitCast(@as(isize, timeout))),
2625
+ maxevents,
2626
+ @as(u32, @bitCast(timeout)),
2635
2627
  @intFromPtr(sigmask),
2636
2628
  NSIG / 8,
2637
2629
  );
@@ -2654,18 +2646,18 @@ pub const itimerspec = extern struct {
2654
2646
  it_value: timespec,
2655
2647
  };
2656
2648
 
2657
- pub fn timerfd_gettime(fd: i32, curr_value: *itimerspec) usize {
2649
+ pub fn timerfd_gettime(fd: fd_t, curr_value: *itimerspec) usize {
2658
2650
  return syscall2(
2659
2651
  if (@hasField(SYS, "timerfd_gettime") and native_arch != .hexagon) .timerfd_gettime else .timerfd_gettime64,
2660
- @bitCast(@as(isize, fd)),
2652
+ @as(u32, @bitCast(fd)),
2661
2653
  @intFromPtr(curr_value),
2662
2654
  );
2663
2655
  }
2664
2656
 
2665
- pub fn timerfd_settime(fd: i32, flags: TFD.TIMER, new_value: *const itimerspec, old_value: ?*itimerspec) usize {
2657
+ pub fn timerfd_settime(fd: fd_t, flags: TFD.TIMER, new_value: *const itimerspec, old_value: ?*itimerspec) usize {
2666
2658
  return syscall4(
2667
2659
  if (@hasField(SYS, "timerfd_settime") and native_arch != .hexagon) .timerfd_settime else .timerfd_settime64,
2668
- @bitCast(@as(isize, fd)),
2660
+ @as(u32, @bitCast(fd)),
2669
2661
  @as(u32, @bitCast(flags)),
2670
2662
  @intFromPtr(new_value),
2671
2663
  @intFromPtr(old_value),
@@ -2680,11 +2672,11 @@ pub const ITIMER = enum(i32) {
2680
2672
  };
2681
2673
 
2682
2674
  pub fn getitimer(which: i32, curr_value: *itimerspec) usize {
2683
- return syscall2(.getitimer, @as(usize, @bitCast(@as(isize, which))), @intFromPtr(curr_value));
2675
+ return syscall2(.getitimer, @as(u32, @bitCast(which)), @intFromPtr(curr_value));
2684
2676
  }
2685
2677
 
2686
2678
  pub fn setitimer(which: i32, new_value: *const itimerspec, old_value: ?*itimerspec) usize {
2687
- return syscall3(.setitimer, @as(usize, @bitCast(@as(isize, which))), @intFromPtr(new_value), @intFromPtr(old_value));
2679
+ return syscall3(.setitimer, @as(u32, @bitCast(which)), @intFromPtr(new_value), @intFromPtr(old_value));
2688
2680
  }
2689
2681
 
2690
2682
  pub fn unshare(flags: usize) usize {
@@ -2692,7 +2684,7 @@ pub fn unshare(flags: usize) usize {
2692
2684
  }
2693
2685
 
2694
2686
  pub fn setns(fd: fd_t, flags: u32) usize {
2695
- return syscall2(.setns, @as(usize, @bitCast(@as(isize, fd))), flags);
2687
+ return syscall2(.setns, @as(u32, @bitCast(fd)), flags);
2696
2688
  }
2697
2689
 
2698
2690
  pub fn capget(hdrp: *cap_user_header_t, datap: *cap_user_data_t) usize {
@@ -2715,12 +2707,12 @@ pub fn io_uring_setup(entries: u32, p: *io_uring_params) usize {
2715
2707
  return syscall2(.io_uring_setup, entries, @intFromPtr(p));
2716
2708
  }
2717
2709
 
2718
- pub fn io_uring_enter(fd: i32, to_submit: u32, min_complete: u32, flags: u32, sig: ?*sigset_t) usize {
2719
- return syscall6(.io_uring_enter, @as(usize, @bitCast(@as(isize, fd))), to_submit, min_complete, flags, @intFromPtr(sig), NSIG / 8);
2710
+ pub fn io_uring_enter(fd: fd_t, to_submit: u32, min_complete: u32, flags: u32, sig: ?*sigset_t) usize {
2711
+ return syscall6(.io_uring_enter, @as(u32, @bitCast(fd)), to_submit, min_complete, flags, @intFromPtr(sig), NSIG / 8);
2720
2712
  }
2721
2713
 
2722
- pub fn io_uring_register(fd: i32, opcode: IORING_REGISTER, arg: ?*const anyopaque, nr_args: u32) usize {
2723
- return syscall4(.io_uring_register, @as(usize, @bitCast(@as(isize, fd))), @intFromEnum(opcode), @intFromPtr(arg), nr_args);
2714
+ pub fn io_uring_register(fd: fd_t, opcode: IORING_REGISTER, arg: ?*const anyopaque, nr_args: u32) usize {
2715
+ return syscall4(.io_uring_register, @as(u32, @bitCast(fd)), @intFromEnum(opcode), @intFromPtr(arg), nr_args);
2724
2716
  }
2725
2717
 
2726
2718
  pub fn memfd_create(name: [*:0]const u8, flags: u32) usize {
@@ -2728,43 +2720,43 @@ pub fn memfd_create(name: [*:0]const u8, flags: u32) usize {
2728
2720
  }
2729
2721
 
2730
2722
  pub fn getrusage(who: i32, usage: *rusage) usize {
2731
- return syscall2(.getrusage, @as(usize, @bitCast(@as(isize, who))), @intFromPtr(usage));
2723
+ return syscall2(.getrusage, @as(u32, @bitCast(who)), @intFromPtr(usage));
2732
2724
  }
2733
2725
 
2734
2726
  pub fn tcgetattr(fd: fd_t, termios_p: *termios) usize {
2735
- return syscall3(.ioctl, @as(usize, @bitCast(@as(isize, fd))), T.CGETS, @intFromPtr(termios_p));
2727
+ return syscall3(.ioctl, @as(u32, @bitCast(fd)), T.CGETS, @intFromPtr(termios_p));
2736
2728
  }
2737
2729
 
2738
2730
  pub fn tcsetattr(fd: fd_t, optional_action: TCSA, termios_p: *const termios) usize {
2739
- return syscall3(.ioctl, @as(usize, @bitCast(@as(isize, fd))), T.CSETS + @intFromEnum(optional_action), @intFromPtr(termios_p));
2731
+ return syscall3(.ioctl, @as(u32, @bitCast(fd)), T.CSETS + @intFromEnum(optional_action), @intFromPtr(termios_p));
2740
2732
  }
2741
2733
 
2742
2734
  pub fn tcgetpgrp(fd: fd_t, pgrp: *pid_t) usize {
2743
- return syscall3(.ioctl, @as(usize, @bitCast(@as(isize, fd))), T.IOCGPGRP, @intFromPtr(pgrp));
2735
+ return syscall3(.ioctl, @as(u32, @bitCast(fd)), T.IOCGPGRP, @intFromPtr(pgrp));
2744
2736
  }
2745
2737
 
2746
2738
  pub fn tcsetpgrp(fd: fd_t, pgrp: *const pid_t) usize {
2747
- return syscall3(.ioctl, @as(usize, @bitCast(@as(isize, fd))), T.IOCSPGRP, @intFromPtr(pgrp));
2739
+ return syscall3(.ioctl, @as(u32, @bitCast(fd)), T.IOCSPGRP, @intFromPtr(pgrp));
2748
2740
  }
2749
2741
 
2750
2742
  pub fn tcdrain(fd: fd_t) usize {
2751
- return syscall3(.ioctl, @as(usize, @bitCast(@as(isize, fd))), T.CSBRK, 1);
2743
+ return syscall3(.ioctl, @as(u32, @bitCast(fd)), T.CSBRK, 1);
2752
2744
  }
2753
2745
 
2754
2746
  pub fn ioctl(fd: fd_t, request: u32, arg: usize) usize {
2755
- return syscall3(.ioctl, @as(usize, @bitCast(@as(isize, fd))), request, arg);
2747
+ return syscall3(.ioctl, @as(u32, @bitCast(fd)), request, arg);
2756
2748
  }
2757
2749
 
2758
2750
  pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) usize {
2759
- return syscall4(.signalfd4, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(mask), NSIG / 8, flags);
2751
+ return syscall4(.signalfd4, @as(u32, @bitCast(fd)), @intFromPtr(mask), NSIG / 8, flags);
2760
2752
  }
2761
2753
 
2762
- pub fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: u32) usize {
2754
+ pub fn copy_file_range(fd_in: fd_t, off_in: ?*off_t, fd_out: fd_t, off_out: ?*off_t, len: usize, flags: u32) usize {
2763
2755
  return syscall6(
2764
2756
  .copy_file_range,
2765
- @as(usize, @bitCast(@as(isize, fd_in))),
2757
+ @as(u32, @bitCast(fd_in)),
2766
2758
  @intFromPtr(off_in),
2767
- @as(usize, @bitCast(@as(isize, fd_out))),
2759
+ @as(u32, @bitCast(fd_out)),
2768
2760
  @intFromPtr(off_out),
2769
2761
  len,
2770
2762
  flags,
@@ -2780,19 +2772,19 @@ pub fn sync() void {
2780
2772
  }
2781
2773
 
2782
2774
  pub fn syncfs(fd: fd_t) usize {
2783
- return syscall1(.syncfs, @as(usize, @bitCast(@as(isize, fd))));
2775
+ return syscall1(.syncfs, @as(u32, @bitCast(fd)));
2784
2776
  }
2785
2777
 
2786
2778
  pub fn fsync(fd: fd_t) usize {
2787
- return syscall1(.fsync, @as(usize, @bitCast(@as(isize, fd))));
2779
+ return syscall1(.fsync, @as(u32, @bitCast(fd)));
2788
2780
  }
2789
2781
 
2790
2782
  pub fn fdatasync(fd: fd_t) usize {
2791
- return syscall1(.fdatasync, @as(usize, @bitCast(@as(isize, fd))));
2783
+ return syscall1(.fdatasync, @as(u32, @bitCast(fd)));
2792
2784
  }
2793
2785
 
2794
2786
  pub fn prctl(option: i32, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
2795
- return syscall5(.prctl, @as(usize, @bitCast(@as(isize, option))), arg2, arg3, arg4, arg5);
2787
+ return syscall5(.prctl, @as(u32, @bitCast(option)), arg2, arg3, arg4, arg5);
2796
2788
  }
2797
2789
 
2798
2790
  pub fn getrlimit(resource: rlimit_resource, rlim: *rlimit) usize {
@@ -2808,8 +2800,8 @@ pub fn setrlimit(resource: rlimit_resource, rlim: *const rlimit) usize {
2808
2800
  pub fn prlimit(pid: pid_t, resource: rlimit_resource, new_limit: ?*const rlimit, old_limit: ?*rlimit) usize {
2809
2801
  return syscall4(
2810
2802
  .prlimit64,
2811
- @as(usize, @bitCast(@as(isize, pid))),
2812
- @as(usize, @bitCast(@as(isize, @intFromEnum(resource)))),
2803
+ @as(u32, @bitCast(pid)),
2804
+ @as(u32, @bitCast(@as(i32, @intFromEnum(resource)))),
2813
2805
  @intFromPtr(new_limit),
2814
2806
  @intFromPtr(old_limit),
2815
2807
  );
@@ -2824,14 +2816,14 @@ pub fn madvise(address: [*]u8, len: usize, advice: u32) usize {
2824
2816
  }
2825
2817
 
2826
2818
  pub fn pidfd_open(pid: pid_t, flags: u32) usize {
2827
- return syscall2(.pidfd_open, @as(usize, @bitCast(@as(isize, pid))), flags);
2819
+ return syscall2(.pidfd_open, @as(u32, @bitCast(pid)), flags);
2828
2820
  }
2829
2821
 
2830
2822
  pub fn pidfd_getfd(pidfd: fd_t, targetfd: fd_t, flags: u32) usize {
2831
2823
  return syscall3(
2832
2824
  .pidfd_getfd,
2833
- @as(usize, @bitCast(@as(isize, pidfd))),
2834
- @as(usize, @bitCast(@as(isize, targetfd))),
2825
+ @as(u32, @bitCast(pidfd)),
2826
+ @as(u32, @bitCast(targetfd)),
2835
2827
  flags,
2836
2828
  );
2837
2829
  }
@@ -2839,7 +2831,7 @@ pub fn pidfd_getfd(pidfd: fd_t, targetfd: fd_t, flags: u32) usize {
2839
2831
  pub fn pidfd_send_signal(pidfd: fd_t, sig: SIG, info: ?*siginfo_t, flags: u32) usize {
2840
2832
  return syscall4(
2841
2833
  .pidfd_send_signal,
2842
- @as(usize, @bitCast(@as(isize, pidfd))),
2834
+ @as(u32, @bitCast(pidfd)),
2843
2835
  @intFromEnum(sig),
2844
2836
  @intFromPtr(info),
2845
2837
  flags,
@@ -2849,7 +2841,7 @@ pub fn pidfd_send_signal(pidfd: fd_t, sig: SIG, info: ?*siginfo_t, flags: u32) u
2849
2841
  pub fn process_vm_readv(pid: pid_t, local: []const iovec, remote: []const iovec_const, flags: usize) usize {
2850
2842
  return syscall6(
2851
2843
  .process_vm_readv,
2852
- @as(usize, @bitCast(@as(isize, pid))),
2844
+ @as(u32, @bitCast(pid)),
2853
2845
  @intFromPtr(local.ptr),
2854
2846
  local.len,
2855
2847
  @intFromPtr(remote.ptr),
@@ -2861,7 +2853,7 @@ pub fn process_vm_readv(pid: pid_t, local: []const iovec, remote: []const iovec_
2861
2853
  pub fn process_vm_writev(pid: pid_t, local: []const iovec_const, remote: []const iovec_const, flags: usize) usize {
2862
2854
  return syscall6(
2863
2855
  .process_vm_writev,
2864
- @as(usize, @bitCast(@as(isize, pid))),
2856
+ @as(u32, @bitCast(pid)),
2865
2857
  @intFromPtr(local.ptr),
2866
2858
  local.len,
2867
2859
  @intFromPtr(remote.ptr),
@@ -2871,50 +2863,43 @@ pub fn process_vm_writev(pid: pid_t, local: []const iovec_const, remote: []const
2871
2863
  }
2872
2864
 
2873
2865
  pub fn fadvise(fd: fd_t, offset: i64, len: i64, advice: usize) usize {
2874
- if (comptime native_arch.isArm() or native_arch == .hexagon or native_arch.isPowerPC32()) {
2875
- // These architectures reorder the arguments so that a register is not skipped to align the
2876
- // register number that `offset` is passed in.
2866
+ if (native_arch.isMIPS32()) {
2867
+ // MIPS O32 weirdly differs from the other architectures that require
2868
+ // aligned register pairs for this specific syscall.
2877
2869
 
2878
2870
  const offset_halves = splitValue64(offset);
2879
2871
  const length_halves = splitValue64(len);
2880
2872
 
2881
- return syscall6(
2882
- .fadvise64_64,
2883
- @as(usize, @bitCast(@as(isize, fd))),
2884
- advice,
2873
+ return syscall7(
2874
+ .fadvise64,
2875
+ @as(u32, @bitCast(fd)),
2876
+ 0,
2885
2877
  offset_halves[0],
2886
2878
  offset_halves[1],
2887
2879
  length_halves[0],
2888
2880
  length_halves[1],
2881
+ advice,
2889
2882
  );
2890
- } else if (native_arch.isMIPS32()) {
2891
- // MIPS O32 does not deal with the register alignment issue, so pass a dummy value.
2892
-
2883
+ } else if (require_aligned_register_pair) {
2893
2884
  const offset_halves = splitValue64(offset);
2894
2885
  const length_halves = splitValue64(len);
2895
2886
 
2896
- return syscall7(
2897
- .fadvise64,
2898
- @as(usize, @bitCast(@as(isize, fd))),
2899
- 0,
2887
+ return syscall6(
2888
+ .fadvise64_64,
2889
+ @as(u32, @bitCast(fd)),
2890
+ advice,
2900
2891
  offset_halves[0],
2901
2892
  offset_halves[1],
2902
2893
  length_halves[0],
2903
2894
  length_halves[1],
2904
- advice,
2905
2895
  );
2906
- } else if (comptime usize_bits < 64) {
2907
- // Other 32-bit architectures do not require register alignment.
2908
-
2896
+ } else if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) {
2909
2897
  const offset_halves = splitValue64(offset);
2910
2898
  const length_halves = splitValue64(len);
2911
2899
 
2912
2900
  return syscall6(
2913
- switch (builtin.abi) {
2914
- .gnuabin32, .gnux32, .muslabin32, .muslx32 => .fadvise64,
2915
- else => .fadvise64_64,
2916
- },
2917
- @as(usize, @bitCast(@as(isize, fd))),
2901
+ .fadvise64_64,
2902
+ @as(u32, @bitCast(fd)),
2918
2903
  offset_halves[0],
2919
2904
  offset_halves[1],
2920
2905
  length_halves[0],
@@ -2922,14 +2907,11 @@ pub fn fadvise(fd: fd_t, offset: i64, len: i64, advice: usize) usize {
2922
2907
  advice,
2923
2908
  );
2924
2909
  } else {
2925
- // On 64-bit architectures, fadvise64_64 and fadvise64 are the same. Generally, older ports
2926
- // call it fadvise64 (x86, PowerPC, etc), while newer ports call it fadvise64_64 (RISC-V,
2927
- // LoongArch, etc). SPARC is the odd one out because it has both.
2928
2910
  return syscall4(
2929
- if (@hasField(SYS, "fadvise64_64")) .fadvise64_64 else .fadvise64,
2930
- @as(usize, @bitCast(@as(isize, fd))),
2931
- @as(usize, @bitCast(offset)),
2932
- @as(usize, @bitCast(len)),
2911
+ .fadvise64,
2912
+ @as(u32, @bitCast(fd)),
2913
+ @as(u64, @bitCast(offset)),
2914
+ @as(u64, @bitCast(len)),
2933
2915
  advice,
2934
2916
  );
2935
2917
  }
@@ -2945,9 +2927,9 @@ pub fn perf_event_open(
2945
2927
  return syscall5(
2946
2928
  .perf_event_open,
2947
2929
  @intFromPtr(attr),
2948
- @as(usize, @bitCast(@as(isize, pid))),
2949
- @as(usize, @bitCast(@as(isize, cpu))),
2950
- @as(usize, @bitCast(@as(isize, group_fd))),
2930
+ @as(u32, @bitCast(pid)),
2931
+ @as(u32, @bitCast(cpu)),
2932
+ @as(u32, @bitCast(group_fd)),
2951
2933
  flags,
2952
2934
  );
2953
2935
  }
@@ -2966,7 +2948,7 @@ pub fn ptrace(
2966
2948
  return syscall5(
2967
2949
  .ptrace,
2968
2950
  req,
2969
- @as(usize, @bitCast(@as(isize, pid))),
2951
+ @as(u32, @bitCast(pid)),
2970
2952
  addr,
2971
2953
  data,
2972
2954
  addr2,
@@ -2988,17 +2970,27 @@ pub fn cachestat(
2988
2970
  ) usize {
2989
2971
  return syscall4(
2990
2972
  .cachestat,
2991
- @as(usize, @bitCast(@as(isize, fd))),
2973
+ @as(u32, @bitCast(fd)),
2992
2974
  @intFromPtr(cstat_range),
2993
2975
  @intFromPtr(cstat),
2994
2976
  flags,
2995
2977
  );
2996
2978
  }
2997
2979
 
2998
- pub fn map_shadow_stack(addr: u64, size: u64, flags: u32) usize {
2980
+ pub fn map_shadow_stack(addr: usize, size: usize, flags: u32) usize {
2999
2981
  return syscall3(.map_shadow_stack, addr, size, flags);
3000
2982
  }
3001
2983
 
2984
+ pub fn tee(src: fd_t, dest: fd_t, len: usize, flags: u32) usize {
2985
+ return syscall4(
2986
+ .tee,
2987
+ @as(u32, @bitCast(src)),
2988
+ @as(u32, @bitCast(dest)),
2989
+ len,
2990
+ flags,
2991
+ );
2992
+ }
2993
+
3002
2994
  pub const Sysinfo = switch (native_abi) {
3003
2995
  .gnux32, .muslx32 => extern struct {
3004
2996
  /// Seconds since boot
@@ -3659,13 +3651,6 @@ pub const E = switch (native_arch) {
3659
3651
  },
3660
3652
  };
3661
3653
 
3662
- pub const pid_t = i32;
3663
- pub const fd_t = i32;
3664
- pub const socket_t = i32;
3665
- pub const uid_t = u32;
3666
- pub const gid_t = u32;
3667
- pub const clock_t = isize;
3668
-
3669
3654
  pub const NAME_MAX = 255;
3670
3655
  pub const PATH_MAX = 4096;
3671
3656
  pub const IOV_MAX = 1024;
@@ -3878,8 +3863,8 @@ pub const W = struct {
3878
3863
  pub fn TERMSIG(s: u32) SIG {
3879
3864
  return @enumFromInt(s & 0x7f);
3880
3865
  }
3881
- pub fn STOPSIG(s: u32) u32 {
3882
- return EXITSTATUS(s);
3866
+ pub fn STOPSIG(s: u32) SIG {
3867
+ return @enumFromInt(EXITSTATUS(s));
3883
3868
  }
3884
3869
  pub fn IFEXITED(s: u32) bool {
3885
3870
  return (s & 0x7f) == 0;
@@ -10157,7 +10142,3 @@ pub const cmsghdr = extern struct {
10157
10142
  level: i32,
10158
10143
  type: i32,
10159
10144
  };
10160
-
10161
- inline fn fd_to_usize(fd: fd_t) usize {
10162
- return @as(usize, @bitCast(@as(isize, fd)));
10163
- }