[PATCH v8 07/10] mtrace: Wean away from malloc hooks
Carlos O'Donell
carlos@redhat.com
Sat Jul 17 22:04:23 GMT 2021
On 7/13/21 3:38 AM, Siddhesh Poyarekar wrote:
> Wean mtrace away from the malloc hooks and move them into the debug
> DSO. Split the API away from the implementation so that we can add
> the API to libc.so as well as libc_malloc_debug.so, with the libc
> implementations being empty.
>
> Update localplt data since memalign no longer has any callers after
> this change.
OK for 2.34.
Tested without regression on x86_64 and i686.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
> ---
> malloc/Versions | 2 +
> malloc/malloc-debug.c | 13 +
> malloc/mtrace-impl.c | 226 +++++++++++++
> malloc/mtrace.c | 314 +-----------------
> sysdeps/generic/localplt.data | 1 -
> .../mach/hurd/i386/libc_malloc_debug.abilist | 2 +
> sysdeps/mach/hurd/i386/localplt.data | 1 -
> .../linux/aarch64/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/aarch64/localplt.data | 1 -
> .../linux/alpha/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/alpha/localplt.data | 1 -
> .../sysv/linux/arc/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/arc/localplt.data | 1 -
> .../linux/arm/be/libc_malloc_debug.abilist | 2 +
> .../linux/arm/le/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/arm/localplt.data | 1 -
> .../sysv/linux/csky/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/csky/localplt.data | 1 -
> .../sysv/linux/hppa/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/hppa/localplt.data | 1 -
> .../sysv/linux/i386/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/i386/localplt.data | 1 -
> .../sysv/linux/ia64/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/ia64/localplt.data | 1 -
> .../m68k/coldfire/libc_malloc_debug.abilist | 2 +
> .../sysv/linux/m68k/coldfire/localplt.data | 1 -
> .../m68k/m680x0/libc_malloc_debug.abilist | 2 +
> .../unix/sysv/linux/m68k/m680x0/localplt.data | 1 -
> .../microblaze/be/libc_malloc_debug.abilist | 2 +
> .../microblaze/le/libc_malloc_debug.abilist | 2 +
> .../unix/sysv/linux/microblaze/localplt.data | 1 -
> .../mips/mips32/fpu/libc_malloc_debug.abilist | 2 +
> .../mips32/nofpu/libc_malloc_debug.abilist | 2 +
> .../mips/mips64/n32/libc_malloc_debug.abilist | 2 +
> .../mips/mips64/n64/libc_malloc_debug.abilist | 2 +
> .../linux/nios2/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/nios2/localplt.data | 1 -
> .../powerpc32/fpu/libc_malloc_debug.abilist | 2 +
> .../linux/powerpc/powerpc32/fpu/localplt.data | 1 -
> .../powerpc32/nofpu/libc_malloc_debug.abilist | 2 +
> .../powerpc/powerpc32/nofpu/localplt.data | 1 -
> .../powerpc64/be/libc_malloc_debug.abilist | 2 +
> .../powerpc64/le/libc_malloc_debug.abilist | 2 +
> .../linux/powerpc/powerpc64/localplt.data | 1 -
> sysdeps/unix/sysv/linux/riscv/localplt.data | 1 -
> .../riscv/rv32/libc_malloc_debug.abilist | 2 +
> .../riscv/rv64/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/s390/localplt.data | 1 -
> .../s390/s390-32/libc_malloc_debug.abilist | 2 +
> .../s390/s390-64/libc_malloc_debug.abilist | 2 +
> .../linux/sh/be/libc_malloc_debug.abilist | 2 +
> .../linux/sh/le/libc_malloc_debug.abilist | 2 +
> sysdeps/unix/sysv/linux/sh/localplt.data | 1 -
> .../sparc/sparc32/libc_malloc_debug.abilist | 2 +
> .../sysv/linux/sparc/sparc32/localplt.data | 1 -
> .../sparc/sparc64/libc_malloc_debug.abilist | 2 +
> .../sysv/linux/sparc/sparc64/localplt.data | 1 -
> .../linux/x86_64/64/libc_malloc_debug.abilist | 2 +
> .../x86_64/x32/libc_malloc_debug.abilist | 2 +
> sysdeps/x86_64/localplt.data | 1 -
> 60 files changed, 319 insertions(+), 325 deletions(-)
> create mode 100644 malloc/mtrace-impl.c
>
> diff --git a/malloc/Versions b/malloc/Versions
> index 6548970419..71d933de19 100644
> --- a/malloc/Versions
> +++ b/malloc/Versions
> @@ -117,6 +117,8 @@ libc_malloc_debug {
>
> mcheck;
> mprobe;
> + mtrace;
> + muntrace;
OK.
> }
> GLIBC_2.2 {
> mcheck_check_all;
> diff --git a/malloc/malloc-debug.c b/malloc/malloc-debug.c
> index 7c3a1e26b5..9942124e02 100644
> --- a/malloc/malloc-debug.c
> +++ b/malloc/malloc-debug.c
> @@ -49,6 +49,7 @@ enum malloc_debug_hooks
> {
> MALLOC_NONE_HOOK = 0,
> MALLOC_MCHECK_HOOK = 1 << 0, /* mcheck() */
> + MALLOC_MTRACE_HOOK = 1 << 1, /* mtrace() */
OK.
> };
> static unsigned __malloc_debugging_hooks;
>
> @@ -71,6 +72,7 @@ __malloc_debug_disable (enum malloc_debug_hooks flag)
> }
>
> #include "mcheck.c"
> +#include "mtrace.c"
>
> extern void (*__malloc_initialize_hook) (void);
> compat_symbol_reference (libc, __malloc_initialize_hook,
> @@ -154,6 +156,8 @@ __debug_malloc (size_t bytes)
> }
> if (__is_malloc_debug_enabled (MALLOC_MCHECK_HOOK) && victim != NULL)
> victim = malloc_mcheck_after (victim, orig_bytes);
> + if (__is_malloc_debug_enabled (MALLOC_MTRACE_HOOK))
> + malloc_mtrace_after (victim, orig_bytes, RETURN_ADDRESS (0));
>
> return victim;
> }
> @@ -171,6 +175,8 @@ __debug_free (void *mem)
>
> if (__is_malloc_debug_enabled (MALLOC_MCHECK_HOOK))
> mem = free_mcheck (mem);
> + if (__is_malloc_debug_enabled (MALLOC_MTRACE_HOOK))
> + free_mtrace (mem, RETURN_ADDRESS (0));
>
> __libc_free (mem);
> }
> @@ -195,6 +201,8 @@ __debug_realloc (void *oldmem, size_t bytes)
> if (__is_malloc_debug_enabled (MALLOC_MCHECK_HOOK) && victim != NULL)
> victim = realloc_mcheck_after (victim, oldmem, orig_bytes,
> oldsize);
> + if (__is_malloc_debug_enabled (MALLOC_MTRACE_HOOK))
> + realloc_mtrace_after (victim, oldmem, orig_bytes, RETURN_ADDRESS (0));
>
> return victim;
> }
> @@ -218,6 +226,8 @@ _debug_mid_memalign (size_t alignment, size_t bytes, const void *address)
> }
> if (__is_malloc_debug_enabled (MALLOC_MCHECK_HOOK) && victim != NULL)
> victim = memalign_mcheck_after (victim, alignment, orig_bytes);
> + if (__is_malloc_debug_enabled (MALLOC_MTRACE_HOOK))
> + memalign_mtrace_after (victim, orig_bytes, address);
>
> return victim;
> }
> @@ -317,6 +327,9 @@ __debug_calloc (size_t nmemb, size_t size)
> victim = malloc_mcheck_after (victim, orig_bytes);
> memset (victim, 0, orig_bytes);
> }
> + if (__is_malloc_debug_enabled (MALLOC_MTRACE_HOOK))
> + malloc_mtrace_after (victim, orig_bytes, RETURN_ADDRESS (0));
> +
> return victim;
> }
> strong_alias (__debug_calloc, calloc)
OK.
> diff --git a/malloc/mtrace-impl.c b/malloc/mtrace-impl.c
> new file mode 100644
> index 0000000000..0e10ab7f60
> --- /dev/null
> +++ b/malloc/mtrace-impl.c
> @@ -0,0 +1,226 @@
> +/* mtrace implementation for `malloc'.
> + Copyright (C) 1991-2021 Free Software Foundation, Inc.
> + This file is part of the GNU C Library.
> + Written April 2, 1991 by John Gilmore of Cygnus Support.
> + Based on mcheck.c by Mike Haertel.
> +
> + The GNU C Library is free software; you can redistribute it and/or
> + modify it under the terms of the GNU Lesser General Public
> + License as published by the Free Software Foundation; either
> + version 2.1 of the License, or (at your option) any later version.
> +
> + The GNU C Library is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + Lesser General Public License for more details.
> +
> + You should have received a copy of the GNU Lesser General Public
> + License along with the GNU C Library; if not, see
> + <https://www.gnu.org/licenses/>. */
> +
> +
> +#include <malloc.h>
> +#include <mcheck.h>
> +
> +#include <dlfcn.h>
> +#include <fcntl.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <stdlib.h>
> +#include <inttypes.h>
> +
> +#include <libc-internal.h>
> +#include <dso_handle.h>
> +
> +#include <kernel-features.h>
> +
> +#define TRACE_BUFFER_SIZE 512
> +
> +static FILE *mallstream;
> +static const char mallenv[] = "MALLOC_TRACE";
> +static char *malloc_trace_buffer;
> +
> +static void
> +tr_where (const void *caller, Dl_info *info)
> +{
> + if (caller != NULL)
> + {
> + if (info != NULL)
> + {
> + char *buf = (char *) "";
> + if (info->dli_sname != NULL)
> + {
> + size_t len = strlen (info->dli_sname);
> + buf = alloca (len + 6 + 2 * sizeof (void *));
> + char sign;
> + ptrdiff_t offset =
> + (ptrdiff_t) info->dli_saddr - (ptrdiff_t) caller;
> +
> + if (caller >= (const void *) info->dli_saddr)
> + {
> + sign = '+';
> + offset = -offset;
> + }
> + else
> + sign = '-';
> +
> + sprintf (buf, "(%s%c%" PRIxPTR ")", info->dli_sname, sign,
> + offset);
> + }
> +
> + fprintf (mallstream, "@ %s%s%s[%p] ", info->dli_fname ? : "",
> + info->dli_fname ? ":" : "",
> + buf, caller);
> + }
> + else
> + fprintf (mallstream, "@ [%p] ", caller);
> + }
> +}
> +
> +static Dl_info *
> +lock_and_info (const void *caller, Dl_info *mem)
> +{
> + if (caller == NULL)
> + return NULL;
> +
> + Dl_info *res = dladdr (caller, mem) ? mem : NULL;
> +
> + flockfile (mallstream);
> +
> + return res;
> +}
> +
> +static void
> +free_mtrace (void *ptr, const void *caller)
> +{
> + if (ptr == NULL)
> + return;
> +
> + Dl_info mem;
> + Dl_info *info = lock_and_info (caller, &mem);
> + tr_where (caller, info);
> + /* Be sure to print it first. */
> + fprintf (mallstream, "- %p\n", ptr);
> + funlockfile (mallstream);
> +}
> +
> +static void
> +malloc_mtrace_after (void *block, size_t size, const void *caller)
> +{
> + Dl_info mem;
> + Dl_info *info = lock_and_info (caller, &mem);
> +
> + tr_where (caller, info);
> + /* We could be printing a NULL here; that's OK. */
> + fprintf (mallstream, "+ %p %#lx\n", block, (unsigned long int) size);
> +
> + funlockfile (mallstream);
> +}
> +
> +static void
> +realloc_mtrace_after (void *block, const void *oldptr, size_t size,
> + const void *caller)
> +{
> + Dl_info mem;
> + Dl_info *info = lock_and_info (caller, &mem);
> +
> + tr_where (caller, info);
> + if (block == NULL)
> + {
> + if (size != 0)
> + /* Failed realloc. */
> + fprintf (mallstream, "! %p %#lx\n", oldptr, (unsigned long int) size);
> + else
> + fprintf (mallstream, "- %p\n", oldptr);
> + }
> + else if (oldptr == NULL)
> + fprintf (mallstream, "+ %p %#lx\n", block, (unsigned long int) size);
> + else
> + {
> + fprintf (mallstream, "< %p\n", oldptr);
> + tr_where (caller, info);
> + fprintf (mallstream, "> %p %#lx\n", block, (unsigned long int) size);
> + }
> +
> + funlockfile (mallstream);
> +}
> +
> +static void
> +memalign_mtrace_after (void *block, size_t size, const void *caller)
> +{
> + Dl_info mem;
> + Dl_info *info = lock_and_info (caller, &mem);
> +
> + tr_where (caller, info);
> + /* We could be printing a NULL here; that's OK. */
> + fprintf (mallstream, "+ %p %#lx\n", block, (unsigned long int) size);
> +
> + funlockfile (mallstream);
> +}
> +
> +/* This function gets called to make sure all memory the library
> + allocates get freed and so does not irritate the user when studying
> + the mtrace output. */
> +static void
> +release_libc_mem (void)
> +{
> + /* Only call the free function if we still are running in mtrace mode. */
> + if (mallstream != NULL)
> + __libc_freeres ();
> +}
> +
> +/* We enable tracing if the environment variable MALLOC_TRACE is set. */
> +
> +static void
> +do_mtrace (void)
> +{
> + static int added_atexit_handler;
> + char *mallfile;
> +
> + /* Don't panic if we're called more than once. */
> + if (mallstream != NULL)
> + return;
> +
> + mallfile = secure_getenv (mallenv);
> + if (mallfile != NULL)
> + {
> + char *mtb = malloc (TRACE_BUFFER_SIZE);
> + if (mtb == NULL)
> + return;
> +
> + mallstream = fopen (mallfile != NULL ? mallfile : "/dev/null", "wce");
> + if (mallstream != NULL)
> + {
> + /* Be sure it doesn't malloc its buffer! */
> + malloc_trace_buffer = mtb;
> + setvbuf (mallstream, malloc_trace_buffer, _IOFBF, TRACE_BUFFER_SIZE);
> + fprintf (mallstream, "= Start\n");
> + if (!added_atexit_handler)
> + {
> + added_atexit_handler = 1;
> + __cxa_atexit ((void (*)(void *))release_libc_mem, NULL,
> + __dso_handle);
> + }
> + __malloc_debug_enable (MALLOC_MTRACE_HOOK);
> + }
> + else
> + free (mtb);
> + }
> +}
> +
> +static void
> +do_muntrace (void)
> +{
> + __malloc_debug_disable (MALLOC_MTRACE_HOOK);
> + if (mallstream == NULL)
> + return;
> +
> + /* Do the reverse of what done in mtrace: first reset the hooks and
> + MALLSTREAM, and only after that write the trailer and close the
> + file. */
> + FILE *f = mallstream;
> + mallstream = NULL;
> +
> + fprintf (f, "= End\n");
> + fclose (f);
> +}
OK.
> diff --git a/malloc/mtrace.c b/malloc/mtrace.c
> index fb58413d39..c1c836a740 100644
> --- a/malloc/mtrace.c
> +++ b/malloc/mtrace.c
> @@ -1,4 +1,4 @@
> -/* More debugging hooks for `malloc'.
> +/* mtrace API for `malloc'.
> Copyright (C) 1991-2021 Free Software Foundation, Inc.
> This file is part of the GNU C Library.
> Written April 2, 1991 by John Gilmore of Cygnus Support.
> @@ -18,40 +18,14 @@
> License along with the GNU C Library; if not, see
> <https://www.gnu.org/licenses/>. */
>
> -#ifndef _MALLOC_INTERNAL
> -# define _MALLOC_INTERNAL
> -# include <malloc.h>
> -# include <mcheck.h>
> -# include <malloc-internal.h>
> -# include <libc-lock.h>
> +#if !IS_IN (libc)
> +# include "mtrace-impl.c"
> +#else
> +# include <shlib-compat.h>
> +# include <libc-symbols.h>
> #endif
>
> -#include <dlfcn.h>
> -#include <fcntl.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include <stdlib.h>
> -
> -#include <_itoa.h>
> -
> -#include <libc-internal.h>
> -#include <dso_handle.h>
> -
> -#include <libio/iolibio.h>
> -#define setvbuf(s, b, f, l) _IO_setvbuf (s, b, f, l)
> -#define fwrite(buf, size, count, fp) _IO_fwrite (buf, size, count, fp)
> -
> -#include <kernel-features.h>
> -
> -#define TRACE_BUFFER_SIZE 512
> -
> -static FILE *mallstream;
> -static const char mallenv[] = "MALLOC_TRACE";
> -static char *malloc_trace_buffer;
> -
> -__libc_lock_define_initialized (static, lock);
> -
> -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> +#if IS_IN (libc) && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
> /* Compatibility symbols that were introduced to help break at allocation sites
> for specific memory allocations. This is unusable with ASLR, although gdb
> may allow predictable allocation addresses. Even then, gdb has watchpoint
> @@ -71,282 +45,18 @@ compat_symbol (libc, tr_break, tr_break, GLIBC_2_0);
> #endif
>
>
> -/* Old hook values. */
> -static void (*tr_old_free_hook) (void *ptr, const void *);
> -static void *(*tr_old_malloc_hook) (size_t size, const void *);
> -static void *(*tr_old_realloc_hook) (void *ptr, size_t size,
> - const void *);
> -static void *(*tr_old_memalign_hook) (size_t __alignment, size_t __size,
> - const void *);
> -
> -static void
> -tr_where (const void *caller, Dl_info *info)
> -{
> - if (caller != NULL)
> - {
> - if (info != NULL)
> - {
> - char *buf = (char *) "";
> - if (info->dli_sname != NULL)
> - {
> - size_t len = strlen (info->dli_sname);
> - buf = alloca (len + 6 + 2 * sizeof (void *));
> -
> - buf[0] = '(';
> - __stpcpy (_fitoa (caller >= (const void *) info->dli_saddr
> - ? caller - (const void *) info->dli_saddr
> - : (const void *) info->dli_saddr - caller,
> - __stpcpy (__mempcpy (buf + 1, info->dli_sname,
> - len),
> - caller >= (void *) info->dli_saddr
> - ? "+0x" : "-0x"),
> - 16, 0),
> - ")");
> - }
> -
> - fprintf (mallstream, "@ %s%s%s[%p] ",
> - info->dli_fname ? : "", info->dli_fname ? ":" : "",
> - buf, caller);
> - }
> - else
> - fprintf (mallstream, "@ [%p] ", caller);
> - }
> -}
> -
> -static Dl_info *
> -lock_and_info (const void *caller, Dl_info *mem)
> -{
> - if (caller == NULL)
> - return NULL;
> -
> - Dl_info *res = _dl_addr (caller, mem, NULL, NULL) ? mem : NULL;
> -
> - __libc_lock_lock (lock);
> -
> - return res;
> -}
> -
> -static void tr_freehook (void *, const void *);
> -static void * tr_mallochook (size_t, const void *);
> -static void * tr_reallochook (void *, size_t, const void *);
> -static void * tr_memalignhook (size_t, size_t, const void *);
> -
> -/* Set all the default non-trace hooks. */
> -static __always_inline void
> -set_default_hooks (void)
> -{
> - __free_hook = tr_old_free_hook;
> - __malloc_hook = tr_old_malloc_hook;
> - __realloc_hook = tr_old_realloc_hook;
> - __memalign_hook = tr_old_memalign_hook;
> -}
> -
> -/* Set all of the tracing hooks used for mtrace. */
> -static __always_inline void
> -set_trace_hooks (void)
> -{
> - __free_hook = tr_freehook;
> - __malloc_hook = tr_mallochook;
> - __realloc_hook = tr_reallochook;
> - __memalign_hook = tr_memalignhook;
> -}
> -
> -/* Save the current set of hooks as the default hooks. */
> -static __always_inline void
> -save_default_hooks (void)
> -{
> - tr_old_free_hook = __free_hook;
> - tr_old_malloc_hook = __malloc_hook;
> - tr_old_realloc_hook = __realloc_hook;
> - tr_old_memalign_hook = __memalign_hook;
> -}
> -
> -static void
> -tr_freehook (void *ptr, const void *caller)
> -{
> - if (ptr == NULL)
> - return;
> -
> - Dl_info mem;
> - Dl_info *info = lock_and_info (caller, &mem);
> - tr_where (caller, info);
> - /* Be sure to print it first. */
> - fprintf (mallstream, "- %p\n", ptr);
> - set_default_hooks ();
> - if (tr_old_free_hook != NULL)
> - (*tr_old_free_hook)(ptr, caller);
> - else
> - free (ptr);
> - set_trace_hooks ();
> - __libc_lock_unlock (lock);
> -}
> -
> -static void *
> -tr_mallochook (size_t size, const void *caller)
> -{
> - void *hdr;
> -
> - Dl_info mem;
> - Dl_info *info = lock_and_info (caller, &mem);
> -
> - set_default_hooks ();
> - if (tr_old_malloc_hook != NULL)
> - hdr = (void *) (*tr_old_malloc_hook)(size, caller);
> - else
> - hdr = (void *) malloc (size);
> - set_trace_hooks ();
> -
> - tr_where (caller, info);
> - /* We could be printing a NULL here; that's OK. */
> - fprintf (mallstream, "+ %p %#lx\n", hdr, (unsigned long int) size);
> -
> - __libc_lock_unlock (lock);
> -
> - return hdr;
> -}
> -
> -static void *
> -tr_reallochook (void *ptr, size_t size, const void *caller)
> -{
> - void *hdr;
> -
> - Dl_info mem;
> - Dl_info *info = lock_and_info (caller, &mem);
> -
> - set_default_hooks ();
> - if (tr_old_realloc_hook != NULL)
> - hdr = (void *) (*tr_old_realloc_hook)(ptr, size, caller);
> - else
> - hdr = (void *) realloc (ptr, size);
> - set_trace_hooks ();
> -
> - tr_where (caller, info);
> - if (hdr == NULL)
> - {
> - if (size != 0)
> - /* Failed realloc. */
> - fprintf (mallstream, "! %p %#lx\n", ptr, (unsigned long int) size);
> - else
> - fprintf (mallstream, "- %p\n", ptr);
> - }
> - else if (ptr == NULL)
> - fprintf (mallstream, "+ %p %#lx\n", hdr, (unsigned long int) size);
> - else
> - {
> - fprintf (mallstream, "< %p\n", ptr);
> - tr_where (caller, info);
> - fprintf (mallstream, "> %p %#lx\n", hdr, (unsigned long int) size);
> - }
> -
> - __libc_lock_unlock (lock);
> -
> - return hdr;
> -}
> -
> -static void *
> -tr_memalignhook (size_t alignment, size_t size, const void *caller)
> -{
> - void *hdr;
> -
> - Dl_info mem;
> - Dl_info *info = lock_and_info (caller, &mem);
> -
> - set_default_hooks ();
> - if (tr_old_memalign_hook != NULL)
> - hdr = (void *) (*tr_old_memalign_hook)(alignment, size, caller);
> - else
> - hdr = (void *) memalign (alignment, size);
> - set_trace_hooks ();
> -
> - tr_where (caller, info);
> - /* We could be printing a NULL here; that's OK. */
> - fprintf (mallstream, "+ %p %#lx\n", hdr, (unsigned long int) size);
> -
> - __libc_lock_unlock (lock);
> -
> - return hdr;
> -}
> -
> -
> -#ifdef _LIBC
> -
> -/* This function gets called to make sure all memory the library
> - allocates get freed and so does not irritate the user when studying
> - the mtrace output. */
> -static void __libc_freeres_fn_section
> -release_libc_mem (void)
> -{
> - /* Only call the free function if we still are running in mtrace mode. */
> - if (mallstream != NULL)
> - __libc_freeres ();
> -}
> -#endif
> -
> -
> -/* We enable tracing if the environment variable MALLOC_TRACE is set. */
> -
> void
> mtrace (void)
> {
> -#ifdef _LIBC
> - static int added_atexit_handler;
> +#if !IS_IN (libc)
> + do_mtrace ();
> #endif
> - char *mallfile;
> -
> - /* Don't panic if we're called more than once. */
> - if (mallstream != NULL)
> - return;
> -
> -#ifdef _LIBC
> - /* When compiling the GNU libc we use the secure getenv function
> - which prevents the misuse in case of SUID or SGID enabled
> - programs. */
> - mallfile = __libc_secure_getenv (mallenv);
> -#else
> - mallfile = getenv (mallenv);
> -#endif
> - if (mallfile != NULL)
> - {
> - char *mtb = malloc (TRACE_BUFFER_SIZE);
> - if (mtb == NULL)
> - return;
> -
> - mallstream = fopen (mallfile != NULL ? mallfile : "/dev/null", "wce");
> - if (mallstream != NULL)
> - {
> - /* Be sure it doesn't malloc its buffer! */
> - malloc_trace_buffer = mtb;
> - setvbuf (mallstream, malloc_trace_buffer, _IOFBF, TRACE_BUFFER_SIZE);
> - fprintf (mallstream, "= Start\n");
> - save_default_hooks ();
> - set_trace_hooks ();
> -#ifdef _LIBC
> - if (!added_atexit_handler)
> - {
> - added_atexit_handler = 1;
> - __cxa_atexit ((void (*)(void *))release_libc_mem, NULL,
> - __dso_handle);
> - }
> -#endif
> - }
> - else
> - free (mtb);
> - }
> }
>
> void
> muntrace (void)
> {
> - if (mallstream == NULL)
> - return;
> -
> - /* Do the reverse of what done in mtrace: first reset the hooks and
> - MALLSTREAM, and only after that write the trailer and close the
> - file. */
> - FILE *f = mallstream;
> - mallstream = NULL;
> - set_default_hooks ();
> -
> - fprintf (f, "= End\n");
> - fclose (f);
> +#if !IS_IN (libc)
> + do_muntrace ();
> +#endif
> }
OK.
> diff --git a/sysdeps/generic/localplt.data b/sysdeps/generic/localplt.data
> index e2083c0ce6..9b4f35786a 100644
> --- a/sysdeps/generic/localplt.data
> +++ b/sysdeps/generic/localplt.data
> @@ -4,7 +4,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
OK.
> libc.so: realloc
> libm.so: matherr
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/mach/hurd/i386/libc_malloc_debug.abilist b/sysdeps/mach/hurd/i386/libc_malloc_debug.abilist
> index c5e1192b27..798d3ae8a3 100644
> --- a/sysdeps/mach/hurd/i386/libc_malloc_debug.abilist
> +++ b/sysdeps/mach/hurd/i386/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.2.6 mcheck_check_all F
> GLIBC_2.2.6 mcheck_pedantic F
> GLIBC_2.2.6 memalign F
> GLIBC_2.2.6 mprobe F
> +GLIBC_2.2.6 mtrace F
> +GLIBC_2.2.6 muntrace F
> GLIBC_2.2.6 posix_memalign F
> GLIBC_2.2.6 pvalloc F
> GLIBC_2.2.6 realloc F
> diff --git a/sysdeps/mach/hurd/i386/localplt.data b/sysdeps/mach/hurd/i386/localplt.data
> index 94064ecbc5..47fbe1e2a7 100644
> --- a/sysdeps/mach/hurd/i386/localplt.data
> +++ b/sysdeps/mach/hurd/i386/localplt.data
> @@ -6,7 +6,6 @@
> libc.so: calloc + REL R_386_GLOB_DAT
> libc.so: free + REL R_386_GLOB_DAT
> libc.so: malloc + REL R_386_GLOB_DAT
> -libc.so: memalign + REL R_386_GLOB_DAT
> libc.so: realloc + REL R_386_GLOB_DAT
> libm.so: matherr + REL R_386_GLOB_DAT
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/aarch64/libc_malloc_debug.abilist
> index cc6531b017..bf543ed1e0 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.17 mcheck_check_all F
> GLIBC_2.17 mcheck_pedantic F
> GLIBC_2.17 memalign F
> GLIBC_2.17 mprobe F
> +GLIBC_2.17 mtrace F
> +GLIBC_2.17 muntrace F
> GLIBC_2.17 posix_memalign F
> GLIBC_2.17 pvalloc F
> GLIBC_2.17 realloc F
> diff --git a/sysdeps/unix/sysv/linux/aarch64/localplt.data b/sysdeps/unix/sysv/linux/aarch64/localplt.data
> index 2c14b652ef..348b3f3793 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/localplt.data
> +++ b/sysdeps/unix/sysv/linux/aarch64/localplt.data
> @@ -4,7 +4,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # If outline atomics are used, libgcc (built outside of glibc) may
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/alpha/libc_malloc_debug.abilist
> index 5fe020dca6..fa8beb5e83 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/alpha/localplt.data b/sysdeps/unix/sysv/linux/alpha/localplt.data
> index 43f6fdaea1..44bf36f4f1 100644
> --- a/sysdeps/unix/sysv/linux/alpha/localplt.data
> +++ b/sysdeps/unix/sysv/linux/alpha/localplt.data
> @@ -18,7 +18,6 @@ libc.so: _Unwind_Find_FDE
> libc.so: calloc + RELA R_ALPHA_GLOB_DAT
> libc.so: free + RELA R_ALPHA_GLOB_DAT
> libc.so: malloc + RELA R_ALPHA_GLOB_DAT
> -libc.so: memalign + RELA R_ALPHA_GLOB_DAT
> libc.so: realloc + RELA R_ALPHA_GLOB_DAT
> libm.so: matherr + RELA R_ALPHA_GLOB_DAT
> # We used to offer inline functions that used this, so it must be exported.
> diff --git a/sysdeps/unix/sysv/linux/arc/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/arc/libc_malloc_debug.abilist
> index b5e9d10b9f..14bad4f83a 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.32 mcheck_check_all F
> GLIBC_2.32 mcheck_pedantic F
> GLIBC_2.32 memalign F
> GLIBC_2.32 mprobe F
> +GLIBC_2.32 mtrace F
> +GLIBC_2.32 muntrace F
> GLIBC_2.32 posix_memalign F
> GLIBC_2.32 pvalloc F
> GLIBC_2.32 realloc F
> diff --git a/sysdeps/unix/sysv/linux/arc/localplt.data b/sysdeps/unix/sysv/linux/arc/localplt.data
> index 4479e8ee8a..ac5332caf7 100644
> --- a/sysdeps/unix/sysv/linux/arc/localplt.data
> +++ b/sysdeps/unix/sysv/linux/arc/localplt.data
> @@ -1,6 +1,5 @@
> libc.so: realloc
> libc.so: malloc
> -libc.so: memalign
> libc.so: calloc
> libc.so: free
> # At -Os, a struct assignment in libgcc-static pulls this in
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/arm/be/libc_malloc_debug.abilist
> index c90d894b22..97b470a989 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.4 mcheck_check_all F
> GLIBC_2.4 mcheck_pedantic F
> GLIBC_2.4 memalign F
> GLIBC_2.4 mprobe F
> +GLIBC_2.4 mtrace F
> +GLIBC_2.4 muntrace F
> GLIBC_2.4 posix_memalign F
> GLIBC_2.4 pvalloc F
> GLIBC_2.4 realloc F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/arm/le/libc_malloc_debug.abilist
> index c90d894b22..97b470a989 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.4 mcheck_check_all F
> GLIBC_2.4 mcheck_pedantic F
> GLIBC_2.4 memalign F
> GLIBC_2.4 mprobe F
> +GLIBC_2.4 mtrace F
> +GLIBC_2.4 muntrace F
> GLIBC_2.4 posix_memalign F
> GLIBC_2.4 pvalloc F
> GLIBC_2.4 realloc F
> diff --git a/sysdeps/unix/sysv/linux/arm/localplt.data b/sysdeps/unix/sysv/linux/arm/localplt.data
> index eb315da2f1..78896444c6 100644
> --- a/sysdeps/unix/sysv/linux/arm/localplt.data
> +++ b/sysdeps/unix/sysv/linux/arm/localplt.data
> @@ -1,7 +1,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: raise
> libc.so: realloc
> libm.so: matherr
> diff --git a/sysdeps/unix/sysv/linux/csky/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/csky/libc_malloc_debug.abilist
> index 932cbbd382..eac818b681 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.29 mcheck_check_all F
> GLIBC_2.29 mcheck_pedantic F
> GLIBC_2.29 memalign F
> GLIBC_2.29 mprobe F
> +GLIBC_2.29 mtrace F
> +GLIBC_2.29 muntrace F
> GLIBC_2.29 posix_memalign F
> GLIBC_2.29 pvalloc F
> GLIBC_2.29 realloc F
> diff --git a/sysdeps/unix/sysv/linux/csky/localplt.data b/sysdeps/unix/sysv/linux/csky/localplt.data
> index 0ed8650b65..817ab2659a 100644
> --- a/sysdeps/unix/sysv/linux/csky/localplt.data
> +++ b/sysdeps/unix/sysv/linux/csky/localplt.data
> @@ -4,7 +4,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> # The TLS-enabled version of these functions is interposed from libc.so.
> ld.so: _dl_signal_error
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/hppa/libc_malloc_debug.abilist
> index 88ed3c09c8..88cdf04cbe 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.2 mcheck_check_all F
> GLIBC_2.2 mcheck_pedantic F
> GLIBC_2.2 memalign F
> GLIBC_2.2 mprobe F
> +GLIBC_2.2 mtrace F
> +GLIBC_2.2 muntrace F
> GLIBC_2.2 posix_memalign F
> GLIBC_2.2 pvalloc F
> GLIBC_2.2 realloc F
> diff --git a/sysdeps/unix/sysv/linux/hppa/localplt.data b/sysdeps/unix/sysv/linux/hppa/localplt.data
> index 09893d4dcf..baf857a750 100644
> --- a/sysdeps/unix/sysv/linux/hppa/localplt.data
> +++ b/sysdeps/unix/sysv/linux/hppa/localplt.data
> @@ -4,7 +4,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libc.so: __sigsetjmp
> libc.so: _IO_funlockfile
> diff --git a/sysdeps/unix/sysv/linux/i386/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/i386/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/i386/localplt.data b/sysdeps/unix/sysv/linux/i386/localplt.data
> index 5334875b4b..f9bf7fb410 100644
> --- a/sysdeps/unix/sysv/linux/i386/localplt.data
> +++ b/sysdeps/unix/sysv/linux/i386/localplt.data
> @@ -4,7 +4,6 @@ libc.so: _Unwind_Find_FDE + REL R_386_GLOB_DAT
> libc.so: calloc + REL R_386_GLOB_DAT
> libc.so: free + REL R_386_GLOB_DAT
> libc.so: malloc + REL R_386_GLOB_DAT
> -libc.so: memalign + REL R_386_GLOB_DAT
> libc.so: realloc + REL R_386_GLOB_DAT
> libm.so: matherr + REL R_386_GLOB_DAT
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/ia64/libc_malloc_debug.abilist
> index bc8a2be276..ee940be29a 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.2 mcheck_check_all F
> GLIBC_2.2 mcheck_pedantic F
> GLIBC_2.2 memalign F
> GLIBC_2.2 mprobe F
> +GLIBC_2.2 mtrace F
> +GLIBC_2.2 muntrace F
> GLIBC_2.2 posix_memalign F
> GLIBC_2.2 pvalloc F
> GLIBC_2.2 realloc F
> diff --git a/sysdeps/unix/sysv/linux/ia64/localplt.data b/sysdeps/unix/sysv/linux/ia64/localplt.data
> index 1c566a503e..174fb88128 100644
> --- a/sysdeps/unix/sysv/linux/ia64/localplt.data
> +++ b/sysdeps/unix/sysv/linux/ia64/localplt.data
> @@ -1,7 +1,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> libm.so: matherrf
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc_malloc_debug.abilist
> index c90d894b22..97b470a989 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.4 mcheck_check_all F
> GLIBC_2.4 mcheck_pedantic F
> GLIBC_2.4 memalign F
> GLIBC_2.4 mprobe F
> +GLIBC_2.4 mtrace F
> +GLIBC_2.4 muntrace F
> GLIBC_2.4 posix_memalign F
> GLIBC_2.4 pvalloc F
> GLIBC_2.4 realloc F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data b/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data
> index 3c5efb7204..42fa90508c 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data
> @@ -2,7 +2,6 @@ libc.so: __m68k_read_tp
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data b/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data
> index 843f4e25f2..34bd4c1aca 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data
> @@ -3,7 +3,6 @@ libc.so: __m68k_read_tp
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc_malloc_debug.abilist
> index 0502f3001e..48db59ebb1 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.18 mcheck_check_all F
> GLIBC_2.18 mcheck_pedantic F
> GLIBC_2.18 memalign F
> GLIBC_2.18 mprobe F
> +GLIBC_2.18 mtrace F
> +GLIBC_2.18 muntrace F
> GLIBC_2.18 posix_memalign F
> GLIBC_2.18 pvalloc F
> GLIBC_2.18 realloc F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc_malloc_debug.abilist
> index 0502f3001e..48db59ebb1 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.18 mcheck_check_all F
> GLIBC_2.18 mcheck_pedantic F
> GLIBC_2.18 memalign F
> GLIBC_2.18 mprobe F
> +GLIBC_2.18 mtrace F
> +GLIBC_2.18 muntrace F
> GLIBC_2.18 posix_memalign F
> GLIBC_2.18 pvalloc F
> GLIBC_2.18 realloc F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/localplt.data b/sysdeps/unix/sysv/linux/microblaze/localplt.data
> index 0e98d5251e..c3801314c9 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/localplt.data
> +++ b/sysdeps/unix/sysv/linux/microblaze/localplt.data
> @@ -2,7 +2,6 @@ libc.so: __errno_location
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # The dynamic loader needs __tls_get_addr for TLS.
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc_malloc_debug.abilist
> index 5fe020dca6..fa8beb5e83 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/nios2/libc_malloc_debug.abilist
> index 3a4599773d..3a3f0a2861 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.21 mcheck_check_all F
> GLIBC_2.21 mcheck_pedantic F
> GLIBC_2.21 memalign F
> GLIBC_2.21 mprobe F
> +GLIBC_2.21 mtrace F
> +GLIBC_2.21 muntrace F
> GLIBC_2.21 posix_memalign F
> GLIBC_2.21 pvalloc F
> GLIBC_2.21 realloc F
> diff --git a/sysdeps/unix/sysv/linux/nios2/localplt.data b/sysdeps/unix/sysv/linux/nios2/localplt.data
> index b37987c7c0..17fcfdd4db 100644
> --- a/sysdeps/unix/sysv/linux/nios2/localplt.data
> +++ b/sysdeps/unix/sysv/linux/nios2/localplt.data
> @@ -6,7 +6,6 @@ libc.so: __gedf2
> libc.so: malloc
> libc.so: __gtsf2 ?
> libc.so: __nesf2
> -libc.so: memalign
> libc.so: __mulsf3
> libc.so: __floatunsisf
> libc.so: __addsf3
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data
> index a02dd5cc24..c0af84eef7 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data
> @@ -2,7 +2,6 @@ libc.so: _Unwind_Find_FDE
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data
> index d8072597b7..581e54b95c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data
> @@ -30,7 +30,6 @@ libc.so: abort ?
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: memset ?
> libc.so: realloc
> libm.so: copysignl ?
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc_malloc_debug.abilist
> index 0696d526d4..9e0c7a48c0 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.3 mcheck_check_all F
> GLIBC_2.3 mcheck_pedantic F
> GLIBC_2.3 memalign F
> GLIBC_2.3 mprobe F
> +GLIBC_2.3 mtrace F
> +GLIBC_2.3 muntrace F
> GLIBC_2.3 posix_memalign F
> GLIBC_2.3 pvalloc F
> GLIBC_2.3 realloc F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc_malloc_debug.abilist
> index cc6531b017..bf543ed1e0 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.17 mcheck_check_all F
> GLIBC_2.17 mcheck_pedantic F
> GLIBC_2.17 memalign F
> GLIBC_2.17 mprobe F
> +GLIBC_2.17 mtrace F
> +GLIBC_2.17 muntrace F
> GLIBC_2.17 posix_memalign F
> GLIBC_2.17 pvalloc F
> GLIBC_2.17 realloc F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data
> index bb498fbe3a..d69b7ae646 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data
> @@ -1,7 +1,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/riscv/localplt.data b/sysdeps/unix/sysv/linux/riscv/localplt.data
> index 0a235592c3..e6d5330d5b 100644
> --- a/sysdeps/unix/sysv/linux/riscv/localplt.data
> +++ b/sysdeps/unix/sysv/linux/riscv/localplt.data
> @@ -4,7 +4,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: memset ?
> libc.so: realloc
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc_malloc_debug.abilist
> index 4ded2f9640..e2448d7b83 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.33 mcheck_check_all F
> GLIBC_2.33 mcheck_pedantic F
> GLIBC_2.33 memalign F
> GLIBC_2.33 mprobe F
> +GLIBC_2.33 mtrace F
> +GLIBC_2.33 muntrace F
> GLIBC_2.33 posix_memalign F
> GLIBC_2.33 pvalloc F
> GLIBC_2.33 realloc F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc_malloc_debug.abilist
> index f878912895..622ee2e67a 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.27 mcheck_check_all F
> GLIBC_2.27 mcheck_pedantic F
> GLIBC_2.27 memalign F
> GLIBC_2.27 mprobe F
> +GLIBC_2.27 mtrace F
> +GLIBC_2.27 muntrace F
> GLIBC_2.27 posix_memalign F
> GLIBC_2.27 pvalloc F
> GLIBC_2.27 realloc F
> diff --git a/sysdeps/unix/sysv/linux/s390/localplt.data b/sysdeps/unix/sysv/linux/s390/localplt.data
> index a02dd5cc24..c0af84eef7 100644
> --- a/sysdeps/unix/sysv/linux/s390/localplt.data
> +++ b/sysdeps/unix/sysv/linux/s390/localplt.data
> @@ -2,7 +2,6 @@ libc.so: _Unwind_Find_FDE
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc_malloc_debug.abilist
> index bc8a2be276..ee940be29a 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.2 mcheck_check_all F
> GLIBC_2.2 mcheck_pedantic F
> GLIBC_2.2 memalign F
> GLIBC_2.2 mprobe F
> +GLIBC_2.2 mtrace F
> +GLIBC_2.2 muntrace F
> GLIBC_2.2 posix_memalign F
> GLIBC_2.2 pvalloc F
> GLIBC_2.2 realloc F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/sh/be/libc_malloc_debug.abilist
> index 88ed3c09c8..88cdf04cbe 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.2 mcheck_check_all F
> GLIBC_2.2 mcheck_pedantic F
> GLIBC_2.2 memalign F
> GLIBC_2.2 mprobe F
> +GLIBC_2.2 mtrace F
> +GLIBC_2.2 muntrace F
> GLIBC_2.2 posix_memalign F
> GLIBC_2.2 pvalloc F
> GLIBC_2.2 realloc F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/sh/le/libc_malloc_debug.abilist
> index 88ed3c09c8..88cdf04cbe 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.2 mcheck_check_all F
> GLIBC_2.2 mcheck_pedantic F
> GLIBC_2.2 memalign F
> GLIBC_2.2 mprobe F
> +GLIBC_2.2 mtrace F
> +GLIBC_2.2 muntrace F
> GLIBC_2.2 posix_memalign F
> GLIBC_2.2 pvalloc F
> GLIBC_2.2 realloc F
> diff --git a/sysdeps/unix/sysv/linux/sh/localplt.data b/sysdeps/unix/sysv/linux/sh/localplt.data
> index 3225177c50..6491b9e37b 100644
> --- a/sysdeps/unix/sysv/linux/sh/localplt.data
> +++ b/sysdeps/unix/sysv/linux/sh/localplt.data
> @@ -4,7 +4,6 @@
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libc.so: _Unwind_Find_FDE
> libc.so: _exit
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc_malloc_debug.abilist
> index c847b1ee49..96955644d5 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc_malloc_debug.abilist
> @@ -8,6 +8,8 @@ GLIBC_2.0 malloc F
> GLIBC_2.0 mcheck F
> GLIBC_2.0 memalign F
> GLIBC_2.0 mprobe F
> +GLIBC_2.0 mtrace F
> +GLIBC_2.0 muntrace F
> GLIBC_2.0 pvalloc F
> GLIBC_2.0 realloc F
> GLIBC_2.0 valloc F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data
> index be51efd566..38309a1393 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data
> @@ -16,7 +16,6 @@ libc.so: _Unwind_Find_FDE
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc_malloc_debug.abilist
> index bc8a2be276..ee940be29a 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.2 mcheck_check_all F
> GLIBC_2.2 mcheck_pedantic F
> GLIBC_2.2 memalign F
> GLIBC_2.2 mprobe F
> +GLIBC_2.2 mtrace F
> +GLIBC_2.2 muntrace F
> GLIBC_2.2 posix_memalign F
> GLIBC_2.2 pvalloc F
> GLIBC_2.2 realloc F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data
> index 809062d46c..6a216f3a5a 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data
> @@ -15,7 +15,6 @@ libc.so: _Unwind_Find_FDE
> libc.so: calloc
> libc.so: free
> libc.so: malloc
> -libc.so: memalign
> libc.so: realloc
> libm.so: matherr
> # The TLS-enabled version of these functions is interposed from libc.so.
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc_malloc_debug.abilist
> index 3fa0aa3cc3..e734b8f088 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.2.5 mcheck_check_all F
> GLIBC_2.2.5 mcheck_pedantic F
> GLIBC_2.2.5 memalign F
> GLIBC_2.2.5 mprobe F
> +GLIBC_2.2.5 mtrace F
> +GLIBC_2.2.5 muntrace F
> GLIBC_2.2.5 posix_memalign F
> GLIBC_2.2.5 pvalloc F
> GLIBC_2.2.5 realloc F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc_malloc_debug.abilist
> index 4c213fcbef..14efc6602f 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc_malloc_debug.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc_malloc_debug.abilist
> @@ -11,6 +11,8 @@ GLIBC_2.16 mcheck_check_all F
> GLIBC_2.16 mcheck_pedantic F
> GLIBC_2.16 memalign F
> GLIBC_2.16 mprobe F
> +GLIBC_2.16 mtrace F
> +GLIBC_2.16 muntrace F
> GLIBC_2.16 posix_memalign F
> GLIBC_2.16 pvalloc F
> GLIBC_2.16 realloc F
> diff --git a/sysdeps/x86_64/localplt.data b/sysdeps/x86_64/localplt.data
> index 8f41e92870..d1f2e26612 100644
> --- a/sysdeps/x86_64/localplt.data
> +++ b/sysdeps/x86_64/localplt.data
> @@ -6,7 +6,6 @@
> libc.so: calloc + RELA R_X86_64_GLOB_DAT
> libc.so: free + RELA R_X86_64_GLOB_DAT
> libc.so: malloc + RELA R_X86_64_GLOB_DAT
> -libc.so: memalign + RELA R_X86_64_GLOB_DAT
> libc.so: realloc + RELA R_X86_64_GLOB_DAT
> libm.so: matherr + RELA R_X86_64_GLOB_DAT
> # The TLS-enabled version of these functions is interposed from libc.so.
>
OK.
--
Cheers,
Carlos.
More information about the Libc-alpha
mailing list