| ... | @@ -1082,11 +1082,11 @@ const LinuxThreadImpl = struct { | ... | @@ -1082,11 +1082,11 @@ const LinuxThreadImpl = struct { |
| 1082 | fn freeAndExit(self: *ThreadCompletion) noreturn { | 1082 | fn freeAndExit(self: *ThreadCompletion) noreturn { |
| 1083 | switch (target.cpu.arch) { | 1083 | switch (target.cpu.arch) { |
| 1084 | .x86 => asm volatile ( | 1084 | .x86 => asm volatile ( |
| 1085 | \\ movl $91, %%eax | 1085 | \\ movl $91, %%eax # SYS_munmap |
| 1086 | \\ movl %[ptr], %%ebx | 1086 | \\ movl %[ptr], %%ebx |
| 1087 | \\ movl %[len], %%ecx | 1087 | \\ movl %[len], %%ecx |
| 1088 | \\ int $128 | 1088 | \\ int $128 |
| 1089 | \\ movl $1, %%eax | 1089 | \\ movl $1, %%eax # SYS_exit |
| 1090 | \\ movl $0, %%ebx | 1090 | \\ movl $0, %%ebx |
| 1091 | \\ int $128 | 1091 | \\ int $128 |
| 1092 | : | 1092 | : |
| ... | @@ -1095,9 +1095,9 @@ const LinuxThreadImpl = struct { | ... | @@ -1095,9 +1095,9 @@ const LinuxThreadImpl = struct { |
| 1095 | : "memory" | 1095 | : "memory" |
| 1096 | ), | 1096 | ), |
| 1097 | .x86_64 => asm volatile ( | 1097 | .x86_64 => asm volatile ( |
| 1098 | \\ movq $11, %%rax | 1098 | \\ movq $11, %%rax # SYS_munmap |
| 1099 | \\ syscall | 1099 | \\ syscall |
| 1100 | \\ movq $60, %%rax | 1100 | \\ movq $60, %%rax # SYS_exit |
| 1101 | \\ movq $1, %%rdi | 1101 | \\ movq $1, %%rdi |
| 1102 | \\ syscall | 1102 | \\ syscall |
| 1103 | : | 1103 | : |
| ... | @@ -1105,11 +1105,11 @@ const LinuxThreadImpl = struct { | ... | @@ -1105,11 +1105,11 @@ const LinuxThreadImpl = struct { |
| 1105 | [len] "{rsi}" (self.mapped.len), | 1105 | [len] "{rsi}" (self.mapped.len), |
| 1106 | ), | 1106 | ), |
| 1107 | .arm, .armeb, .thumb, .thumbeb => asm volatile ( | 1107 | .arm, .armeb, .thumb, .thumbeb => asm volatile ( |
| 1108 | \\ mov r7, #91 | 1108 | \\ mov r7, #91 // SYS_munmap |
| 1109 | \\ mov r0, %[ptr] | 1109 | \\ mov r0, %[ptr] |
| 1110 | \\ mov r1, %[len] | 1110 | \\ mov r1, %[len] |
| 1111 | \\ svc 0 | 1111 | \\ svc 0 |
| 1112 | \\ mov r7, #1 | 1112 | \\ mov r7, #1 // SYS_exit |
| 1113 | \\ mov r0, #0 | 1113 | \\ mov r0, #0 |
| 1114 | \\ svc 0 | 1114 | \\ svc 0 |
| 1115 | : | 1115 | : |
| ... | @@ -1118,11 +1118,11 @@ const LinuxThreadImpl = struct { | ... | @@ -1118,11 +1118,11 @@ const LinuxThreadImpl = struct { |
| 1118 | : "memory" | 1118 | : "memory" |
| 1119 | ), | 1119 | ), |
| 1120 | .aarch64, .aarch64_be => asm volatile ( | 1120 | .aarch64, .aarch64_be => asm volatile ( |
| 1121 | \\ mov x8, #215 | 1121 | \\ mov x8, #215 // SYS_munmap |
| 1122 | \\ mov x0, %[ptr] | 1122 | \\ mov x0, %[ptr] |
| 1123 | \\ mov x1, %[len] | 1123 | \\ mov x1, %[len] |
| 1124 | \\ svc 0 | 1124 | \\ svc 0 |
| 1125 | \\ mov x8, #93 | 1125 | \\ mov x8, #93 // SYS_exit |
| 1126 | \\ mov x0, #0 | 1126 | \\ mov x0, #0 |
| 1127 | \\ svc 0 | 1127 | \\ svc 0 |
| 1128 | : | 1128 | : |
| ... | @@ -1132,11 +1132,11 @@ const LinuxThreadImpl = struct { | ... | @@ -1132,11 +1132,11 @@ const LinuxThreadImpl = struct { |
| 1132 | ), | 1132 | ), |
| 1133 | .mips, .mipsel => asm volatile ( | 1133 | .mips, .mipsel => asm volatile ( |
| 1134 | \\ move $sp, $25 | 1134 | \\ move $sp, $25 |
| 1135 | \\ li $2, 4091 | 1135 | \\ li $2, 4091 # SYS_munmap |
| 1136 | \\ move $4, %[ptr] | 1136 | \\ move $4, %[ptr] |
| 1137 | \\ move $5, %[len] | 1137 | \\ move $5, %[len] |
| 1138 | \\ syscall | 1138 | \\ syscall |
| 1139 | \\ li $2, 4001 | 1139 | \\ li $2, 4001 # SYS_exit |
| 1140 | \\ li $4, 0 | 1140 | \\ li $4, 0 |
| 1141 | \\ syscall | 1141 | \\ syscall |
| 1142 | : | 1142 | : |
| ... | @@ -1145,11 +1145,11 @@ const LinuxThreadImpl = struct { | ... | @@ -1145,11 +1145,11 @@ const LinuxThreadImpl = struct { |
| 1145 | : "memory" | 1145 | : "memory" |
| 1146 | ), | 1146 | ), |
| 1147 | .mips64, .mips64el => asm volatile ( | 1147 | .mips64, .mips64el => asm volatile ( |
| 1148 | \\ li $2, 4091 | 1148 | \\ li $2, 4091 # SYS_munmap |
| 1149 | \\ move $4, %[ptr] | 1149 | \\ move $4, %[ptr] |
| 1150 | \\ move $5, %[len] | 1150 | \\ move $5, %[len] |
| 1151 | \\ syscall | 1151 | \\ syscall |
| 1152 | \\ li $2, 4001 | 1152 | \\ li $2, 4001 # SYS_exit |
| 1153 | \\ li $4, 0 | 1153 | \\ li $4, 0 |
| 1154 | \\ syscall | 1154 | \\ syscall |
| 1155 | : | 1155 | : |
| ... | @@ -1158,11 +1158,11 @@ const LinuxThreadImpl = struct { | ... | @@ -1158,11 +1158,11 @@ const LinuxThreadImpl = struct { |
| 1158 | : "memory" | 1158 | : "memory" |
| 1159 | ), | 1159 | ), |
| 1160 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => asm volatile ( | 1160 | .powerpc, .powerpcle, .powerpc64, .powerpc64le => asm volatile ( |
| 1161 | \\ li 0, 91 | 1161 | \\ li 0, 91 # SYS_munmap |
| 1162 | \\ mr %[ptr], 3 | 1162 | \\ mr %[ptr], 3 |
| 1163 | \\ mr %[len], 4 | 1163 | \\ mr %[len], 4 |
| 1164 | \\ sc | 1164 | \\ sc |
| 1165 | \\ li 0, 1 | 1165 | \\ li 0, 1 # SYS_exit |
| 1166 | \\ li 3, 0 | 1166 | \\ li 3, 0 |
| 1167 | \\ sc | 1167 | \\ sc |
| 1168 | \\ blr | 1168 | \\ blr |
| ... | @@ -1172,11 +1172,11 @@ const LinuxThreadImpl = struct { | ... | @@ -1172,11 +1172,11 @@ const LinuxThreadImpl = struct { |
| 1172 | : "memory" | 1172 | : "memory" |
| 1173 | ), | 1173 | ), |
| 1174 | .riscv32 => asm volatile ( | 1174 | .riscv32 => asm volatile ( |
| 1175 | \\ li a7, 215 | 1175 | \\ li a7, 215 # SYS_munmap |
| 1176 | \\ mv a0, %[ptr] | 1176 | \\ mv a0, %[ptr] |
| 1177 | \\ mv a1, %[len] | 1177 | \\ mv a1, %[len] |
| 1178 | \\ ecall | 1178 | \\ ecall |
| 1179 | \\ li a7, 93 | 1179 | \\ li a7, 93 # SYS_exit |
| 1180 | \\ mv a0, zero | 1180 | \\ mv a0, zero |
| 1181 | \\ ecall | 1181 | \\ ecall |
| 1182 | : | 1182 | : |
| ... | @@ -1185,11 +1185,11 @@ const LinuxThreadImpl = struct { | ... | @@ -1185,11 +1185,11 @@ const LinuxThreadImpl = struct { |
| 1185 | : "memory" | 1185 | : "memory" |
| 1186 | ), | 1186 | ), |
| 1187 | .riscv64 => asm volatile ( | 1187 | .riscv64 => asm volatile ( |
| 1188 | \\ li a7, 215 | 1188 | \\ li a7, 215 # SYS_munmap |
| 1189 | \\ mv a0, %[ptr] | 1189 | \\ mv a0, %[ptr] |
| 1190 | \\ mv a1, %[len] | 1190 | \\ mv a1, %[len] |
| 1191 | \\ ecall | 1191 | \\ ecall |
| 1192 | \\ li a7, 93 | 1192 | \\ li a7, 93 # SYS_exit |
| 1193 | \\ mv a0, zero | 1193 | \\ mv a0, zero |
| 1194 | \\ ecall | 1194 | \\ ecall |
| 1195 | : | 1195 | : |
| ... | @@ -1209,14 +1209,14 @@ const LinuxThreadImpl = struct { | ... | @@ -1209,14 +1209,14 @@ const LinuxThreadImpl = struct { |
| 1209 | \\ ba 1b | 1209 | \\ ba 1b |
| 1210 | \\ restore | 1210 | \\ restore |
| 1211 | \\ 2: | 1211 | \\ 2: |
| 1212 | \\ mov 73, %%g1 | 1212 | \\ mov 73, %%g1 # SYS_munmap |
| 1213 | \\ mov %[ptr], %%o0 | 1213 | \\ mov %[ptr], %%o0 |
| 1214 | \\ mov %[len], %%o1 | 1214 | \\ mov %[len], %%o1 |
| 1215 | \\ # Flush register window contents to prevent background | 1215 | \\ # Flush register window contents to prevent background |
| 1216 | \\ # memory access before unmapping the stack. | 1216 | \\ # memory access before unmapping the stack. |
| 1217 | \\ flushw | 1217 | \\ flushw |
| 1218 | \\ t 0x6d | 1218 | \\ t 0x6d |
| 1219 | \\ mov 1, %%g1 | 1219 | \\ mov 1, %%g1 # SYS_exit |
| 1220 | \\ mov 1, %%o0 | 1220 | \\ mov 1, %%o0 |
| 1221 | \\ t 0x6d | 1221 | \\ t 0x6d |
| 1222 | : | 1222 | : |