[standalone] Symbolize si_code in crash dumps.

TEST=remove PROT_EXEC, see ACCERR
Change-Id: I99bb5b2aba4f40dd8b6e074ed652f8cbbd69cdd6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/336280
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
Ryan Macnak
2023-11-17 19:02:33 +00:00
committed by Commit Queue
parent 8598086c7f
commit ef89de9dc1
3 changed files with 82 additions and 6 deletions
+28 -2
View File
@@ -26,11 +26,37 @@ const char* Platform::executable_name_ = nullptr;
int Platform::script_index_ = 1;
char** Platform::argv_ = nullptr;
static const char* strcode(int si_signo, int si_code) {
#define CASE(signo, code) \
if (si_signo == signo && si_code == code) return #code;
CASE(SIGILL, ILL_ILLOPC);
CASE(SIGILL, ILL_ILLOPN);
CASE(SIGILL, ILL_ILLADR);
CASE(SIGILL, ILL_ILLTRP);
CASE(SIGILL, ILL_PRVOPC);
CASE(SIGILL, ILL_PRVREG);
CASE(SIGILL, ILL_COPROC);
CASE(SIGILL, ILL_BADSTK);
CASE(SIGSEGV, SEGV_MAPERR);
CASE(SIGSEGV, SEGV_ACCERR);
CASE(SIGBUS, BUS_ADRALN);
CASE(SIGBUS, BUS_ADRERR);
CASE(SIGBUS, BUS_OBJERR);
CASE(SIGBUS, BUS_MCEERR_AR);
CASE(SIGBUS, BUS_MCEERR_AO);
CASE(SIGTRAP, TRAP_BRKPT);
CASE(SIGTRAP, TRAP_TRACE);
#undef CASE
return "?";
}
static void segv_handler(int signal, siginfo_t* siginfo, void* context) {
Syslog::PrintErr(
"\n===== CRASH =====\n"
"si_signo=%s(%d), si_code=%d, si_addr=%p\n",
strsignal(siginfo->si_signo), siginfo->si_signo, siginfo->si_code,
"si_signo=%s(%d), si_code=%s(%d), si_addr=%p\n",
strsignal(siginfo->si_signo), siginfo->si_signo,
strcode(siginfo->si_signo, siginfo->si_code), siginfo->si_code,
siginfo->si_addr);
Dart_DumpNativeStackTrace(context);
Dart_PrepareToAbort();
+28 -2
View File
@@ -25,11 +25,37 @@ const char* Platform::executable_name_ = nullptr;
int Platform::script_index_ = 1;
char** Platform::argv_ = nullptr;
static const char* strcode(int si_signo, int si_code) {
#define CASE(signo, code) \
if (si_signo == signo && si_code == code) return #code;
CASE(SIGILL, ILL_ILLOPC);
CASE(SIGILL, ILL_ILLOPN);
CASE(SIGILL, ILL_ILLADR);
CASE(SIGILL, ILL_ILLTRP);
CASE(SIGILL, ILL_PRVOPC);
CASE(SIGILL, ILL_PRVREG);
CASE(SIGILL, ILL_COPROC);
CASE(SIGILL, ILL_BADSTK);
CASE(SIGSEGV, SEGV_MAPERR);
CASE(SIGSEGV, SEGV_ACCERR);
CASE(SIGBUS, BUS_ADRALN);
CASE(SIGBUS, BUS_ADRERR);
CASE(SIGBUS, BUS_OBJERR);
CASE(SIGBUS, BUS_MCEERR_AR);
CASE(SIGBUS, BUS_MCEERR_AO);
CASE(SIGTRAP, TRAP_BRKPT);
CASE(SIGTRAP, TRAP_TRACE);
#undef CASE
return "?";
}
static void segv_handler(int signal, siginfo_t* siginfo, void* context) {
Syslog::PrintErr(
"\n===== CRASH =====\n"
"si_signo=%s(%d), si_code=%d, si_addr=%p\n",
strsignal(siginfo->si_signo), siginfo->si_signo, siginfo->si_code,
"si_signo=%s(%d), si_code=%s(%d), si_addr=%p\n",
strsignal(siginfo->si_signo), siginfo->si_signo,
strcode(siginfo->si_signo, siginfo->si_code), siginfo->si_code,
siginfo->si_addr);
Dart_DumpNativeStackTrace(context);
Dart_PrepareToAbort();
+26 -2
View File
@@ -37,11 +37,35 @@ const char* Platform::executable_name_ = nullptr;
int Platform::script_index_ = 1;
char** Platform::argv_ = nullptr;
static const char* strcode(int si_signo, int si_code) {
#define CASE(signo, code) \
if (si_signo == signo && si_code == code) return #code;
CASE(SIGILL, ILL_ILLOPC);
CASE(SIGILL, ILL_ILLOPN);
CASE(SIGILL, ILL_ILLADR);
CASE(SIGILL, ILL_ILLTRP);
CASE(SIGILL, ILL_PRVOPC);
CASE(SIGILL, ILL_PRVREG);
CASE(SIGILL, ILL_COPROC);
CASE(SIGILL, ILL_BADSTK);
CASE(SIGSEGV, SEGV_MAPERR);
CASE(SIGSEGV, SEGV_ACCERR);
CASE(SIGBUS, BUS_ADRALN);
CASE(SIGBUS, BUS_ADRERR);
CASE(SIGBUS, BUS_OBJERR);
CASE(SIGTRAP, TRAP_BRKPT);
CASE(SIGTRAP, TRAP_TRACE);
#undef CASE
return "?";
}
static void segv_handler(int signal, siginfo_t* siginfo, void* context) {
Syslog::PrintErr(
"\n===== CRASH =====\n"
"si_signo=%s(%d), si_code=%d, si_addr=%p\n",
strsignal(siginfo->si_signo), siginfo->si_signo, siginfo->si_code,
"si_signo=%s(%d), si_code=%s(%d), si_addr=%p\n",
strsignal(siginfo->si_signo), siginfo->si_signo,
strcode(siginfo->si_signo, siginfo->si_code), siginfo->si_code,
siginfo->si_addr);
Dart_DumpNativeStackTrace(context);
Dart_PrepareToAbort();