authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-09 03:52:30+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-09 17:53:04+02:00
log5cbafcfd56862d9042b2446b0cac9d07d4d141a0
tree32905e0b91cae9c6350f5b2a6cf4f3c764256eab
parent5102fe31bdc030dc6549f8dc2612c9ba981bc2ea
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.Thread: remove pointless clobbers in LinuxThreadImpl.freeAndExit()

The function is noreturn and destroys the thread; clobbers serve no purpose. Also remove a pointless blr in the powerpc prong.

1 files changed, 18 insertions(+), 19 deletions(-)

lib/std/Thread.zig+18-19
......@@ -1316,30 +1316,29 @@ const LinuxThreadImpl = struct {
13161316 [len] "{r4}" (self.mapped.len),
13171317 ),
13181318 .powerpc, .powerpcle, .powerpc64, .powerpc64le => asm volatile (
1319 \\ li 0, 91 # SYS_munmap
1320 \\ sc
1321 \\ li 0, 1 # SYS_exit
1322 \\ li 3, 0
1323 \\ sc
1324 \\ blr
1319 \\ li 0, 91 # SYS_munmap
1320 \\ sc
1321 \\ li 0, 1 # SYS_exit
1322 \\ li 3, 0
1323 \\ sc
13251324 :
13261325 : [ptr] "{r3}" (@intFromPtr(self.mapped.ptr)),
13271326 [len] "{r4}" (self.mapped.len),
13281327 ),
13291328 .riscv32, .riscv64 => asm volatile (
1330 \\ li a7, 215 # SYS_munmap
1331 \\ ecall
1332 \\ li a7, 93 # SYS_exit
1333 \\ mv a0, zero
1334 \\ ecall
1329 \\ li a7, 215 # SYS_munmap
1330 \\ ecall
1331 \\ li a7, 93 # SYS_exit
1332 \\ mv a0, zero
1333 \\ ecall
13351334 :
13361335 : [ptr] "{a0}" (@intFromPtr(self.mapped.ptr)),
13371336 [len] "{a1}" (self.mapped.len),
13381337 ),
13391338 .s390x => asm volatile (
1340 \\ svc 91 # SYS_munmap
1341 \\ lghi %%r2, 0
1342 \\ svc 1 # SYS_exit
1339 \\ svc 91 # SYS_munmap
1340 \\ lghi %%r2, 0
1341 \\ svc 1 # SYS_exit
13431342 :
13441343 : [ptr] "{r2}" (@intFromPtr(self.mapped.ptr)),
13451344 [len] "{r3}" (self.mapped.len),
......@@ -1379,7 +1378,7 @@ const LinuxThreadImpl = struct {
13791378 : [ptr] "{g1}" (@intFromPtr(self.mapped.ptr)),
13801379 [len] "{g2}" (self.mapped.len),
13811380 [stack] "{g3}" (&sparc_exit_stack),
1382 : .{ .memory = true }),
1381 ),
13831382 .sparc64 => asm volatile (
13841383 \\ // Ensure that the kernel only has to flush the current register window.
13851384 \\ flushw
......@@ -1398,7 +1397,7 @@ const LinuxThreadImpl = struct {
13981397 : [ptr] "{g1}" (@intFromPtr(self.mapped.ptr)),
13991398 [len] "{g2}" (self.mapped.len),
14001399 [stack] "{g3}" (&sparc_exit_stack),
1401 : .{ .memory = true }),
1400 ),
14021401 .loongarch32, .loongarch64 => asm volatile (
14031402 \\ ori $a7, $zero, 215 # SYS_munmap
14041403 \\ syscall 0 # call munmap
......@@ -1408,7 +1407,7 @@ const LinuxThreadImpl = struct {
14081407 :
14091408 : [ptr] "{r4}" (@intFromPtr(self.mapped.ptr)),
14101409 [len] "{r5}" (self.mapped.len),
1411 : .{ .memory = true }),
1410 ),
14121411 .csky => asm volatile (
14131412 \\ movi r7, 215 # SYS_munmap
14141413 \\ trap 0
......@@ -1418,7 +1417,7 @@ const LinuxThreadImpl = struct {
14181417 :
14191418 : [ptr] "{r0}" (@intFromPtr(self.mapped.ptr)),
14201419 [len] "{r1}" (self.mapped.len),
1421 : .{ .memory = true }),
1420 ),
14221421 .xtensa, .xtensaeb => asm volatile (
14231422 \\ movi a2, 81 // SYS_munmap
14241423 \\ syscall
......@@ -1428,7 +1427,7 @@ const LinuxThreadImpl = struct {
14281427 :
14291428 : [ptr] "{a6}" (@intFromPtr(self.mapped.ptr)),
14301429 [len] "{a3}" (self.mapped.len),
1431 : .{ .memory = true }),
1430 ),
14321431 else => |cpu_arch| @compileError("Unsupported linux arch: " ++ @tagName(cpu_arch)),
14331432 }
14341433 unreachable;