| Index: runtime/bin/platform_macos.cc
|
| diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
|
| index 35e910706ac3da97eeee42b54ecdc7173cd0fd32..01c7cbb65ced9bdebb699767629222393e358193 100644
|
| --- a/runtime/bin/platform_macos.cc
|
| +++ b/runtime/bin/platform_macos.cc
|
| @@ -28,6 +28,12 @@ char* Platform::resolved_executable_name_ = NULL;
|
| int Platform::script_index_ = 1;
|
| char** Platform::argv_ = NULL;
|
|
|
| +
|
| +static void segv_handler(int signal, siginfo_t* siginfo, void* context) {
|
| + Dart_DumpNativeStackTrace(context);
|
| + abort();
|
| +}
|
| +
|
| bool Platform::Initialize() {
|
| // Turn off the signal handler for SIGPIPE as it causes the process
|
| // to terminate on writing to a closed pipe. Without the signal
|
| @@ -39,6 +45,20 @@ bool Platform::Initialize() {
|
| perror("Setting signal handler failed");
|
| return false;
|
| }
|
| + act.sa_flags = SA_SIGINFO;
|
| + act.sa_sigaction = &segv_handler;
|
| + if (sigemptyset(&act.sa_mask) != 0) {
|
| + perror("sigemptyset() failed.");
|
| + return false;
|
| + }
|
| + if (sigaddset(&act.sa_mask, SIGPROF) != 0) {
|
| + perror("sigaddset() failed");
|
| + return false;
|
| + }
|
| + if (sigaction(SIGSEGV, &act, NULL) != 0) {
|
| + perror("sigaction() failed.");
|
| + return false;
|
| + }
|
| return true;
|
| }
|
|
|
|
|