<div style="font-family: arial, helvetica, sans-serif"><font size="2"><div class="gmail_quote">On Mon, Jun 25, 2012 at 2:58 AM, Kostya Serebryany <span dir="ltr"><<a href="mailto:kcc@google.com" target="_blank">kcc@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: kcc<br>
Date: Mon Jun 25 04:58:29 2012<br>
New Revision: 159132<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=159132&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=159132&view=rev</a><br>
Log:<br>
[asan] get rid of '#include <malloc.h>' in the implementation of malloc interceptors<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/asan/asan_malloc_linux.cc<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_malloc_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_linux.cc?rev=159132&r1=159131&r2=159132&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_linux.cc?rev=159132&r1=159131&r2=159132&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_malloc_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_malloc_linux.cc Mon Jun 25 04:58:29 2012<br>
@@ -20,15 +20,13 @@<br>
 #include "asan_internal.h"<br>
 #include "asan_stack.h"<br>
<br>
-#include <malloc.h><br>
-<br>
 #ifdef ANDROID<br>
 struct MallocDebug {<br>
-  void* (*malloc)(size_t bytes);<br>
+  void* (*malloc)(uptr bytes);<br></blockquote><div><br></div><div>This seems really wrong to me... There are definitely platforms where sizeof(size_t) != sizeof(void*)...</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

   void  (*free)(void* mem);<br>
-  void* (*calloc)(size_t n_elements, size_t elem_size);<br>
-  void* (*realloc)(void* oldMem, size_t bytes);<br>
-  void* (*memalign)(size_t alignment, size_t bytes);<br>
+  void* (*calloc)(uptr n_elements, uptr elem_size);<br>
+  void* (*realloc)(void* oldMem, uptr bytes);<br>
+  void* (*memalign)(uptr alignment, uptr bytes);<br>
 };<br>
<br>
 const MallocDebug asan_malloc_dispatch ALIGNED(32) = {<br>
@@ -64,18 +62,18 @@<br>
   asan_free(ptr, &stack);<br>
 }<br>
<br>
-INTERCEPTOR(void*, malloc, size_t size) {<br>
+INTERCEPTOR(void*, malloc, uptr size) {<br>
   GET_STACK_TRACE_HERE_FOR_MALLOC;<br>
   return asan_malloc(size, &stack);<br>
 }<br>
<br>
-INTERCEPTOR(void*, calloc, size_t nmemb, size_t size) {<br>
+INTERCEPTOR(void*, calloc, uptr nmemb, uptr size) {<br>
   if (!asan_inited) {<br>
     // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym.<br>
-    const size_t kCallocPoolSize = 1024;<br>
+    const uptr kCallocPoolSize = 1024;<br>
     static uptr calloc_memory_for_dlsym[kCallocPoolSize];<br>
-    static size_t allocated;<br>
-    size_t size_in_words = ((nmemb * size) + kWordSize - 1) / kWordSize;<br>
+    static uptr allocated;<br>
+    uptr size_in_words = ((nmemb * size) + kWordSize - 1) / kWordSize;<br>
     void *mem = (void*)&calloc_memory_for_dlsym[allocated];<br>
     allocated += size_in_words;<br>
     CHECK(allocated < kCallocPoolSize);<br>
@@ -85,26 +83,34 @@<br>
   return asan_calloc(nmemb, size, &stack);<br>
 }<br>
<br>
-INTERCEPTOR(void*, realloc, void *ptr, size_t size) {<br>
+INTERCEPTOR(void*, realloc, void *ptr, uptr size) {<br>
   GET_STACK_TRACE_HERE_FOR_MALLOC;<br>
   return asan_realloc(ptr, size, &stack);<br>
 }<br>
<br>
-INTERCEPTOR(void*, memalign, size_t boundary, size_t size) {<br>
+INTERCEPTOR(void*, memalign, uptr boundary, uptr size) {<br>
   GET_STACK_TRACE_HERE_FOR_MALLOC;<br>
   return asan_memalign(boundary, size, &stack);<br>
 }<br>
<br>
-INTERCEPTOR(void*, __libc_memalign, size_t align, size_t s)<br>
+INTERCEPTOR(void*, __libc_memalign, uptr align, uptr s)<br>
   ALIAS("memalign");<br>
<br>
-INTERCEPTOR(size_t, malloc_usable_size, void *ptr) {<br>
+INTERCEPTOR(uptr, malloc_usable_size, void *ptr) {<br>
   GET_STACK_TRACE_HERE_FOR_MALLOC;<br>
   return asan_malloc_usable_size(ptr, &stack);<br>
 }<br>
<br>
-INTERCEPTOR(struct mallinfo, mallinfo, void) {<br>
-  struct mallinfo res;<br>
+// We avoid including malloc.h for portability reasons.<br>
+// man mallinfo says the fields are "long", but the implementation uses int.<br>
+// It doesn't matter much -- we just need to make sure that the libc's mallinfo<br>
+// is not called.<br>
+struct fake_mallinfo {<br>
+  int x[10];<br>
+};<br>
+<br>
+INTERCEPTOR(struct fake_mallinfo, mallinfo, void) {<br>
+  struct fake_mallinfo res;<br>
   REAL(memset)(&res, 0, sizeof(res));<br>
   return res;<br>
 }<br>
@@ -113,18 +119,18 @@<br>
   return -1;<br>
 }<br>
<br>
-INTERCEPTOR(int, posix_memalign, void **memptr, size_t alignment, size_t size) {<br>
+INTERCEPTOR(int, posix_memalign, void **memptr, uptr alignment, uptr size) {<br>
   GET_STACK_TRACE_HERE_FOR_MALLOC;<br>
   // Printf("posix_memalign: %zx %zu\n", alignment, size);<br>
   return asan_posix_memalign(memptr, alignment, size, &stack);<br>
 }<br>
<br>
-INTERCEPTOR(void*, valloc, size_t size) {<br>
+INTERCEPTOR(void*, valloc, uptr size) {<br>
   GET_STACK_TRACE_HERE_FOR_MALLOC;<br>
   return asan_valloc(size, &stack);<br>
 }<br>
<br>
-INTERCEPTOR(void*, pvalloc, size_t size) {<br>
+INTERCEPTOR(void*, pvalloc, uptr size) {<br>
   GET_STACK_TRACE_HERE_FOR_MALLOC;<br>
   return asan_pvalloc(size, &stack);<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></font></div>