@zigc/lib 0.16.0 → 0.17.0-dev.9

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zigc/lib",
3
- "version": "0.16.0",
3
+ "version": "0.17.0-dev.9",
4
4
  "description": "Zig standard library and libc headers (shared across all platforms)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -211,7 +211,7 @@ pub const W = struct {
211
211
  pub fn TERMSIG(s: u32) SIG {
212
212
  return @enumFromInt(s & 0x7f);
213
213
  }
214
- pub fn STOPSIG(s: u32) u32 {
214
+ pub fn STOPSIG(s: u32) SIG {
215
215
  return @enumFromInt(EXITSTATUS(s));
216
216
  }
217
217
  pub fn IFEXITED(s: u32) bool {
@@ -0,0 +1,144 @@
1
+ const builtin = @import("builtin");
2
+ const std = @import("../../std.zig");
3
+ const SYS = std.os.linux.SYS;
4
+
5
+ pub fn syscall0(number: SYS) u32 {
6
+ return asm volatile ("trap_s 0"
7
+ : [ret] "={r0}" (-> u32),
8
+ : [number] "{r8}" (@intFromEnum(number)),
9
+ : .{ .memory = true });
10
+ }
11
+
12
+ pub fn syscall1(number: SYS, arg1: u32) u32 {
13
+ return asm volatile ("trap_s 0"
14
+ : [ret] "={r0}" (-> u32),
15
+ : [number] "{r8}" (@intFromEnum(number)),
16
+ [arg1] "{r0}" (arg1),
17
+ : .{ .memory = true });
18
+ }
19
+
20
+ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
21
+ return asm volatile ("trap_s 0"
22
+ : [ret] "={r0}" (-> u32),
23
+ : [number] "{r8}" (@intFromEnum(number)),
24
+ [arg1] "{r0}" (arg1),
25
+ [arg2] "{r1}" (arg2),
26
+ : .{ .memory = true });
27
+ }
28
+
29
+ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
30
+ return asm volatile ("trap_s 0"
31
+ : [ret] "={r0}" (-> u32),
32
+ : [number] "{r8}" (@intFromEnum(number)),
33
+ [arg1] "{r0}" (arg1),
34
+ [arg2] "{r1}" (arg2),
35
+ [arg3] "{r2}" (arg3),
36
+ : .{ .memory = true });
37
+ }
38
+
39
+ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
40
+ return asm volatile ("trap_s 0"
41
+ : [ret] "={r0}" (-> u32),
42
+ : [number] "{r8}" (@intFromEnum(number)),
43
+ [arg1] "{r0}" (arg1),
44
+ [arg2] "{r1}" (arg2),
45
+ [arg3] "{r2}" (arg3),
46
+ [arg4] "{r3}" (arg4),
47
+ : .{ .memory = true });
48
+ }
49
+
50
+ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
51
+ return asm volatile ("trap_s 0"
52
+ : [ret] "={r0}" (-> u32),
53
+ : [number] "{r8}" (@intFromEnum(number)),
54
+ [arg1] "{r0}" (arg1),
55
+ [arg2] "{r1}" (arg2),
56
+ [arg3] "{r2}" (arg3),
57
+ [arg4] "{r3}" (arg4),
58
+ [arg5] "{r4}" (arg5),
59
+ : .{ .memory = true });
60
+ }
61
+
62
+ pub fn syscall6(
63
+ number: SYS,
64
+ arg1: u32,
65
+ arg2: u32,
66
+ arg3: u32,
67
+ arg4: u32,
68
+ arg5: u32,
69
+ arg6: u32,
70
+ ) u32 {
71
+ return asm volatile ("trap_s 0"
72
+ : [ret] "={r0}" (-> u32),
73
+ : [number] "{r8}" (@intFromEnum(number)),
74
+ [arg1] "{r0}" (arg1),
75
+ [arg2] "{r1}" (arg2),
76
+ [arg3] "{r2}" (arg3),
77
+ [arg4] "{r3}" (arg4),
78
+ [arg5] "{r4}" (arg5),
79
+ [arg6] "{r5}" (arg6),
80
+ : .{ .memory = true });
81
+ }
82
+
83
+ pub fn clone() callconv(.naked) u32 {
84
+ // __clone(func, stack, flags, arg, ptid, tls, ctid)
85
+ // r0, r1, r2, r3, r4, r5, r6
86
+ //
87
+ // syscall(SYS_clone, flags, stack, ptid, tls, ctid)
88
+ // r8 r0, r1, r2, r3, r4
89
+ asm volatile (
90
+ \\ // Align stack pointer
91
+ \\ and r1, r1, -16
92
+ \\ mov r10, r0
93
+ \\ mov r11, r3
94
+ \\ // Setup the arguments
95
+ \\ mov r0, r2
96
+ \\ mov r2, r4
97
+ \\ mov r3, r5
98
+ \\ mov r4, r6
99
+ \\ mov r8, 220 // SYS_clone
100
+ \\ trap_s 0
101
+ \\ cmp r0, 0
102
+ \\ beq 1f
103
+ \\ j [blink]
104
+ \\ // Child
105
+ \\ 1:
106
+ );
107
+ if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile (
108
+ \\ .cfi_undefined blink
109
+ );
110
+
111
+ asm volatile (
112
+ \\ mov fp, 0
113
+ \\ mov blink, 0
114
+ \\
115
+ \\ mov r0, r11
116
+ \\ jl [r10]
117
+ \\
118
+ \\ // Exit
119
+ \\ mov r8, 93 // SYS_exit
120
+ \\ trap_s 0
121
+ );
122
+ }
123
+
124
+ pub const restore = restore_rt;
125
+
126
+ pub fn restore_rt() callconv(.naked) noreturn {
127
+ switch (builtin.zig_backend) {
128
+ .stage2_c => asm volatile (
129
+ \\ mov r8, %[number]
130
+ \\ trap_s 0
131
+ :
132
+ : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
133
+ ),
134
+ else => asm volatile (
135
+ \\ trap_s 0
136
+ :
137
+ : [number] "{r8}" (@intFromEnum(SYS.rt_sigreturn)),
138
+ ),
139
+ }
140
+ }
141
+
142
+ pub const time_t = i64;
143
+
144
+ pub const VDSO = void;
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"),
@@ -274,7 +275,13 @@ pub const MAP = switch (native_arch) {
274
275
  UNINITIALIZED: bool = false,
275
276
  _: u5 = 0,
276
277
  },
277
- .hexagon, .m68k, .or1k, .s390x => packed struct(u32) {
278
+ .arc,
279
+ .arceb,
280
+ .hexagon,
281
+ .m68k,
282
+ .or1k,
283
+ .s390x,
284
+ => packed struct(u32) {
278
285
  TYPE: MAP_TYPE,
279
286
  FIXED: bool = false,
280
287
  ANONYMOUS: bool = false,
@@ -451,7 +458,12 @@ pub const O = switch (native_arch) {
451
458
  TMPFILE: bool = false,
452
459
  _23: u9 = 0,
453
460
  },
454
- .hexagon, .or1k, .s390x => packed struct(u32) {
461
+ .arc,
462
+ .arceb,
463
+ .hexagon,
464
+ .or1k,
465
+ .s390x,
466
+ => packed struct(u32) {
455
467
  ACCMODE: ACCMODE = .RDONLY,
456
468
  _2: u4 = 0,
457
469
  CREAT: bool = false,