@@ -1082,11 +1082,11 @@ const LinuxThreadImpl = struct {
10821082 fn freeAndExit (self : * ThreadCompletion ) noreturn {
10831083 switch (target .cpu .arch ) {
10841084 .x86 = > asm volatile (
1085- \\ movl $91, %%eax
1085+ \\ movl $91, %%eax # SYS_munmap
10861086 \\ movl %[ptr], %%ebx
10871087 \\ movl %[len], %%ecx
10881088 \\ int $128
1089- \\ movl $1, %%eax
1089+ \\ movl $1, %%eax # SYS_exit
10901090 \\ movl $0, %%ebx
10911091 \\ int $128
10921092 :
@@ -1095,21 +1095,21 @@ const LinuxThreadImpl = struct {
10951095 : "memory"
10961096 ),
10971097 .x86_64 = > asm volatile (
1098- \\ movq $11, %%rax
1098+ \\ movq $11, %%rax # SYS_munmap
10991099 \\ syscall
1100- \\ movq $60, %%rax
1100+ \\ movq $60, %%rax # SYS_exit
11011101 \\ movq $1, %%rdi
11021102 \\ syscall
11031103 :
11041104 : [ptr ] "{rdi}" (@intFromPtr (self .mapped .ptr )),
11051105 [len ] "{rsi}" (self .mapped .len ),
11061106 ),
11071107 .arm , .armeb , .thumb , .thumbeb = > asm volatile (
1108- \\ mov r7, #91
1108+ \\ mov r7, #91 // SYS_munmap
11091109 \\ mov r0, %[ptr]
11101110 \\ mov r1, %[len]
11111111 \\ svc 0
1112- \\ mov r7, #1
1112+ \\ mov r7, #1 // SYS_exit
11131113 \\ mov r0, #0
11141114 \\ svc 0
11151115 :
@@ -1118,11 +1118,11 @@ const LinuxThreadImpl = struct {
11181118 : "memory"
11191119 ),
11201120 .aarch64 , .aarch64_be = > asm volatile (
1121- \\ mov x8, #215
1121+ \\ mov x8, #215 // SYS_munmap
11221122 \\ mov x0, %[ptr]
11231123 \\ mov x1, %[len]
11241124 \\ svc 0
1125- \\ mov x8, #93
1125+ \\ mov x8, #93 // SYS_exit
11261126 \\ mov x0, #0
11271127 \\ svc 0
11281128 :
@@ -1132,11 +1132,11 @@ const LinuxThreadImpl = struct {
11321132 ),
11331133 .mips , .mipsel = > asm volatile (
11341134 \\ move $sp, $25
1135- \\ li $2, 4091
1135+ \\ li $2, 4091 # SYS_munmap
11361136 \\ move $4, %[ptr]
11371137 \\ move $5, %[len]
11381138 \\ syscall
1139- \\ li $2, 4001
1139+ \\ li $2, 4001 # SYS_exit
11401140 \\ li $4, 0
11411141 \\ syscall
11421142 :
@@ -1145,11 +1145,11 @@ const LinuxThreadImpl = struct {
11451145 : "memory"
11461146 ),
11471147 .mips64 , .mips64el = > asm volatile (
1148- \\ li $2, 4091
1148+ \\ li $2, 4091 # SYS_munmap
11491149 \\ move $4, %[ptr]
11501150 \\ move $5, %[len]
11511151 \\ syscall
1152- \\ li $2, 4001
1152+ \\ li $2, 4001 # SYS_exit
11531153 \\ li $4, 0
11541154 \\ syscall
11551155 :
@@ -1158,11 +1158,11 @@ const LinuxThreadImpl = struct {
11581158 : "memory"
11591159 ),
11601160 .powerpc , .powerpcle , .powerpc64 , .powerpc64le = > asm volatile (
1161- \\ li 0, 91
1161+ \\ li 0, 91 # SYS_munmap
11621162 \\ mr %[ptr], 3
11631163 \\ mr %[len], 4
11641164 \\ sc
1165- \\ li 0, 1
1165+ \\ li 0, 1 # SYS_exit
11661166 \\ li 3, 0
11671167 \\ sc
11681168 \\ blr
@@ -1171,12 +1171,25 @@ const LinuxThreadImpl = struct {
11711171 [len ] "r" (self .mapped .len ),
11721172 : "memory"
11731173 ),
1174+ .riscv32 = > asm volatile (
1175+ \\ li a7, 215 # SYS_munmap
1176+ \\ mv a0, %[ptr]
1177+ \\ mv a1, %[len]
1178+ \\ ecall
1179+ \\ li a7, 93 # SYS_exit
1180+ \\ mv a0, zero
1181+ \\ ecall
1182+ :
1183+ : [ptr ] "r" (@intFromPtr (self .mapped .ptr )),
1184+ [len ] "r" (self .mapped .len ),
1185+ : "memory"
1186+ ),
11741187 .riscv64 = > asm volatile (
1175- \\ li a7, 215
1188+ \\ li a7, 215 # SYS_munmap
11761189 \\ mv a0, %[ptr]
11771190 \\ mv a1, %[len]
11781191 \\ ecall
1179- \\ li a7, 93
1192+ \\ li a7, 93 # SYS_exit
11801193 \\ mv a0, zero
11811194 \\ ecall
11821195 :
@@ -1196,14 +1209,14 @@ const LinuxThreadImpl = struct {
11961209 \\ ba 1b
11971210 \\ restore
11981211 \\ 2:
1199- \\ mov 73, %%g1
1212+ \\ mov 73, %%g1 # SYS_munmap
12001213 \\ mov %[ptr], %%o0
12011214 \\ mov %[len], %%o1
12021215 \\ # Flush register window contents to prevent background
12031216 \\ # memory access before unmapping the stack.
12041217 \\ flushw
12051218 \\ t 0x6d
1206- \\ mov 1, %%g1
1219+ \\ mov 1, %%g1 # SYS_exit
12071220 \\ mov 1, %%o0
12081221 \\ t 0x6d
12091222 :
0 commit comments