@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 +1 -1
- package/std/os/emscripten.zig +1 -1
- package/std/os/linux/arc.zig +144 -0
- package/std/os/linux.zig +14 -2
package/package.json
CHANGED
package/std/os/emscripten.zig
CHANGED
|
@@ -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
|
-
.
|
|
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
|
-
.
|
|
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,
|