__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.
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.
# 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);
if (old_free_hook != NULL)
(*old_free_hook) (ptr, caller);
else
- free (ptr);
+ __libc_free (ptr);
__free_hook = freehook;
}
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;
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;
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;
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;
# 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
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);
}
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);
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;
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;