| ... | ... | @@ -190,7 +190,15 @@ pub inline fn getContext(context: *ThreadContext) bool { |
| 190 | 190 | } |
| 191 | 191 | |
| 192 | 192 | const result = have_getcontext and os.system.getcontext(context) == 0; |
| 193 | | if (native_os == .macos) assert(context.mcsize == @sizeOf(std.c.mcontext_t)); |
| 193 | if (native_os == .macos) { |
| 194 | assert(context.mcsize == @sizeOf(std.c.mcontext_t)); |
| 195 | |
| 196 | // On aarch64-macos, the system getcontext doesn't write anything into the pc |
| 197 | // register slot, it only writes lr. This makes the context consistent with |
| 198 | // other aarch64 getcontext implementations which write the current lr |
| 199 | // (where getcontext will return to) into both the lr and pc slot of the context. |
| 200 | if (native_arch == .aarch64) context.mcontext.ss.pc = context.mcontext.ss.lr; |
| 201 | } |
| 194 | 202 | |
| 195 | 203 | return result; |
| 196 | 204 | } |