From b83d10214bf723c21a912e809fb39f4407dae927 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Sat, 22 Jun 2024 14:54:03 +0200 Subject: std.Thread: Implement LinuxThreadImpl.ThreadCompletion.freeAndExit() for riscv32. --- lib/std/Thread.zig | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'lib/std/Thread.zig') diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig index e19f473e44..2c724b3b75 100644 --- a/lib/std/Thread.zig +++ b/lib/std/Thread.zig @@ -1171,6 +1171,19 @@ const LinuxThreadImpl = struct { [len] "r" (self.mapped.len), : "memory" ), + .riscv32 => asm volatile ( + \\ li a7, 215 + \\ mv a0, %[ptr] + \\ mv a1, %[len] + \\ ecall + \\ li a7, 93 + \\ mv a0, zero + \\ ecall + : + : [ptr] "r" (@intFromPtr(self.mapped.ptr)), + [len] "r" (self.mapped.len), + : "memory" + ), .riscv64 => asm volatile ( \\ li a7, 215 \\ mv a0, %[ptr] -- cgit v1.2.3 From a59ab5ffa5aacbc2fb372c45c23868bcd92a6385 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Sat, 20 Jul 2024 05:34:25 +0200 Subject: std.Thread: Add some syscall comments to LinuxThreadImpl.ThreadCompletion.freeAndExit(). --- lib/std/Thread.zig | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'lib/std/Thread.zig') diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig index 2c724b3b75..c9c867090d 100644 --- a/lib/std/Thread.zig +++ b/lib/std/Thread.zig @@ -1082,11 +1082,11 @@ const LinuxThreadImpl = struct { fn freeAndExit(self: *ThreadCompletion) noreturn { switch (target.cpu.arch) { .x86 => asm volatile ( - \\ movl $91, %%eax + \\ movl $91, %%eax # SYS_munmap \\ movl %[ptr], %%ebx \\ movl %[len], %%ecx \\ int $128 - \\ movl $1, %%eax + \\ movl $1, %%eax # SYS_exit \\ movl $0, %%ebx \\ int $128 : @@ -1095,9 +1095,9 @@ const LinuxThreadImpl = struct { : "memory" ), .x86_64 => asm volatile ( - \\ movq $11, %%rax + \\ movq $11, %%rax # SYS_munmap \\ syscall - \\ movq $60, %%rax + \\ movq $60, %%rax # SYS_exit \\ movq $1, %%rdi \\ syscall : @@ -1105,11 +1105,11 @@ const LinuxThreadImpl = struct { [len] "{rsi}" (self.mapped.len), ), .arm, .armeb, .thumb, .thumbeb => asm volatile ( - \\ mov r7, #91 + \\ mov r7, #91 // SYS_munmap \\ mov r0, %[ptr] \\ mov r1, %[len] \\ svc 0 - \\ mov r7, #1 + \\ mov r7, #1 // SYS_exit \\ mov r0, #0 \\ svc 0 : @@ -1118,11 +1118,11 @@ const LinuxThreadImpl = struct { : "memory" ), .aarch64, .aarch64_be => asm volatile ( - \\ mov x8, #215 + \\ mov x8, #215 // SYS_munmap \\ mov x0, %[ptr] \\ mov x1, %[len] \\ svc 0 - \\ mov x8, #93 + \\ mov x8, #93 // SYS_exit \\ mov x0, #0 \\ svc 0 : @@ -1132,11 +1132,11 @@ const LinuxThreadImpl = struct { ), .mips, .mipsel => asm volatile ( \\ move $sp, $25 - \\ li $2, 4091 + \\ li $2, 4091 # SYS_munmap \\ move $4, %[ptr] \\ move $5, %[len] \\ syscall - \\ li $2, 4001 + \\ li $2, 4001 # SYS_exit \\ li $4, 0 \\ syscall : @@ -1145,11 +1145,11 @@ const LinuxThreadImpl = struct { : "memory" ), .mips64, .mips64el => asm volatile ( - \\ li $2, 4091 + \\ li $2, 4091 # SYS_munmap \\ move $4, %[ptr] \\ move $5, %[len] \\ syscall - \\ li $2, 4001 + \\ li $2, 4001 # SYS_exit \\ li $4, 0 \\ syscall : @@ -1158,11 +1158,11 @@ const LinuxThreadImpl = struct { : "memory" ), .powerpc, .powerpcle, .powerpc64, .powerpc64le => asm volatile ( - \\ li 0, 91 + \\ li 0, 91 # SYS_munmap \\ mr %[ptr], 3 \\ mr %[len], 4 \\ sc - \\ li 0, 1 + \\ li 0, 1 # SYS_exit \\ li 3, 0 \\ sc \\ blr @@ -1172,11 +1172,11 @@ const LinuxThreadImpl = struct { : "memory" ), .riscv32 => asm volatile ( - \\ li a7, 215 + \\ li a7, 215 # SYS_munmap \\ mv a0, %[ptr] \\ mv a1, %[len] \\ ecall - \\ li a7, 93 + \\ li a7, 93 # SYS_exit \\ mv a0, zero \\ ecall : @@ -1185,11 +1185,11 @@ const LinuxThreadImpl = struct { : "memory" ), .riscv64 => asm volatile ( - \\ li a7, 215 + \\ li a7, 215 # SYS_munmap \\ mv a0, %[ptr] \\ mv a1, %[len] \\ ecall - \\ li a7, 93 + \\ li a7, 93 # SYS_exit \\ mv a0, zero \\ ecall : @@ -1209,14 +1209,14 @@ const LinuxThreadImpl = struct { \\ ba 1b \\ restore \\ 2: - \\ mov 73, %%g1 + \\ mov 73, %%g1 # SYS_munmap \\ mov %[ptr], %%o0 \\ mov %[len], %%o1 \\ # Flush register window contents to prevent background \\ # memory access before unmapping the stack. \\ flushw \\ t 0x6d - \\ mov 1, %%g1 + \\ mov 1, %%g1 # SYS_exit \\ mov 1, %%o0 \\ t 0x6d : -- cgit v1.2.3