forked from OSchip/llvm-project
[sanitizer] Move DescribeSignalOrException to sanitizer_common.
Differential Revision: https://reviews.llvm.org/D29459 llvm-svn: 293956
This commit is contained in:
parent
ee22156b78
commit
fe9288a6a0
|
|
@ -61,7 +61,7 @@ static void MaybeDumpRegisters(void *context) {
|
||||||
void ErrorDeadlySignal::Print() {
|
void ErrorDeadlySignal::Print() {
|
||||||
Decorator d;
|
Decorator d;
|
||||||
Printf("%s", d.Warning());
|
Printf("%s", d.Warning());
|
||||||
const char *description = DescribeSignalOrException(signo);
|
const char *description = __sanitizer::DescribeSignalOrException(signo);
|
||||||
Report(
|
Report(
|
||||||
"ERROR: AddressSanitizer: %s on unknown address %p (pc %p bp %p sp %p "
|
"ERROR: AddressSanitizer: %s on unknown address %p (pc %p bp %p sp %p "
|
||||||
"T%d)\n",
|
"T%d)\n",
|
||||||
|
|
|
||||||
|
|
@ -65,9 +65,6 @@ void AsanInitFromRtl();
|
||||||
// asan_win.cc
|
// asan_win.cc
|
||||||
void InitializePlatformExceptionHandlers();
|
void InitializePlatformExceptionHandlers();
|
||||||
|
|
||||||
// asan_win.cc / asan_posix.cc
|
|
||||||
const char *DescribeSignalOrException(int signo);
|
|
||||||
|
|
||||||
// asan_rtl.cc
|
// asan_rtl.cc
|
||||||
void NORETURN ShowStatsAndAbort();
|
void NORETURN ShowStatsAndAbort();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,19 +33,6 @@
|
||||||
|
|
||||||
namespace __asan {
|
namespace __asan {
|
||||||
|
|
||||||
const char *DescribeSignalOrException(int signo) {
|
|
||||||
switch (signo) {
|
|
||||||
case SIGFPE:
|
|
||||||
return "FPE";
|
|
||||||
case SIGILL:
|
|
||||||
return "ILL";
|
|
||||||
case SIGABRT:
|
|
||||||
return "ABRT";
|
|
||||||
default:
|
|
||||||
return "SEGV";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void AsanOnDeadlySignal(int signo, void *siginfo, void *context) {
|
void AsanOnDeadlySignal(int signo, void *siginfo, void *context) {
|
||||||
ScopedDeadlySignal signal_scope(GetCurrentThread());
|
ScopedDeadlySignal signal_scope(GetCurrentThread());
|
||||||
int code = (int)((siginfo_t*)siginfo)->si_code;
|
int code = (int)((siginfo_t*)siginfo)->si_code;
|
||||||
|
|
|
||||||
|
|
@ -237,33 +237,6 @@ void InitializePlatformExceptionHandlers() {
|
||||||
|
|
||||||
static LPTOP_LEVEL_EXCEPTION_FILTER default_seh_handler;
|
static LPTOP_LEVEL_EXCEPTION_FILTER default_seh_handler;
|
||||||
|
|
||||||
// Return the textual name for this exception.
|
|
||||||
const char *DescribeSignalOrException(int signo) {
|
|
||||||
unsigned code = signo;
|
|
||||||
// Get the string description of the exception if this is a known deadly
|
|
||||||
// exception.
|
|
||||||
switch (code) {
|
|
||||||
case EXCEPTION_ACCESS_VIOLATION: return "access-violation";
|
|
||||||
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: return "array-bounds-exceeded";
|
|
||||||
case EXCEPTION_STACK_OVERFLOW: return "stack-overflow";
|
|
||||||
case EXCEPTION_DATATYPE_MISALIGNMENT: return "datatype-misalignment";
|
|
||||||
case EXCEPTION_IN_PAGE_ERROR: return "in-page-error";
|
|
||||||
case EXCEPTION_ILLEGAL_INSTRUCTION: return "illegal-instruction";
|
|
||||||
case EXCEPTION_PRIV_INSTRUCTION: return "priv-instruction";
|
|
||||||
case EXCEPTION_BREAKPOINT: return "breakpoint";
|
|
||||||
case EXCEPTION_FLT_DENORMAL_OPERAND: return "flt-denormal-operand";
|
|
||||||
case EXCEPTION_FLT_DIVIDE_BY_ZERO: return "flt-divide-by-zero";
|
|
||||||
case EXCEPTION_FLT_INEXACT_RESULT: return "flt-inexact-result";
|
|
||||||
case EXCEPTION_FLT_INVALID_OPERATION: return "flt-invalid-operation";
|
|
||||||
case EXCEPTION_FLT_OVERFLOW: return "flt-overflow";
|
|
||||||
case EXCEPTION_FLT_STACK_CHECK: return "flt-stack-check";
|
|
||||||
case EXCEPTION_FLT_UNDERFLOW: return "flt-underflow";
|
|
||||||
case EXCEPTION_INT_DIVIDE_BY_ZERO: return "int-divide-by-zero";
|
|
||||||
case EXCEPTION_INT_OVERFLOW: return "int-overflow";
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" SANITIZER_INTERFACE_ATTRIBUTE
|
extern "C" SANITIZER_INTERFACE_ATTRIBUTE
|
||||||
long __asan_unhandled_exception_filter(EXCEPTION_POINTERS *info) {
|
long __asan_unhandled_exception_filter(EXCEPTION_POINTERS *info) {
|
||||||
EXCEPTION_RECORD *exception_record = info->ExceptionRecord;
|
EXCEPTION_RECORD *exception_record = info->ExceptionRecord;
|
||||||
|
|
|
||||||
|
|
@ -382,6 +382,7 @@ void SetSoftRssLimitExceededCallback(void (*Callback)(bool exceeded));
|
||||||
typedef void (*SignalHandlerType)(int, void *, void *);
|
typedef void (*SignalHandlerType)(int, void *, void *);
|
||||||
bool IsHandledDeadlySignal(int signum);
|
bool IsHandledDeadlySignal(int signum);
|
||||||
void InstallDeadlySignalHandlers(SignalHandlerType handler);
|
void InstallDeadlySignalHandlers(SignalHandlerType handler);
|
||||||
|
const char *DescribeSignalOrException(int signo);
|
||||||
// Alternative signal stack (POSIX-only).
|
// Alternative signal stack (POSIX-only).
|
||||||
void SetAlternateSignalStack();
|
void SetAlternateSignalStack();
|
||||||
void UnsetAlternateSignalStack();
|
void UnsetAlternateSignalStack();
|
||||||
|
|
|
||||||
|
|
@ -358,6 +358,20 @@ SignalContext SignalContext::Create(void *siginfo, void *context) {
|
||||||
return SignalContext(context, addr, pc, sp, bp, is_memory_access, write_flag);
|
return SignalContext(context, addr, pc, sp, bp, is_memory_access, write_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *DescribeSignalOrException(int signo) {
|
||||||
|
switch (signo) {
|
||||||
|
case SIGFPE:
|
||||||
|
return "FPE";
|
||||||
|
case SIGILL:
|
||||||
|
return "ILL";
|
||||||
|
case SIGABRT:
|
||||||
|
return "ABRT";
|
||||||
|
default:
|
||||||
|
return "SEGV";
|
||||||
|
}
|
||||||
|
return "UNKNOWN SIGNAL";
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace __sanitizer
|
} // namespace __sanitizer
|
||||||
|
|
||||||
#endif // SANITIZER_POSIX
|
#endif // SANITIZER_POSIX
|
||||||
|
|
|
||||||
|
|
@ -863,6 +863,32 @@ bool IsHandledDeadlyException(DWORD exceptionCode) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *DescribeSignalOrException(int signo) {
|
||||||
|
unsigned code = signo;
|
||||||
|
// Get the string description of the exception if this is a known deadly
|
||||||
|
// exception.
|
||||||
|
switch (code) {
|
||||||
|
case EXCEPTION_ACCESS_VIOLATION: return "access-violation";
|
||||||
|
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: return "array-bounds-exceeded";
|
||||||
|
case EXCEPTION_STACK_OVERFLOW: return "stack-overflow";
|
||||||
|
case EXCEPTION_DATATYPE_MISALIGNMENT: return "datatype-misalignment";
|
||||||
|
case EXCEPTION_IN_PAGE_ERROR: return "in-page-error";
|
||||||
|
case EXCEPTION_ILLEGAL_INSTRUCTION: return "illegal-instruction";
|
||||||
|
case EXCEPTION_PRIV_INSTRUCTION: return "priv-instruction";
|
||||||
|
case EXCEPTION_BREAKPOINT: return "breakpoint";
|
||||||
|
case EXCEPTION_FLT_DENORMAL_OPERAND: return "flt-denormal-operand";
|
||||||
|
case EXCEPTION_FLT_DIVIDE_BY_ZERO: return "flt-divide-by-zero";
|
||||||
|
case EXCEPTION_FLT_INEXACT_RESULT: return "flt-inexact-result";
|
||||||
|
case EXCEPTION_FLT_INVALID_OPERATION: return "flt-invalid-operation";
|
||||||
|
case EXCEPTION_FLT_OVERFLOW: return "flt-overflow";
|
||||||
|
case EXCEPTION_FLT_STACK_CHECK: return "flt-stack-check";
|
||||||
|
case EXCEPTION_FLT_UNDERFLOW: return "flt-underflow";
|
||||||
|
case EXCEPTION_INT_DIVIDE_BY_ZERO: return "int-divide-by-zero";
|
||||||
|
case EXCEPTION_INT_OVERFLOW: return "int-overflow";
|
||||||
|
}
|
||||||
|
return "unknown exception";
|
||||||
|
}
|
||||||
|
|
||||||
bool IsAccessibleMemoryRange(uptr beg, uptr size) {
|
bool IsAccessibleMemoryRange(uptr beg, uptr size) {
|
||||||
SYSTEM_INFO si;
|
SYSTEM_INFO si;
|
||||||
GetNativeSystemInfo(&si);
|
GetNativeSystemInfo(&si);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue