summaryrefslogtreecommitdiffstats
path: root/man3/malloc_hook.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/malloc_hook.3')
-rw-r--r--man3/malloc_hook.3126
1 files changed, 126 insertions, 0 deletions
diff --git a/man3/malloc_hook.3 b/man3/malloc_hook.3
new file mode 100644
index 000000000..ffbc3fb32
--- /dev/null
+++ b/man3/malloc_hook.3
@@ -0,0 +1,126 @@
+.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
+.\" Distributed under GPL
+.\" Heavily based on glibc documentation
+.\" Polished, added docs, removed glibc doc bug, 2002-07-20, aeb
+.TH MALLOC_HOOK 3 2002-07-20 "GNU" "Linux Programmer's Manual"
+.SH NAME
+__malloc_hook, __malloc_initialize_hook,
+__memalign_hook, __free_hook, __realloc_hook,
+__after_morecore_hook \- malloc debugging variables
+.SH SYNOPSIS
+.sp
+.BR "#include <malloc.h>"
+.sp
+.BI "void *(*__malloc_hook)(size_t " size ,
+.BI "const void *" caller );
+.sp
+.BI "void *(*__realloc_hook)(void *" ptr ,
+.BI "size_t " size ,
+.BI "const void *" caller );
+.sp
+.BI "void *(*__memalign_hook)(size_t " alignment ,
+.BI "size_t " size ,
+.BI "const void *" caller );
+.sp
+.BI "void (*__free_hook)(void *" ptr ,
+.BI "const void *" caller );
+.sp
+.BI "void (*__malloc_initialize_hook)(void);"
+.sp
+.BI "void (*__after_morecore_hook)(void);"
+.SH DESCRIPTION
+The GNU C library lets you modify the behavior of
+.IR malloc (),
+.IR realloc (),
+and
+.IR free ()
+by specifying appropriate hook functions. You can use these hooks
+to help you debug programs that use dynamic memory allocation,
+for example.
+.LP
+The variable
+.B __malloc_initialize_hook
+points at a function that is called once when the malloc implementation
+is initialized. This is a weak variable, so it can be overridden in
+the application with a definition like the following:
+.br
+.nf
+ void (*__malloc_initialize_hook)(void) = my_init_hook;
+.fi
+.br
+Now the function
+.IR my_init_hook ()
+can do the initialization of all hooks.
+.LP
+The four functions pointed to by
+.BR __malloc_hook ,
+.BR __realloc_hook ,
+.BR __memalign_hook ,
+.BR __free_hook
+have a prototype like the functions
+.IR malloc (),
+.IR realloc (),
+.IR memalign (),
+.IR free (),
+respectively, except that they have a final argument
+.I caller
+that gives the address of the caller of
+.IR malloc (),
+etc.
+.LP
+The variable
+.B __after_morecore_hook
+points at a function that is called each time after
+.IR sbrk ()
+was asked for more core.
+.SH "EXAMPLE"
+Here a short example how to use these variables.
+.sp
+.nf
+#include <stdio.h>
+#include <malloc.h>
+
+/* Prototypes for our hooks. */
+static void my_init_hook(void);
+static void *my_malloc_hook(size_t, const void *);
+
+/* Variables to save original hooks. */
+static void *(*old_malloc_hook)(size_t, const void *);
+
+/* Override initialising hook from the C library. */
+void (*__malloc_initialize_hook) (void) = my_init_hook;
+
+static void
+my_init_hook(void) {
+ old_malloc_hook = __malloc_hook;
+ __malloc_hook = my_malloc_hook;
+}
+
+static void *
+my_malloc_hook (size_t size, const void *caller) {
+ void *result;
+
+ /* Restore all old hooks */
+ __malloc_hook = old_malloc_hook;
+
+ /* Call recursively */
+ result = malloc (size);
+
+ /* Save underlying hooks */
+ old_malloc_hook = __malloc_hook;
+
+ /* `printf' might call `malloc', so protect it too. */
+ printf ("malloc(%u) called from %p returns %p\n",
+ (unsigned int) size, caller, result);
+
+ /* Restore our own hooks */
+ __malloc_hook = my_malloc_hook;
+
+ return result;
+}
+.fi
+.SH "SEE ALSO"
+.BR mallinfo (3),
+.BR malloc (3),
+.BR mcheck (3),
+.BR mtrace (3)