[compiler-rt] r193655 - [sanitizer] Intercept drand48_r, lrand48_r.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Tue Oct 29 15:25:28 PDT 2013


Author: eugenis
Date: Tue Oct 29 17:25:27 2013
New Revision: 193655

URL: http://llvm.org/viewvc/llvm-project?rev=193655&view=rev
Log:
[sanitizer] Intercept drand48_r, lrand48_r.

Modified:
    compiler-rt/trunk/lib/msan/tests/msan_test.cc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h
    compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc
    compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h

Modified: compiler-rt/trunk/lib/msan/tests/msan_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/msan_test.cc?rev=193655&r1=193654&r2=193655&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/tests/msan_test.cc (original)
+++ compiler-rt/trunk/lib/msan/tests/msan_test.cc Tue Oct 29 17:25:27 2013
@@ -1587,6 +1587,22 @@ TEST(MemorySanitizer, lgammal_r) {
   EXPECT_NOT_POISONED(sgn);
 }
 
+TEST(MemorySanitizer, drand48_r) {
+  struct drand48_data buf;
+  srand48_r(0, &buf);
+  double d;
+  drand48_r(&buf, &d);
+  EXPECT_NOT_POISONED(d);
+}
+
+TEST(MemorySanitizer, lrand48_r) {
+  struct drand48_data buf;
+  srand48_r(0, &buf);
+  long d;
+  lrand48_r(&buf, &d);
+  EXPECT_NOT_POISONED(d);
+}
+
 TEST(MemorySanitizer, sprintf) {  // NOLINT
   char buff[10];
   break_optimization(buff);

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=193655&r1=193654&r2=193655&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc Tue Oct 29 17:25:27 2013
@@ -2789,6 +2789,27 @@ INTERCEPTOR(long double, lgammal_r, long
 #define INIT_LGAMMA_R
 #endif
 
+#if SANITIZER_INTERCEPT_DRAND48_R
+INTERCEPTOR(int, drand48_r, void *buffer, double *result) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, drand48_r, buffer, result);
+  int res = REAL(drand48_r)(buffer, result);
+  if (result) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, result, sizeof(*result));
+  return res;
+}
+INTERCEPTOR(int, lrand48_r, void *buffer, long *result) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, lrand48_r, buffer, result);
+  int res = REAL(lrand48_r)(buffer, result);
+  if (result) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, result, sizeof(*result));
+  return res;
+}
+#define INIT_DRAND48_R            \
+  INTERCEPT_FUNCTION(drand48_r);  \
+  INTERCEPT_FUNCTION(lrand48_r);
+#else
+#define INIT_DRAND48_R
+#endif
 
 #define SANITIZER_COMMON_INTERCEPTORS_INIT \
   INIT_STRCMP;                             \
@@ -2896,4 +2917,5 @@ INTERCEPTOR(long double, lgammal_r, long
   INIT_REMQUO;                             \
   INIT_LGAMMA;                             \
   INIT_LGAMMA_R;                           \
+  INIT_DRAND48_R;                          \
 /**/

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h?rev=193655&r1=193654&r2=193655&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h Tue Oct 29 17:25:27 2013
@@ -148,6 +148,7 @@
 # define SANITIZER_INTERCEPT_REMQUO SI_NOT_WINDOWS
 # define SANITIZER_INTERCEPT_LGAMMA SI_NOT_WINDOWS
 # define SANITIZER_INTERCEPT_LGAMMA_R SI_LINUX
+# define SANITIZER_INTERCEPT_DRAND48_R SI_LINUX_NOT_ANDROID
 
 # define SANITIZER_INTERCEPT__EXIT SI_LINUX
 

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc?rev=193655&r1=193654&r2=193655&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc Tue Oct 29 17:25:27 2013
@@ -410,6 +410,8 @@ void StatOutput(u64 *stat) {
   name[StatInt_lgamma_r]                 = "  lgamma_r                        ";
   name[StatInt_lgammaf_r]                = "  lgammaf_r                       ";
   name[StatInt_lgammal_r]                = "  lgammal_r                       ";
+  name[StatInt_drand48_r]                = "  drand48_r                       ";
+  name[StatInt_lrand48_r]                = "  lrand48_r                       ";
 
   name[StatInt_pthread_attr_getdetachstate]  = "  pthread_addr_getdetachstate     ";  // NOLINT
   name[StatInt_pthread_attr_getguardsize]    = "  pthread_addr_getguardsize       ";  // NOLINT

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h?rev=193655&r1=193654&r2=193655&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h Tue Oct 29 17:25:27 2013
@@ -405,6 +405,8 @@ enum StatType {
   StatInt_lgamma_r,
   StatInt_lgammaf_r,
   StatInt_lgammal_r,
+  StatInt_drand48_r,
+  StatInt_lrand48_r,
 
   StatInt_pthread_attr_getdetachstate,
   StatInt_pthread_attr_getguardsize,





More information about the llvm-commits mailing list