<div dir="ltr">Hi Alexander,<div><br></div><div>Can you also tweak test/asan/TestCases/Darwin/interface_symbols_darwin.c to include these symbols like it includes __asan_report_load*? Or to grep -v them out of the nm output?</div><div><br></div><div>That test is failing right now.</div><div><br></div><div>Thank you,</div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature">  Filipe<br></div></div>
<br><div class="gmail_quote">On Tue, Feb 3, 2015 at 4:38 AM, Alexander Potapenko <span dir="ltr"><<a href="mailto:glider@google.com" target="_blank">glider@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: glider<br>
Date: Tue Feb  3 06:38:10 2015<br>
New Revision: 227967<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=227967&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=227967&view=rev</a><br>
Log:<br>
[ASan] Add __asan_ prefix for "mz_*" allocation/deallocation functions<br>
and make them global so that they're not removed by `strip -x`.<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/asan/asan_malloc_mac.cc<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_malloc_mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_mac.cc?rev=227967&r1=227966&r2=227967&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_mac.cc?rev=227967&r1=227966&r2=227967&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_malloc_mac.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_malloc_mac.cc Tue Feb  3 06:38:10 2015<br>
@@ -152,13 +152,17 @@ INTERCEPTOR(int, posix_memalign, void **<br>
<br>
 namespace {<br>
<br>
-// TODO(glider): the mz_* functions should be united with the Linux wrappers,<br>
-// as they are basically copied from there.<br>
-size_t mz_size(malloc_zone_t* zone, const void* ptr) {<br>
+// TODO(glider): the __asan_mz_* functions should be united with the Linux<br>
+// wrappers, as they are basically copied from there.<br>
+extern "C"<br>
+SANITIZER_INTERFACE_ATTRIBUTE<br>
+size_t __asan_mz_size(malloc_zone_t* zone, const void* ptr) {<br>
   return asan_mz_size(ptr);<br>
 }<br>
<br>
-void *mz_malloc(malloc_zone_t *zone, size_t size) {<br>
+extern "C"<br>
+SANITIZER_INTERFACE_ATTRIBUTE<br>
+void *__asan_mz_malloc(malloc_zone_t *zone, uptr size) {<br>
   if (UNLIKELY(!asan_inited)) {<br>
     CHECK(system_malloc_zone);<br>
     return malloc_zone_malloc(system_malloc_zone, size);<br>
@@ -167,7 +171,9 @@ void *mz_malloc(malloc_zone_t *zone, siz<br>
   return asan_malloc(size, &stack);<br>
 }<br>
<br>
-void *mz_calloc(malloc_zone_t *zone, size_t nmemb, size_t size) {<br>
+extern "C"<br>
+SANITIZER_INTERFACE_ATTRIBUTE<br>
+void *__asan_mz_calloc(malloc_zone_t *zone, size_t nmemb, size_t size) {<br>
   if (UNLIKELY(!asan_inited)) {<br>
     // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym.<br>
     const size_t kCallocPoolSize = 1024;<br>
@@ -183,7 +189,9 @@ void *mz_calloc(malloc_zone_t *zone, siz<br>
   return asan_calloc(nmemb, size, &stack);<br>
 }<br>
<br>
-void *mz_valloc(malloc_zone_t *zone, size_t size) {<br>
+extern "C"<br>
+SANITIZER_INTERFACE_ATTRIBUTE<br>
+void *__asan_mz_valloc(malloc_zone_t *zone, size_t size) {<br>
   if (UNLIKELY(!asan_inited)) {<br>
     CHECK(system_malloc_zone);<br>
     return malloc_zone_valloc(system_malloc_zone, size);<br>
@@ -210,11 +218,15 @@ void ALWAYS_INLINE free_common(void *con<br>
 }<br>
<br>
 // TODO(glider): the allocation callbacks need to be refactored.<br>
-void mz_free(malloc_zone_t *zone, void *ptr) {<br>
+extern "C"<br>
+SANITIZER_INTERFACE_ATTRIBUTE<br>
+void __asan_mz_free(malloc_zone_t *zone, void *ptr) {<br>
   free_common(zone, ptr);<br>
 }<br>
<br>
-void *mz_realloc(malloc_zone_t *zone, void *ptr, size_t size) {<br>
+extern "C"<br>
+SANITIZER_INTERFACE_ATTRIBUTE<br>
+void *__asan_mz_realloc(malloc_zone_t *zone, void *ptr, size_t size) {<br>
   if (!ptr) {<br>
     GET_STACK_TRACE_MALLOC;<br>
     return asan_malloc(size, &stack);<br>
@@ -233,15 +245,19 @@ void *mz_realloc(malloc_zone_t *zone, vo<br>
   }<br>
 }<br>
<br>
-void mz_destroy(malloc_zone_t* zone) {<br>
+extern "C"<br>
+SANITIZER_INTERFACE_ATTRIBUTE<br>
+void __asan_mz_destroy(malloc_zone_t* zone) {<br>
   // A no-op -- we will not be destroyed!<br>
-  Report("mz_destroy() called -- ignoring\n");<br>
+  Report("__asan_mz_destroy() called -- ignoring\n");<br>
 }<br>
<br>
   // from AvailabilityMacros.h<br>
 #if defined(MAC_OS_X_VERSION_10_6) && \<br>
     MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6<br>
-void *mz_memalign(malloc_zone_t *zone, size_t align, size_t size) {<br>
+extern "C"<br>
+SANITIZER_INTERFACE_ATTRIBUTE<br>
+void *__asan_mz_memalign(malloc_zone_t *zone, size_t align, size_t size) {<br>
   if (UNLIKELY(!asan_inited)) {<br>
     CHECK(system_malloc_zone);<br>
     return malloc_zone_memalign(system_malloc_zone, align, size);<br>
@@ -252,7 +268,8 @@ void *mz_memalign(malloc_zone_t *zone, s<br>
<br>
 // This function is currently unused, and we build with -Werror.<br>
 #if 0<br>
-void mz_free_definite_size(malloc_zone_t* zone, void *ptr, size_t size) {<br>
+void __asan_mz_free_definite_size(<br>
+    malloc_zone_t* zone, void *ptr, size_t size) {<br>
   // TODO(glider): check that |size| is valid.<br>
   UNIMPLEMENTED();<br>
 }<br>
@@ -330,13 +347,13 @@ void ReplaceSystemMalloc() {<br>
   // Start with a version 4 zone which is used for OS X 10.4 and 10.5.<br>
   asan_zone.version = 4;<br>
   asan_zone.zone_name = "asan";<br>
-  asan_zone.size = &mz_size;<br>
-  asan_zone.malloc = &mz_malloc;<br>
-  asan_zone.calloc = &mz_calloc;<br>
-  asan_zone.valloc = &mz_valloc;<br>
-  asan_zone.free = &mz_free;<br>
-  asan_zone.realloc = &mz_realloc;<br>
-  asan_zone.destroy = &mz_destroy;<br>
+  asan_zone.size = &__asan_mz_size;<br>
+  asan_zone.malloc = &__asan_mz_malloc;<br>
+  asan_zone.calloc = &__asan_mz_calloc;<br>
+  asan_zone.valloc = &__asan_mz_valloc;<br>
+  asan_zone.free = &__asan_mz_free;<br>
+  asan_zone.realloc = &__asan_mz_realloc;<br>
+  asan_zone.destroy = &__asan_mz_destroy;<br>
   asan_zone.batch_malloc = 0;<br>
   asan_zone.batch_free = 0;<br>
   asan_zone.introspect = &asan_introspection;<br>
@@ -347,7 +364,7 @@ void ReplaceSystemMalloc() {<br>
   // Switch to version 6 on OSX 10.6 to support memalign.<br>
   asan_zone.version = 6;<br>
   asan_zone.free_definite_size = 0;<br>
-  asan_zone.memalign = &mz_memalign;<br>
+  asan_zone.memalign = &__asan_mz_memalign;<br>
   asan_introspection.zone_locked = &mi_zone_locked;<br>
 #endif<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>