authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-18 11:34:48+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-18 11:36:26+02:00
logadcfdce6be955d7d8e3237be5c34f84478cf4636
tree71c21ebf5b947899385791078ad77f69fefded11
parente59f2995a50f5a01181fbd903c8d077339aec61b
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.Thread: fix some issues in x86_64/x32 inline asm

Wrong syscall on x32; return exit code 0 instead of 1 on both. ref https://github.com/ziglang/zig/issues/22189

1 files changed, 16 insertions(+), 6 deletions(-)

lib/std/Thread.zig+16-6
......@@ -1191,12 +1191,22 @@ const LinuxThreadImpl = struct {
11911191 : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
11921192 [len] "r" (self.mapped.len),
11931193 : .{ .memory = true }),
1194 .x86_64 => asm volatile (
1195 \\ movq $11, %%rax # SYS_munmap
1196 \\ syscall
1197 \\ movq $60, %%rax # SYS_exit
1198 \\ movq $1, %%rdi
1199 \\ syscall
1194 .x86_64 => asm volatile (switch (target.abi) {
1195 .gnux32, .muslx32 =>
1196 \\ movl $0x4000000b, %%eax # SYS_munmap
1197 \\ syscall
1198 \\ movl $0x4000003c, %%eax # SYS_exit
1199 \\ xor %%rdi, %%rdi
1200 \\ syscall
1201 ,
1202 else =>
1203 \\ movl $11, %%eax # SYS_munmap
1204 \\ syscall
1205 \\ movl $60, %%eax # SYS_exit
1206 \\ xor %%rdi, %%rdi
1207 \\ syscall
1208 ,
1209 }
12001210 :
12011211 : [ptr] "{rdi}" (@intFromPtr(self.mapped.ptr)),
12021212 [len] "{rsi}" (self.mapped.len),