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() {
 | 
			
		||||
  Decorator d;
 | 
			
		||||
  Printf("%s", d.Warning());
 | 
			
		||||
  const char *description = DescribeSignalOrException(signo);
 | 
			
		||||
  const char *description = __sanitizer::DescribeSignalOrException(signo);
 | 
			
		||||
  Report(
 | 
			
		||||
      "ERROR: AddressSanitizer: %s on unknown address %p (pc %p bp %p sp %p "
 | 
			
		||||
      "T%d)\n",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,9 +65,6 @@ void AsanInitFromRtl();
 | 
			
		|||
// asan_win.cc
 | 
			
		||||
void InitializePlatformExceptionHandlers();
 | 
			
		||||
 | 
			
		||||
// asan_win.cc / asan_posix.cc
 | 
			
		||||
const char *DescribeSignalOrException(int signo);
 | 
			
		||||
 | 
			
		||||
// asan_rtl.cc
 | 
			
		||||
void NORETURN ShowStatsAndAbort();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,19 +33,6 @@
 | 
			
		|||
 | 
			
		||||
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) {
 | 
			
		||||
  ScopedDeadlySignal signal_scope(GetCurrentThread());
 | 
			
		||||
  int code = (int)((siginfo_t*)siginfo)->si_code;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -237,33 +237,6 @@ void InitializePlatformExceptionHandlers() {
 | 
			
		|||
 | 
			
		||||
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
 | 
			
		||||
long __asan_unhandled_exception_filter(EXCEPTION_POINTERS *info) {
 | 
			
		||||
  EXCEPTION_RECORD *exception_record = info->ExceptionRecord;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -382,6 +382,7 @@ void SetSoftRssLimitExceededCallback(void (*Callback)(bool exceeded));
 | 
			
		|||
typedef void (*SignalHandlerType)(int, void *, void *);
 | 
			
		||||
bool IsHandledDeadlySignal(int signum);
 | 
			
		||||
void InstallDeadlySignalHandlers(SignalHandlerType handler);
 | 
			
		||||
const char *DescribeSignalOrException(int signo);
 | 
			
		||||
// Alternative signal stack (POSIX-only).
 | 
			
		||||
void SetAlternateSignalStack();
 | 
			
		||||
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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
#endif // SANITIZER_POSIX
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -863,6 +863,32 @@ bool IsHandledDeadlyException(DWORD exceptionCode) {
 | 
			
		|||
  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) {
 | 
			
		||||
  SYSTEM_INFO si;
 | 
			
		||||
  GetNativeSystemInfo(&si);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue