Make bmalloc work with ASan
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Jan 2015 00:41:58 +0000 (00:41 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Jan 2015 00:41:58 +0000 (00:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=140194

Reviewed by Mark Lam.

* bmalloc/BPlatform.h: Added a way to detect Darwin OSes, since we need
an OS-specific API to test for loaded runtime libraries.

* bmalloc/Environment.cpp:
(bmalloc::isASanEnabled):
(bmalloc::Environment::computeIsBmallocEnabled): Disabled bmalloc if
ASan is enabled, since system malloc has the Asan hooks we need.

You could check for the ASan compile-time flag instead, but doing this
check at runtime prepares bmalloc for a world where it is a dynamic
library that might be loaded into projects it did not compile with.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@178144 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/bmalloc/ChangeLog
Source/bmalloc/bmalloc/BPlatform.h
Source/bmalloc/bmalloc/Environment.cpp

index a036ea5..33072b1 100644 (file)
@@ -1,3 +1,22 @@
+2015-01-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Make bmalloc work with ASan
+        https://bugs.webkit.org/show_bug.cgi?id=140194
+
+        Reviewed by Mark Lam.
+
+        * bmalloc/BPlatform.h: Added a way to detect Darwin OSes, since we need
+        an OS-specific API to test for loaded runtime libraries.
+
+        * bmalloc/Environment.cpp:
+        (bmalloc::isASanEnabled):
+        (bmalloc::Environment::computeIsBmallocEnabled): Disabled bmalloc if
+        ASan is enabled, since system malloc has the Asan hooks we need.
+
+        You could check for the ASan compile-time flag instead, but doing this
+        check at runtime prepares bmalloc for a world where it is a dynamic
+        library that might be loaded into projects it did not compile with.
+
 2015-01-05  Geoffrey Garen  <ggaren@apple.com>
 
         Fix up bmalloc's PerThread for use on Linux
 2015-01-05  Geoffrey Garen  <ggaren@apple.com>
 
         Fix up bmalloc's PerThread for use on Linux
index e387259..2e76880 100644 (file)
@@ -31,6 +31,7 @@
 #endif
 
 #define BPLATFORM(PLATFORM) (defined BPLATFORM_##PLATFORM && BPLATFORM_##PLATFORM)
 #endif
 
 #define BPLATFORM(PLATFORM) (defined BPLATFORM_##PLATFORM && BPLATFORM_##PLATFORM)
+#define BOS(OS) (defined BOS_##OS && BOS_##OS)
 
 #if ((defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) \
     || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) \
 
 #if ((defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) \
     || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) \
@@ -38,7 +39,8 @@
 #define BPLATFORM_IOS 1
 #endif
 
 #define BPLATFORM_IOS 1
 #endif
 
-#define BCOMPILER_SUPPORTS(COMPILER_FEATURE) (defined BCOMPILER_SUPPORTS_##COMPILER_FEATURE && BCOMPILER_SUPPORTS_##COMPILER_FEATURE)
-#define BCOMPILER_SUPPORTS_CXX_THREAD_LOCAL (defined(__has_feature) && __has_feature(cxx_thread_local))
+#ifdef __APPLE__
+#define BOS_DARWIN 1
+#endif
 
 #endif // BPlatform_h
 
 #endif // BPlatform_h
index 184c305..2683b05 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
+#include "BPlatform.h"
 #include "Environment.h"
 #include <cstdlib>
 #include <cstring>
 #include "Environment.h"
 #include <cstdlib>
 #include <cstring>
+#if BOS(DARWIN)
+#include <mach-o/dyld.h>
+#endif
 
 namespace bmalloc {
 
 
 namespace bmalloc {
 
@@ -69,6 +73,20 @@ static bool isLibgmallocEnabled()
     return true;
 }
 
     return true;
 }
 
+static bool isASanEnabled()
+{
+#if BOS(DARWIN)
+    uint32_t imageCount = _dyld_image_count();
+    for (uint32_t i = 0; i < imageCount; ++i) {
+        if (strstr(_dyld_get_image_name(i), "/libclang_rt.asan_"))
+            return true;
+    }
+    return false;
+#else
+    return false;
+#endif
+}
+
 Environment::Environment()
     : m_isBmallocEnabled(computeIsBmallocEnabled())
 {
 Environment::Environment()
     : m_isBmallocEnabled(computeIsBmallocEnabled())
 {
@@ -80,6 +98,8 @@ bool Environment::computeIsBmallocEnabled()
         return false;
     if (isLibgmallocEnabled())
         return false;
         return false;
     if (isLibgmallocEnabled())
         return false;
+    if (isASanEnabled())
+        return false;
     return true;
 }
 
     return true;
 }