@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.
- package/c/fcntl.zig +6 -1
- package/c/inttypes.zig +0 -10
- package/c/math.zig +46 -122
- package/c/pthread.zig +57 -0
- package/c/search.zig +1 -27
- package/c/stdlib/drand48.zig +0 -57
- package/c/stdlib.zig +0 -100
- package/c/string.zig +20 -7
- package/c/strings.zig +0 -38
- package/c/unistd.zig +27 -26
- package/c/wchar.zig +10 -0
- package/c.zig +2 -2
- package/compiler/aro/aro/CodeGen.zig +5 -6
- package/compiler/aro/aro/Compilation.zig +17 -14
- package/compiler/aro/aro/Driver.zig +14 -13
- package/compiler/aro/aro/Parser.zig +20 -15
- 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 +4 -4
- package/compiler/build_runner.zig +0 -2
- package/compiler/reduce/Walk.zig +7 -7
- package/compiler/test_runner.zig +2 -2
- package/compiler/translate-c/Translator.zig +6 -2
- package/compiler/translate-c/main.zig +1 -1
- 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/Cache.zig +6 -6
- package/std/Build/Step/Compile.zig +0 -1
- package/std/Build/Step/Run.zig +2 -2
- package/std/Build/Step.zig +2 -4
- package/std/Build/WebServer.zig +2 -2
- package/std/Build.zig +0 -3
- package/std/Io/Dir.zig +7 -2
- package/std/Io/Dispatch.zig +3 -13
- package/std/Io/File/Writer.zig +8 -6
- package/std/Io/Reader.zig +8 -9
- package/std/Io/Semaphore.zig +112 -17
- package/std/Io/Terminal.zig +1 -1
- package/std/Io/Threaded.zig +171 -37
- package/std/Io/Uring.zig +13 -15
- package/std/Io/Writer.zig +46 -42
- package/std/Io/net.zig +11 -11
- package/std/Io.zig +90 -26
- package/std/SemanticVersion.zig +1 -1
- package/std/Target/Query.zig +2 -2
- package/std/Target.zig +50 -5
- package/std/array_hash_map.zig +9 -18
- package/std/builtin.zig +4 -0
- package/std/c/haiku.zig +3 -0
- package/std/c/serenity.zig +1 -6
- package/std/c.zig +89 -7
- package/std/compress/flate/Decompress.zig +2 -3
- package/std/compress/zstd/Decompress.zig +2 -4
- package/std/crypto/Certificate.zig +13 -1
- package/std/crypto/ascon.zig +75 -33
- package/std/crypto/codecs/asn1/Oid.zig +12 -1
- package/std/crypto/codecs/base64_hex_ct.zig +2 -4
- package/std/crypto/ml_kem.zig +2 -9
- package/std/crypto/tls/Client.zig +79 -4
- package/std/crypto/tls.zig +1 -1
- package/std/crypto.zig +1 -0
- package/std/debug/Pdb.zig +1 -1
- package/std/debug.zig +4 -3
- package/std/fmt.zig +8 -3
- 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/http.zig +3 -4
- package/std/json/Scanner.zig +2 -2
- package/std/os/emscripten.zig +1 -1
- package/std/os/linux/IoUring.zig +2 -0
- package/std/os/linux/aarch64.zig +41 -12
- package/std/os/linux/arc.zig +173 -0
- 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 +412 -436
- package/std/os/uefi/tables/boot_services.zig +9 -8
- package/std/os.zig +41 -0
- package/std/process.zig +1 -1
- package/std/sort.zig +3 -3
- package/std/zig/Ast/Render.zig +3 -3
- package/std/zig/AstGen.zig +44 -98
- package/std/zig/AstRlAnnotate.zig +0 -11
- package/std/zig/BuiltinFn.zig +0 -32
- package/std/zig/LibCInstallation.zig +4 -3
- package/std/zig/Parse.zig +7 -7
- package/std/zig/WindowsSdk.zig +13 -13
- package/std/zig/Zir.zig +50 -63
- package/std/zig/ZonGen.zig +6 -5
- package/std/zig/llvm/Builder.zig +12 -12
- package/std/zig.zig +1 -10
- package/std/zip.zig +5 -5
- package/zig.h +340 -1
- package/libc/mingw/math/fdiml.c +0 -24
- package/libc/mingw/winpthreads/spinlock.c +0 -82
- 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/string/strdup.c +0 -10
- package/libc/musl/src/string/strndup.c +0 -12
- package/libc/musl/src/string/wcsdup.c +0 -10
- package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
- package/libc/musl/src/thread/pthread_spin_init.c +0 -6
- package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
- package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
- package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
- package/libc/musl/src/unistd/dup2.c +0 -20
- package/libc/musl/src/unistd/dup3.c +0 -26
- package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
- package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
- package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
package/std/http/Client.zig
CHANGED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
//!
|
|
5
5
|
//! TLS support may be disabled via `std.options.http_disable_tls`.
|
|
6
6
|
//!
|
|
7
|
-
//! TODO all the lockUncancelable in this file should be changed to regular lock and
|
|
8
|
-
//! `error.Canceled` added to more error sets.
|
|
9
7
|
const Client = @This();
|
|
10
8
|
|
|
11
9
|
const builtin = @import("builtin");
|
|
@@ -84,8 +82,8 @@ pub const ConnectionPool = struct {
|
|
|
84
82
|
/// If no connection is found, null is returned.
|
|
85
83
|
///
|
|
86
84
|
/// Threadsafe.
|
|
87
|
-
pub fn findConnection(pool: *ConnectionPool, io: Io, criteria: Criteria)
|
|
88
|
-
pool.mutex.
|
|
85
|
+
pub fn findConnection(pool: *ConnectionPool, io: Io, criteria: Criteria) Io.Cancelable!?*Connection {
|
|
86
|
+
try pool.mutex.lock(io);
|
|
89
87
|
defer pool.mutex.unlock(io);
|
|
90
88
|
|
|
91
89
|
var next = pool.free.last;
|
|
@@ -113,8 +111,8 @@ pub const ConnectionPool = struct {
|
|
|
113
111
|
}
|
|
114
112
|
|
|
115
113
|
/// Acquires an existing connection from the connection pool. This function is threadsafe.
|
|
116
|
-
pub fn acquire(pool: *ConnectionPool, io: Io, connection: *Connection) void {
|
|
117
|
-
pool.mutex.
|
|
114
|
+
pub fn acquire(pool: *ConnectionPool, io: Io, connection: *Connection) Io.Cancelable!void {
|
|
115
|
+
try pool.mutex.lock(io);
|
|
118
116
|
defer pool.mutex.unlock(io);
|
|
119
117
|
|
|
120
118
|
return pool.acquireUnsafe(connection);
|
|
@@ -150,8 +148,8 @@ pub const ConnectionPool = struct {
|
|
|
150
148
|
}
|
|
151
149
|
|
|
152
150
|
/// Adds a newly created node to the pool of used connections. This function is threadsafe.
|
|
153
|
-
pub fn addUsed(pool: *ConnectionPool, io: Io, connection: *Connection) void {
|
|
154
|
-
pool.mutex.
|
|
151
|
+
pub fn addUsed(pool: *ConnectionPool, io: Io, connection: *Connection) Io.Cancelable!void {
|
|
152
|
+
try pool.mutex.lock(io);
|
|
155
153
|
defer pool.mutex.unlock(io);
|
|
156
154
|
|
|
157
155
|
pool.used.append(&connection.pool_node);
|
|
@@ -162,18 +160,15 @@ pub const ConnectionPool = struct {
|
|
|
162
160
|
/// If the new size is smaller than the current size, then idle connections will be closed until the pool is the new size.
|
|
163
161
|
///
|
|
164
162
|
/// Threadsafe.
|
|
165
|
-
pub fn resize(pool: *ConnectionPool, io: Io,
|
|
166
|
-
pool.mutex.
|
|
163
|
+
pub fn resize(pool: *ConnectionPool, io: Io, new_size: usize) Io.Cancelable!void {
|
|
164
|
+
try pool.mutex.lock(io);
|
|
167
165
|
defer pool.mutex.unlock(io);
|
|
168
166
|
|
|
169
|
-
const next = pool.free.first;
|
|
170
|
-
_ = next;
|
|
171
167
|
while (pool.free_len > new_size) {
|
|
172
|
-
const popped = pool.free.popFirst()
|
|
168
|
+
const popped: *Connection = @alignCast(@fieldParentPtr("pool_node", pool.free.popFirst().?));
|
|
173
169
|
pool.free_len -= 1;
|
|
174
170
|
|
|
175
|
-
popped.
|
|
176
|
-
allocator.destroy(popped);
|
|
171
|
+
popped.destroy(io);
|
|
177
172
|
}
|
|
178
173
|
|
|
179
174
|
pool.free_size = new_size;
|
|
@@ -1323,7 +1318,7 @@ pub fn initDefaultProxies(client: *Client, arena: Allocator, environ_map: *const
|
|
|
1323
1318
|
const io = client.io;
|
|
1324
1319
|
|
|
1325
1320
|
// Prevent any new connections from being created.
|
|
1326
|
-
client.connection_pool.mutex.
|
|
1321
|
+
try client.connection_pool.mutex.lock(io);
|
|
1327
1322
|
defer client.connection_pool.mutex.unlock(io);
|
|
1328
1323
|
|
|
1329
1324
|
assert(client.connection_pool.used.first == null); // There are active requests.
|
|
@@ -1418,7 +1413,7 @@ pub const basic_authorization = struct {
|
|
|
1418
1413
|
|
|
1419
1414
|
pub const ConnectTcpError = error{
|
|
1420
1415
|
TlsInitializationFailed,
|
|
1421
|
-
} || Allocator.Error || HostName.ConnectError;
|
|
1416
|
+
} || Allocator.Error || HostName.ConnectError || Io.Cancelable;
|
|
1422
1417
|
|
|
1423
1418
|
/// Reuses a `Connection` if one matching `host` and `port` is already open.
|
|
1424
1419
|
///
|
|
@@ -1451,7 +1446,7 @@ pub fn connectTcpOptions(client: *Client, options: ConnectTcpOptions) ConnectTcp
|
|
|
1451
1446
|
const proxied_host = options.proxied_host orelse host;
|
|
1452
1447
|
const proxied_port = options.proxied_port orelse port;
|
|
1453
1448
|
|
|
1454
|
-
if (client.connection_pool.findConnection(io, .{
|
|
1449
|
+
if (try client.connection_pool.findConnection(io, .{
|
|
1455
1450
|
.host = proxied_host,
|
|
1456
1451
|
.port = proxied_port,
|
|
1457
1452
|
.protocol = protocol,
|
|
@@ -1469,18 +1464,20 @@ pub fn connectTcpOptions(client: *Client, options: ConnectTcpOptions) ConnectTcp
|
|
|
1469
1464
|
error.Canceled => |e| return e,
|
|
1470
1465
|
else => return error.TlsInitializationFailed,
|
|
1471
1466
|
};
|
|
1472
|
-
|
|
1467
|
+
errdefer tc.destroy();
|
|
1468
|
+
try client.connection_pool.addUsed(io, &tc.connection);
|
|
1473
1469
|
return &tc.connection;
|
|
1474
1470
|
},
|
|
1475
1471
|
.plain => {
|
|
1476
1472
|
const pc = try Connection.Plain.create(client, proxied_host, proxied_port, stream);
|
|
1477
|
-
|
|
1473
|
+
errdefer pc.destroy();
|
|
1474
|
+
try client.connection_pool.addUsed(io, &pc.connection);
|
|
1478
1475
|
return &pc.connection;
|
|
1479
1476
|
},
|
|
1480
1477
|
}
|
|
1481
1478
|
}
|
|
1482
1479
|
|
|
1483
|
-
pub const ConnectUnixError = Allocator.Error || std.posix.SocketError || error{NameTooLong} || std.posix.ConnectError;
|
|
1480
|
+
pub const ConnectUnixError = Allocator.Error || std.posix.SocketError || error{NameTooLong} || std.posix.ConnectError || Io.Cancelable;
|
|
1484
1481
|
|
|
1485
1482
|
/// Connect to `path` as a unix domain socket. This will reuse a connection if one is already open.
|
|
1486
1483
|
///
|
|
@@ -1488,7 +1485,7 @@ pub const ConnectUnixError = Allocator.Error || std.posix.SocketError || error{N
|
|
|
1488
1485
|
pub fn connectUnix(client: *Client, path: []const u8) ConnectUnixError!*Connection {
|
|
1489
1486
|
const io = client.io;
|
|
1490
1487
|
|
|
1491
|
-
if (client.connection_pool.findConnection(io, .{
|
|
1488
|
+
if (try client.connection_pool.findConnection(io, .{
|
|
1492
1489
|
.host = path,
|
|
1493
1490
|
.port = 0,
|
|
1494
1491
|
.protocol = .plain,
|
|
@@ -1512,7 +1509,7 @@ pub fn connectUnix(client: *Client, path: []const u8) ConnectUnixError!*Connecti
|
|
|
1512
1509
|
};
|
|
1513
1510
|
errdefer client.allocator.free(conn.data.host);
|
|
1514
1511
|
|
|
1515
|
-
client.connection_pool.addUsed(conn);
|
|
1512
|
+
try client.connection_pool.addUsed(conn);
|
|
1516
1513
|
|
|
1517
1514
|
return &conn.data;
|
|
1518
1515
|
}
|
|
@@ -1530,7 +1527,7 @@ pub fn connectProxied(
|
|
|
1530
1527
|
const io = client.io;
|
|
1531
1528
|
if (!proxy.supports_connect) return error.TunnelNotSupported;
|
|
1532
1529
|
|
|
1533
|
-
if (client.connection_pool.findConnection(io, .{
|
|
1530
|
+
if (try client.connection_pool.findConnection(io, .{
|
|
1534
1531
|
.host = proxied_host,
|
|
1535
1532
|
.port = proxied_port,
|
|
1536
1533
|
.protocol = proxy.protocol,
|
package/std/http.zig
CHANGED
|
@@ -400,7 +400,7 @@ pub const Reader = struct {
|
|
|
400
400
|
0 => return error.HttpConnectionClosing,
|
|
401
401
|
else => return error.HttpRequestTruncated,
|
|
402
402
|
},
|
|
403
|
-
error.ReadFailed => return
|
|
403
|
+
error.ReadFailed => |e| return e,
|
|
404
404
|
};
|
|
405
405
|
continue;
|
|
406
406
|
}
|
|
@@ -543,8 +543,7 @@ pub const Reader = struct {
|
|
|
543
543
|
else => unreachable,
|
|
544
544
|
};
|
|
545
545
|
return chunkedReadEndless(reader, w, limit, chunk_len_ptr) catch |err| switch (err) {
|
|
546
|
-
error.ReadFailed => return
|
|
547
|
-
error.WriteFailed => return error.WriteFailed,
|
|
546
|
+
error.ReadFailed, error.WriteFailed => |e| return e,
|
|
548
547
|
error.EndOfStream => {
|
|
549
548
|
reader.body_err = error.HttpChunkTruncated;
|
|
550
549
|
return error.ReadFailed;
|
|
@@ -613,7 +612,7 @@ pub const Reader = struct {
|
|
|
613
612
|
else => unreachable,
|
|
614
613
|
};
|
|
615
614
|
return chunkedDiscardEndless(reader, limit, chunk_len_ptr) catch |err| switch (err) {
|
|
616
|
-
error.ReadFailed => return
|
|
615
|
+
error.ReadFailed => |e| return e,
|
|
617
616
|
error.EndOfStream => {
|
|
618
617
|
reader.body_err = error.HttpChunkTruncated;
|
|
619
618
|
return error.ReadFailed;
|
package/std/json/Scanner.zig
CHANGED
|
@@ -1401,7 +1401,7 @@ pub fn validate(allocator: Allocator, s: []const u8) Allocator.Error!bool {
|
|
|
1401
1401
|
while (true) {
|
|
1402
1402
|
const token = scanner.next() catch |err| switch (err) {
|
|
1403
1403
|
error.SyntaxError, error.UnexpectedEndOfInput => return false,
|
|
1404
|
-
error.OutOfMemory => return
|
|
1404
|
+
error.OutOfMemory => |e| return e,
|
|
1405
1405
|
error.BufferUnderrun => unreachable,
|
|
1406
1406
|
};
|
|
1407
1407
|
if (token == .end_of_document) break;
|
|
@@ -1734,7 +1734,7 @@ pub const Reader = struct {
|
|
|
1734
1734
|
|
|
1735
1735
|
fn refillBuffer(self: *@This()) std.Io.Reader.Error!void {
|
|
1736
1736
|
const input = self.reader.peekGreedy(1) catch |err| switch (err) {
|
|
1737
|
-
error.ReadFailed => return
|
|
1737
|
+
error.ReadFailed => |e| return e,
|
|
1738
1738
|
error.EndOfStream => return self.scanner.endInput(),
|
|
1739
1739
|
};
|
|
1740
1740
|
self.reader.toss(input.len);
|
package/std/os/emscripten.zig
CHANGED
package/std/os/linux/IoUring.zig
CHANGED
|
@@ -1856,6 +1856,7 @@ pub fn buf_ring_advance(br: *linux.io_uring_buf_ring, count: u16) void {
|
|
|
1856
1856
|
}
|
|
1857
1857
|
|
|
1858
1858
|
test BufferGroup {
|
|
1859
|
+
if (builtin.target.cpu.arch.isPowerPC()) return; // https://codeberg.org/ziglang/zig/issues/31562
|
|
1859
1860
|
if (!is_linux) return error.SkipZigTest;
|
|
1860
1861
|
|
|
1861
1862
|
const io = testing.io;
|
|
@@ -1924,5 +1925,6 @@ test BufferGroup {
|
|
|
1924
1925
|
}
|
|
1925
1926
|
|
|
1926
1927
|
test {
|
|
1928
|
+
if (builtin.target.cpu.arch.isPowerPC()) return; // https://codeberg.org/ziglang/zig/issues/31562
|
|
1927
1929
|
if (is_linux) _ = @import("IoUring/test.zig");
|
|
1928
1930
|
}
|
package/std/os/linux/aarch64.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] "={x0}" (-> u64),
|
|
8
12
|
: [number] "{x8}" (@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] "={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(
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
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 ("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;
|
package/std/os/linux/arm.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 = 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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
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 ("svc #0"
|
|
72
101
|
: [ret] "={r0}" (-> u32),
|
package/std/os/linux/hexagon.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 = 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(
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
65
|
-
arg2:
|
|
66
|
-
arg3:
|
|
67
|
-
arg4:
|
|
68
|
-
arg5:
|
|
69
|
-
arg6:
|
|
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),
|