tsan: intercept abort() to fflush() libc streams
authorDmitry Vyukov <dvyukov@google.com>
Thu, 21 Mar 2013 12:50:43 +0000 (12:50 +0000)
committerDmitry Vyukov <dvyukov@google.com>
Thu, 21 Mar 2013 12:50:43 +0000 (12:50 +0000)
llvm-svn: 177637

compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
compiler-rt/lib/tsan/rtl/tsan_stat.cc
compiler-rt/lib/tsan/rtl/tsan_stat.h

index 5dc4497..01848a4 100644 (file)
@@ -1520,6 +1520,12 @@ TSAN_INTERCEPTOR(int, fflush, void *stream) {
   return REAL(fflush)(stream);
 }
 
+TSAN_INTERCEPTOR(void, abort, int fake) {
+  SCOPED_TSAN_INTERCEPTOR(abort, fake);
+  REAL(fflush)(0);
+  REAL(abort)(fake);
+}
+
 TSAN_INTERCEPTOR(int, puts, const char *s) {
   SCOPED_TSAN_INTERCEPTOR(puts, s);
   MemoryAccessRange(thr, pc, (uptr)s, internal_strlen(s), false);
@@ -1981,6 +1987,7 @@ void InitializeInterceptors() {
   TSAN_INTERCEPT(fread);
   TSAN_INTERCEPT(fwrite);
   TSAN_INTERCEPT(fflush);
+  TSAN_INTERCEPT(abort);
   TSAN_INTERCEPT(puts);
   TSAN_INTERCEPT(rmdir);
   TSAN_INTERCEPT(opendir);
index 723b8f5..9a427e4 100644 (file)
@@ -243,6 +243,7 @@ void StatOutput(u64 *stat) {
   name[StatInt_fread]                    = "  fread                           ";
   name[StatInt_fwrite]                   = "  fwrite                          ";
   name[StatInt_fflush]                   = "  fflush                          ";
+  name[StatInt_abort]                    = "  abort                           ";
   name[StatInt_puts]                     = "  puts                            ";
   name[StatInt_rmdir]                    = "  rmdir                           ";
   name[StatInt_opendir]                  = "  opendir                         ";
index c30e5cc..5105830 100644 (file)
@@ -238,6 +238,7 @@ enum StatType {
   StatInt_fread,
   StatInt_fwrite,
   StatInt_fflush,
+  StatInt_abort,
   StatInt_puts,
   StatInt_rmdir,
   StatInt_opendir,