@zigc/lib 0.16.0 → 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 (155) hide show
  1. package/c/fcntl.zig +6 -1
  2. package/c/inttypes.zig +0 -10
  3. package/c/math.zig +46 -122
  4. package/c/pthread.zig +57 -0
  5. package/c/search.zig +1 -27
  6. package/c/stdlib/drand48.zig +0 -57
  7. package/c/stdlib.zig +0 -100
  8. package/c/string.zig +20 -7
  9. package/c/strings.zig +0 -38
  10. package/c/unistd.zig +27 -26
  11. package/c/wchar.zig +10 -0
  12. package/c.zig +2 -2
  13. package/compiler/aro/aro/CodeGen.zig +5 -6
  14. package/compiler/aro/aro/Compilation.zig +17 -14
  15. package/compiler/aro/aro/Driver.zig +14 -13
  16. package/compiler/aro/aro/Parser.zig +20 -15
  17. package/compiler/aro/aro/Pragma.zig +3 -2
  18. package/compiler/aro/aro/Preprocessor.zig +9 -6
  19. package/compiler/aro/aro/pragmas/message.zig +3 -2
  20. package/compiler/aro/aro/text_literal.zig +3 -2
  21. package/compiler/aro/assembly_backend/x86_64.zig +4 -4
  22. package/compiler/build_runner.zig +0 -2
  23. package/compiler/reduce/Walk.zig +7 -7
  24. package/compiler/test_runner.zig +2 -2
  25. package/compiler/translate-c/Translator.zig +6 -2
  26. package/compiler/translate-c/main.zig +1 -1
  27. package/compiler_rt/cos.zig +0 -2
  28. package/compiler_rt/divmodei4.zig +40 -17
  29. package/compiler_rt/exp.zig +1 -6
  30. package/compiler_rt/exp2.zig +1 -6
  31. package/compiler_rt/exp_f128.zig +377 -0
  32. package/compiler_rt/fabs.zig +0 -2
  33. package/compiler_rt/fma.zig +0 -2
  34. package/compiler_rt/fmax.zig +0 -2
  35. package/compiler_rt/fmin.zig +0 -2
  36. package/compiler_rt/fmod.zig +0 -2
  37. package/compiler_rt/limb64.zig +876 -15
  38. package/compiler_rt/log.zig +0 -2
  39. package/compiler_rt/log10.zig +0 -2
  40. package/compiler_rt/log2.zig +0 -2
  41. package/compiler_rt/mulXi3.zig +1 -1
  42. package/compiler_rt/round.zig +0 -2
  43. package/compiler_rt/sin.zig +0 -2
  44. package/compiler_rt/sincos.zig +0 -2
  45. package/compiler_rt/sqrt.zig +0 -2
  46. package/compiler_rt/ssp.zig +1 -1
  47. package/compiler_rt/tan.zig +0 -2
  48. package/compiler_rt/trunc.zig +0 -2
  49. package/compiler_rt/udivmodei4.zig +28 -0
  50. package/fuzzer.zig +2 -0
  51. package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
  52. package/package.json +1 -1
  53. package/std/Build/Cache.zig +6 -6
  54. package/std/Build/Step/Compile.zig +0 -1
  55. package/std/Build/Step/Run.zig +2 -2
  56. package/std/Build/Step.zig +2 -4
  57. package/std/Build/WebServer.zig +2 -2
  58. package/std/Build.zig +0 -3
  59. package/std/Io/Dir.zig +7 -2
  60. package/std/Io/Dispatch.zig +3 -13
  61. package/std/Io/File/Writer.zig +8 -6
  62. package/std/Io/Reader.zig +8 -9
  63. package/std/Io/Semaphore.zig +112 -17
  64. package/std/Io/Terminal.zig +1 -1
  65. package/std/Io/Threaded.zig +171 -37
  66. package/std/Io/Uring.zig +13 -15
  67. package/std/Io/Writer.zig +46 -42
  68. package/std/Io/net.zig +11 -11
  69. package/std/Io.zig +90 -26
  70. package/std/SemanticVersion.zig +1 -1
  71. package/std/Target/Query.zig +2 -2
  72. package/std/Target.zig +50 -5
  73. package/std/array_hash_map.zig +9 -18
  74. package/std/builtin.zig +4 -0
  75. package/std/c/haiku.zig +3 -0
  76. package/std/c/serenity.zig +1 -6
  77. package/std/c.zig +89 -7
  78. package/std/compress/flate/Decompress.zig +2 -3
  79. package/std/compress/zstd/Decompress.zig +2 -4
  80. package/std/crypto/Certificate.zig +13 -1
  81. package/std/crypto/ascon.zig +75 -33
  82. package/std/crypto/codecs/asn1/Oid.zig +12 -1
  83. package/std/crypto/codecs/base64_hex_ct.zig +2 -4
  84. package/std/crypto/ml_kem.zig +2 -9
  85. package/std/crypto/tls/Client.zig +79 -4
  86. package/std/crypto/tls.zig +1 -1
  87. package/std/crypto.zig +1 -0
  88. package/std/debug/Pdb.zig +1 -1
  89. package/std/debug.zig +4 -3
  90. package/std/fmt.zig +8 -3
  91. package/std/fs/path.zig +6 -4
  92. package/std/heap/BufferFirstAllocator.zig +165 -0
  93. package/std/heap.zig +2 -126
  94. package/std/http/Client.zig +21 -24
  95. package/std/http.zig +3 -4
  96. package/std/json/Scanner.zig +2 -2
  97. package/std/os/emscripten.zig +1 -1
  98. package/std/os/linux/IoUring.zig +2 -0
  99. package/std/os/linux/aarch64.zig +41 -12
  100. package/std/os/linux/arc.zig +173 -0
  101. package/std/os/linux/arm.zig +41 -12
  102. package/std/os/linux/hexagon.zig +33 -11
  103. package/std/os/linux/loongarch32.zig +41 -13
  104. package/std/os/linux/loongarch64.zig +41 -12
  105. package/std/os/linux/m68k.zig +41 -13
  106. package/std/os/linux/mips.zig +67 -36
  107. package/std/os/linux/mips64.zig +60 -29
  108. package/std/os/linux/mipsn32.zig +60 -29
  109. package/std/os/linux/or1k.zig +41 -12
  110. package/std/os/linux/powerpc.zig +41 -12
  111. package/std/os/linux/powerpc64.zig +41 -12
  112. package/std/os/linux/riscv32.zig +41 -12
  113. package/std/os/linux/riscv64.zig +41 -12
  114. package/std/os/linux/s390x.zig +44 -7
  115. package/std/os/linux/sparc64.zig +83 -52
  116. package/std/os/linux/thumb.zig +52 -36
  117. package/std/os/linux/x32.zig +41 -12
  118. package/std/os/linux/x86.zig +42 -13
  119. package/std/os/linux/x86_64.zig +41 -12
  120. package/std/os/linux.zig +412 -436
  121. package/std/os/uefi/tables/boot_services.zig +9 -8
  122. package/std/os.zig +41 -0
  123. package/std/process.zig +1 -1
  124. package/std/sort.zig +3 -3
  125. package/std/zig/Ast/Render.zig +3 -3
  126. package/std/zig/AstGen.zig +44 -98
  127. package/std/zig/AstRlAnnotate.zig +0 -11
  128. package/std/zig/BuiltinFn.zig +0 -32
  129. package/std/zig/LibCInstallation.zig +4 -3
  130. package/std/zig/Parse.zig +7 -7
  131. package/std/zig/WindowsSdk.zig +13 -13
  132. package/std/zig/Zir.zig +50 -63
  133. package/std/zig/ZonGen.zig +6 -5
  134. package/std/zig/llvm/Builder.zig +12 -12
  135. package/std/zig.zig +1 -10
  136. package/std/zip.zig +5 -5
  137. package/zig.h +340 -1
  138. package/libc/mingw/math/fdiml.c +0 -24
  139. package/libc/mingw/winpthreads/spinlock.c +0 -82
  140. package/libc/musl/src/linux/tee.c +0 -8
  141. package/libc/musl/src/math/fdimf.c +0 -10
  142. package/libc/musl/src/math/fdiml.c +0 -18
  143. package/libc/musl/src/string/strdup.c +0 -10
  144. package/libc/musl/src/string/strndup.c +0 -12
  145. package/libc/musl/src/string/wcsdup.c +0 -10
  146. package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
  147. package/libc/musl/src/thread/pthread_spin_init.c +0 -6
  148. package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
  149. package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
  150. package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
  151. package/libc/musl/src/unistd/dup2.c +0 -20
  152. package/libc/musl/src/unistd/dup3.c +0 -26
  153. package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
  154. package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
  155. 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);
1289
+ }
1290
+
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);
1269
1327
  }
1270
1328
 
1271
- pub fn preadv(fd: i32, iov: [*]const iovec, count: usize, offset: i64) usize {
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
+ }
1306
1394
  }
1307
1395
 
1308
- pub fn pwritev(fd: i32, iov: [*]const iovec_const, count: usize, offset: i64) usize {
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);
1398
+ }
1399
+
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
 
@@ -1590,7 +1599,7 @@ pub fn set_tid_address(tidptr: ?*pid_t) pid_t {
1590
1599
  }
1591
1600
 
1592
1601
  pub fn close(fd: fd_t) usize {
1593
- return syscall1(.close, @as(usize, @bitCast(@as(isize, fd))));
1602
+ return syscall1(.close, @as(u32, @bitCast(fd)));
1594
1603
  }
1595
1604
 
1596
1605
  pub const CLOSE_RANGE = packed struct(u32) {
@@ -1602,11 +1611,11 @@ pub const CLOSE_RANGE = packed struct(u32) {
1602
1611
  };
1603
1612
 
1604
1613
  pub fn close_range(first: fd_t, last: fd_t, flags: CLOSE_RANGE) usize {
1605
- 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)));
1606
1615
  }
1607
1616
 
1608
- pub fn fchmod(fd: i32, mode: mode_t) usize {
1609
- 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);
1610
1619
  }
1611
1620
 
1612
1621
  pub fn chmod(path: [*:0]const u8, mode: mode_t) usize {
@@ -1617,16 +1626,16 @@ pub fn chmod(path: [*:0]const u8, mode: mode_t) usize {
1617
1626
  }
1618
1627
  }
1619
1628
 
1620
- 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 {
1621
1630
  if (@hasField(SYS, "fchown32")) {
1622
- return syscall3(.fchown32, @as(usize, @bitCast(@as(isize, fd))), owner, group);
1631
+ return syscall3(.fchown32, @as(u32, @bitCast(fd)), owner, group);
1623
1632
  } else {
1624
- return syscall3(.fchown, @as(usize, @bitCast(@as(isize, fd))), owner, group);
1633
+ return syscall3(.fchown, @as(u32, @bitCast(fd)), owner, group);
1625
1634
  }
1626
1635
  }
1627
1636
 
1628
- pub fn fchownat(fd: i32, path: [*:0]const u8, owner: uid_t, group: gid_t, flags: u32) usize {
1629
- 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);
1630
1639
  }
1631
1640
 
1632
1641
  pub fn chown(path: [*:0]const u8, owner: uid_t, group: gid_t) usize {
@@ -1649,40 +1658,40 @@ pub fn lchown(path: [*:0]const u8, owner: uid_t, group: gid_t) usize {
1649
1658
  }
1650
1659
  }
1651
1660
 
1652
- pub fn fchmodat(fd: i32, path: [*:0]const u8, mode: mode_t) usize {
1653
- 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);
1654
1663
  }
1655
1664
 
1656
- pub fn fchmodat2(fd: i32, path: [*:0]const u8, mode: mode_t, flags: u32) usize {
1657
- 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);
1658
1667
  }
1659
1668
 
1660
1669
  /// Can only be called on 32 bit systems. For 64 bit see `lseek`.
1661
- 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 {
1662
1671
  // NOTE: The offset parameter splitting is independent from the target
1663
1672
  // endianness.
1664
1673
  return syscall5(
1665
1674
  .llseek,
1666
- @as(usize, @bitCast(@as(isize, fd))),
1667
- @as(usize, @truncate(offset >> 32)),
1668
- @as(usize, @truncate(offset)),
1675
+ @as(u32, @bitCast(fd)),
1676
+ @truncate(@as(u64, @bitCast(offset >> 32))),
1677
+ @truncate(@as(u64, @bitCast(offset))),
1669
1678
  @intFromPtr(result),
1670
1679
  whence,
1671
1680
  );
1672
1681
  }
1673
1682
 
1674
1683
  /// Can only be called on 64 bit systems. For 32 bit see `llseek`.
1675
- pub fn lseek(fd: i32, offset: i64, whence: usize) usize {
1676
- 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);
1677
1686
  }
1678
1687
 
1679
1688
  pub fn exit(status: i32) noreturn {
1680
- _ = syscall1(.exit, @as(usize, @bitCast(@as(isize, status))));
1689
+ _ = syscall1(.exit, @as(u32, @bitCast(status)));
1681
1690
  unreachable;
1682
1691
  }
1683
1692
 
1684
1693
  pub fn exit_group(status: i32) noreturn {
1685
- _ = syscall1(.exit_group, @as(usize, @bitCast(@as(isize, status))));
1694
+ _ = syscall1(.exit_group, @as(u32, @bitCast(status)));
1686
1695
  unreachable;
1687
1696
  }
1688
1697
 
@@ -1748,15 +1757,15 @@ pub fn getrandom(buf: [*]u8, count: usize, flags: u32) usize {
1748
1757
  }
1749
1758
 
1750
1759
  pub fn kill(pid: pid_t, sig: SIG) usize {
1751
- return syscall2(.kill, @as(usize, @bitCast(@as(isize, pid))), @intFromEnum(sig));
1760
+ return syscall2(.kill, @as(u32, @bitCast(pid)), @intFromEnum(sig));
1752
1761
  }
1753
1762
 
1754
1763
  pub fn tkill(tid: pid_t, sig: SIG) usize {
1755
- return syscall2(.tkill, @as(usize, @bitCast(@as(isize, tid))), @intFromEnum(sig));
1764
+ return syscall2(.tkill, @as(u32, @bitCast(tid)), @intFromEnum(sig));
1756
1765
  }
1757
1766
 
1758
1767
  pub fn tgkill(tgid: pid_t, tid: pid_t, sig: SIG) usize {
1759
- 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));
1760
1769
  }
1761
1770
 
1762
1771
  pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) usize {
@@ -1769,9 +1778,9 @@ pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) usize {
1769
1778
  } else {
1770
1779
  return syscall5(
1771
1780
  .linkat,
1772
- @as(usize, @bitCast(@as(isize, AT.FDCWD))),
1781
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1773
1782
  @intFromPtr(oldpath),
1774
- @as(usize, @bitCast(@as(isize, AT.FDCWD))),
1783
+ @as(u32, @bitCast(@as(i32, AT.FDCWD))),
1775
1784
  @intFromPtr(newpath),
1776
1785
  0,
1777
1786
  );
@@ -1781,9 +1790,9 @@ pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) usize {
1781
1790
  pub fn linkat(oldfd: fd_t, oldpath: [*:0]const u8, newfd: fd_t, newpath: [*:0]const u8, flags: u32) usize {
1782
1791
  return syscall5(
1783
1792
  .linkat,
1784
- @as(usize, @bitCast(@as(isize, oldfd))),
1793
+ @as(u32, @bitCast(oldfd)),
1785
1794
  @intFromPtr(oldpath),
1786
- @as(usize, @bitCast(@as(isize, newfd))),
1795
+ @as(u32, @bitCast(newfd)),
1787
1796
  @intFromPtr(newpath),
1788
1797
  flags,
1789
1798
  );
@@ -1793,33 +1802,33 @@ pub fn unlink(path: [*:0]const u8) usize {
1793
1802
  if (@hasField(SYS, "unlink")) {
1794
1803
  return syscall1(.unlink, @intFromPtr(path));
1795
1804
  } else {
1796
- 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);
1797
1806
  }
1798
1807
  }
1799
1808
 
1800
- pub fn unlinkat(dirfd: i32, path: [*:0]const u8, flags: u32) usize {
1801
- 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);
1802
1811
  }
1803
1812
 
1804
- pub fn waitpid(pid: pid_t, status: *u32, flags: u32) usize {
1805
- 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);
1806
1815
  }
1807
1816
 
1808
- 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 {
1809
1818
  return syscall4(
1810
1819
  .wait4,
1811
- @as(usize, @bitCast(@as(isize, pid))),
1820
+ @as(u32, @bitCast(pid)),
1812
1821
  @intFromPtr(status),
1813
1822
  flags,
1814
1823
  @intFromPtr(usage),
1815
1824
  );
1816
1825
  }
1817
1826
 
1818
- 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 {
1819
1828
  return syscall5(
1820
1829
  .waitid,
1821
1830
  @intFromEnum(id_type),
1822
- @as(usize, @bitCast(@as(isize, id))),
1831
+ @as(u32, @bitCast(id)),
1823
1832
  @intFromPtr(infop),
1824
1833
  flags,
1825
1834
  @intFromPtr(usage),
@@ -1918,14 +1927,14 @@ pub const Flock = extern struct {
1918
1927
 
1919
1928
  pub fn fcntl(fd: fd_t, cmd: i32, arg: usize) usize {
1920
1929
  if (@hasField(SYS, "fcntl64")) {
1921
- 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);
1922
1931
  } else {
1923
- 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);
1924
1933
  }
1925
1934
  }
1926
1935
 
1927
1936
  pub fn flock(fd: fd_t, operation: i32) usize {
1928
- 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)));
1929
1938
  }
1930
1939
 
1931
1940
  pub const Elf_Symndx = if (native_arch == .s390x) u64 else u32;
@@ -1965,7 +1974,7 @@ fn init_vdso_clock_gettime(clk: clockid_t, ts: *timespec) callconv(.c) usize {
1965
1974
  pub fn clock_getres(clk_id: clockid_t, tp: *timespec) usize {
1966
1975
  return syscall2(
1967
1976
  if (@hasField(SYS, "clock_getres") and native_arch != .hexagon) .clock_getres else .clock_getres_time64,
1968
- @as(usize, @intFromEnum(clk_id)),
1977
+ @intFromEnum(clk_id),
1969
1978
  @intFromPtr(tp),
1970
1979
  );
1971
1980
  }
@@ -1973,7 +1982,7 @@ pub fn clock_getres(clk_id: clockid_t, tp: *timespec) usize {
1973
1982
  pub fn clock_settime(clk_id: clockid_t, tp: *const timespec) usize {
1974
1983
  return syscall2(
1975
1984
  if (@hasField(SYS, "clock_settime") and native_arch != .hexagon) .clock_settime else .clock_settime64,
1976
- @as(usize, @intFromEnum(clk_id)),
1985
+ @intFromEnum(clk_id),
1977
1986
  @intFromPtr(tp),
1978
1987
  );
1979
1988
  }
@@ -2127,11 +2136,11 @@ pub fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) usize {
2127
2136
  }
2128
2137
 
2129
2138
  pub fn setpgid(pid: pid_t, pgid: pid_t) usize {
2130
- return syscall2(.setpgid, @intCast(pid), @intCast(pgid));
2139
+ return syscall2(.setpgid, @as(u32, @bitCast(pid)), @as(u32, @bitCast(pgid)));
2131
2140
  }
2132
2141
 
2133
2142
  pub fn getpgid(pid: pid_t) usize {
2134
- return syscall1(.getpgid, @intCast(pid));
2143
+ return syscall1(.getpgid, @as(u32, @bitCast(pid)));
2135
2144
  }
2136
2145
 
2137
2146
  pub fn getgroups(size: usize, list: ?[*]gid_t) usize {
@@ -2155,7 +2164,7 @@ pub fn setsid() usize {
2155
2164
  }
2156
2165
 
2157
2166
  pub fn getsid(pid: pid_t) usize {
2158
- return syscall1(.getsid, @intCast(pid));
2167
+ return syscall1(.getsid, @as(u32, @bitCast(pid)));
2159
2168
  }
2160
2169
 
2161
2170
  pub fn getpid() pid_t {
@@ -2226,8 +2235,6 @@ pub fn sigaction(sig: SIG, noalias act: ?*const Sigaction, noalias oact: ?*Sigac
2226
2235
  return 0;
2227
2236
  }
2228
2237
 
2229
- const usize_bits = @typeInfo(usize).int.bits;
2230
-
2231
2238
  /// Defined as one greater than the largest defined signal number.
2232
2239
  pub const NSIG = if (is_mips) 128 else 65;
2233
2240
 
@@ -2288,18 +2295,18 @@ pub fn sigismember(set: *const sigset_t, sig: SIG) bool {
2288
2295
  return ((set.*)[index.word] & index.mask) != 0;
2289
2296
  }
2290
2297
 
2291
- 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 {
2292
2299
  if (native_arch == .x86) {
2293
- 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) });
2294
2301
  }
2295
- 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));
2296
2303
  }
2297
2304
 
2298
- 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 {
2299
2306
  if (native_arch == .x86) {
2300
- 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) });
2301
2308
  }
2302
- 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));
2303
2310
  }
2304
2311
 
2305
2312
  pub fn socket(domain: u32, socket_type: u32, protocol: u32) usize {
@@ -2309,58 +2316,52 @@ pub fn socket(domain: u32, socket_type: u32, protocol: u32) usize {
2309
2316
  return syscall3(.socket, domain, socket_type, protocol);
2310
2317
  }
2311
2318
 
2312
- 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 {
2313
2320
  if (native_arch == .x86) {
2314
- 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)) });
2315
2322
  }
2316
- 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)));
2317
2324
  }
2318
2325
 
2319
- 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 {
2320
2327
  if (native_arch == .x86) {
2321
- 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) });
2322
2329
  }
2323
- 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));
2324
2331
  }
2325
2332
 
2326
- pub fn sendmsg(fd: i32, msg: *const msghdr_const, flags: u32) usize {
2327
- const fd_usize = @as(usize, @bitCast(@as(isize, fd)));
2328
- const msg_usize = @intFromPtr(msg);
2333
+ pub fn sendmsg(fd: fd_t, msg: *const msghdr_const, flags: u32) usize {
2329
2334
  if (native_arch == .x86) {
2330
- 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 });
2331
2336
  } else {
2332
- return syscall3(.sendmsg, fd_usize, msg_usize, flags);
2337
+ return syscall3(.sendmsg, @as(u32, @bitCast(fd)), @intFromPtr(msg), flags);
2333
2338
  }
2334
2339
  }
2335
2340
 
2336
- pub fn sendmmsg(fd: i32, msgvec: [*]mmsghdr, vlen: u32, flags: u32) usize {
2337
- 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);
2338
2343
  }
2339
2344
 
2340
- pub fn connect(fd: i32, addr: *const anyopaque, len: socklen_t) usize {
2341
- const fd_usize = @as(usize, @bitCast(@as(isize, fd)));
2342
- const addr_usize = @intFromPtr(addr);
2345
+ pub fn connect(fd: fd_t, addr: *const anyopaque, len: socklen_t) usize {
2343
2346
  if (native_arch == .x86) {
2344
- 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 });
2345
2348
  } else {
2346
- return syscall3(.connect, fd_usize, addr_usize, len);
2349
+ return syscall3(.connect, @as(u32, @bitCast(fd)), @intFromPtr(addr), len);
2347
2350
  }
2348
2351
  }
2349
2352
 
2350
- pub fn recvmsg(fd: i32, msg: *msghdr, flags: u32) usize {
2351
- const fd_usize = @as(usize, @bitCast(@as(isize, fd)));
2352
- const msg_usize = @intFromPtr(msg);
2353
+ pub fn recvmsg(fd: fd_t, msg: *msghdr, flags: u32) usize {
2353
2354
  if (native_arch == .x86) {
2354
- 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 });
2355
2356
  } else {
2356
- return syscall3(.recvmsg, fd_usize, msg_usize, flags);
2357
+ return syscall3(.recvmsg, @as(u32, @bitCast(fd)), @intFromPtr(msg), flags);
2357
2358
  }
2358
2359
  }
2359
2360
 
2360
- 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 {
2361
2362
  return syscall5(
2362
2363
  if (@hasField(SYS, "recvmmsg") and native_arch != .hexagon) .recvmmsg else .recvmmsg_time64,
2363
- @as(usize, @bitCast(@as(isize, fd))),
2364
+ @as(u32, @bitCast(fd)),
2364
2365
  @intFromPtr(msgvec),
2365
2366
  vlen,
2366
2367
  flags,
@@ -2369,43 +2370,39 @@ pub fn recvmmsg(fd: i32, msgvec: ?[*]mmsghdr, vlen: u32, flags: u32, timeout: ?*
2369
2370
  }
2370
2371
 
2371
2372
  pub fn recvfrom(
2372
- fd: i32,
2373
+ fd: fd_t,
2373
2374
  noalias buf: [*]u8,
2374
2375
  len: usize,
2375
2376
  flags: u32,
2376
2377
  noalias addr: ?*sockaddr,
2377
2378
  noalias alen: ?*socklen_t,
2378
2379
  ) usize {
2379
- const fd_usize = @as(usize, @bitCast(@as(isize, fd)));
2380
- const buf_usize = @intFromPtr(buf);
2381
- const addr_usize = @intFromPtr(addr);
2382
- const alen_usize = @intFromPtr(alen);
2383
2380
  if (native_arch == .x86) {
2384
- 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) });
2385
2382
  } else {
2386
- 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));
2387
2384
  }
2388
2385
  }
2389
2386
 
2390
- pub fn shutdown(fd: i32, how: i32) usize {
2387
+ pub fn shutdown(fd: fd_t, how: i32) usize {
2391
2388
  if (native_arch == .x86) {
2392
- 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)) });
2393
2390
  }
2394
- 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)));
2395
2392
  }
2396
2393
 
2397
- 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 {
2398
2395
  if (native_arch == .x86) {
2399
- 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 });
2400
2397
  }
2401
- 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);
2402
2399
  }
2403
2400
 
2404
- pub fn listen(fd: i32, backlog: u32) usize {
2401
+ pub fn listen(fd: fd_t, backlog: u32) usize {
2405
2402
  if (native_arch == .x86) {
2406
- 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 });
2407
2404
  }
2408
- return syscall2(.listen, @as(usize, @bitCast(@as(isize, fd))), backlog);
2405
+ return syscall2(.listen, @as(u32, @bitCast(fd)), backlog);
2409
2406
  }
2410
2407
 
2411
2408
  pub fn sendto(fd: i32, buf: [*]const u8, len: usize, flags: u32, addr: ?*const sockaddr, alen: socklen_t) usize {
@@ -2415,51 +2412,41 @@ pub fn sendto(fd: i32, buf: [*]const u8, len: usize, flags: u32, addr: ?*const s
2415
2412
  return syscall6(.sendto, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(buf), len, flags, @intFromPtr(addr), @as(usize, @intCast(alen)));
2416
2413
  }
2417
2414
 
2418
- pub fn sendfile(outfd: i32, infd: i32, offset: ?*i64, count: usize) usize {
2419
- if (@hasField(SYS, "sendfile64")) {
2420
- return syscall4(
2421
- .sendfile64,
2422
- @as(usize, @bitCast(@as(isize, outfd))),
2423
- @as(usize, @bitCast(@as(isize, infd))),
2424
- @intFromPtr(offset),
2425
- count,
2426
- );
2427
- } else {
2428
- return syscall4(
2429
- .sendfile,
2430
- @as(usize, @bitCast(@as(isize, outfd))),
2431
- @as(usize, @bitCast(@as(isize, infd))),
2432
- @intFromPtr(offset),
2433
- count,
2434
- );
2435
- }
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
+ );
2436
2423
  }
2437
2424
 
2438
- 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 {
2439
2426
  if (native_arch == .x86) {
2440
2427
  return socketcall(SC.socketpair, &[4]usize{ domain, socket_type, protocol, @intFromPtr(fd) });
2441
2428
  }
2442
2429
  return syscall4(.socketpair, domain, socket_type, protocol, @intFromPtr(fd));
2443
2430
  }
2444
2431
 
2445
- 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 {
2446
2433
  if (native_arch == .x86) {
2447
- 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 });
2448
2435
  }
2449
2436
  return accept4(fd, addr, len, 0);
2450
2437
  }
2451
2438
 
2452
- 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 {
2453
2440
  if (native_arch == .x86) {
2454
- 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 });
2455
2442
  }
2456
- 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);
2457
2444
  }
2458
2445
 
2459
- 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 {
2460
2447
  return syscall5(
2461
2448
  .statx,
2462
- @as(usize, @bitCast(@as(isize, dirfd))),
2449
+ @as(u32, @bitCast(dirfd)),
2463
2450
  @intFromPtr(path),
2464
2451
  flags,
2465
2452
  @as(u32, @bitCast(mask)),
@@ -2476,7 +2463,7 @@ pub fn llistxattr(path: [*:0]const u8, list: [*]u8, size: usize) usize {
2476
2463
  }
2477
2464
 
2478
2465
  pub fn flistxattr(fd: fd_t, list: [*]u8, size: usize) usize {
2479
- return syscall3(.flistxattr, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(list), size);
2466
+ return syscall3(.flistxattr, @as(u32, @bitCast(fd)), @intFromPtr(list), size);
2480
2467
  }
2481
2468
 
2482
2469
  pub fn getxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]u8, size: usize) usize {
@@ -2488,7 +2475,7 @@ pub fn lgetxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]u8, size: u
2488
2475
  }
2489
2476
 
2490
2477
  pub fn fgetxattr(fd: fd_t, name: [*:0]const u8, value: [*]u8, size: usize) usize {
2491
- 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);
2492
2479
  }
2493
2480
 
2494
2481
  pub fn setxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]const u8, size: usize, flags: usize) usize {
@@ -2500,7 +2487,7 @@ pub fn lsetxattr(path: [*:0]const u8, name: [*:0]const u8, value: [*]const u8, s
2500
2487
  }
2501
2488
 
2502
2489
  pub fn fsetxattr(fd: fd_t, name: [*:0]const u8, value: [*]const u8, size: usize, flags: usize) usize {
2503
- 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);
2504
2491
  }
2505
2492
 
2506
2493
  pub fn removexattr(path: [*:0]const u8, name: [*:0]const u8) usize {
@@ -2511,8 +2498,8 @@ pub fn lremovexattr(path: [*:0]const u8, name: [*:0]const u8) usize {
2511
2498
  return syscall2(.lremovexattr, @intFromPtr(path), @intFromPtr(name));
2512
2499
  }
2513
2500
 
2514
- pub fn fremovexattr(fd: usize, name: [*:0]const u8) usize {
2515
- 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));
2516
2503
  }
2517
2504
 
2518
2505
  pub const sched_param = extern struct {
@@ -2542,27 +2529,27 @@ pub const SCHED = packed struct(i32) {
2542
2529
  };
2543
2530
 
2544
2531
  pub fn sched_setparam(pid: pid_t, param: *const sched_param) usize {
2545
- return syscall2(.sched_setparam, @as(usize, @bitCast(@as(isize, pid))), @intFromPtr(param));
2532
+ return syscall2(.sched_setparam, @as(u32, @bitCast(pid)), @intFromPtr(param));
2546
2533
  }
2547
2534
 
2548
2535
  pub fn sched_getparam(pid: pid_t, param: *sched_param) usize {
2549
- return syscall2(.sched_getparam, @as(usize, @bitCast(@as(isize, pid))), @intFromPtr(param));
2536
+ return syscall2(.sched_getparam, @as(u32, @bitCast(pid)), @intFromPtr(param));
2550
2537
  }
2551
2538
 
2552
2539
  pub fn sched_setscheduler(pid: pid_t, policy: SCHED, param: *const sched_param) usize {
2553
- 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));
2554
2541
  }
2555
2542
 
2556
2543
  pub fn sched_getscheduler(pid: pid_t) usize {
2557
- return syscall1(.sched_getscheduler, @as(usize, @bitCast(@as(isize, pid))));
2544
+ return syscall1(.sched_getscheduler, @as(u32, @bitCast(pid)));
2558
2545
  }
2559
2546
 
2560
2547
  pub fn sched_get_priority_max(policy: SCHED) usize {
2561
- return syscall1(.sched_get_priority_max, @intCast(@as(u32, @bitCast(policy))));
2548
+ return syscall1(.sched_get_priority_max, @as(u32, @bitCast(policy)));
2562
2549
  }
2563
2550
 
2564
2551
  pub fn sched_get_priority_min(policy: SCHED) usize {
2565
- return syscall1(.sched_get_priority_min, @intCast(@as(u32, @bitCast(policy))));
2552
+ return syscall1(.sched_get_priority_min, @as(u32, @bitCast(policy)));
2566
2553
  }
2567
2554
 
2568
2555
  pub fn getcpu(cpu: ?*usize, node: ?*usize) usize {
@@ -2581,24 +2568,24 @@ pub const sched_attr = extern struct {
2581
2568
  period: u64 = 0,
2582
2569
  };
2583
2570
 
2584
- pub fn sched_setattr(pid: pid_t, attr: *const sched_attr, flags: usize) usize {
2585
- 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);
2586
2573
  }
2587
2574
 
2588
- pub fn sched_getattr(pid: pid_t, attr: *sched_attr, size: usize, flags: usize) usize {
2589
- 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);
2590
2577
  }
2591
2578
 
2592
2579
  pub fn sched_rr_get_interval(pid: pid_t, tp: *timespec) usize {
2593
- 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));
2594
2581
  }
2595
2582
 
2596
2583
  pub fn sched_yield() usize {
2597
2584
  return syscall0(.sched_yield);
2598
2585
  }
2599
2586
 
2600
- pub fn sched_getaffinity(pid: pid_t, size: usize, set: *cpu_set_t) usize {
2601
- 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));
2602
2589
  if (@as(isize, @bitCast(rc)) < 0) return rc;
2603
2590
  if (rc < size) @memset(@as([*]u8, @ptrCast(set))[rc..size], 0);
2604
2591
  return 0;
@@ -2606,7 +2593,7 @@ pub fn sched_getaffinity(pid: pid_t, size: usize, set: *cpu_set_t) usize {
2606
2593
 
2607
2594
  pub fn sched_setaffinity(pid: pid_t, set: *const cpu_set_t) !void {
2608
2595
  const size = @sizeOf(cpu_set_t);
2609
- 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));
2610
2597
 
2611
2598
  switch (errno(rc)) {
2612
2599
  .SUCCESS => return,
@@ -2618,25 +2605,25 @@ pub fn epoll_create() usize {
2618
2605
  return epoll_create1(0);
2619
2606
  }
2620
2607
 
2621
- pub fn epoll_create1(flags: usize) usize {
2608
+ pub fn epoll_create1(flags: u32) usize {
2622
2609
  return syscall1(.epoll_create1, flags);
2623
2610
  }
2624
2611
 
2625
- pub fn epoll_ctl(epoll_fd: i32, op: u32, fd: i32, ev: ?*epoll_event) usize {
2626
- 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));
2627
2614
  }
2628
2615
 
2629
- 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 {
2630
2617
  return epoll_pwait(epoll_fd, events, maxevents, timeout, null);
2631
2618
  }
2632
2619
 
2633
- 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 {
2634
2621
  return syscall6(
2635
2622
  .epoll_pwait,
2636
- @as(usize, @bitCast(@as(isize, epoll_fd))),
2623
+ @as(u32, @bitCast(epoll_fd)),
2637
2624
  @intFromPtr(events),
2638
- @as(usize, @intCast(maxevents)),
2639
- @as(usize, @bitCast(@as(isize, timeout))),
2625
+ maxevents,
2626
+ @as(u32, @bitCast(timeout)),
2640
2627
  @intFromPtr(sigmask),
2641
2628
  NSIG / 8,
2642
2629
  );
@@ -2659,18 +2646,18 @@ pub const itimerspec = extern struct {
2659
2646
  it_value: timespec,
2660
2647
  };
2661
2648
 
2662
- pub fn timerfd_gettime(fd: i32, curr_value: *itimerspec) usize {
2649
+ pub fn timerfd_gettime(fd: fd_t, curr_value: *itimerspec) usize {
2663
2650
  return syscall2(
2664
2651
  if (@hasField(SYS, "timerfd_gettime") and native_arch != .hexagon) .timerfd_gettime else .timerfd_gettime64,
2665
- @bitCast(@as(isize, fd)),
2652
+ @as(u32, @bitCast(fd)),
2666
2653
  @intFromPtr(curr_value),
2667
2654
  );
2668
2655
  }
2669
2656
 
2670
- 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 {
2671
2658
  return syscall4(
2672
2659
  if (@hasField(SYS, "timerfd_settime") and native_arch != .hexagon) .timerfd_settime else .timerfd_settime64,
2673
- @bitCast(@as(isize, fd)),
2660
+ @as(u32, @bitCast(fd)),
2674
2661
  @as(u32, @bitCast(flags)),
2675
2662
  @intFromPtr(new_value),
2676
2663
  @intFromPtr(old_value),
@@ -2685,11 +2672,11 @@ pub const ITIMER = enum(i32) {
2685
2672
  };
2686
2673
 
2687
2674
  pub fn getitimer(which: i32, curr_value: *itimerspec) usize {
2688
- return syscall2(.getitimer, @as(usize, @bitCast(@as(isize, which))), @intFromPtr(curr_value));
2675
+ return syscall2(.getitimer, @as(u32, @bitCast(which)), @intFromPtr(curr_value));
2689
2676
  }
2690
2677
 
2691
2678
  pub fn setitimer(which: i32, new_value: *const itimerspec, old_value: ?*itimerspec) usize {
2692
- 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));
2693
2680
  }
2694
2681
 
2695
2682
  pub fn unshare(flags: usize) usize {
@@ -2697,7 +2684,7 @@ pub fn unshare(flags: usize) usize {
2697
2684
  }
2698
2685
 
2699
2686
  pub fn setns(fd: fd_t, flags: u32) usize {
2700
- return syscall2(.setns, @as(usize, @bitCast(@as(isize, fd))), flags);
2687
+ return syscall2(.setns, @as(u32, @bitCast(fd)), flags);
2701
2688
  }
2702
2689
 
2703
2690
  pub fn capget(hdrp: *cap_user_header_t, datap: *cap_user_data_t) usize {
@@ -2720,12 +2707,12 @@ pub fn io_uring_setup(entries: u32, p: *io_uring_params) usize {
2720
2707
  return syscall2(.io_uring_setup, entries, @intFromPtr(p));
2721
2708
  }
2722
2709
 
2723
- pub fn io_uring_enter(fd: i32, to_submit: u32, min_complete: u32, flags: u32, sig: ?*sigset_t) usize {
2724
- 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);
2725
2712
  }
2726
2713
 
2727
- pub fn io_uring_register(fd: i32, opcode: IORING_REGISTER, arg: ?*const anyopaque, nr_args: u32) usize {
2728
- 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);
2729
2716
  }
2730
2717
 
2731
2718
  pub fn memfd_create(name: [*:0]const u8, flags: u32) usize {
@@ -2733,43 +2720,43 @@ pub fn memfd_create(name: [*:0]const u8, flags: u32) usize {
2733
2720
  }
2734
2721
 
2735
2722
  pub fn getrusage(who: i32, usage: *rusage) usize {
2736
- return syscall2(.getrusage, @as(usize, @bitCast(@as(isize, who))), @intFromPtr(usage));
2723
+ return syscall2(.getrusage, @as(u32, @bitCast(who)), @intFromPtr(usage));
2737
2724
  }
2738
2725
 
2739
2726
  pub fn tcgetattr(fd: fd_t, termios_p: *termios) usize {
2740
- 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));
2741
2728
  }
2742
2729
 
2743
2730
  pub fn tcsetattr(fd: fd_t, optional_action: TCSA, termios_p: *const termios) usize {
2744
- 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));
2745
2732
  }
2746
2733
 
2747
2734
  pub fn tcgetpgrp(fd: fd_t, pgrp: *pid_t) usize {
2748
- 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));
2749
2736
  }
2750
2737
 
2751
2738
  pub fn tcsetpgrp(fd: fd_t, pgrp: *const pid_t) usize {
2752
- 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));
2753
2740
  }
2754
2741
 
2755
2742
  pub fn tcdrain(fd: fd_t) usize {
2756
- return syscall3(.ioctl, @as(usize, @bitCast(@as(isize, fd))), T.CSBRK, 1);
2743
+ return syscall3(.ioctl, @as(u32, @bitCast(fd)), T.CSBRK, 1);
2757
2744
  }
2758
2745
 
2759
2746
  pub fn ioctl(fd: fd_t, request: u32, arg: usize) usize {
2760
- return syscall3(.ioctl, @as(usize, @bitCast(@as(isize, fd))), request, arg);
2747
+ return syscall3(.ioctl, @as(u32, @bitCast(fd)), request, arg);
2761
2748
  }
2762
2749
 
2763
2750
  pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) usize {
2764
- 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);
2765
2752
  }
2766
2753
 
2767
- 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 {
2768
2755
  return syscall6(
2769
2756
  .copy_file_range,
2770
- @as(usize, @bitCast(@as(isize, fd_in))),
2757
+ @as(u32, @bitCast(fd_in)),
2771
2758
  @intFromPtr(off_in),
2772
- @as(usize, @bitCast(@as(isize, fd_out))),
2759
+ @as(u32, @bitCast(fd_out)),
2773
2760
  @intFromPtr(off_out),
2774
2761
  len,
2775
2762
  flags,
@@ -2785,19 +2772,19 @@ pub fn sync() void {
2785
2772
  }
2786
2773
 
2787
2774
  pub fn syncfs(fd: fd_t) usize {
2788
- return syscall1(.syncfs, @as(usize, @bitCast(@as(isize, fd))));
2775
+ return syscall1(.syncfs, @as(u32, @bitCast(fd)));
2789
2776
  }
2790
2777
 
2791
2778
  pub fn fsync(fd: fd_t) usize {
2792
- return syscall1(.fsync, @as(usize, @bitCast(@as(isize, fd))));
2779
+ return syscall1(.fsync, @as(u32, @bitCast(fd)));
2793
2780
  }
2794
2781
 
2795
2782
  pub fn fdatasync(fd: fd_t) usize {
2796
- return syscall1(.fdatasync, @as(usize, @bitCast(@as(isize, fd))));
2783
+ return syscall1(.fdatasync, @as(u32, @bitCast(fd)));
2797
2784
  }
2798
2785
 
2799
2786
  pub fn prctl(option: i32, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
2800
- 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);
2801
2788
  }
2802
2789
 
2803
2790
  pub fn getrlimit(resource: rlimit_resource, rlim: *rlimit) usize {
@@ -2813,8 +2800,8 @@ pub fn setrlimit(resource: rlimit_resource, rlim: *const rlimit) usize {
2813
2800
  pub fn prlimit(pid: pid_t, resource: rlimit_resource, new_limit: ?*const rlimit, old_limit: ?*rlimit) usize {
2814
2801
  return syscall4(
2815
2802
  .prlimit64,
2816
- @as(usize, @bitCast(@as(isize, pid))),
2817
- @as(usize, @bitCast(@as(isize, @intFromEnum(resource)))),
2803
+ @as(u32, @bitCast(pid)),
2804
+ @as(u32, @bitCast(@as(i32, @intFromEnum(resource)))),
2818
2805
  @intFromPtr(new_limit),
2819
2806
  @intFromPtr(old_limit),
2820
2807
  );
@@ -2829,14 +2816,14 @@ pub fn madvise(address: [*]u8, len: usize, advice: u32) usize {
2829
2816
  }
2830
2817
 
2831
2818
  pub fn pidfd_open(pid: pid_t, flags: u32) usize {
2832
- return syscall2(.pidfd_open, @as(usize, @bitCast(@as(isize, pid))), flags);
2819
+ return syscall2(.pidfd_open, @as(u32, @bitCast(pid)), flags);
2833
2820
  }
2834
2821
 
2835
2822
  pub fn pidfd_getfd(pidfd: fd_t, targetfd: fd_t, flags: u32) usize {
2836
2823
  return syscall3(
2837
2824
  .pidfd_getfd,
2838
- @as(usize, @bitCast(@as(isize, pidfd))),
2839
- @as(usize, @bitCast(@as(isize, targetfd))),
2825
+ @as(u32, @bitCast(pidfd)),
2826
+ @as(u32, @bitCast(targetfd)),
2840
2827
  flags,
2841
2828
  );
2842
2829
  }
@@ -2844,7 +2831,7 @@ pub fn pidfd_getfd(pidfd: fd_t, targetfd: fd_t, flags: u32) usize {
2844
2831
  pub fn pidfd_send_signal(pidfd: fd_t, sig: SIG, info: ?*siginfo_t, flags: u32) usize {
2845
2832
  return syscall4(
2846
2833
  .pidfd_send_signal,
2847
- @as(usize, @bitCast(@as(isize, pidfd))),
2834
+ @as(u32, @bitCast(pidfd)),
2848
2835
  @intFromEnum(sig),
2849
2836
  @intFromPtr(info),
2850
2837
  flags,
@@ -2854,7 +2841,7 @@ pub fn pidfd_send_signal(pidfd: fd_t, sig: SIG, info: ?*siginfo_t, flags: u32) u
2854
2841
  pub fn process_vm_readv(pid: pid_t, local: []const iovec, remote: []const iovec_const, flags: usize) usize {
2855
2842
  return syscall6(
2856
2843
  .process_vm_readv,
2857
- @as(usize, @bitCast(@as(isize, pid))),
2844
+ @as(u32, @bitCast(pid)),
2858
2845
  @intFromPtr(local.ptr),
2859
2846
  local.len,
2860
2847
  @intFromPtr(remote.ptr),
@@ -2866,7 +2853,7 @@ pub fn process_vm_readv(pid: pid_t, local: []const iovec, remote: []const iovec_
2866
2853
  pub fn process_vm_writev(pid: pid_t, local: []const iovec_const, remote: []const iovec_const, flags: usize) usize {
2867
2854
  return syscall6(
2868
2855
  .process_vm_writev,
2869
- @as(usize, @bitCast(@as(isize, pid))),
2856
+ @as(u32, @bitCast(pid)),
2870
2857
  @intFromPtr(local.ptr),
2871
2858
  local.len,
2872
2859
  @intFromPtr(remote.ptr),
@@ -2876,50 +2863,43 @@ pub fn process_vm_writev(pid: pid_t, local: []const iovec_const, remote: []const
2876
2863
  }
2877
2864
 
2878
2865
  pub fn fadvise(fd: fd_t, offset: i64, len: i64, advice: usize) usize {
2879
- if (comptime native_arch.isArm() or native_arch == .hexagon or native_arch.isPowerPC32()) {
2880
- // These architectures reorder the arguments so that a register is not skipped to align the
2881
- // 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.
2882
2869
 
2883
2870
  const offset_halves = splitValue64(offset);
2884
2871
  const length_halves = splitValue64(len);
2885
2872
 
2886
- return syscall6(
2887
- .fadvise64_64,
2888
- @as(usize, @bitCast(@as(isize, fd))),
2889
- advice,
2873
+ return syscall7(
2874
+ .fadvise64,
2875
+ @as(u32, @bitCast(fd)),
2876
+ 0,
2890
2877
  offset_halves[0],
2891
2878
  offset_halves[1],
2892
2879
  length_halves[0],
2893
2880
  length_halves[1],
2881
+ advice,
2894
2882
  );
2895
- } else if (native_arch.isMIPS32()) {
2896
- // MIPS O32 does not deal with the register alignment issue, so pass a dummy value.
2897
-
2883
+ } else if (require_aligned_register_pair) {
2898
2884
  const offset_halves = splitValue64(offset);
2899
2885
  const length_halves = splitValue64(len);
2900
2886
 
2901
- return syscall7(
2902
- .fadvise64,
2903
- @as(usize, @bitCast(@as(isize, fd))),
2904
- 0,
2887
+ return syscall6(
2888
+ .fadvise64_64,
2889
+ @as(u32, @bitCast(fd)),
2890
+ advice,
2905
2891
  offset_halves[0],
2906
2892
  offset_halves[1],
2907
2893
  length_halves[0],
2908
2894
  length_halves[1],
2909
- advice,
2910
2895
  );
2911
- } else if (comptime usize_bits < 64) {
2912
- // Other 32-bit architectures do not require register alignment.
2913
-
2896
+ } else if (@sizeOf(syscall_arg_t) < @sizeOf(u64)) {
2914
2897
  const offset_halves = splitValue64(offset);
2915
2898
  const length_halves = splitValue64(len);
2916
2899
 
2917
2900
  return syscall6(
2918
- switch (builtin.abi) {
2919
- .gnuabin32, .gnux32, .muslabin32, .muslx32 => .fadvise64,
2920
- else => .fadvise64_64,
2921
- },
2922
- @as(usize, @bitCast(@as(isize, fd))),
2901
+ .fadvise64_64,
2902
+ @as(u32, @bitCast(fd)),
2923
2903
  offset_halves[0],
2924
2904
  offset_halves[1],
2925
2905
  length_halves[0],
@@ -2927,14 +2907,11 @@ pub fn fadvise(fd: fd_t, offset: i64, len: i64, advice: usize) usize {
2927
2907
  advice,
2928
2908
  );
2929
2909
  } else {
2930
- // On 64-bit architectures, fadvise64_64 and fadvise64 are the same. Generally, older ports
2931
- // call it fadvise64 (x86, PowerPC, etc), while newer ports call it fadvise64_64 (RISC-V,
2932
- // LoongArch, etc). SPARC is the odd one out because it has both.
2933
2910
  return syscall4(
2934
- if (@hasField(SYS, "fadvise64_64")) .fadvise64_64 else .fadvise64,
2935
- @as(usize, @bitCast(@as(isize, fd))),
2936
- @as(usize, @bitCast(offset)),
2937
- @as(usize, @bitCast(len)),
2911
+ .fadvise64,
2912
+ @as(u32, @bitCast(fd)),
2913
+ @as(u64, @bitCast(offset)),
2914
+ @as(u64, @bitCast(len)),
2938
2915
  advice,
2939
2916
  );
2940
2917
  }
@@ -2950,9 +2927,9 @@ pub fn perf_event_open(
2950
2927
  return syscall5(
2951
2928
  .perf_event_open,
2952
2929
  @intFromPtr(attr),
2953
- @as(usize, @bitCast(@as(isize, pid))),
2954
- @as(usize, @bitCast(@as(isize, cpu))),
2955
- @as(usize, @bitCast(@as(isize, group_fd))),
2930
+ @as(u32, @bitCast(pid)),
2931
+ @as(u32, @bitCast(cpu)),
2932
+ @as(u32, @bitCast(group_fd)),
2956
2933
  flags,
2957
2934
  );
2958
2935
  }
@@ -2971,7 +2948,7 @@ pub fn ptrace(
2971
2948
  return syscall5(
2972
2949
  .ptrace,
2973
2950
  req,
2974
- @as(usize, @bitCast(@as(isize, pid))),
2951
+ @as(u32, @bitCast(pid)),
2975
2952
  addr,
2976
2953
  data,
2977
2954
  addr2,
@@ -2993,17 +2970,27 @@ pub fn cachestat(
2993
2970
  ) usize {
2994
2971
  return syscall4(
2995
2972
  .cachestat,
2996
- @as(usize, @bitCast(@as(isize, fd))),
2973
+ @as(u32, @bitCast(fd)),
2997
2974
  @intFromPtr(cstat_range),
2998
2975
  @intFromPtr(cstat),
2999
2976
  flags,
3000
2977
  );
3001
2978
  }
3002
2979
 
3003
- 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 {
3004
2981
  return syscall3(.map_shadow_stack, addr, size, flags);
3005
2982
  }
3006
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
+
3007
2994
  pub const Sysinfo = switch (native_abi) {
3008
2995
  .gnux32, .muslx32 => extern struct {
3009
2996
  /// Seconds since boot
@@ -3664,13 +3651,6 @@ pub const E = switch (native_arch) {
3664
3651
  },
3665
3652
  };
3666
3653
 
3667
- pub const pid_t = i32;
3668
- pub const fd_t = i32;
3669
- pub const socket_t = i32;
3670
- pub const uid_t = u32;
3671
- pub const gid_t = u32;
3672
- pub const clock_t = isize;
3673
-
3674
3654
  pub const NAME_MAX = 255;
3675
3655
  pub const PATH_MAX = 4096;
3676
3656
  pub const IOV_MAX = 1024;
@@ -10162,7 +10142,3 @@ pub const cmsghdr = extern struct {
10162
10142
  level: i32,
10163
10143
  type: i32,
10164
10144
  };
10165
-
10166
- inline fn fd_to_usize(fd: fd_t) usize {
10167
- return @as(usize, @bitCast(@as(isize, fd)));
10168
- }