[asan] Properly handle exceptions.
Differential Revision: https://reviews.llvm.org/D29457 llvm-svn: 293954
This commit is contained in:
parent
b88e87d4b2
commit
387210c6c8
|
@ -240,12 +240,25 @@ static LPTOP_LEVEL_EXCEPTION_FILTER default_seh_handler;
|
|||
static bool ShouldReportDeadlyException(unsigned code) {
|
||||
switch (code) {
|
||||
case EXCEPTION_ACCESS_VIOLATION:
|
||||
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
|
||||
case EXCEPTION_STACK_OVERFLOW:
|
||||
case EXCEPTION_DATATYPE_MISALIGNMENT:
|
||||
case EXCEPTION_IN_PAGE_ERROR:
|
||||
return common_flags()->handle_segv;
|
||||
case EXCEPTION_ILLEGAL_INSTRUCTION:
|
||||
case EXCEPTION_PRIV_INSTRUCTION:
|
||||
case EXCEPTION_BREAKPOINT:
|
||||
case EXCEPTION_ILLEGAL_INSTRUCTION: {
|
||||
return common_flags()->handle_sigill;
|
||||
}
|
||||
case EXCEPTION_FLT_DENORMAL_OPERAND:
|
||||
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
|
||||
case EXCEPTION_FLT_INEXACT_RESULT:
|
||||
case EXCEPTION_FLT_INVALID_OPERATION:
|
||||
case EXCEPTION_FLT_OVERFLOW:
|
||||
case EXCEPTION_FLT_STACK_CHECK:
|
||||
case EXCEPTION_FLT_UNDERFLOW:
|
||||
case EXCEPTION_INT_DIVIDE_BY_ZERO:
|
||||
case EXCEPTION_INT_OVERFLOW:
|
||||
return common_flags()->handle_sigfpe;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -256,14 +269,23 @@ const char *DescribeSignalOrException(int 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_IN_PAGE_ERROR:
|
||||
return "in-page-error";
|
||||
case EXCEPTION_BREAKPOINT:
|
||||
return "breakpoint";
|
||||
case EXCEPTION_ILLEGAL_INSTRUCTION:
|
||||
return "illegal-instruction";
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue