@zigc/lib 0.17.0-dev.9 → 0.17.0-dev.93
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/c/fcntl.zig +6 -1
- package/c/inttypes.zig +0 -10
- package/c/math.zig +46 -122
- package/c/search.zig +1 -27
- package/c/stdlib/drand48.zig +0 -57
- package/c/stdlib.zig +0 -100
- package/c/string.zig +0 -7
- package/c/strings.zig +0 -38
- package/c/unistd.zig +27 -26
- package/c.zig +1 -2
- package/compiler/aro/aro/CodeGen.zig +3 -2
- package/compiler/aro/aro/Compilation.zig +15 -12
- package/compiler/aro/aro/Driver.zig +9 -6
- package/compiler/aro/aro/Parser.zig +18 -12
- package/compiler/aro/aro/Pragma.zig +3 -2
- package/compiler/aro/aro/Preprocessor.zig +9 -6
- package/compiler/aro/aro/pragmas/message.zig +3 -2
- package/compiler/aro/aro/text_literal.zig +3 -2
- package/compiler/aro/assembly_backend/x86_64.zig +3 -2
- package/compiler/build_runner.zig +0 -2
- package/compiler/test_runner.zig +1 -1
- package/compiler/translate-c/Translator.zig +4 -0
- package/compiler_rt/cos.zig +0 -2
- package/compiler_rt/divmodei4.zig +40 -17
- package/compiler_rt/exp.zig +1 -6
- package/compiler_rt/exp2.zig +1 -6
- package/compiler_rt/exp_f128.zig +377 -0
- package/compiler_rt/fabs.zig +0 -2
- package/compiler_rt/fma.zig +0 -2
- package/compiler_rt/fmax.zig +0 -2
- package/compiler_rt/fmin.zig +0 -2
- package/compiler_rt/fmod.zig +0 -2
- package/compiler_rt/limb64.zig +876 -15
- package/compiler_rt/log.zig +0 -2
- package/compiler_rt/log10.zig +0 -2
- package/compiler_rt/log2.zig +0 -2
- package/compiler_rt/mulXi3.zig +1 -1
- package/compiler_rt/round.zig +0 -2
- package/compiler_rt/sin.zig +0 -2
- package/compiler_rt/sincos.zig +0 -2
- package/compiler_rt/sqrt.zig +0 -2
- package/compiler_rt/ssp.zig +1 -1
- package/compiler_rt/tan.zig +0 -2
- package/compiler_rt/trunc.zig +0 -2
- package/compiler_rt/udivmodei4.zig +28 -0
- package/fuzzer.zig +2 -0
- package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
- package/package.json +1 -1
- package/std/Build/Step/Compile.zig +0 -1
- package/std/Build.zig +0 -3
- package/std/Io/Dispatch.zig +3 -13
- package/std/Io/Semaphore.zig +112 -17
- package/std/Io/Threaded.zig +167 -33
- package/std/Io/Uring.zig +12 -14
- package/std/Io/Writer.zig +46 -42
- package/std/Io/net.zig +11 -11
- package/std/Io.zig +89 -25
- package/std/Target.zig +50 -5
- package/std/builtin.zig +4 -0
- package/std/c/haiku.zig +3 -0
- package/std/c/serenity.zig +1 -6
- package/std/c.zig +59 -6
- package/std/debug.zig +4 -3
- package/std/fmt.zig +7 -2
- package/std/fs/path.zig +6 -4
- package/std/heap/BufferFirstAllocator.zig +165 -0
- package/std/heap.zig +2 -126
- package/std/http/Client.zig +21 -24
- package/std/os/linux/aarch64.zig +41 -12
- package/std/os/linux/arc.zig +41 -12
- package/std/os/linux/arm.zig +41 -12
- package/std/os/linux/hexagon.zig +33 -11
- package/std/os/linux/loongarch32.zig +41 -13
- package/std/os/linux/loongarch64.zig +41 -12
- package/std/os/linux/m68k.zig +41 -13
- package/std/os/linux/mips.zig +67 -36
- package/std/os/linux/mips64.zig +60 -29
- package/std/os/linux/mipsn32.zig +60 -29
- package/std/os/linux/or1k.zig +41 -12
- package/std/os/linux/powerpc.zig +41 -12
- package/std/os/linux/powerpc64.zig +41 -12
- package/std/os/linux/riscv32.zig +41 -12
- package/std/os/linux/riscv64.zig +41 -12
- package/std/os/linux/s390x.zig +44 -7
- package/std/os/linux/sparc64.zig +83 -52
- package/std/os/linux/thumb.zig +52 -36
- package/std/os/linux/x32.zig +41 -12
- package/std/os/linux/x86.zig +42 -13
- package/std/os/linux/x86_64.zig +41 -12
- package/std/os/linux.zig +398 -434
- package/std/os.zig +41 -0
- package/std/sort.zig +3 -3
- package/std/zig/AstGen.zig +22 -92
- package/std/zig/AstRlAnnotate.zig +0 -11
- package/std/zig/BuiltinFn.zig +0 -32
- package/std/zig/LibCInstallation.zig +1 -0
- package/std/zig/Zir.zig +50 -63
- package/std/zig/ZonGen.zig +5 -4
- package/std/zig/llvm/Builder.zig +12 -12
- package/std/zig.zig +0 -10
- package/zig.h +340 -1
- package/libc/mingw/math/fdiml.c +0 -24
- package/libc/musl/src/linux/tee.c +0 -8
- package/libc/musl/src/math/fdimf.c +0 -10
- package/libc/musl/src/math/fdiml.c +0 -18
- package/libc/musl/src/unistd/dup2.c +0 -20
- package/libc/musl/src/unistd/dup3.c +0 -26
package/std/os/linux/riscv64.zig
CHANGED
|
@@ -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
|
|
5
|
+
pub const syscall_arg_t = u64;
|
|
6
|
+
|
|
7
|
+
pub fn syscall0(
|
|
8
|
+
number: SYS,
|
|
9
|
+
) u64 {
|
|
6
10
|
return asm volatile ("ecall"
|
|
7
11
|
: [ret] "={x10}" (-> u64),
|
|
8
12
|
: [number] "{x17}" (@intFromEnum(number)),
|
|
9
13
|
: .{ .memory = true });
|
|
10
14
|
}
|
|
11
15
|
|
|
12
|
-
pub fn syscall1(
|
|
16
|
+
pub fn syscall1(
|
|
17
|
+
number: SYS,
|
|
18
|
+
arg1: syscall_arg_t,
|
|
19
|
+
) u64 {
|
|
13
20
|
return asm volatile ("ecall"
|
|
14
21
|
: [ret] "={x10}" (-> u64),
|
|
15
22
|
: [number] "{x17}" (@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(
|
|
27
|
+
pub fn syscall2(
|
|
28
|
+
number: SYS,
|
|
29
|
+
arg1: syscall_arg_t,
|
|
30
|
+
arg2: syscall_arg_t,
|
|
31
|
+
) u64 {
|
|
21
32
|
return asm volatile ("ecall"
|
|
22
33
|
: [ret] "={x10}" (-> u64),
|
|
23
34
|
: [number] "{x17}" (@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(
|
|
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 ("ecall"
|
|
31
47
|
: [ret] "={x10}" (-> u64),
|
|
32
48
|
: [number] "{x17}" (@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(
|
|
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 ("ecall"
|
|
41
63
|
: [ret] "={x10}" (-> u64),
|
|
42
64
|
: [number] "{x17}" (@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(
|
|
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 ("ecall"
|
|
52
81
|
: [ret] "={x10}" (-> u64),
|
|
53
82
|
: [number] "{x17}" (@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:
|
|
65
|
-
arg2:
|
|
66
|
-
arg3:
|
|
67
|
-
arg4:
|
|
68
|
-
arg5:
|
|
69
|
-
arg6:
|
|
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 ("ecall"
|
|
72
101
|
: [ret] "={x10}" (-> u64),
|
package/std/os/linux/s390x.zig
CHANGED
|
@@ -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
|
|
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] "={r2}" (-> u64),
|
|
8
12
|
: [number] "{r1}" (@intFromEnum(number)),
|
|
9
13
|
: .{ .memory = true });
|
|
10
14
|
}
|
|
11
15
|
|
|
12
|
-
pub fn syscall1(
|
|
16
|
+
pub fn syscall1(
|
|
17
|
+
number: SYS,
|
|
18
|
+
arg1: syscall_arg_t,
|
|
19
|
+
) u64 {
|
|
13
20
|
return asm volatile ("svc 0"
|
|
14
21
|
: [ret] "={r2}" (-> u64),
|
|
15
22
|
: [number] "{r1}" (@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(
|
|
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] "={r2}" (-> u64),
|
|
23
34
|
: [number] "{r1}" (@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(
|
|
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] "={r2}" (-> u64),
|
|
32
48
|
: [number] "{r1}" (@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(
|
|
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] "={r2}" (-> u64),
|
|
42
64
|
: [number] "{r1}" (@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(
|
|
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] "={r2}" (-> u64),
|
|
53
82
|
: [number] "{r1}" (@intFromEnum(number)),
|
|
@@ -59,7 +88,15 @@ pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u
|
|
|
59
88
|
: .{ .memory = true });
|
|
60
89
|
}
|
|
61
90
|
|
|
62
|
-
pub fn syscall6(
|
|
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
|
+
) u64 {
|
|
63
100
|
return asm volatile ("svc 0"
|
|
64
101
|
: [ret] "={r2}" (-> u64),
|
|
65
102
|
: [number] "{r1}" (@intFromEnum(number)),
|
package/std/os/linux/sparc64.zig
CHANGED
|
@@ -2,49 +2,26 @@ const builtin = @import("builtin");
|
|
|
2
2
|
const std = @import("../../std.zig");
|
|
3
3
|
const SYS = std.os.linux.SYS;
|
|
4
4
|
|
|
5
|
-
pub
|
|
6
|
-
return asm volatile (
|
|
7
|
-
\\ mov %[arg], %%g3
|
|
8
|
-
\\ t 0x6d
|
|
9
|
-
\\ bcc,pt %%xcc, 1f
|
|
10
|
-
\\ nop
|
|
11
|
-
\\ # Return the error code
|
|
12
|
-
\\ ba 2f
|
|
13
|
-
\\ neg %%o0
|
|
14
|
-
\\1:
|
|
15
|
-
\\ st %%o0, [%%g3+0]
|
|
16
|
-
\\ st %%o1, [%%g3+4]
|
|
17
|
-
\\ clr %%o0
|
|
18
|
-
\\2:
|
|
19
|
-
: [ret] "={o0}" (-> u64),
|
|
20
|
-
: [number] "{g1}" (@intFromEnum(SYS.pipe)),
|
|
21
|
-
[arg] "r" (fd),
|
|
22
|
-
: .{ .memory = true, .g3 = true });
|
|
23
|
-
}
|
|
5
|
+
pub const syscall_arg_t = u64;
|
|
24
6
|
|
|
25
|
-
pub fn
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// - On the child's side, %o0 is the parent's PID and %o1 is 1.
|
|
29
|
-
// We need to clear the child's %o0 so that the return values
|
|
30
|
-
// conform to the libc convention.
|
|
7
|
+
pub fn syscall0(
|
|
8
|
+
number: SYS,
|
|
9
|
+
) u64 {
|
|
31
10
|
return asm volatile (
|
|
32
11
|
\\ t 0x6d
|
|
33
12
|
\\ bcc,pt %%xcc, 1f
|
|
34
13
|
\\ nop
|
|
35
|
-
\\ ba 2f
|
|
36
14
|
\\ neg %%o0
|
|
37
15
|
\\ 1:
|
|
38
|
-
\\ # Clear the child's %%o0
|
|
39
|
-
\\ dec %%o1
|
|
40
|
-
\\ and %%o1, %%o0, %%o0
|
|
41
|
-
\\ 2:
|
|
42
16
|
: [ret] "={o0}" (-> u64),
|
|
43
|
-
: [number] "{g1}" (@intFromEnum(
|
|
17
|
+
: [number] "{g1}" (@intFromEnum(number)),
|
|
44
18
|
: .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
|
|
45
19
|
}
|
|
46
20
|
|
|
47
|
-
pub fn
|
|
21
|
+
pub fn syscall1(
|
|
22
|
+
number: SYS,
|
|
23
|
+
arg1: syscall_arg_t,
|
|
24
|
+
) u64 {
|
|
48
25
|
return asm volatile (
|
|
49
26
|
\\ t 0x6d
|
|
50
27
|
\\ bcc,pt %%xcc, 1f
|
|
@@ -53,10 +30,15 @@ pub fn syscall0(number: SYS) u64 {
|
|
|
53
30
|
\\ 1:
|
|
54
31
|
: [ret] "={o0}" (-> u64),
|
|
55
32
|
: [number] "{g1}" (@intFromEnum(number)),
|
|
33
|
+
[arg1] "{o0}" (arg1),
|
|
56
34
|
: .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
|
|
57
35
|
}
|
|
58
36
|
|
|
59
|
-
pub fn
|
|
37
|
+
pub fn syscall2(
|
|
38
|
+
number: SYS,
|
|
39
|
+
arg1: syscall_arg_t,
|
|
40
|
+
arg2: syscall_arg_t,
|
|
41
|
+
) u64 {
|
|
60
42
|
return asm volatile (
|
|
61
43
|
\\ t 0x6d
|
|
62
44
|
\\ bcc,pt %%xcc, 1f
|
|
@@ -66,10 +48,16 @@ pub fn syscall1(number: SYS, arg1: u64) u64 {
|
|
|
66
48
|
: [ret] "={o0}" (-> u64),
|
|
67
49
|
: [number] "{g1}" (@intFromEnum(number)),
|
|
68
50
|
[arg1] "{o0}" (arg1),
|
|
51
|
+
[arg2] "{o1}" (arg2),
|
|
69
52
|
: .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
|
|
70
53
|
}
|
|
71
54
|
|
|
72
|
-
pub fn
|
|
55
|
+
pub fn syscall3(
|
|
56
|
+
number: SYS,
|
|
57
|
+
arg1: syscall_arg_t,
|
|
58
|
+
arg2: syscall_arg_t,
|
|
59
|
+
arg3: syscall_arg_t,
|
|
60
|
+
) u64 {
|
|
73
61
|
return asm volatile (
|
|
74
62
|
\\ t 0x6d
|
|
75
63
|
\\ bcc,pt %%xcc, 1f
|
|
@@ -80,10 +68,17 @@ pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
|
|
|
80
68
|
: [number] "{g1}" (@intFromEnum(number)),
|
|
81
69
|
[arg1] "{o0}" (arg1),
|
|
82
70
|
[arg2] "{o1}" (arg2),
|
|
71
|
+
[arg3] "{o2}" (arg3),
|
|
83
72
|
: .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
|
|
84
73
|
}
|
|
85
74
|
|
|
86
|
-
pub fn
|
|
75
|
+
pub fn syscall4(
|
|
76
|
+
number: SYS,
|
|
77
|
+
arg1: syscall_arg_t,
|
|
78
|
+
arg2: syscall_arg_t,
|
|
79
|
+
arg3: syscall_arg_t,
|
|
80
|
+
arg4: syscall_arg_t,
|
|
81
|
+
) u64 {
|
|
87
82
|
return asm volatile (
|
|
88
83
|
\\ t 0x6d
|
|
89
84
|
\\ bcc,pt %%xcc, 1f
|
|
@@ -95,10 +90,18 @@ pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
|
|
|
95
90
|
[arg1] "{o0}" (arg1),
|
|
96
91
|
[arg2] "{o1}" (arg2),
|
|
97
92
|
[arg3] "{o2}" (arg3),
|
|
93
|
+
[arg4] "{o3}" (arg4),
|
|
98
94
|
: .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
|
|
99
95
|
}
|
|
100
96
|
|
|
101
|
-
pub fn
|
|
97
|
+
pub fn syscall5(
|
|
98
|
+
number: SYS,
|
|
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
|
+
) u64 {
|
|
102
105
|
return asm volatile (
|
|
103
106
|
\\ t 0x6d
|
|
104
107
|
\\ bcc,pt %%xcc, 1f
|
|
@@ -111,10 +114,19 @@ pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
|
|
|
111
114
|
[arg2] "{o1}" (arg2),
|
|
112
115
|
[arg3] "{o2}" (arg3),
|
|
113
116
|
[arg4] "{o3}" (arg4),
|
|
117
|
+
[arg5] "{o4}" (arg5),
|
|
114
118
|
: .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
|
|
115
119
|
}
|
|
116
120
|
|
|
117
|
-
pub fn
|
|
121
|
+
pub fn syscall6(
|
|
122
|
+
number: SYS,
|
|
123
|
+
arg1: syscall_arg_t,
|
|
124
|
+
arg2: syscall_arg_t,
|
|
125
|
+
arg3: syscall_arg_t,
|
|
126
|
+
arg4: syscall_arg_t,
|
|
127
|
+
arg5: syscall_arg_t,
|
|
128
|
+
arg6: syscall_arg_t,
|
|
129
|
+
) u64 {
|
|
118
130
|
return asm volatile (
|
|
119
131
|
\\ t 0x6d
|
|
120
132
|
\\ bcc,pt %%xcc, 1f
|
|
@@ -128,32 +140,51 @@ pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u
|
|
|
128
140
|
[arg3] "{o2}" (arg3),
|
|
129
141
|
[arg4] "{o3}" (arg4),
|
|
130
142
|
[arg5] "{o4}" (arg5),
|
|
143
|
+
[arg6] "{o5}" (arg6),
|
|
131
144
|
: .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
|
|
132
145
|
}
|
|
133
146
|
|
|
134
|
-
pub fn
|
|
135
|
-
|
|
136
|
-
arg1: u64,
|
|
137
|
-
arg2: u64,
|
|
138
|
-
arg3: u64,
|
|
139
|
-
arg4: u64,
|
|
140
|
-
arg5: u64,
|
|
141
|
-
arg6: u64,
|
|
147
|
+
pub fn syscall_pipe(
|
|
148
|
+
fd: *[2]std.os.linux.fd_t,
|
|
142
149
|
) u64 {
|
|
150
|
+
return asm volatile (
|
|
151
|
+
\\ mov %[arg], %%g3
|
|
152
|
+
\\ t 0x6d
|
|
153
|
+
\\ bcc,pt %%xcc, 1f
|
|
154
|
+
\\ nop
|
|
155
|
+
\\ # Return the error code
|
|
156
|
+
\\ ba 2f
|
|
157
|
+
\\ neg %%o0
|
|
158
|
+
\\1:
|
|
159
|
+
\\ st %%o0, [%%g3+0]
|
|
160
|
+
\\ st %%o1, [%%g3+4]
|
|
161
|
+
\\ clr %%o0
|
|
162
|
+
\\2:
|
|
163
|
+
: [ret] "={o0}" (-> u64),
|
|
164
|
+
: [number] "{g1}" (@intFromEnum(SYS.pipe)),
|
|
165
|
+
[arg] "r" (fd),
|
|
166
|
+
: .{ .memory = true, .g3 = true });
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
pub fn syscall_fork() u64 {
|
|
170
|
+
// Linux/sparc64 fork() returns two values in %o0 and %o1:
|
|
171
|
+
// - On the parent's side, %o0 is the child's PID and %o1 is 0.
|
|
172
|
+
// - On the child's side, %o0 is the parent's PID and %o1 is 1.
|
|
173
|
+
// We need to clear the child's %o0 so that the return values
|
|
174
|
+
// conform to the libc convention.
|
|
143
175
|
return asm volatile (
|
|
144
176
|
\\ t 0x6d
|
|
145
177
|
\\ bcc,pt %%xcc, 1f
|
|
146
178
|
\\ nop
|
|
179
|
+
\\ ba 2f
|
|
147
180
|
\\ neg %%o0
|
|
148
181
|
\\ 1:
|
|
182
|
+
\\ # Clear the child's %%o0
|
|
183
|
+
\\ dec %%o1
|
|
184
|
+
\\ and %%o1, %%o0, %%o0
|
|
185
|
+
\\ 2:
|
|
149
186
|
: [ret] "={o0}" (-> u64),
|
|
150
|
-
: [number] "{g1}" (@intFromEnum(
|
|
151
|
-
[arg1] "{o0}" (arg1),
|
|
152
|
-
[arg2] "{o1}" (arg2),
|
|
153
|
-
[arg3] "{o2}" (arg3),
|
|
154
|
-
[arg4] "{o3}" (arg4),
|
|
155
|
-
[arg5] "{o4}" (arg5),
|
|
156
|
-
[arg6] "{o5}" (arg6),
|
|
187
|
+
: [number] "{g1}" (@intFromEnum(SYS.fork)),
|
|
157
188
|
: .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
|
|
158
189
|
}
|
|
159
190
|
|
package/std/os/linux/thumb.zig
CHANGED
|
@@ -5,9 +5,14 @@
|
|
|
5
5
|
//! to break the frame chain.
|
|
6
6
|
const std = @import("../../std.zig");
|
|
7
7
|
const SYS = std.os.linux.SYS;
|
|
8
|
+
const arm = @import("arm.zig");
|
|
8
9
|
|
|
9
|
-
pub
|
|
10
|
-
|
|
10
|
+
pub const syscall_arg_t = arm.syscall_arg_t;
|
|
11
|
+
|
|
12
|
+
pub fn syscall0(
|
|
13
|
+
number: SYS,
|
|
14
|
+
) u32 {
|
|
15
|
+
var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
|
|
11
16
|
return asm volatile (
|
|
12
17
|
\\ str r7, [%[tmp], #4]
|
|
13
18
|
\\ ldr r7, [%[tmp]]
|
|
@@ -18,8 +23,11 @@ pub fn syscall0(number: SYS) u32 {
|
|
|
18
23
|
: .{ .memory = true });
|
|
19
24
|
}
|
|
20
25
|
|
|
21
|
-
pub fn syscall1(
|
|
22
|
-
|
|
26
|
+
pub fn syscall1(
|
|
27
|
+
number: SYS,
|
|
28
|
+
arg1: syscall_arg_t,
|
|
29
|
+
) u32 {
|
|
30
|
+
var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
|
|
23
31
|
return asm volatile (
|
|
24
32
|
\\ str r7, [%[tmp], #4]
|
|
25
33
|
\\ ldr r7, [%[tmp]]
|
|
@@ -31,8 +39,12 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
|
|
|
31
39
|
: .{ .memory = true });
|
|
32
40
|
}
|
|
33
41
|
|
|
34
|
-
pub fn syscall2(
|
|
35
|
-
|
|
42
|
+
pub fn syscall2(
|
|
43
|
+
number: SYS,
|
|
44
|
+
arg1: syscall_arg_t,
|
|
45
|
+
arg2: syscall_arg_t,
|
|
46
|
+
) u32 {
|
|
47
|
+
var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
|
|
36
48
|
return asm volatile (
|
|
37
49
|
\\ str r7, [%[tmp], #4]
|
|
38
50
|
\\ ldr r7, [%[tmp]]
|
|
@@ -45,8 +57,13 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
|
|
|
45
57
|
: .{ .memory = true });
|
|
46
58
|
}
|
|
47
59
|
|
|
48
|
-
pub fn syscall3(
|
|
49
|
-
|
|
60
|
+
pub fn syscall3(
|
|
61
|
+
number: SYS,
|
|
62
|
+
arg1: syscall_arg_t,
|
|
63
|
+
arg2: syscall_arg_t,
|
|
64
|
+
arg3: syscall_arg_t,
|
|
65
|
+
) u32 {
|
|
66
|
+
var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
|
|
50
67
|
return asm volatile (
|
|
51
68
|
\\ str r7, [%[tmp], #4]
|
|
52
69
|
\\ ldr r7, [%[tmp]]
|
|
@@ -60,8 +77,14 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
|
|
|
60
77
|
: .{ .memory = true });
|
|
61
78
|
}
|
|
62
79
|
|
|
63
|
-
pub fn syscall4(
|
|
64
|
-
|
|
80
|
+
pub fn syscall4(
|
|
81
|
+
number: SYS,
|
|
82
|
+
arg1: syscall_arg_t,
|
|
83
|
+
arg2: syscall_arg_t,
|
|
84
|
+
arg3: syscall_arg_t,
|
|
85
|
+
arg4: syscall_arg_t,
|
|
86
|
+
) u32 {
|
|
87
|
+
var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
|
|
65
88
|
return asm volatile (
|
|
66
89
|
\\ str r7, [%[tmp], #4]
|
|
67
90
|
\\ ldr r7, [%[tmp]]
|
|
@@ -76,8 +99,15 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
|
|
|
76
99
|
: .{ .memory = true });
|
|
77
100
|
}
|
|
78
101
|
|
|
79
|
-
pub fn syscall5(
|
|
80
|
-
|
|
102
|
+
pub fn syscall5(
|
|
103
|
+
number: SYS,
|
|
104
|
+
arg1: syscall_arg_t,
|
|
105
|
+
arg2: syscall_arg_t,
|
|
106
|
+
arg3: syscall_arg_t,
|
|
107
|
+
arg4: syscall_arg_t,
|
|
108
|
+
arg5: syscall_arg_t,
|
|
109
|
+
) u32 {
|
|
110
|
+
var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
|
|
81
111
|
return asm volatile (
|
|
82
112
|
\\ str r7, [%[tmp], #4]
|
|
83
113
|
\\ ldr r7, [%[tmp]]
|
|
@@ -95,14 +125,14 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
|
|
|
95
125
|
|
|
96
126
|
pub fn syscall6(
|
|
97
127
|
number: SYS,
|
|
98
|
-
arg1:
|
|
99
|
-
arg2:
|
|
100
|
-
arg3:
|
|
101
|
-
arg4:
|
|
102
|
-
arg5:
|
|
103
|
-
arg6:
|
|
128
|
+
arg1: syscall_arg_t,
|
|
129
|
+
arg2: syscall_arg_t,
|
|
130
|
+
arg3: syscall_arg_t,
|
|
131
|
+
arg4: syscall_arg_t,
|
|
132
|
+
arg5: syscall_arg_t,
|
|
133
|
+
arg6: syscall_arg_t,
|
|
104
134
|
) u32 {
|
|
105
|
-
var buf: [2]
|
|
135
|
+
var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
|
|
106
136
|
return asm volatile (
|
|
107
137
|
\\ str r7, [%[tmp], #4]
|
|
108
138
|
\\ ldr r7, [%[tmp]]
|
|
@@ -119,22 +149,8 @@ pub fn syscall6(
|
|
|
119
149
|
: .{ .memory = true });
|
|
120
150
|
}
|
|
121
151
|
|
|
122
|
-
pub const clone =
|
|
152
|
+
pub const clone = arm.clone;
|
|
123
153
|
|
|
124
|
-
pub
|
|
125
|
-
asm volatile (
|
|
126
|
-
\\ mov r7, %[number]
|
|
127
|
-
\\ svc #0
|
|
128
|
-
:
|
|
129
|
-
: [number] "I" (@intFromEnum(SYS.sigreturn)),
|
|
130
|
-
);
|
|
131
|
-
}
|
|
154
|
+
pub const restore = arm.restore;
|
|
132
155
|
|
|
133
|
-
pub
|
|
134
|
-
asm volatile (
|
|
135
|
-
\\ mov r7, %[number]
|
|
136
|
-
\\ svc #0
|
|
137
|
-
:
|
|
138
|
-
: [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
|
|
139
|
-
);
|
|
140
|
-
}
|
|
156
|
+
pub const restore_rt = arm.restore_rt;
|
package/std/os/linux/x32.zig
CHANGED
|
@@ -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
|
|
5
|
+
pub const syscall_arg_t = u64;
|
|
6
|
+
|
|
7
|
+
pub fn syscall0(
|
|
8
|
+
number: SYS,
|
|
9
|
+
) u32 {
|
|
6
10
|
return asm volatile ("syscall"
|
|
7
11
|
: [ret] "={rax}" (-> u32),
|
|
8
12
|
: [number] "{rax}" (@intFromEnum(number)),
|
|
9
13
|
: .{ .rcx = true, .r11 = true, .memory = true });
|
|
10
14
|
}
|
|
11
15
|
|
|
12
|
-
pub fn syscall1(
|
|
16
|
+
pub fn syscall1(
|
|
17
|
+
number: SYS,
|
|
18
|
+
arg1: syscall_arg_t,
|
|
19
|
+
) u32 {
|
|
13
20
|
return asm volatile ("syscall"
|
|
14
21
|
: [ret] "={rax}" (-> u32),
|
|
15
22
|
: [number] "{rax}" (@intFromEnum(number)),
|
|
@@ -17,7 +24,11 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
|
|
|
17
24
|
: .{ .rcx = true, .r11 = true, .memory = true });
|
|
18
25
|
}
|
|
19
26
|
|
|
20
|
-
pub fn syscall2(
|
|
27
|
+
pub fn syscall2(
|
|
28
|
+
number: SYS,
|
|
29
|
+
arg1: syscall_arg_t,
|
|
30
|
+
arg2: syscall_arg_t,
|
|
31
|
+
) u32 {
|
|
21
32
|
return asm volatile ("syscall"
|
|
22
33
|
: [ret] "={rax}" (-> u32),
|
|
23
34
|
: [number] "{rax}" (@intFromEnum(number)),
|
|
@@ -26,7 +37,12 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
|
|
|
26
37
|
: .{ .rcx = true, .r11 = true, .memory = true });
|
|
27
38
|
}
|
|
28
39
|
|
|
29
|
-
pub fn syscall3(
|
|
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 ("syscall"
|
|
31
47
|
: [ret] "={rax}" (-> u32),
|
|
32
48
|
: [number] "{rax}" (@intFromEnum(number)),
|
|
@@ -36,7 +52,13 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
|
|
|
36
52
|
: .{ .rcx = true, .r11 = true, .memory = true });
|
|
37
53
|
}
|
|
38
54
|
|
|
39
|
-
pub fn syscall4(
|
|
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 ("syscall"
|
|
41
63
|
: [ret] "={rax}" (-> u32),
|
|
42
64
|
: [number] "{rax}" (@intFromEnum(number)),
|
|
@@ -47,7 +69,14 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
|
|
|
47
69
|
: .{ .rcx = true, .r11 = true, .memory = true });
|
|
48
70
|
}
|
|
49
71
|
|
|
50
|
-
pub fn syscall5(
|
|
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 ("syscall"
|
|
52
81
|
: [ret] "={rax}" (-> u32),
|
|
53
82
|
: [number] "{rax}" (@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:
|
|
65
|
-
arg2:
|
|
66
|
-
arg3:
|
|
67
|
-
arg4:
|
|
68
|
-
arg5:
|
|
69
|
-
arg6:
|
|
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 ("syscall"
|
|
72
101
|
: [ret] "={rax}" (-> u32),
|