diff --git a/libc/bionic/dlmalloc.c b/libc/bionic/dlmalloc.c
index ec76acf..f88a813 100644
--- a/libc/bionic/dlmalloc.c
+++ b/libc/bionic/dlmalloc.c
@@ -2327,12 +2327,14 @@
     }
 
     __libc_android_log_write(ANDROID_LOG_FATAL,"libc",buffer);
-    abort();
+
+    /* So that we can get a memory dump around p */
+    *((int **) 0xdeadbaad) = (int *) p;
 }
 
 #  ifndef CORRUPTION_ERROR_ACTION
-#    define CORRUPTION_ERROR_ACTION(m)  \
-    __bionic_heap_error("HEAP MEMORY CORRUPTION", __FUNCTION__, 0)
+#    define CORRUPTION_ERROR_ACTION(m,p)  \
+    __bionic_heap_error("HEAP MEMORY CORRUPTION", __FUNCTION__, p)
 #  endif
 #  ifndef USAGE_ERROR_ACTION
 #    define USAGE_ERROR_ACTION(m,p)   \
@@ -2342,7 +2344,7 @@
 #else /* !LOG_ON_HEAP_ERROR */
 
 #  ifndef CORRUPTION_ERROR_ACTION
-#    define CORRUPTION_ERROR_ACTION(m) ABORT
+#    define CORRUPTION_ERROR_ACTION(m,p) ABORT
 #  endif /* CORRUPTION_ERROR_ACTION */
 
 #  ifndef USAGE_ERROR_ACTION
@@ -3079,7 +3081,7 @@
   else if (RTCHECK(ok_address(M, B->fd)))\
     F = B->fd;\
   else {\
-    CORRUPTION_ERROR_ACTION(M);\
+    CORRUPTION_ERROR_ACTION(M, B);\
   }\
   B->fd = P;\
   F->bk = P;\
@@ -3096,7 +3098,7 @@
   mchunkptr B = P->bk;\
   bindex_t I = small_index(S);\
   if (__builtin_expect (F->bk != P || B->fd != P, 0))\
-    CORRUPTION_ERROR_ACTION(M);\
+    CORRUPTION_ERROR_ACTION(M, P);\
   assert(P != B);\
   assert(P != F);\
   assert(chunksize(P) == small_index2size(I));\
@@ -3108,7 +3110,7 @@
     B->fd = F;\
   }\
   else {\
-    CORRUPTION_ERROR_ACTION(M);\
+    CORRUPTION_ERROR_ACTION(M, P);\
   }\
 }
 
@@ -3119,7 +3121,7 @@
 #define unlink_first_small_chunk(M, B, P, I) {\
   mchunkptr F = P->fd;\
   if (__builtin_expect (F->bk != P || B->fd != P, 0))\
-    CORRUPTION_ERROR_ACTION(M);\
+    CORRUPTION_ERROR_ACTION(M, P);\
   assert(P != B);\
   assert(P != F);\
   assert(chunksize(P) == small_index2size(I));\
@@ -3130,7 +3132,7 @@
     F->bk = B;\
   }\
   else {\
-    CORRUPTION_ERROR_ACTION(M);\
+    CORRUPTION_ERROR_ACTION(M, P);\
   }\
 }
 
@@ -3179,7 +3181,7 @@
           break;\
         }\
         else {\
-          CORRUPTION_ERROR_ACTION(M);\
+          CORRUPTION_ERROR_ACTION(M, C);\
           break;\
         }\
       }\
@@ -3193,7 +3195,7 @@
           break;\
         }\
         else {\
-          CORRUPTION_ERROR_ACTION(M);\
+          CORRUPTION_ERROR_ACTION(M, F);\
           break;\
         }\
       }\
@@ -3228,13 +3230,13 @@
     tchunkptr F = X->fd;\
     R = X->bk;\
     if (__builtin_expect (F->bk != X || R->fd != X, 0))\
-      CORRUPTION_ERROR_ACTION(M);\
+      CORRUPTION_ERROR_ACTION(M, X);\
     if (RTCHECK(ok_address(M, F))) {\
       F->bk = R;\
       R->fd = F;\
     }\
     else {\
-      CORRUPTION_ERROR_ACTION(M);\
+      CORRUPTION_ERROR_ACTION(M, F);\
     }\
   }\
   else {\
@@ -3249,7 +3251,7 @@
       if (RTCHECK(ok_address(M, RP)))\
         *RP = 0;\
       else {\
-        CORRUPTION_ERROR_ACTION(M);\
+        CORRUPTION_ERROR_ACTION(M, RP);\
       }\
     }\
   }\
@@ -3266,7 +3268,7 @@
         XP->child[1] = R;\
     }\
     else\
-      CORRUPTION_ERROR_ACTION(M);\
+      CORRUPTION_ERROR_ACTION(M, XP);\
     if (R != 0) {\
       if (RTCHECK(ok_address(M, R))) {\
         tchunkptr C0, C1;\
@@ -3277,7 +3279,7 @@
             C0->parent = R;\
           }\
           else\
-            CORRUPTION_ERROR_ACTION(M);\
+            CORRUPTION_ERROR_ACTION(M, C0);\
         }\
         if ((C1 = X->child[1]) != 0) {\
           if (RTCHECK(ok_address(M, C1))) {\
@@ -3285,11 +3287,11 @@
             C1->parent = R;\
           }\
           else\
-            CORRUPTION_ERROR_ACTION(M);\
+            CORRUPTION_ERROR_ACTION(M, C1);\
         }\
       }\
       else\
-        CORRUPTION_ERROR_ACTION(M);\
+        CORRUPTION_ERROR_ACTION(M, R);\
     }\
   }\
 }
@@ -3940,7 +3942,7 @@
         return chunk2mem(v);
       }
     }
-    CORRUPTION_ERROR_ACTION(m);
+    CORRUPTION_ERROR_ACTION(m, v);
   }
   return 0;
 }
@@ -3980,7 +3982,7 @@
     }
   }
 
-  CORRUPTION_ERROR_ACTION(m);
+  CORRUPTION_ERROR_ACTION(m, v);
   return 0;
 }
 
