summaryrefslogtreecommitdiff
path: root/mach-defpager
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2016-05-30 23:34:23 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2016-05-30 23:38:49 +0200
commit6f6d157c55b6973f0a557b65269b212d9dcd1fbe (patch)
tree6931e5781c40669a25e888c1a46c7a2db42ab000 /mach-defpager
parentd213bd8ef04dd947ff5c53a8efeb6cba11621396 (diff)
Revert "drop the deprecated malloc/free hooks in hurd/mach-defpager"
This reverts commit 8c49801c8f7e3f800cabedf8fca8ccec3cf35a22. The malloc hook is needed for calloc.
Diffstat (limited to 'mach-defpager')
-rw-r--r--mach-defpager/kalloc.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/mach-defpager/kalloc.c b/mach-defpager/kalloc.c
index 35ddf9a7..ef844acc 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"); */