Allow initialization of Asan interceptors before the general Asan initialization...
authorViktor Kutuzov <vkutuzov@accesssoftek.com>
Fri, 25 Jul 2014 12:45:36 +0000 (12:45 +0000)
committerViktor Kutuzov <vkutuzov@accesssoftek.com>
Fri, 25 Jul 2014 12:45:36 +0000 (12:45 +0000)
Differential Revision: http://reviews.llvm.org/D4496

llvm-svn: 213941

compiler-rt/lib/asan/asan_interceptors.cc
compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc

index 23320dc..dd61d6b 100644 (file)
@@ -148,6 +148,7 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *)
 #define COMMON_INTERCEPTOR_ON_EXIT(ctx) OnExit()
 #define COMMON_INTERCEPTOR_LIBRARY_LOADED(filename, res) CovUpdateMapping()
 #define COMMON_INTERCEPTOR_LIBRARY_UNLOADED() CovUpdateMapping()
+#define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (!asan_inited)
 #include "sanitizer_common/sanitizer_common_interceptors.inc"
 
 #define COMMON_SYSCALL_PRE_READ_RANGE(p, s) ASAN_READ_RANGE(p, s)
index 339434e..07911ff 100644 (file)
@@ -27,6 +27,7 @@
 //   COMMON_INTERCEPTOR_MUTEX_REPAIR
 //   COMMON_INTERCEPTOR_SET_PTHREAD_NAME
 //   COMMON_INTERCEPTOR_HANDLE_RECVMSG
+//   COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED
 //===----------------------------------------------------------------------===//
 #include "interception/interception.h"
 #include "sanitizer_addrhashmap.h"
   COMMON_INTERCEPTOR_ENTER(ctx, __VA_ARGS__)
 #endif
 
+#ifndef COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED
+#define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (0)
+#endif
+
 struct FileMetadata {
   // For open_memstream().
   char **addr;
@@ -174,6 +179,8 @@ INTERCEPTOR(int, strcmp, const char *s1, const char *s2) {
 }
 
 INTERCEPTOR(int, strncmp, const char *s1, const char *s2, uptr size) {
+  if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED)
+    return internal_strncmp(s1, s2, size);
   void *ctx;
   COMMON_INTERCEPTOR_ENTER(ctx, strncmp, s1, s2, size);
   unsigned char c1 = 0, c2 = 0;