Index: lib/sanitizer_common/sanitizer_mac.cc =================================================================== --- lib/sanitizer_common/sanitizer_mac.cc +++ lib/sanitizer_common/sanitizer_mac.cc @@ -500,7 +500,8 @@ } SignalContext::WriteFlag SignalContext::GetWriteFlag(void *context) { - return UNKNOWN; // FIXME: implement this. + ucontext_t *ucontext = static_cast(context); + return ucontext->uc_mcontext->__es.__err & 2 /*T_PF_WRITE*/ ? WRITE : READ; } void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) { Index: test/asan/TestCases/Posix/segv_read_write.c =================================================================== --- test/asan/TestCases/Posix/segv_read_write.c +++ test/asan/TestCases/Posix/segv_read_write.c @@ -20,7 +20,7 @@ else Write((int *)p); } -// READ: AddressSanitizer: SEGV on unknown address +// READ: AddressSanitizer: SEGV on unknown address11 // READ: The signal is caused by a READ memory access. // WRITE: AddressSanitizer: SEGV on unknown address // WRITE: The signal is caused by a WRITE memory access.