[compiler-rt] 9145cb8 - [Sanitizers][Darwin] Add READ/WRITE detection on arm64 for darwin.

Blue Gaston via llvm-commits llvm-commits at lists.llvm.org
Thu May 12 10:53:26 PDT 2022


Author: Blue Gaston
Date: 2022-05-12T10:51:49-07:00
New Revision: 9145cb8b7c9acd6e7980047e048007bc58b7fab9

URL: https://github.com/llvm/llvm-project/commit/9145cb8b7c9acd6e7980047e048007bc58b7fab9
DIFF: https://github.com/llvm/llvm-project/commit/9145cb8b7c9acd6e7980047e048007bc58b7fab9.diff

LOG: [Sanitizers][Darwin] Add READ/WRITE detection on arm64 for darwin.

	On arm64 the read/write flag is set on the esr register.
	Adding this flag check for arm64 enables a more accurate
	print out for sanitizer signal reports and matches the
	behavior on x86.

	Fixes bug: https://bugs.llvm.org/show_bug.cgi?id=27543 https://github.com/google/sanitizers/issues/653

	These tests are now passing:
		SanitizerCommon-asan-arm64-Darwin :: Posix/illegal_read_test.cpp
		SanitizerCommon-asan-arm64-Darwin :: Posix/illegal_write_test.cpp
		SanitizerCommon-asan-arm64e-Darwin :: Posix/illegal_read_test.cpp
  		SanitizerCommon-asan-arm64e-Darwin :: Posix/illegal_write_test.cpp
  		SanitizerCommon-tsan-arm64-Darwin :: Posix/illegal_read_test.cpp
  		SanitizerCommon-tsan-arm64-Darwin :: Posix/illegal_write_test.cpp
  		SanitizerCommon-tsan-arm64e-Darwin :: Posix/illegal_read_test.cpp
  		SanitizerCommon-tsan-arm64e-Darwin :: Posix/illegal_write_test.cpp
  		SanitizerCommon-ubsan-arm64-Darwin :: Posix/illegal_read_test.cpp
  		SanitizerCommon-ubsan-arm64-Darwin :: Posix/illegal_write_test.cpp
  		SanitizerCommon-ubsan-arm64e-Darwin :: Posix/illegal_read_test.cpp
  		SanitizerCommon-ubsan-arm64e-Darwin :: Posix/illegal_write_test.cpp

rdar://92104440

Differential Revision: https://reviews.llvm.org/D125416

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
index 05512a576ad13..bc3903d6f6207 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
@@ -880,6 +880,9 @@ SignalContext::WriteFlag SignalContext::GetWriteFlag() const {
 #if defined(__x86_64__) || defined(__i386__)
   ucontext_t *ucontext = static_cast<ucontext_t*>(context);
   return ucontext->uc_mcontext->__es.__err & 2 /*T_PF_WRITE*/ ? Write : Read;
+#elif defined(__arm64__)
+  ucontext_t *ucontext = static_cast<ucontext_t*>(context);
+  return ucontext->uc_mcontext->__es.__esr & 0x40 /*ISS_DA_WNR*/ ? Write : Read;
 #else
   return Unknown;
 #endif


        


More information about the llvm-commits mailing list