@zigc/lib 0.15.0-dev.0 → 0.15.1
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/README.md +1 -5
- package/build-web/fuzz.zig +6 -6
- package/build-web/time_report.zig +13 -14
- package/compiler/reduce/Walk.zig +9 -10
- package/compiler/reduce.zig +20 -19
- package/compiler/resinator/compile.zig +1 -1
- package/compiler_rt/arm.zig +1 -1
- package/init/build.zig +1 -1
- package/libc/freebsd/lib/csu/aarch64/crt.h +1 -0
- package/libc/freebsd/lib/csu/aarch64/crt1_c.c +33 -0
- package/libc/freebsd/lib/csu/aarch64/crt1_s.S +68 -0
- package/libc/freebsd/lib/csu/amd64/crt.h +30 -0
- package/libc/freebsd/lib/csu/amd64/crt1_c.c +30 -0
- package/libc/freebsd/lib/csu/amd64/crt1_s.S +89 -0
- package/libc/freebsd/lib/csu/arm/crt.h +1 -0
- package/libc/freebsd/lib/csu/arm/crt1_c.c +80 -0
- package/libc/freebsd/lib/csu/arm/crt1_s.S +77 -0
- package/libc/freebsd/lib/csu/common/crtbegin.c +95 -0
- package/libc/freebsd/lib/csu/common/crtbrand.S +55 -0
- package/libc/freebsd/lib/csu/common/crtend.c +65 -0
- package/libc/freebsd/lib/csu/common/csu_common.h +50 -0
- package/libc/freebsd/lib/csu/common/feature_note.S +47 -0
- package/libc/freebsd/lib/csu/common/ignore_init_note.S +48 -0
- package/libc/freebsd/lib/csu/common/notes.h +32 -0
- package/libc/freebsd/lib/csu/i386/crt.h +30 -0
- package/libc/freebsd/lib/csu/i386/crt1_c.c +30 -0
- package/libc/freebsd/lib/csu/i386/crt1_s.S +91 -0
- package/libc/freebsd/lib/csu/powerpc/crt.h +31 -0
- package/libc/freebsd/lib/csu/powerpc/crt1_c.c +89 -0
- package/libc/freebsd/lib/csu/powerpc/crtsavres.S +189 -0
- package/libc/freebsd/lib/csu/powerpc64/crt.h +31 -0
- package/libc/freebsd/lib/csu/powerpc64/crt1_c.c +83 -0
- package/libc/freebsd/lib/csu/riscv/crt.h +8 -0
- package/libc/freebsd/lib/csu/riscv/crt1_c.c +51 -0
- package/libc/freebsd/lib/csu/riscv/crt1_s.S +51 -0
- package/libc/freebsd/lib/libc/include/libc_private.h +450 -0
- package/libc/include/generic-glibc/arpa/inet.h +0 -3
- package/libc/netbsd/lib/csu/arch/aarch64/crt0.S +45 -0
- package/libc/netbsd/lib/csu/arch/earm/crt0.S +61 -0
- package/libc/netbsd/lib/csu/arch/i386/crt0.S +48 -0
- package/libc/netbsd/lib/csu/arch/m68k/crt0.S +47 -0
- package/libc/netbsd/lib/csu/arch/mips/crt0.S +59 -0
- package/libc/netbsd/lib/csu/arch/powerpc/crt0.S +56 -0
- package/libc/netbsd/lib/csu/arch/sparc/crt0.S +55 -0
- package/libc/netbsd/lib/csu/arch/sparc64/crt0.S +59 -0
- package/libc/netbsd/lib/csu/arch/x86_64/crt0.S +48 -0
- package/libc/netbsd/lib/csu/common/crt0-common.c +351 -0
- package/libc/netbsd/lib/csu/common/crtbegin.c +135 -0
- package/libc/netbsd/lib/csu/common/csu-common.h +38 -0
- package/libc/netbsd/lib/csu/common/sysident.S +89 -0
- package/libc/netbsd/lib/csu/common/sysident_assym.h +17 -0
- package/package.json +2 -2
- package/std/Build/Step/Compile.zig +1 -20
- package/std/Build/Step/TranslateC.zig +0 -6
- package/std/Build/WebServer.zig +1 -1
- package/std/Build.zig +1 -4
- package/std/Io/Reader/Limited.zig +0 -44
- package/std/Io/Reader.zig +28 -128
- package/std/Io/Writer.zig +6 -31
- package/std/Target.zig +0 -8
- package/std/Thread.zig +4 -3
- package/std/c.zig +26 -87
- package/std/crypto/aes_ocb.zig +3 -32
- package/std/crypto/tls/Client.zig +8 -19
- package/std/debug.zig +1 -1
- package/std/fs/Dir.zig +1 -2
- package/std/fs/File.zig +104 -105
- package/std/http/Client.zig +2 -3
- package/std/json/static.zig +3 -3
- package/std/math/big/int.zig +4 -3
- package/std/math/powi.zig +0 -1
- package/std/mem/Allocator.zig +1 -3
- package/std/mem.zig +1 -3
- package/std/net.zig +2 -3
- package/std/os/linux/bpf.zig +2 -2
- package/std/os/linux/powerpc.zig +12 -74
- package/std/os/linux/powerpc64.zig +12 -74
- package/std/os/linux.zig +2 -7
- package/std/os/uefi/protocol/service_binding.zig +1 -1
- package/std/os/uefi/tables.zig +1 -1
- package/std/pie.zig +1 -1
- package/std/posix.zig +4 -6
- package/std/process/Child.zig +1 -5
- package/std/process.zig +2 -16
- package/std/sort/pdq.zig +1 -48
- package/std/testing.zig +0 -60
- package/std/zig/llvm/BitcodeReader.zig +1 -5
- package/std/zig/system/linux.zig +4 -1
- package/std/zig/system.zig +2 -3
- package/std/zon/parse.zig +0 -1
- package/ubsan_rt.zig +3 -3
- package/libc/musl/src/fenv/loongarch64/fenv-sf.c +0 -3
|
@@ -15,125 +15,84 @@ const sockaddr = linux.sockaddr;
|
|
|
15
15
|
const timespec = linux.timespec;
|
|
16
16
|
|
|
17
17
|
pub fn syscall0(number: SYS) usize {
|
|
18
|
-
// r0 is both an input register and a clobber. musl and glibc achieve this with
|
|
19
|
-
// a "+" constraint, which isn't supported in Zig, so instead we separately list
|
|
20
|
-
// r0 as both an input and an output. (Listing it as an input and a clobber would
|
|
21
|
-
// cause the C backend to emit invalid code; see #25209.)
|
|
22
|
-
var r0_out: usize = undefined;
|
|
23
18
|
return asm volatile (
|
|
24
19
|
\\ sc
|
|
25
20
|
\\ bns+ 1f
|
|
26
21
|
\\ neg 3, 3
|
|
27
22
|
\\ 1:
|
|
28
23
|
: [ret] "={r3}" (-> usize),
|
|
29
|
-
[r0_out] "={r0}" (r0_out),
|
|
30
24
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
31
|
-
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true
|
|
25
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
32
26
|
}
|
|
33
27
|
|
|
34
28
|
pub fn syscall1(number: SYS, arg1: usize) usize {
|
|
35
|
-
// r0 is both an input and a clobber.
|
|
36
|
-
var r0_out: usize = undefined;
|
|
37
29
|
return asm volatile (
|
|
38
30
|
\\ sc
|
|
39
31
|
\\ bns+ 1f
|
|
40
32
|
\\ neg 3, 3
|
|
41
33
|
\\ 1:
|
|
42
34
|
: [ret] "={r3}" (-> usize),
|
|
43
|
-
[r0_out] "={r0}" (r0_out),
|
|
44
35
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
45
36
|
[arg1] "{r3}" (arg1),
|
|
46
|
-
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true
|
|
37
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
47
38
|
}
|
|
48
39
|
|
|
49
40
|
pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
|
|
50
|
-
// These registers are both inputs and clobbers.
|
|
51
|
-
var r0_out: usize = undefined;
|
|
52
|
-
var r4_out: usize = undefined;
|
|
53
41
|
return asm volatile (
|
|
54
42
|
\\ sc
|
|
55
43
|
\\ bns+ 1f
|
|
56
44
|
\\ neg 3, 3
|
|
57
45
|
\\ 1:
|
|
58
46
|
: [ret] "={r3}" (-> usize),
|
|
59
|
-
[r0_out] "={r0}" (r0_out),
|
|
60
|
-
[r4_out] "={r4}" (r4_out),
|
|
61
47
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
62
48
|
[arg1] "{r3}" (arg1),
|
|
63
49
|
[arg2] "{r4}" (arg2),
|
|
64
|
-
: .{ .memory = true, .cr0 = true, .
|
|
50
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
65
51
|
}
|
|
66
52
|
|
|
67
53
|
pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
|
|
68
|
-
// These registers are both inputs and clobbers.
|
|
69
|
-
var r0_out: usize = undefined;
|
|
70
|
-
var r4_out: usize = undefined;
|
|
71
|
-
var r5_out: usize = undefined;
|
|
72
54
|
return asm volatile (
|
|
73
55
|
\\ sc
|
|
74
56
|
\\ bns+ 1f
|
|
75
57
|
\\ neg 3, 3
|
|
76
58
|
\\ 1:
|
|
77
59
|
: [ret] "={r3}" (-> usize),
|
|
78
|
-
[r0_out] "={r0}" (r0_out),
|
|
79
|
-
[r4_out] "={r4}" (r4_out),
|
|
80
|
-
[r5_out] "={r5}" (r5_out),
|
|
81
60
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
82
61
|
[arg1] "{r3}" (arg1),
|
|
83
62
|
[arg2] "{r4}" (arg2),
|
|
84
63
|
[arg3] "{r5}" (arg3),
|
|
85
|
-
: .{ .memory = true, .cr0 = true, .
|
|
64
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
86
65
|
}
|
|
87
66
|
|
|
88
67
|
pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
|
|
89
|
-
// These registers are both inputs and clobbers.
|
|
90
|
-
var r0_out: usize = undefined;
|
|
91
|
-
var r4_out: usize = undefined;
|
|
92
|
-
var r5_out: usize = undefined;
|
|
93
|
-
var r6_out: usize = undefined;
|
|
94
68
|
return asm volatile (
|
|
95
69
|
\\ sc
|
|
96
70
|
\\ bns+ 1f
|
|
97
71
|
\\ neg 3, 3
|
|
98
72
|
\\ 1:
|
|
99
73
|
: [ret] "={r3}" (-> usize),
|
|
100
|
-
[r0_out] "={r0}" (r0_out),
|
|
101
|
-
[r4_out] "={r4}" (r4_out),
|
|
102
|
-
[r5_out] "={r5}" (r5_out),
|
|
103
|
-
[r6_out] "={r6}" (r6_out),
|
|
104
74
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
105
75
|
[arg1] "{r3}" (arg1),
|
|
106
76
|
[arg2] "{r4}" (arg2),
|
|
107
77
|
[arg3] "{r5}" (arg3),
|
|
108
78
|
[arg4] "{r6}" (arg4),
|
|
109
|
-
: .{ .memory = true, .cr0 = true, .
|
|
79
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
110
80
|
}
|
|
111
81
|
|
|
112
82
|
pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
|
|
113
|
-
// These registers are both inputs and clobbers.
|
|
114
|
-
var r0_out: usize = undefined;
|
|
115
|
-
var r4_out: usize = undefined;
|
|
116
|
-
var r5_out: usize = undefined;
|
|
117
|
-
var r6_out: usize = undefined;
|
|
118
|
-
var r7_out: usize = undefined;
|
|
119
83
|
return asm volatile (
|
|
120
84
|
\\ sc
|
|
121
85
|
\\ bns+ 1f
|
|
122
86
|
\\ neg 3, 3
|
|
123
87
|
\\ 1:
|
|
124
88
|
: [ret] "={r3}" (-> usize),
|
|
125
|
-
[r0_out] "={r0}" (r0_out),
|
|
126
|
-
[r4_out] "={r4}" (r4_out),
|
|
127
|
-
[r5_out] "={r5}" (r5_out),
|
|
128
|
-
[r6_out] "={r6}" (r6_out),
|
|
129
|
-
[r7_out] "={r7}" (r7_out),
|
|
130
89
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
131
90
|
[arg1] "{r3}" (arg1),
|
|
132
91
|
[arg2] "{r4}" (arg2),
|
|
133
92
|
[arg3] "{r5}" (arg3),
|
|
134
93
|
[arg4] "{r6}" (arg4),
|
|
135
94
|
[arg5] "{r7}" (arg5),
|
|
136
|
-
: .{ .memory = true, .cr0 = true, .
|
|
95
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
137
96
|
}
|
|
138
97
|
|
|
139
98
|
pub fn syscall6(
|
|
@@ -145,25 +104,12 @@ pub fn syscall6(
|
|
|
145
104
|
arg5: usize,
|
|
146
105
|
arg6: usize,
|
|
147
106
|
) usize {
|
|
148
|
-
// These registers are both inputs and clobbers.
|
|
149
|
-
var r0_out: usize = undefined;
|
|
150
|
-
var r4_out: usize = undefined;
|
|
151
|
-
var r5_out: usize = undefined;
|
|
152
|
-
var r6_out: usize = undefined;
|
|
153
|
-
var r7_out: usize = undefined;
|
|
154
|
-
var r8_out: usize = undefined;
|
|
155
107
|
return asm volatile (
|
|
156
108
|
\\ sc
|
|
157
109
|
\\ bns+ 1f
|
|
158
110
|
\\ neg 3, 3
|
|
159
111
|
\\ 1:
|
|
160
112
|
: [ret] "={r3}" (-> usize),
|
|
161
|
-
[r0_out] "={r0}" (r0_out),
|
|
162
|
-
[r4_out] "={r4}" (r4_out),
|
|
163
|
-
[r5_out] "={r5}" (r5_out),
|
|
164
|
-
[r6_out] "={r6}" (r6_out),
|
|
165
|
-
[r7_out] "={r7}" (r7_out),
|
|
166
|
-
[r8_out] "={r8}" (r8_out),
|
|
167
113
|
: [number] "{r0}" (@intFromEnum(number)),
|
|
168
114
|
[arg1] "{r3}" (arg1),
|
|
169
115
|
[arg2] "{r4}" (arg2),
|
|
@@ -171,7 +117,7 @@ pub fn syscall6(
|
|
|
171
117
|
[arg4] "{r6}" (arg4),
|
|
172
118
|
[arg5] "{r7}" (arg5),
|
|
173
119
|
[arg6] "{r8}" (arg6),
|
|
174
|
-
: .{ .memory = true, .cr0 = true, .
|
|
120
|
+
: .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
175
121
|
}
|
|
176
122
|
|
|
177
123
|
pub fn clone() callconv(.naked) usize {
|
|
@@ -232,19 +178,11 @@ pub fn clone() callconv(.naked) usize {
|
|
|
232
178
|
pub const restore = restore_rt;
|
|
233
179
|
|
|
234
180
|
pub fn restore_rt() callconv(.naked) noreturn {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
: [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
|
|
241
|
-
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true }),
|
|
242
|
-
else => _ = asm volatile (
|
|
243
|
-
\\ sc
|
|
244
|
-
:
|
|
245
|
-
: [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
|
|
246
|
-
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true }),
|
|
247
|
-
}
|
|
181
|
+
asm volatile (
|
|
182
|
+
\\ sc
|
|
183
|
+
:
|
|
184
|
+
: [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
|
|
185
|
+
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
|
248
186
|
}
|
|
249
187
|
|
|
250
188
|
pub const F = struct {
|
package/std/os/linux.zig
CHANGED
|
@@ -1238,14 +1238,11 @@ pub fn access(path: [*:0]const u8, mode: u32) usize {
|
|
|
1238
1238
|
if (@hasField(SYS, "access")) {
|
|
1239
1239
|
return syscall2(.access, @intFromPtr(path), mode);
|
|
1240
1240
|
} else {
|
|
1241
|
-
return faccessat(AT.FDCWD, path, mode, 0);
|
|
1241
|
+
return syscall4(.faccessat, @as(usize, @bitCast(@as(isize, AT.FDCWD))), @intFromPtr(path), mode, 0);
|
|
1242
1242
|
}
|
|
1243
1243
|
}
|
|
1244
1244
|
|
|
1245
1245
|
pub fn faccessat(dirfd: i32, path: [*:0]const u8, mode: u32, flags: u32) usize {
|
|
1246
|
-
if (flags == 0) {
|
|
1247
|
-
return syscall3(.faccessat, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), mode);
|
|
1248
|
-
}
|
|
1249
1246
|
return syscall4(.faccessat2, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), mode, flags);
|
|
1250
1247
|
}
|
|
1251
1248
|
|
|
@@ -9802,9 +9799,7 @@ pub const wrapped = struct {
|
|
|
9802
9799
|
};
|
|
9803
9800
|
|
|
9804
9801
|
pub fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: u32) CopyFileRangeError!usize {
|
|
9805
|
-
const
|
|
9806
|
-
const sys = if (use_c) std.c else std.os.linux;
|
|
9807
|
-
const rc = sys.copy_file_range(fd_in, off_in, fd_out, off_out, len, flags);
|
|
9802
|
+
const rc = system.copy_file_range(fd_in, off_in, fd_out, off_out, len, flags);
|
|
9808
9803
|
switch (errno(rc)) {
|
|
9809
9804
|
.SUCCESS => return @intCast(rc),
|
|
9810
9805
|
.BADF => return error.BadFileFlags,
|
package/std/os/uefi/tables.zig
CHANGED
|
@@ -90,7 +90,7 @@ pub const MemoryType = enum(u32) {
|
|
|
90
90
|
return @truncate(as_int - vendor_start);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
pub fn format(self: MemoryType, w: *std.io.Writer) std.io.
|
|
93
|
+
pub fn format(self: MemoryType, w: *std.io.Writer) std.io.WriteError!void {
|
|
94
94
|
if (self.toOem()) |oemval|
|
|
95
95
|
try w.print("OEM({X})", .{oemval})
|
|
96
96
|
else if (self.toVendor()) |vendorval|
|
package/std/pie.zig
CHANGED
|
@@ -177,7 +177,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
|
|
|
177
177
|
\\ jg 2f
|
|
178
178
|
\\ 1: .quad _DYNAMIC - .
|
|
179
179
|
\\ 2:
|
|
180
|
-
: [ret] "=
|
|
180
|
+
: [ret] "=r" (-> [*]const elf.Dyn),
|
|
181
181
|
),
|
|
182
182
|
// The compiler does not necessarily have any obligation to load the `l7` register (pointing
|
|
183
183
|
// to the GOT), so do it ourselves just in case.
|
package/std/posix.zig
CHANGED
|
@@ -6387,16 +6387,14 @@ pub const CopyFileRangeError = error{
|
|
|
6387
6387
|
///
|
|
6388
6388
|
/// Maximum offsets on Linux and FreeBSD are `maxInt(i64)`.
|
|
6389
6389
|
pub fn copy_file_range(fd_in: fd_t, off_in: u64, fd_out: fd_t, off_out: u64, len: usize, flags: u32) CopyFileRangeError!usize {
|
|
6390
|
-
if (builtin.os.tag == .freebsd or
|
|
6391
|
-
|
|
6392
|
-
|
|
6393
|
-
const sys = if (use_c) std.c else linux;
|
|
6394
|
-
|
|
6390
|
+
if (builtin.os.tag == .freebsd or
|
|
6391
|
+
(comptime builtin.os.tag == .linux and std.c.versionCheck(if (builtin.abi.isAndroid()) .{ .major = 34, .minor = 0, .patch = 0 } else .{ .major = 2, .minor = 27, .patch = 0 })))
|
|
6392
|
+
{
|
|
6395
6393
|
var off_in_copy: i64 = @bitCast(off_in);
|
|
6396
6394
|
var off_out_copy: i64 = @bitCast(off_out);
|
|
6397
6395
|
|
|
6398
6396
|
while (true) {
|
|
6399
|
-
const rc =
|
|
6397
|
+
const rc = system.copy_file_range(fd_in, &off_in_copy, fd_out, &off_out_copy, len, flags);
|
|
6400
6398
|
if (native_os == .freebsd) {
|
|
6401
6399
|
switch (errno(rc)) {
|
|
6402
6400
|
.SUCCESS => return @intCast(rc),
|
package/std/process/Child.zig
CHANGED
|
@@ -52,8 +52,6 @@ term: ?(SpawnError!Term),
|
|
|
52
52
|
argv: []const []const u8,
|
|
53
53
|
|
|
54
54
|
/// Leave as null to use the current env map using the supplied allocator.
|
|
55
|
-
/// Required if unable to access the current env map (e.g. building a library on
|
|
56
|
-
/// some platforms).
|
|
57
55
|
env_map: ?*const EnvMap,
|
|
58
56
|
|
|
59
57
|
stdin_behavior: StdIo,
|
|
@@ -416,8 +414,6 @@ pub fn run(args: struct {
|
|
|
416
414
|
argv: []const []const u8,
|
|
417
415
|
cwd: ?[]const u8 = null,
|
|
418
416
|
cwd_dir: ?fs.Dir = null,
|
|
419
|
-
/// Required if unable to access the current env map (e.g. building a
|
|
420
|
-
/// library on some platforms).
|
|
421
417
|
env_map: ?*const EnvMap = null,
|
|
422
418
|
max_output_bytes: usize = 50 * 1024,
|
|
423
419
|
expand_arg0: Arg0Expand = .no_expand,
|
|
@@ -618,7 +614,7 @@ fn spawnPosix(self: *ChildProcess) SpawnError!void {
|
|
|
618
614
|
})).ptr;
|
|
619
615
|
} else {
|
|
620
616
|
// TODO come up with a solution for this.
|
|
621
|
-
@
|
|
617
|
+
@compileError("missing std lib enhancement: ChildProcess implementation has no way to collect the environment variables to forward to the child process");
|
|
622
618
|
}
|
|
623
619
|
};
|
|
624
620
|
|
package/std/process.zig
CHANGED
|
@@ -1753,8 +1753,7 @@ pub fn totalSystemMemory() TotalSystemMemoryError!u64 {
|
|
|
1753
1753
|
if (std.os.linux.E.init(result) != .SUCCESS) {
|
|
1754
1754
|
return error.UnknownTotalSystemMemory;
|
|
1755
1755
|
}
|
|
1756
|
-
|
|
1757
|
-
return @as(u64, info.totalram) * info.mem_unit;
|
|
1756
|
+
return info.totalram * info.mem_unit;
|
|
1758
1757
|
},
|
|
1759
1758
|
.freebsd => {
|
|
1760
1759
|
var physmem: c_ulong = undefined;
|
|
@@ -1763,20 +1762,7 @@ pub fn totalSystemMemory() TotalSystemMemoryError!u64 {
|
|
|
1763
1762
|
error.NameTooLong, error.UnknownName => unreachable,
|
|
1764
1763
|
else => return error.UnknownTotalSystemMemory,
|
|
1765
1764
|
};
|
|
1766
|
-
return @as(
|
|
1767
|
-
},
|
|
1768
|
-
// whole Darwin family
|
|
1769
|
-
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
|
|
1770
|
-
// "hw.memsize" returns uint64_t
|
|
1771
|
-
var physmem: u64 = undefined;
|
|
1772
|
-
var len: usize = @sizeOf(u64);
|
|
1773
|
-
posix.sysctlbynameZ("hw.memsize", &physmem, &len, null, 0) catch |err| switch (err) {
|
|
1774
|
-
error.PermissionDenied => unreachable, // only when setting values,
|
|
1775
|
-
error.SystemResources => unreachable, // memory already on the stack
|
|
1776
|
-
error.UnknownName => unreachable, // constant, known good value
|
|
1777
|
-
else => return error.UnknownTotalSystemMemory,
|
|
1778
|
-
};
|
|
1779
|
-
return physmem;
|
|
1765
|
+
return @as(usize, @intCast(physmem));
|
|
1780
1766
|
},
|
|
1781
1767
|
.openbsd => {
|
|
1782
1768
|
const mib: [2]c_int = [_]c_int{
|
package/std/sort/pdq.zig
CHANGED
|
@@ -227,7 +227,7 @@ fn partialInsertionSort(a: usize, b: usize, context: anytype) bool {
|
|
|
227
227
|
// shift the smaller element to the left.
|
|
228
228
|
if (i - a >= 2) {
|
|
229
229
|
var j = i - 1;
|
|
230
|
-
while (j
|
|
230
|
+
while (j >= 1) : (j -= 1) {
|
|
231
231
|
if (!context.lessThan(j, j - 1)) break;
|
|
232
232
|
context.swap(j, j - 1);
|
|
233
233
|
}
|
|
@@ -328,50 +328,3 @@ fn reverseRange(a: usize, b: usize, context: anytype) void {
|
|
|
328
328
|
j -= 1;
|
|
329
329
|
}
|
|
330
330
|
}
|
|
331
|
-
|
|
332
|
-
test "pdqContext respects arbitrary range boundaries" {
|
|
333
|
-
// Regression test for issue #25250
|
|
334
|
-
// pdqsort should never access indices outside the specified [a, b) range
|
|
335
|
-
var data: [2000]i32 = @splat(0);
|
|
336
|
-
|
|
337
|
-
// Fill with data that triggers the partialInsertionSort path
|
|
338
|
-
for (0..data.len) |i| {
|
|
339
|
-
data[i] = @intCast(@mod(@as(i32, @intCast(i)) * 7, 100));
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
const TestContext = struct {
|
|
343
|
-
items: []i32,
|
|
344
|
-
range_start: usize,
|
|
345
|
-
range_end: usize,
|
|
346
|
-
|
|
347
|
-
pub fn lessThan(ctx: @This(), a: usize, b: usize) bool {
|
|
348
|
-
// Assert indices are within the expected range
|
|
349
|
-
testing.expect(a >= ctx.range_start and a < ctx.range_end) catch @panic("index a out of range");
|
|
350
|
-
testing.expect(b >= ctx.range_start and b < ctx.range_end) catch @panic("index b out of range");
|
|
351
|
-
return ctx.items[a] < ctx.items[b];
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
pub fn swap(ctx: @This(), a: usize, b: usize) void {
|
|
355
|
-
// Assert indices are within the expected range
|
|
356
|
-
testing.expect(a >= ctx.range_start and a < ctx.range_end) catch @panic("index a out of range");
|
|
357
|
-
testing.expect(b >= ctx.range_start and b < ctx.range_end) catch @panic("index b out of range");
|
|
358
|
-
mem.swap(i32, &ctx.items[a], &ctx.items[b]);
|
|
359
|
-
}
|
|
360
|
-
};
|
|
361
|
-
|
|
362
|
-
// Test sorting a sub-range that doesn't start at 0
|
|
363
|
-
const start = 1118;
|
|
364
|
-
const end = 1764;
|
|
365
|
-
const ctx = TestContext{
|
|
366
|
-
.items = &data,
|
|
367
|
-
.range_start = start,
|
|
368
|
-
.range_end = end,
|
|
369
|
-
};
|
|
370
|
-
|
|
371
|
-
pdqContext(start, end, ctx);
|
|
372
|
-
|
|
373
|
-
// Verify the range is sorted
|
|
374
|
-
for ((start + 1)..end) |i| {
|
|
375
|
-
try testing.expect(data[i - 1] <= data[i]);
|
|
376
|
-
}
|
|
377
|
-
}
|
package/std/testing.zig
CHANGED
|
@@ -1249,63 +1249,3 @@ pub const Reader = struct {
|
|
|
1249
1249
|
return n;
|
|
1250
1250
|
}
|
|
1251
1251
|
};
|
|
1252
|
-
|
|
1253
|
-
/// A `std.Io.Reader` that gets its data from another `std.Io.Reader`, and always
|
|
1254
|
-
/// writes to its own buffer (and returns 0) during `stream` and `readVec`.
|
|
1255
|
-
pub const ReaderIndirect = struct {
|
|
1256
|
-
in: *std.Io.Reader,
|
|
1257
|
-
interface: std.Io.Reader,
|
|
1258
|
-
|
|
1259
|
-
pub fn init(in: *std.Io.Reader, buffer: []u8) ReaderIndirect {
|
|
1260
|
-
return .{
|
|
1261
|
-
.in = in,
|
|
1262
|
-
.interface = .{
|
|
1263
|
-
.vtable = &.{
|
|
1264
|
-
.stream = stream,
|
|
1265
|
-
.readVec = readVec,
|
|
1266
|
-
},
|
|
1267
|
-
.buffer = buffer,
|
|
1268
|
-
.seek = 0,
|
|
1269
|
-
.end = 0,
|
|
1270
|
-
},
|
|
1271
|
-
};
|
|
1272
|
-
}
|
|
1273
|
-
|
|
1274
|
-
fn readVec(r: *std.Io.Reader, _: [][]u8) std.Io.Reader.Error!usize {
|
|
1275
|
-
try streamInner(r);
|
|
1276
|
-
return 0;
|
|
1277
|
-
}
|
|
1278
|
-
|
|
1279
|
-
fn stream(r: *std.Io.Reader, _: *std.Io.Writer, _: std.Io.Limit) std.Io.Reader.StreamError!usize {
|
|
1280
|
-
try streamInner(r);
|
|
1281
|
-
return 0;
|
|
1282
|
-
}
|
|
1283
|
-
|
|
1284
|
-
fn streamInner(r: *std.Io.Reader) std.Io.Reader.Error!void {
|
|
1285
|
-
const r_indirect: *ReaderIndirect = @alignCast(@fieldParentPtr("interface", r));
|
|
1286
|
-
|
|
1287
|
-
// If there's no room remaining in the buffer at all, make room.
|
|
1288
|
-
if (r.buffer.len == r.end) {
|
|
1289
|
-
try r.rebase(r.buffer.len);
|
|
1290
|
-
}
|
|
1291
|
-
|
|
1292
|
-
var writer: std.Io.Writer = .{
|
|
1293
|
-
.buffer = r.buffer,
|
|
1294
|
-
.end = r.end,
|
|
1295
|
-
.vtable = &.{
|
|
1296
|
-
.drain = std.Io.Writer.unreachableDrain,
|
|
1297
|
-
.rebase = std.Io.Writer.unreachableRebase,
|
|
1298
|
-
},
|
|
1299
|
-
};
|
|
1300
|
-
defer r.end = writer.end;
|
|
1301
|
-
|
|
1302
|
-
r_indirect.in.streamExact(&writer, r.buffer.len - r.end) catch |err| switch (err) {
|
|
1303
|
-
// Only forward EndOfStream if no new bytes were written to the buffer
|
|
1304
|
-
error.EndOfStream => |e| if (r.end == writer.end) {
|
|
1305
|
-
return e;
|
|
1306
|
-
},
|
|
1307
|
-
error.WriteFailed => unreachable,
|
|
1308
|
-
else => |e| return e,
|
|
1309
|
-
};
|
|
1310
|
-
}
|
|
1311
|
-
};
|
|
@@ -154,11 +154,7 @@ pub fn next(bc: *BitcodeReader) !?Item {
|
|
|
154
154
|
Abbrev.Builtin.enter_subblock.toRecordId() => {
|
|
155
155
|
const block_id: u32 = @intCast(record.operands[0]);
|
|
156
156
|
switch (block_id) {
|
|
157
|
-
Block.block_info =>
|
|
158
|
-
try bc.startBlock(Block.block_info, @intCast(record.operands[1]));
|
|
159
|
-
try bc.parseBlockInfoBlock();
|
|
160
|
-
try bc.endBlock();
|
|
161
|
-
},
|
|
157
|
+
Block.block_info => try bc.parseBlockInfoBlock(),
|
|
162
158
|
Block.first_reserved...Block.last_standard => return error.UnsupportedBlockId,
|
|
163
159
|
else => {
|
|
164
160
|
try bc.startBlock(block_id, @intCast(record.operands[1]));
|
package/std/zig/system/linux.zig
CHANGED
|
@@ -358,11 +358,14 @@ fn CpuinfoParser(comptime impl: anytype) type {
|
|
|
358
358
|
return struct {
|
|
359
359
|
fn parse(arch: Target.Cpu.Arch, reader: *std.Io.Reader) !?Target.Cpu {
|
|
360
360
|
var obj: impl = .{};
|
|
361
|
-
while (
|
|
361
|
+
while (reader.takeDelimiterExclusive('\n')) |line| {
|
|
362
362
|
const colon_pos = mem.indexOfScalar(u8, line, ':') orelse continue;
|
|
363
363
|
const key = mem.trimEnd(u8, line[0..colon_pos], " \t");
|
|
364
364
|
const value = mem.trimStart(u8, line[colon_pos + 1 ..], " \t");
|
|
365
365
|
if (!try obj.line_hook(key, value)) break;
|
|
366
|
+
} else |err| switch (err) {
|
|
367
|
+
error.EndOfStream => {},
|
|
368
|
+
else => |e| return e,
|
|
366
369
|
}
|
|
367
370
|
return obj.finalize(arch);
|
|
368
371
|
}
|
package/std/zig/system.zig
CHANGED
|
@@ -102,7 +102,6 @@ pub fn getExternalExecutor(
|
|
|
102
102
|
else => "qemu-mips64el",
|
|
103
103
|
},
|
|
104
104
|
},
|
|
105
|
-
.or1k => Executor{ .qemu = "qemu-or1k" },
|
|
106
105
|
.powerpc => Executor{ .qemu = "qemu-ppc" },
|
|
107
106
|
.powerpc64 => Executor{ .qemu = "qemu-ppc64" },
|
|
108
107
|
.powerpc64le => Executor{ .qemu = "qemu-ppc64le" },
|
|
@@ -110,7 +109,7 @@ pub fn getExternalExecutor(
|
|
|
110
109
|
.riscv64 => Executor{ .qemu = "qemu-riscv64" },
|
|
111
110
|
.s390x => Executor{ .qemu = "qemu-s390x" },
|
|
112
111
|
.sparc => Executor{
|
|
113
|
-
.qemu = if (candidate.cpu.has(.sparc, .
|
|
112
|
+
.qemu = if (candidate.cpu.has(.sparc, .v9))
|
|
114
113
|
"qemu-sparc32plus"
|
|
115
114
|
else
|
|
116
115
|
"qemu-sparc",
|
|
@@ -122,7 +121,7 @@ pub fn getExternalExecutor(
|
|
|
122
121
|
else => Executor{ .qemu = "qemu-x86_64" },
|
|
123
122
|
},
|
|
124
123
|
.xtensa => Executor{ .qemu = "qemu-xtensa" },
|
|
125
|
-
else => bad_result,
|
|
124
|
+
else => return bad_result,
|
|
126
125
|
};
|
|
127
126
|
}
|
|
128
127
|
|
package/std/zon/parse.zig
CHANGED
package/ubsan_rt.zig
CHANGED
|
@@ -627,7 +627,7 @@ fn exportHandler(
|
|
|
627
627
|
// Work around x86_64 backend limitation.
|
|
628
628
|
const linkage = if (builtin.zig_backend == .stage2_x86_64 and builtin.os.tag == .windows) .internal else .weak;
|
|
629
629
|
const N = "__ubsan_handle_" ++ sym_name;
|
|
630
|
-
@export(handler, .{ .name = N, .linkage = linkage
|
|
630
|
+
@export(handler, .{ .name = N, .linkage = linkage });
|
|
631
631
|
}
|
|
632
632
|
|
|
633
633
|
fn exportHandlerWithAbort(
|
|
@@ -639,11 +639,11 @@ fn exportHandlerWithAbort(
|
|
|
639
639
|
const linkage = if (builtin.zig_backend == .stage2_x86_64 and builtin.os.tag == .windows) .internal else .weak;
|
|
640
640
|
{
|
|
641
641
|
const N = "__ubsan_handle_" ++ sym_name;
|
|
642
|
-
@export(handler, .{ .name = N, .linkage = linkage
|
|
642
|
+
@export(handler, .{ .name = N, .linkage = linkage });
|
|
643
643
|
}
|
|
644
644
|
{
|
|
645
645
|
const N = "__ubsan_handle_" ++ sym_name ++ "_abort";
|
|
646
|
-
@export(abort_handler, .{ .name = N, .linkage = linkage
|
|
646
|
+
@export(abort_handler, .{ .name = N, .linkage = linkage });
|
|
647
647
|
}
|
|
648
648
|
}
|
|
649
649
|
|