commit 6f6d157c55b6973f0a557b65269b212d9dcd1fbe
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Mon May 30 23:34:23 2016 +0200

    Revert "drop the deprecated malloc/free hooks in hurd/mach-defpager"
    
    This reverts commit 8c49801c8f7e3f800cabedf8fca8ccec3cf35a22.
    
    The malloc hook is needed for calloc.

diff --git a/mach-defpager/kalloc.c b/mach-defpager/kalloc.c
index 35ddf9a..ef844ac 100644
--- a/mach-defpager/kalloc.c
+++ b/mach-defpager/kalloc.c
@@ -34,9 +34,23 @@
 
 #include <mach.h>
 #include <pthread.h>		/* for spin locks */
+#include <malloc.h> 		/* for malloc_hook/free_hook */
 
 #include "wiring.h"
 
+static void init_hook (void);
+static void *malloc_hook (size_t size, const void *caller);
+static void free_hook (void *ptr, const void *caller);
+
+/* GNU libc 2.14 defines this macro to declare hook variables as volatile.
+   Define it as empty for older libc versions.  */
+#ifndef __MALLOC_HOOK_VOLATILE
+# define __MALLOC_HOOK_VOLATILE
+#endif
+
+void (*__MALLOC_HOOK_VOLATILE __malloc_initialize_hook) (void) = init_hook;
+
+
 /* #define	DEBUG */
 
 /*
@@ -250,14 +264,21 @@ kfree(	void *data,
 	}
 }
 
-void *
-malloc (size_t size)
+static void
+init_hook (void)
+{
+  __malloc_hook = malloc_hook;
+  __free_hook = free_hook;
+}
+
+static void *
+malloc_hook (size_t size, const void *caller)
 {
   return (void *) kalloc ((vm_size_t) size);
 }
 
-void
-free (void *ptr)
+static void
+free_hook (void *ptr, const void *caller)
 {
   /* Just ignore harmless attempts at cleanliness.  */
   /*	panic("free not implemented"); */
commit 1a36fdfe7cf17aa23f0bd43eb6cca4d28e510def
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Mon May 30 23:57:49 2016 +0200

    Complete allocation hooks
    
    * mach-defpager/kalloc.c (realloc_hook, memalign_hook): New functions.
    (init_hook): Set __realloc_hook to realloc_hook and __memalign_hook to
    memalign_hook.

diff --git a/mach-defpager/kalloc.c b/mach-defpager/kalloc.c
index ef844ac..e4ed12f 100644
--- a/mach-defpager/kalloc.c
+++ b/mach-defpager/kalloc.c
@@ -40,6 +40,8 @@
 
 static void init_hook (void);
 static void *malloc_hook (size_t size, const void *caller);
+static void *realloc_hook (void *ptr, size_t size, const void *caller);
+static void *memalign_hook (size_t alignment, size_t size, const void *caller);
 static void free_hook (void *ptr, const void *caller);
 
 /* GNU libc 2.14 defines this macro to declare hook variables as volatile.
@@ -268,6 +270,8 @@ static void
 init_hook (void)
 {
   __malloc_hook = malloc_hook;
+  __realloc_hook = realloc_hook;
+  __memalign_hook = memalign_hook;
   __free_hook = free_hook;
 }
 
@@ -277,6 +281,20 @@ malloc_hook (size_t size, const void *caller)
   return (void *) kalloc ((vm_size_t) size);
 }
 
+static void *
+realloc_hook (void *ptr, size_t size, const void *caller)
+{
+  panic("realloc_hook not implemented");
+}
+
+static void *
+memalign_hook (size_t alignment, size_t size, const void *caller)
+{
+  if (alignment > vm_page_size)
+    panic("memalign_hook not implemented");
+  return malloc_hook(size, caller);
+}
+
 static void
 free_hook (void *ptr, const void *caller)
 {
