diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-12-20 10:59:21 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2005-12-20 10:59:21 +0000 |
commit | 20a911071d1cfaf7d20d088efe9ede27c5809c09 (patch) | |
tree | fcf38eb33fbc3519432eee7241b36dfdbe3dca74 | |
parent | 24a640bf2a13a96aa3b582c13c767effcd946dbf (diff) |
* malloc/mtrace.c (__libc_malloc, __libc_free, __libc_realloc,cvs/fedora-glibc-2_3_90-20
__libc_memalign): Add prototypes and libc_hidden_proto resp.
defines for !_LIBC.
(tr_freehook): Call __libc_free instead of free.
(tr_mallochook): Call __libc_malloc instead of malloc.
(tr_reallochook): Call __libc_realloc instead of realloc.
(tr_memalignhook): Call __libc_memalign instead of memalign.
* malloc/mcheck.c: Include stdlib.h.
(__libc_malloc, __libc_free, __libc_realloc,
__libc_memalign): Add prototypes and libc_hidden_proto resp.
defines for !_LIBC.
(freehook): Call __libc_free instead of free.
(mallochook): Call __libc_malloc instead of malloc.
(reallochook): Call __libc_realloc instead of realloc.
(memalignhook): Call __libc_memalign instead of memalign.
(mcheck): Call __libc_malloc and __libc_free instead of
malloc and free.
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | malloc/mcheck.c | 30 | ||||
-rw-r--r-- | malloc/mtrace.c | 20 |
3 files changed, 57 insertions, 11 deletions
@@ -1,5 +1,23 @@ 2005-12-20 Jakub Jelinek <jakub@redhat.com> + * malloc/mtrace.c (__libc_malloc, __libc_free, __libc_realloc, + __libc_memalign): Add prototypes and libc_hidden_proto resp. + defines for !_LIBC. + (tr_freehook): Call __libc_free instead of free. + (tr_mallochook): Call __libc_malloc instead of malloc. + (tr_reallochook): Call __libc_realloc instead of realloc. + (tr_memalignhook): Call __libc_memalign instead of memalign. + * malloc/mcheck.c: Include stdlib.h. + (__libc_malloc, __libc_free, __libc_realloc, + __libc_memalign): Add prototypes and libc_hidden_proto resp. + defines for !_LIBC. + (freehook): Call __libc_free instead of free. + (mallochook): Call __libc_malloc instead of malloc. + (reallochook): Call __libc_realloc instead of realloc. + (memalignhook): Call __libc_memalign instead of memalign. + (mcheck): Call __libc_malloc and __libc_free instead of + malloc and free. + Workaround for http://gcc.gnu.org/PR25240 * include/libc-symbols.h (weak_extern): Define using weak attribute. (_weak_extern): Remove. diff --git a/malloc/mcheck.c b/malloc/mcheck.c index 02379d219d..9f88843445 100644 --- a/malloc/mcheck.c +++ b/malloc/mcheck.c @@ -24,9 +24,25 @@ # include <mcheck.h> # include <stdint.h> # include <stdio.h> +# include <stdlib.h> # include <libintl.h> #endif +#ifdef _LIBC +extern __typeof (malloc) __libc_malloc; +extern __typeof (free) __libc_free; +extern __typeof (realloc) __libc_realloc; +libc_hidden_proto (__libc_malloc) +libc_hidden_proto (__libc_realloc) +libc_hidden_proto (__libc_free) +libc_hidden_proto (__libc_memalign) +#else +# define __libc_malloc(sz) malloc (sz) +# define __libc_free(ptr) free (ptr) +# define __libc_realloc(ptr, sz) realloc (ptr, sz) +# define __libc_memalign(al, sz) memalign (al, sz) +#endif + /* Old hook values. */ static void (*old_free_hook) (__ptr_t ptr, __const __ptr_t); static __ptr_t (*old_malloc_hook) (__malloc_size_t size, const __ptr_t); @@ -197,7 +213,7 @@ freehook (__ptr_t ptr, const __ptr_t caller) if (old_free_hook != NULL) (*old_free_hook) (ptr, caller); else - free (ptr); + __libc_free (ptr); __free_hook = freehook; } @@ -214,7 +230,7 @@ mallochook (__malloc_size_t size, const __ptr_t caller) hdr = (struct hdr *) (*old_malloc_hook) (sizeof (struct hdr) + size + 1, caller); else - hdr = (struct hdr *) malloc (sizeof (struct hdr) + size + 1); + hdr = (struct hdr *) __libc_malloc (sizeof (struct hdr) + size + 1); __malloc_hook = mallochook; if (hdr == NULL) return NULL; @@ -245,7 +261,7 @@ memalignhook (__malloc_size_t alignment, __malloc_size_t size, if (old_memalign_hook != NULL) block = (*old_memalign_hook) (alignment, slop + size + 1, caller); else - block = memalign (alignment, slop + size + 1); + block = __libc_memalign (alignment, slop + size + 1); __memalign_hook = memalignhook; if (block == NULL) return NULL; @@ -294,8 +310,8 @@ reallochook (__ptr_t ptr, __malloc_size_t size, const __ptr_t caller) sizeof (struct hdr) + size + 1, caller); else - hdr = (struct hdr *) realloc ((__ptr_t) hdr, - sizeof (struct hdr) + size + 1); + hdr = (struct hdr *) __libc_realloc ((__ptr_t) hdr, + sizeof (struct hdr) + size + 1); __free_hook = freehook; __malloc_hook = mallochook; __memalign_hook = memalignhook; @@ -355,8 +371,8 @@ mcheck (func) if (__malloc_initialized <= 0 && !mcheck_used) { /* We call malloc() once here to ensure it is initialized. */ - void *p = malloc (0); - free (p); + void *p = __libc_malloc (0); + __libc_free (p); old_free_hook = __free_hook; __free_hook = freehook; diff --git a/malloc/mtrace.c b/malloc/mtrace.c index 1a9522b09d..139ebc8153 100644 --- a/malloc/mtrace.c +++ b/malloc/mtrace.c @@ -40,6 +40,18 @@ # include <libio/iolibio.h> # define setvbuf(s, b, f, l) INTUSE(_IO_setvbuf) (s, b, f, l) # define fwrite(buf, size, count, fp) _IO_fwrite (buf, size, count, fp) +extern __typeof (malloc) __libc_malloc; +extern __typeof (free) __libc_free; +extern __typeof (realloc) __libc_realloc; +libc_hidden_proto (__libc_malloc) +libc_hidden_proto (__libc_realloc) +libc_hidden_proto (__libc_free) +libc_hidden_proto (__libc_memalign) +#else +# define __libc_malloc(sz) malloc (sz) +# define __libc_free(ptr) free (ptr) +# define __libc_realloc(ptr, sz) realloc (ptr, sz) +# define __libc_memalign(al, sz) memalign (al, sz) #endif #ifndef attribute_hidden @@ -154,7 +166,7 @@ tr_freehook (ptr, caller) if (tr_old_free_hook != NULL) (*tr_old_free_hook) (ptr, caller); else - free (ptr); + __libc_free (ptr); __free_hook = tr_freehook; __libc_lock_unlock (lock); } @@ -173,7 +185,7 @@ tr_mallochook (size, caller) if (tr_old_malloc_hook != NULL) hdr = (__ptr_t) (*tr_old_malloc_hook) (size, caller); else - hdr = (__ptr_t) malloc (size); + hdr = (__ptr_t) __libc_malloc (size); __malloc_hook = tr_mallochook; tr_where (caller); @@ -209,7 +221,7 @@ tr_reallochook (ptr, size, caller) if (tr_old_realloc_hook != NULL) hdr = (__ptr_t) (*tr_old_realloc_hook) (ptr, size, caller); else - hdr = (__ptr_t) realloc (ptr, size); + hdr = (__ptr_t) __libc_realloc (ptr, size); __free_hook = tr_freehook; __malloc_hook = tr_mallochook; __realloc_hook = tr_reallochook; @@ -251,7 +263,7 @@ tr_memalignhook (alignment, size, caller) if (tr_old_memalign_hook != NULL) hdr = (__ptr_t) (*tr_old_memalign_hook) (alignment, size, caller); else - hdr = (__ptr_t) memalign (alignment, size); + hdr = (__ptr_t) __libc_memalign (alignment, size); __memalign_hook = tr_memalignhook; __malloc_hook = tr_mallochook; |