diff options
Diffstat (limited to 'man3/malloc_hook.3')
-rw-r--r-- | man3/malloc_hook.3 | 126 |
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) |