| ... | @@ -2404,6 +2404,7 @@ pub fn attachSegfaultHandler() void { | ... | @@ -2404,6 +2404,7 @@ pub fn attachSegfaultHandler() void { |
| 2404 | }; | 2404 | }; |
| 2405 | | 2405 | |
| 2406 | os.sigaction(os.SIGSEGV, &act, null); | 2406 | os.sigaction(os.SIGSEGV, &act, null); |
| | 2407 | os.sigaction(os.SIGILL, &act, null); |
| 2407 | } | 2408 | } |
| 2408 | | 2409 | |
| 2409 | fn resetSegfaultHandler() void { | 2410 | fn resetSegfaultHandler() void { |
| ... | @@ -2420,6 +2421,7 @@ fn resetSegfaultHandler() void { | ... | @@ -2420,6 +2421,7 @@ fn resetSegfaultHandler() void { |
| 2420 | .flags = 0, | 2421 | .flags = 0, |
| 2421 | }; | 2422 | }; |
| 2422 | os.sigaction(os.SIGSEGV, &act, null); | 2423 | os.sigaction(os.SIGSEGV, &act, null); |
| | 2424 | os.sigaction(os.SIGILL, &act, null); |
| 2423 | } | 2425 | } |
| 2424 | | 2426 | |
| 2425 | extern fn handleSegfaultLinux(sig: i32, info: *const os.siginfo_t, ctx_ptr: *const c_void) noreturn { | 2427 | extern fn handleSegfaultLinux(sig: i32, info: *const os.siginfo_t, ctx_ptr: *const c_void) noreturn { |
| ... | @@ -2429,8 +2431,11 @@ extern fn handleSegfaultLinux(sig: i32, info: *const os.siginfo_t, ctx_ptr: *con | ... | @@ -2429,8 +2431,11 @@ extern fn handleSegfaultLinux(sig: i32, info: *const os.siginfo_t, ctx_ptr: *con |
| 2429 | resetSegfaultHandler(); | 2431 | resetSegfaultHandler(); |
| 2430 | | 2432 | |
| 2431 | const addr = @ptrToInt(info.fields.sigfault.addr); | 2433 | const addr = @ptrToInt(info.fields.sigfault.addr); |
| 2432 | std.debug.warn("Segmentation fault at address 0x{x}\n", .{addr}); | 2434 | switch (sig) { |
| 2433 | | 2435 | os.SIGSEGV => std.debug.warn("Segmentation fault at address 0x{x}\n", .{addr}), |
| | 2436 | os.SIGILL => std.debug.warn("Illegal instruction at address 0x{x}\n", .{addr}), |
| | 2437 | else => unreachable, |
| | 2438 | } |
| 2434 | switch (builtin.arch) { | 2439 | switch (builtin.arch) { |
| 2435 | .i386 => { | 2440 | .i386 => { |
| 2436 | const ctx = @ptrCast(*const os.ucontext_t, @alignCast(@alignOf(os.ucontext_t), ctx_ptr)); | 2441 | const ctx = @ptrCast(*const os.ucontext_t, @alignCast(@alignOf(os.ucontext_t), ctx_ptr)); |