@zigc/lib 0.16.0 → 0.17.0-dev.135

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 (268) 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/include/aarch64-linux-any/asm/hwcap.h +1 -0
  52. package/libc/include/aarch64-linux-any/asm/unistd_64.h +1 -0
  53. package/libc/include/any-linux-any/asm-generic/errno.h +2 -0
  54. package/libc/include/any-linux-any/asm-generic/unistd.h +4 -1
  55. package/libc/include/any-linux-any/drm/amdgpu_drm.h +20 -6
  56. package/libc/include/any-linux-any/drm/amdxdna_accel.h +8 -0
  57. package/libc/include/any-linux-any/drm/drm_fourcc.h +6 -6
  58. package/libc/include/any-linux-any/drm/panfrost_drm.h +75 -1
  59. package/libc/include/any-linux-any/drm/panthor_drm.h +154 -3
  60. package/libc/include/any-linux-any/drm/rocket_accel.h +74 -24
  61. package/libc/include/any-linux-any/drm/xe_drm.h +89 -6
  62. package/libc/include/any-linux-any/linux/android/binder.h +1 -1
  63. package/libc/include/any-linux-any/linux/bpf.h +28 -0
  64. package/libc/include/any-linux-any/linux/btrfs.h +1 -0
  65. package/libc/include/any-linux-any/linux/btrfs_tree.h +32 -2
  66. package/libc/include/any-linux-any/linux/dma-buf.h +1 -0
  67. package/libc/include/any-linux-any/linux/dpll.h +1 -0
  68. package/libc/include/any-linux-any/linux/elf.h +2 -0
  69. package/libc/include/any-linux-any/linux/ethtool.h +21 -5
  70. package/libc/include/any-linux-any/linux/fs.h +1 -0
  71. package/libc/include/any-linux-any/linux/hyperv.h +1 -1
  72. package/libc/include/any-linux-any/linux/idxd.h +134 -134
  73. package/libc/include/any-linux-any/linux/if_alg.h +1 -1
  74. package/libc/include/any-linux-any/linux/if_link.h +1 -0
  75. package/libc/include/any-linux-any/linux/input-event-codes.h +4 -0
  76. package/libc/include/any-linux-any/linux/io_uring/bpf_filter.h +68 -0
  77. package/libc/include/any-linux-any/linux/io_uring/query.h +5 -1
  78. package/libc/include/any-linux-any/linux/io_uring.h +33 -2
  79. package/libc/include/any-linux-any/linux/iommufd.h +39 -0
  80. package/libc/include/any-linux-any/linux/kfd_ioctl.h +13 -3
  81. package/libc/include/any-linux-any/linux/kfd_sysfs.h +2 -1
  82. package/libc/include/any-linux-any/linux/kvm.h +30 -6
  83. package/libc/include/any-linux-any/linux/landlock.h +22 -8
  84. package/libc/include/any-linux-any/linux/magic.h +1 -0
  85. package/libc/include/any-linux-any/linux/mempolicy.h +3 -0
  86. package/libc/include/any-linux-any/linux/mount.h +11 -2
  87. package/libc/include/any-linux-any/linux/mptcp_pm.h +1 -1
  88. package/libc/include/any-linux-any/linux/mshv.h +2 -0
  89. package/libc/include/any-linux-any/linux/netfilter_bridge.h +5 -4
  90. package/libc/include/any-linux-any/linux/netfilter_ipv4.h +4 -5
  91. package/libc/include/any-linux-any/linux/netfilter_ipv6.h +3 -4
  92. package/libc/include/any-linux-any/linux/nfs.h +1 -1
  93. package/libc/include/any-linux-any/linux/nfsd_netlink.h +1 -0
  94. package/libc/include/any-linux-any/linux/nilfs2_api.h +2 -2
  95. package/libc/include/any-linux-any/linux/nilfs2_ondisk.h +97 -66
  96. package/libc/include/any-linux-any/linux/nl80211.h +104 -3
  97. package/libc/include/any-linux-any/linux/pci.h +7 -0
  98. package/libc/include/any-linux-any/linux/pci_regs.h +65 -6
  99. package/libc/include/any-linux-any/linux/pcitest.h +1 -0
  100. package/libc/include/any-linux-any/linux/perf_event.h +24 -3
  101. package/libc/include/any-linux-any/linux/pkt_sched.h +1 -0
  102. package/libc/include/any-linux-any/linux/prctl.h +30 -0
  103. package/libc/include/any-linux-any/linux/rseq.h +62 -5
  104. package/libc/include/any-linux-any/linux/shm.h +0 -1
  105. package/libc/include/any-linux-any/linux/stddef.h +4 -0
  106. package/libc/include/any-linux-any/linux/sysctl.h +1 -2
  107. package/libc/include/any-linux-any/linux/taskstats.h +12 -1
  108. package/libc/include/any-linux-any/linux/tcp.h +23 -3
  109. package/libc/include/any-linux-any/linux/typelimits.h +8 -0
  110. package/libc/include/any-linux-any/linux/ublk_cmd.h +120 -1
  111. package/libc/include/any-linux-any/linux/v4l2-controls.h +63 -0
  112. package/libc/include/any-linux-any/linux/vbox_vmmdev_types.h +2 -2
  113. package/libc/include/any-linux-any/linux/vduse.h +80 -5
  114. package/libc/include/any-linux-any/linux/version.h +3 -3
  115. package/libc/include/any-linux-any/linux/vfio.h +4 -0
  116. package/libc/include/any-linux-any/linux/videodev2.h +3 -0
  117. package/libc/include/any-linux-any/linux/virtio_ring.h +1 -2
  118. package/libc/include/any-linux-any/linux/vmclock-abi.h +20 -0
  119. package/libc/include/any-linux-any/rdma/bnxt_re-abi.h +16 -0
  120. package/libc/include/any-linux-any/rdma/ib_user_ioctl_cmds.h +16 -0
  121. package/libc/include/any-linux-any/rdma/mana-abi.h +3 -0
  122. package/libc/include/any-linux-any/scsi/scsi_bsg_ufs.h +8 -9
  123. package/libc/include/any-linux-any/sound/sof/tokens.h +6 -0
  124. package/libc/include/arc-linux-any/asm/swab.h +0 -63
  125. package/libc/include/arc-linux-any/asm/unistd_32.h +1 -0
  126. package/libc/include/arm-linux-any/asm/ptrace.h +0 -9
  127. package/libc/include/arm-linux-any/asm/unistd-eabi.h +1 -0
  128. package/libc/include/arm-linux-any/asm/unistd-oabi.h +1 -0
  129. package/libc/include/csky-linux-any/asm/unistd_32.h +1 -0
  130. package/libc/include/hexagon-linux-any/asm/unistd_32.h +1 -0
  131. package/libc/include/loongarch-linux-any/asm/hwcap.h +1 -0
  132. package/libc/include/loongarch-linux-any/asm/kvm.h +1 -0
  133. package/libc/include/loongarch-linux-any/asm/kvm_para.h +1 -0
  134. package/libc/include/loongarch-linux-any/asm/unistd_32.h +2 -0
  135. package/libc/include/loongarch-linux-any/asm/unistd_64.h +2 -0
  136. package/libc/include/m68k-linux-any/asm/unistd_32.h +1 -0
  137. package/libc/include/mips-linux-any/asm/errno.h +2 -0
  138. package/libc/include/mips-linux-any/asm/unistd_n32.h +1 -0
  139. package/libc/include/mips-linux-any/asm/unistd_n64.h +1 -0
  140. package/libc/include/mips-linux-any/asm/unistd_o32.h +1 -0
  141. package/libc/include/powerpc-linux-any/asm/unistd_32.h +1 -0
  142. package/libc/include/powerpc-linux-any/asm/unistd_64.h +1 -0
  143. package/libc/include/riscv-linux-any/asm/hwprobe.h +4 -0
  144. package/libc/include/riscv-linux-any/asm/kvm.h +3 -0
  145. package/libc/include/riscv-linux-any/asm/ptrace.h +37 -0
  146. package/libc/include/riscv-linux-any/asm/sigcontext.h +1 -0
  147. package/libc/include/riscv-linux-any/asm/unistd_32.h +1 -0
  148. package/libc/include/riscv-linux-any/asm/unistd_64.h +1 -0
  149. package/libc/include/s390x-linux-any/asm/unistd_64.h +1 -0
  150. package/libc/include/sparc-linux-any/asm/errno.h +2 -0
  151. package/libc/include/sparc-linux-any/asm/ioctls.h +4 -4
  152. package/libc/include/sparc-linux-any/asm/unistd_32.h +2 -0
  153. package/libc/include/sparc-linux-any/asm/unistd_64.h +2 -0
  154. package/libc/include/x86-linux-any/asm/auxvec.h +0 -4
  155. package/libc/include/x86-linux-any/asm/kvm.h +13 -8
  156. package/libc/include/x86-linux-any/asm/svm.h +16 -16
  157. package/libc/include/x86-linux-any/asm/unistd_32.h +1 -0
  158. package/libc/include/x86-linux-any/asm/unistd_64.h +1 -0
  159. package/libc/include/x86-linux-any/asm/unistd_x32.h +1 -0
  160. package/libc/include/xtensa-linux-any/asm/unistd_32.h +1 -0
  161. package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
  162. package/package.json +1 -1
  163. package/std/Build/Cache.zig +6 -6
  164. package/std/Build/Step/Compile.zig +0 -1
  165. package/std/Build/Step/Run.zig +2 -2
  166. package/std/Build/Step.zig +2 -4
  167. package/std/Build/WebServer.zig +2 -2
  168. package/std/Build.zig +0 -3
  169. package/std/Io/Dir.zig +7 -2
  170. package/std/Io/Dispatch.zig +3 -13
  171. package/std/Io/File/Writer.zig +8 -6
  172. package/std/Io/Reader.zig +8 -9
  173. package/std/Io/Semaphore.zig +112 -17
  174. package/std/Io/Terminal.zig +1 -1
  175. package/std/Io/Threaded.zig +171 -37
  176. package/std/Io/Uring.zig +13 -15
  177. package/std/Io/Writer.zig +46 -42
  178. package/std/Io/net.zig +11 -11
  179. package/std/Io.zig +90 -26
  180. package/std/SemanticVersion.zig +1 -1
  181. package/std/Target/Query.zig +2 -2
  182. package/std/Target.zig +50 -5
  183. package/std/array_hash_map.zig +9 -18
  184. package/std/builtin.zig +4 -0
  185. package/std/c/haiku.zig +3 -0
  186. package/std/c/serenity.zig +1 -6
  187. package/std/c.zig +89 -7
  188. package/std/compress/flate/Decompress.zig +2 -3
  189. package/std/compress/zstd/Decompress.zig +2 -4
  190. package/std/crypto/Certificate.zig +13 -1
  191. package/std/crypto/ascon.zig +75 -33
  192. package/std/crypto/codecs/asn1/Oid.zig +12 -1
  193. package/std/crypto/codecs/base64_hex_ct.zig +2 -4
  194. package/std/crypto/ml_kem.zig +2 -9
  195. package/std/crypto/tls/Client.zig +79 -4
  196. package/std/crypto/tls.zig +1 -1
  197. package/std/crypto.zig +1 -0
  198. package/std/debug/Pdb.zig +1 -1
  199. package/std/debug.zig +4 -3
  200. package/std/fmt.zig +8 -3
  201. package/std/fs/path.zig +6 -4
  202. package/std/heap/BufferFirstAllocator.zig +165 -0
  203. package/std/heap.zig +2 -126
  204. package/std/http/Client.zig +21 -24
  205. package/std/http.zig +3 -4
  206. package/std/json/Scanner.zig +2 -2
  207. package/std/os/emscripten.zig +1 -1
  208. package/std/os/linux/IoUring.zig +2 -0
  209. package/std/os/linux/aarch64.zig +41 -12
  210. package/std/os/linux/arc.zig +173 -0
  211. package/std/os/linux/arm.zig +41 -12
  212. package/std/os/linux/hexagon.zig +33 -11
  213. package/std/os/linux/loongarch32.zig +41 -13
  214. package/std/os/linux/loongarch64.zig +41 -12
  215. package/std/os/linux/m68k.zig +41 -13
  216. package/std/os/linux/mips.zig +67 -36
  217. package/std/os/linux/mips64.zig +60 -29
  218. package/std/os/linux/mipsn32.zig +60 -29
  219. package/std/os/linux/or1k.zig +41 -12
  220. package/std/os/linux/powerpc.zig +41 -12
  221. package/std/os/linux/powerpc64.zig +41 -12
  222. package/std/os/linux/riscv32.zig +41 -12
  223. package/std/os/linux/riscv64.zig +41 -12
  224. package/std/os/linux/s390x.zig +44 -7
  225. package/std/os/linux/sparc64.zig +83 -52
  226. package/std/os/linux/syscalls.zig +26 -1
  227. package/std/os/linux/thumb.zig +52 -36
  228. package/std/os/linux/x32.zig +41 -12
  229. package/std/os/linux/x86.zig +42 -13
  230. package/std/os/linux/x86_64.zig +41 -12
  231. package/std/os/linux.zig +412 -436
  232. package/std/os/uefi/tables/boot_services.zig +9 -8
  233. package/std/os.zig +41 -0
  234. package/std/process.zig +1 -1
  235. package/std/sort.zig +3 -3
  236. package/std/zig/Ast/Render.zig +3 -3
  237. package/std/zig/AstGen.zig +44 -98
  238. package/std/zig/AstRlAnnotate.zig +0 -11
  239. package/std/zig/BuiltinFn.zig +0 -32
  240. package/std/zig/LibCInstallation.zig +4 -3
  241. package/std/zig/Parse.zig +7 -7
  242. package/std/zig/WindowsSdk.zig +13 -13
  243. package/std/zig/Zir.zig +50 -63
  244. package/std/zig/ZonGen.zig +6 -5
  245. package/std/zig/llvm/Builder.zig +12 -12
  246. package/std/zig.zig +1 -10
  247. package/std/zip.zig +5 -5
  248. package/zig.h +340 -1
  249. package/libc/include/hexagon-linux-any/asm/signal.h +0 -29
  250. package/libc/include/s390x-linux-any/asm/tape390.h +0 -103
  251. package/libc/mingw/math/fdiml.c +0 -24
  252. package/libc/mingw/winpthreads/spinlock.c +0 -82
  253. package/libc/musl/src/linux/tee.c +0 -8
  254. package/libc/musl/src/math/fdimf.c +0 -10
  255. package/libc/musl/src/math/fdiml.c +0 -18
  256. package/libc/musl/src/string/strdup.c +0 -10
  257. package/libc/musl/src/string/strndup.c +0 -12
  258. package/libc/musl/src/string/wcsdup.c +0 -10
  259. package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
  260. package/libc/musl/src/thread/pthread_spin_init.c +0 -6
  261. package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
  262. package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
  263. package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
  264. package/libc/musl/src/unistd/dup2.c +0 -20
  265. package/libc/musl/src/unistd/dup3.c +0 -26
  266. package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
  267. package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
  268. package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
@@ -2,14 +2,21 @@ const builtin = @import("builtin");
2
2
  const std = @import("../../std.zig");
3
3
  const SYS = std.os.linux.SYS;
4
4
 
5
- pub fn syscall0(number: SYS) u64 {
5
+ pub const syscall_arg_t = u64;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u64 {
6
10
  return asm volatile ("svc #0"
7
11
  : [ret] "={x0}" (-> u64),
8
12
  : [number] "{x8}" (@intFromEnum(number)),
9
13
  : .{ .memory = true });
10
14
  }
11
15
 
12
- pub fn syscall1(number: SYS, arg1: u64) u64 {
16
+ pub fn syscall1(
17
+ number: SYS,
18
+ arg1: syscall_arg_t,
19
+ ) u64 {
13
20
  return asm volatile ("svc #0"
14
21
  : [ret] "={x0}" (-> u64),
15
22
  : [number] "{x8}" (@intFromEnum(number)),
@@ -17,7 +24,11 @@ pub fn syscall1(number: SYS, arg1: u64) u64 {
17
24
  : .{ .memory = true });
18
25
  }
19
26
 
20
- pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
27
+ pub fn syscall2(
28
+ number: SYS,
29
+ arg1: syscall_arg_t,
30
+ arg2: syscall_arg_t,
31
+ ) u64 {
21
32
  return asm volatile ("svc #0"
22
33
  : [ret] "={x0}" (-> u64),
23
34
  : [number] "{x8}" (@intFromEnum(number)),
@@ -26,7 +37,12 @@ pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
26
37
  : .{ .memory = true });
27
38
  }
28
39
 
29
- pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
40
+ pub fn syscall3(
41
+ number: SYS,
42
+ arg1: syscall_arg_t,
43
+ arg2: syscall_arg_t,
44
+ arg3: syscall_arg_t,
45
+ ) u64 {
30
46
  return asm volatile ("svc #0"
31
47
  : [ret] "={x0}" (-> u64),
32
48
  : [number] "{x8}" (@intFromEnum(number)),
@@ -36,7 +52,13 @@ pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
36
52
  : .{ .memory = true });
37
53
  }
38
54
 
39
- pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
55
+ pub fn syscall4(
56
+ number: SYS,
57
+ arg1: syscall_arg_t,
58
+ arg2: syscall_arg_t,
59
+ arg3: syscall_arg_t,
60
+ arg4: syscall_arg_t,
61
+ ) u64 {
40
62
  return asm volatile ("svc #0"
41
63
  : [ret] "={x0}" (-> u64),
42
64
  : [number] "{x8}" (@intFromEnum(number)),
@@ -47,7 +69,14 @@ pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
47
69
  : .{ .memory = true });
48
70
  }
49
71
 
50
- pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
72
+ pub fn syscall5(
73
+ number: SYS,
74
+ arg1: syscall_arg_t,
75
+ arg2: syscall_arg_t,
76
+ arg3: syscall_arg_t,
77
+ arg4: syscall_arg_t,
78
+ arg5: syscall_arg_t,
79
+ ) u64 {
51
80
  return asm volatile ("svc #0"
52
81
  : [ret] "={x0}" (-> u64),
53
82
  : [number] "{x8}" (@intFromEnum(number)),
@@ -61,12 +90,12 @@ pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u
61
90
 
62
91
  pub fn syscall6(
63
92
  number: SYS,
64
- arg1: u64,
65
- arg2: u64,
66
- arg3: u64,
67
- arg4: u64,
68
- arg5: u64,
69
- arg6: u64,
93
+ arg1: syscall_arg_t,
94
+ arg2: syscall_arg_t,
95
+ arg3: syscall_arg_t,
96
+ arg4: syscall_arg_t,
97
+ arg5: syscall_arg_t,
98
+ arg6: syscall_arg_t,
70
99
  ) u64 {
71
100
  return asm volatile ("svc #0"
72
101
  : [ret] "={x0}" (-> u64),
@@ -0,0 +1,173 @@
1
+ const builtin = @import("builtin");
2
+ const std = @import("../../std.zig");
3
+ const SYS = std.os.linux.SYS;
4
+
5
+ pub const syscall_arg_t = u32;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u32 {
10
+ return asm volatile ("trap_s 0"
11
+ : [ret] "={r0}" (-> u32),
12
+ : [number] "{r8}" (@intFromEnum(number)),
13
+ : .{ .memory = true });
14
+ }
15
+
16
+ pub fn syscall1(
17
+ number: SYS,
18
+ arg1: syscall_arg_t,
19
+ ) u32 {
20
+ return asm volatile ("trap_s 0"
21
+ : [ret] "={r0}" (-> u32),
22
+ : [number] "{r8}" (@intFromEnum(number)),
23
+ [arg1] "{r0}" (arg1),
24
+ : .{ .memory = true });
25
+ }
26
+
27
+ pub fn syscall2(
28
+ number: SYS,
29
+ arg1: syscall_arg_t,
30
+ arg2: syscall_arg_t,
31
+ ) u32 {
32
+ return asm volatile ("trap_s 0"
33
+ : [ret] "={r0}" (-> u32),
34
+ : [number] "{r8}" (@intFromEnum(number)),
35
+ [arg1] "{r0}" (arg1),
36
+ [arg2] "{r1}" (arg2),
37
+ : .{ .memory = true });
38
+ }
39
+
40
+ pub fn syscall3(
41
+ number: SYS,
42
+ arg1: syscall_arg_t,
43
+ arg2: syscall_arg_t,
44
+ arg3: syscall_arg_t,
45
+ ) u32 {
46
+ return asm volatile ("trap_s 0"
47
+ : [ret] "={r0}" (-> u32),
48
+ : [number] "{r8}" (@intFromEnum(number)),
49
+ [arg1] "{r0}" (arg1),
50
+ [arg2] "{r1}" (arg2),
51
+ [arg3] "{r2}" (arg3),
52
+ : .{ .memory = true });
53
+ }
54
+
55
+ pub fn syscall4(
56
+ number: SYS,
57
+ arg1: syscall_arg_t,
58
+ arg2: syscall_arg_t,
59
+ arg3: syscall_arg_t,
60
+ arg4: syscall_arg_t,
61
+ ) u32 {
62
+ return asm volatile ("trap_s 0"
63
+ : [ret] "={r0}" (-> u32),
64
+ : [number] "{r8}" (@intFromEnum(number)),
65
+ [arg1] "{r0}" (arg1),
66
+ [arg2] "{r1}" (arg2),
67
+ [arg3] "{r2}" (arg3),
68
+ [arg4] "{r3}" (arg4),
69
+ : .{ .memory = true });
70
+ }
71
+
72
+ pub fn syscall5(
73
+ number: SYS,
74
+ arg1: syscall_arg_t,
75
+ arg2: syscall_arg_t,
76
+ arg3: syscall_arg_t,
77
+ arg4: syscall_arg_t,
78
+ arg5: syscall_arg_t,
79
+ ) u32 {
80
+ return asm volatile ("trap_s 0"
81
+ : [ret] "={r0}" (-> u32),
82
+ : [number] "{r8}" (@intFromEnum(number)),
83
+ [arg1] "{r0}" (arg1),
84
+ [arg2] "{r1}" (arg2),
85
+ [arg3] "{r2}" (arg3),
86
+ [arg4] "{r3}" (arg4),
87
+ [arg5] "{r4}" (arg5),
88
+ : .{ .memory = true });
89
+ }
90
+
91
+ pub fn syscall6(
92
+ number: SYS,
93
+ arg1: syscall_arg_t,
94
+ arg2: syscall_arg_t,
95
+ arg3: syscall_arg_t,
96
+ arg4: syscall_arg_t,
97
+ arg5: syscall_arg_t,
98
+ arg6: syscall_arg_t,
99
+ ) u32 {
100
+ return asm volatile ("trap_s 0"
101
+ : [ret] "={r0}" (-> u32),
102
+ : [number] "{r8}" (@intFromEnum(number)),
103
+ [arg1] "{r0}" (arg1),
104
+ [arg2] "{r1}" (arg2),
105
+ [arg3] "{r2}" (arg3),
106
+ [arg4] "{r3}" (arg4),
107
+ [arg5] "{r4}" (arg5),
108
+ [arg6] "{r5}" (arg6),
109
+ : .{ .memory = true });
110
+ }
111
+
112
+ pub fn clone() callconv(.naked) u32 {
113
+ // __clone(func, stack, flags, arg, ptid, tls, ctid)
114
+ // r0, r1, r2, r3, r4, r5, r6
115
+ //
116
+ // syscall(SYS_clone, flags, stack, ptid, tls, ctid)
117
+ // r8 r0, r1, r2, r3, r4
118
+ asm volatile (
119
+ \\ // Align stack pointer
120
+ \\ and r1, r1, -16
121
+ \\ mov r10, r0
122
+ \\ mov r11, r3
123
+ \\ // Setup the arguments
124
+ \\ mov r0, r2
125
+ \\ mov r2, r4
126
+ \\ mov r3, r5
127
+ \\ mov r4, r6
128
+ \\ mov r8, 220 // SYS_clone
129
+ \\ trap_s 0
130
+ \\ cmp r0, 0
131
+ \\ beq 1f
132
+ \\ j [blink]
133
+ \\ // Child
134
+ \\ 1:
135
+ );
136
+ if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile (
137
+ \\ .cfi_undefined blink
138
+ );
139
+
140
+ asm volatile (
141
+ \\ mov fp, 0
142
+ \\ mov blink, 0
143
+ \\
144
+ \\ mov r0, r11
145
+ \\ jl [r10]
146
+ \\
147
+ \\ // Exit
148
+ \\ mov r8, 93 // SYS_exit
149
+ \\ trap_s 0
150
+ );
151
+ }
152
+
153
+ pub const restore = restore_rt;
154
+
155
+ pub fn restore_rt() callconv(.naked) noreturn {
156
+ switch (builtin.zig_backend) {
157
+ .stage2_c => asm volatile (
158
+ \\ mov r8, %[number]
159
+ \\ trap_s 0
160
+ :
161
+ : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
162
+ ),
163
+ else => asm volatile (
164
+ \\ trap_s 0
165
+ :
166
+ : [number] "{r8}" (@intFromEnum(SYS.rt_sigreturn)),
167
+ ),
168
+ }
169
+ }
170
+
171
+ pub const time_t = i64;
172
+
173
+ pub const VDSO = void;
@@ -2,14 +2,21 @@ const builtin = @import("builtin");
2
2
  const std = @import("../../std.zig");
3
3
  const SYS = std.os.linux.SYS;
4
4
 
5
- pub fn syscall0(number: SYS) u32 {
5
+ pub const syscall_arg_t = u32;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u32 {
6
10
  return asm volatile ("svc #0"
7
11
  : [ret] "={r0}" (-> u32),
8
12
  : [number] "{r7}" (@intFromEnum(number)),
9
13
  : .{ .memory = true });
10
14
  }
11
15
 
12
- pub fn syscall1(number: SYS, arg1: u32) u32 {
16
+ pub fn syscall1(
17
+ number: SYS,
18
+ arg1: syscall_arg_t,
19
+ ) u32 {
13
20
  return asm volatile ("svc #0"
14
21
  : [ret] "={r0}" (-> u32),
15
22
  : [number] "{r7}" (@intFromEnum(number)),
@@ -17,7 +24,11 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
17
24
  : .{ .memory = true });
18
25
  }
19
26
 
20
- pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
27
+ pub fn syscall2(
28
+ number: SYS,
29
+ arg1: syscall_arg_t,
30
+ arg2: syscall_arg_t,
31
+ ) u32 {
21
32
  return asm volatile ("svc #0"
22
33
  : [ret] "={r0}" (-> u32),
23
34
  : [number] "{r7}" (@intFromEnum(number)),
@@ -26,7 +37,12 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
26
37
  : .{ .memory = true });
27
38
  }
28
39
 
29
- pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
40
+ pub fn syscall3(
41
+ number: SYS,
42
+ arg1: syscall_arg_t,
43
+ arg2: syscall_arg_t,
44
+ arg3: syscall_arg_t,
45
+ ) u32 {
30
46
  return asm volatile ("svc #0"
31
47
  : [ret] "={r0}" (-> u32),
32
48
  : [number] "{r7}" (@intFromEnum(number)),
@@ -36,7 +52,13 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
36
52
  : .{ .memory = true });
37
53
  }
38
54
 
39
- pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
55
+ pub fn syscall4(
56
+ number: SYS,
57
+ arg1: syscall_arg_t,
58
+ arg2: syscall_arg_t,
59
+ arg3: syscall_arg_t,
60
+ arg4: syscall_arg_t,
61
+ ) u32 {
40
62
  return asm volatile ("svc #0"
41
63
  : [ret] "={r0}" (-> u32),
42
64
  : [number] "{r7}" (@intFromEnum(number)),
@@ -47,7 +69,14 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
47
69
  : .{ .memory = true });
48
70
  }
49
71
 
50
- pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
72
+ pub fn syscall5(
73
+ number: SYS,
74
+ arg1: syscall_arg_t,
75
+ arg2: syscall_arg_t,
76
+ arg3: syscall_arg_t,
77
+ arg4: syscall_arg_t,
78
+ arg5: syscall_arg_t,
79
+ ) u32 {
51
80
  return asm volatile ("svc #0"
52
81
  : [ret] "={r0}" (-> u32),
53
82
  : [number] "{r7}" (@intFromEnum(number)),
@@ -61,12 +90,12 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
61
90
 
62
91
  pub fn syscall6(
63
92
  number: SYS,
64
- arg1: u32,
65
- arg2: u32,
66
- arg3: u32,
67
- arg4: u32,
68
- arg5: u32,
69
- arg6: u32,
93
+ arg1: syscall_arg_t,
94
+ arg2: syscall_arg_t,
95
+ arg3: syscall_arg_t,
96
+ arg4: syscall_arg_t,
97
+ arg5: syscall_arg_t,
98
+ arg6: syscall_arg_t,
70
99
  ) u32 {
71
100
  return asm volatile ("svc #0"
72
101
  : [ret] "={r0}" (-> u32),
@@ -2,14 +2,21 @@ const builtin = @import("builtin");
2
2
  const std = @import("../../std.zig");
3
3
  const SYS = std.os.linux.SYS;
4
4
 
5
- pub fn syscall0(number: SYS) u32 {
5
+ pub const syscall_arg_t = u32;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u32 {
6
10
  return asm volatile ("trap0(#1)"
7
11
  : [ret] "={r0}" (-> u32),
8
12
  : [number] "{r6}" (@intFromEnum(number)),
9
13
  : .{ .memory = true });
10
14
  }
11
15
 
12
- pub fn syscall1(number: SYS, arg1: u32) u32 {
16
+ pub fn syscall1(
17
+ number: SYS,
18
+ arg1: syscall_arg_t,
19
+ ) u32 {
13
20
  return asm volatile ("trap0(#1)"
14
21
  : [ret] "={r0}" (-> u32),
15
22
  : [number] "{r6}" (@intFromEnum(number)),
@@ -17,7 +24,11 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
17
24
  : .{ .memory = true });
18
25
  }
19
26
 
20
- pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
27
+ pub fn syscall2(
28
+ number: SYS,
29
+ arg1: syscall_arg_t,
30
+ arg2: syscall_arg_t,
31
+ ) u32 {
21
32
  return asm volatile ("trap0(#1)"
22
33
  : [ret] "={r0}" (-> u32),
23
34
  : [number] "{r6}" (@intFromEnum(number)),
@@ -26,7 +37,12 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
26
37
  : .{ .memory = true });
27
38
  }
28
39
 
29
- pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
40
+ pub fn syscall3(
41
+ number: SYS,
42
+ arg1: syscall_arg_t,
43
+ arg2: syscall_arg_t,
44
+ arg3: syscall_arg_t,
45
+ ) u32 {
30
46
  return asm volatile ("trap0(#1)"
31
47
  : [ret] "={r0}" (-> u32),
32
48
  : [number] "{r6}" (@intFromEnum(number)),
@@ -36,7 +52,13 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
36
52
  : .{ .memory = true });
37
53
  }
38
54
 
39
- pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
55
+ pub fn syscall4(
56
+ number: SYS,
57
+ arg1: syscall_arg_t,
58
+ arg2: syscall_arg_t,
59
+ arg3: syscall_arg_t,
60
+ arg4: syscall_arg_t,
61
+ ) u32 {
40
62
  return asm volatile ("trap0(#1)"
41
63
  : [ret] "={r0}" (-> u32),
42
64
  : [number] "{r6}" (@intFromEnum(number)),
@@ -61,12 +83,12 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
61
83
 
62
84
  pub fn syscall6(
63
85
  number: SYS,
64
- arg1: u32,
65
- arg2: u32,
66
- arg3: u32,
67
- arg4: u32,
68
- arg5: u32,
69
- arg6: u32,
86
+ arg1: syscall_arg_t,
87
+ arg2: syscall_arg_t,
88
+ arg3: syscall_arg_t,
89
+ arg4: syscall_arg_t,
90
+ arg5: syscall_arg_t,
91
+ arg6: syscall_arg_t,
70
92
  ) u32 {
71
93
  return asm volatile ("trap0(#1)"
72
94
  : [ret] "={r0}" (-> u32),
@@ -2,7 +2,11 @@ const builtin = @import("builtin");
2
2
  const std = @import("../../std.zig");
3
3
  const SYS = std.os.linux.SYS;
4
4
 
5
- pub fn syscall0(number: SYS) u32 {
5
+ pub const syscall_arg_t = u32;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u32 {
6
10
  return asm volatile (
7
11
  \\ syscall 0
8
12
  : [ret] "={$r4}" (-> u32),
@@ -10,7 +14,10 @@ pub fn syscall0(number: SYS) u32 {
10
14
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
11
15
  }
12
16
 
13
- pub fn syscall1(number: SYS, arg1: u32) u32 {
17
+ pub fn syscall1(
18
+ number: SYS,
19
+ arg1: syscall_arg_t,
20
+ ) u32 {
14
21
  return asm volatile (
15
22
  \\ syscall 0
16
23
  : [ret] "={$r4}" (-> u32),
@@ -19,7 +26,11 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
19
26
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
20
27
  }
21
28
 
22
- pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
29
+ pub fn syscall2(
30
+ number: SYS,
31
+ arg1: syscall_arg_t,
32
+ arg2: syscall_arg_t,
33
+ ) u32 {
23
34
  return asm volatile (
24
35
  \\ syscall 0
25
36
  : [ret] "={$r4}" (-> u32),
@@ -29,7 +40,12 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
29
40
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
30
41
  }
31
42
 
32
- pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
43
+ pub fn syscall3(
44
+ number: SYS,
45
+ arg1: syscall_arg_t,
46
+ arg2: syscall_arg_t,
47
+ arg3: syscall_arg_t,
48
+ ) u32 {
33
49
  return asm volatile (
34
50
  \\ syscall 0
35
51
  : [ret] "={$r4}" (-> u32),
@@ -40,7 +56,13 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
40
56
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
41
57
  }
42
58
 
43
- pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
59
+ pub fn syscall4(
60
+ number: SYS,
61
+ arg1: syscall_arg_t,
62
+ arg2: syscall_arg_t,
63
+ arg3: syscall_arg_t,
64
+ arg4: syscall_arg_t,
65
+ ) u32 {
44
66
  return asm volatile (
45
67
  \\ syscall 0
46
68
  : [ret] "={$r4}" (-> u32),
@@ -52,7 +74,14 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
52
74
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
53
75
  }
54
76
 
55
- pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
77
+ pub fn syscall5(
78
+ number: SYS,
79
+ arg1: syscall_arg_t,
80
+ arg2: syscall_arg_t,
81
+ arg3: syscall_arg_t,
82
+ arg4: syscall_arg_t,
83
+ arg5: syscall_arg_t,
84
+ ) u32 {
56
85
  return asm volatile (
57
86
  \\ syscall 0
58
87
  : [ret] "={$r4}" (-> u32),
@@ -67,12 +96,12 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
67
96
 
68
97
  pub fn syscall6(
69
98
  number: SYS,
70
- arg1: u32,
71
- arg2: u32,
72
- arg3: u32,
73
- arg4: u32,
74
- arg5: u32,
75
- arg6: u32,
99
+ arg1: syscall_arg_t,
100
+ arg2: syscall_arg_t,
101
+ arg3: syscall_arg_t,
102
+ arg4: syscall_arg_t,
103
+ arg5: syscall_arg_t,
104
+ arg6: syscall_arg_t,
76
105
  ) u32 {
77
106
  return asm volatile (
78
107
  \\ syscall 0
@@ -87,7 +116,6 @@ pub fn syscall6(
87
116
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
88
117
  }
89
118
 
90
- // FIXME
91
119
  pub fn clone() callconv(.naked) u32 {
92
120
  // __clone(func, stack, flags, arg, ptid, tls, ctid)
93
121
  // a0, a1, a2, a3, a4, a5, a6
@@ -2,7 +2,11 @@ const builtin = @import("builtin");
2
2
  const std = @import("../../std.zig");
3
3
  const SYS = std.os.linux.SYS;
4
4
 
5
- pub fn syscall0(number: SYS) u64 {
5
+ pub const syscall_arg_t = u64;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u64 {
6
10
  return asm volatile (
7
11
  \\ syscall 0
8
12
  : [ret] "={$r4}" (-> u64),
@@ -10,7 +14,10 @@ pub fn syscall0(number: SYS) u64 {
10
14
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
11
15
  }
12
16
 
13
- pub fn syscall1(number: SYS, arg1: u64) u64 {
17
+ pub fn syscall1(
18
+ number: SYS,
19
+ arg1: syscall_arg_t,
20
+ ) u64 {
14
21
  return asm volatile (
15
22
  \\ syscall 0
16
23
  : [ret] "={$r4}" (-> u64),
@@ -19,7 +26,11 @@ pub fn syscall1(number: SYS, arg1: u64) u64 {
19
26
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
20
27
  }
21
28
 
22
- pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
29
+ pub fn syscall2(
30
+ number: SYS,
31
+ arg1: syscall_arg_t,
32
+ arg2: syscall_arg_t,
33
+ ) u64 {
23
34
  return asm volatile (
24
35
  \\ syscall 0
25
36
  : [ret] "={$r4}" (-> u64),
@@ -29,7 +40,12 @@ pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
29
40
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
30
41
  }
31
42
 
32
- pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
43
+ pub fn syscall3(
44
+ number: SYS,
45
+ arg1: syscall_arg_t,
46
+ arg2: syscall_arg_t,
47
+ arg3: syscall_arg_t,
48
+ ) u64 {
33
49
  return asm volatile (
34
50
  \\ syscall 0
35
51
  : [ret] "={$r4}" (-> u64),
@@ -40,7 +56,13 @@ pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
40
56
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
41
57
  }
42
58
 
43
- pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
59
+ pub fn syscall4(
60
+ number: SYS,
61
+ arg1: syscall_arg_t,
62
+ arg2: syscall_arg_t,
63
+ arg3: syscall_arg_t,
64
+ arg4: syscall_arg_t,
65
+ ) u64 {
44
66
  return asm volatile (
45
67
  \\ syscall 0
46
68
  : [ret] "={$r4}" (-> u64),
@@ -52,7 +74,14 @@ pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
52
74
  : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
53
75
  }
54
76
 
55
- pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
77
+ pub fn syscall5(
78
+ number: SYS,
79
+ arg1: syscall_arg_t,
80
+ arg2: syscall_arg_t,
81
+ arg3: syscall_arg_t,
82
+ arg4: syscall_arg_t,
83
+ arg5: syscall_arg_t,
84
+ ) u64 {
56
85
  return asm volatile (
57
86
  \\ syscall 0
58
87
  : [ret] "={$r4}" (-> u64),
@@ -67,12 +96,12 @@ pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u
67
96
 
68
97
  pub fn syscall6(
69
98
  number: SYS,
70
- arg1: u64,
71
- arg2: u64,
72
- arg3: u64,
73
- arg4: u64,
74
- arg5: u64,
75
- arg6: u64,
99
+ arg1: syscall_arg_t,
100
+ arg2: syscall_arg_t,
101
+ arg3: syscall_arg_t,
102
+ arg4: syscall_arg_t,
103
+ arg5: syscall_arg_t,
104
+ arg6: syscall_arg_t,
76
105
  ) u64 {
77
106
  return asm volatile (
78
107
  \\ syscall 0