From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS17314 8.43.84.0/22 X-Spam-Status: No, score=-3.3 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,NICE_REPLY_A, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS,URIBL_BLACK shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 3FF951F5AE for ; Sat, 17 Jul 2021 22:09:46 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7043A383601A for ; Sat, 17 Jul 2021 22:09:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7043A383601A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1626559785; bh=905X0AK4y27fD5E4za+p4bJMLlUBsCT/xg9lW+HP4Mg=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=FiCFpCCJYoGNbrsfg2AmWnSwnOPPRgIJj7a3ySQty6DIYnYRv/nmBZpgtwnp+wvZK jA615EMdSWrqQeJQEkRVBOueaZ1V0d2MKuPoncODhtd7uwcapaO+Dtb5nW0fuPsC8O luF1tpnMTNyTtH2bBVVMLJKwdmcenbrAHZ5BJfuk= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 838423836003 for ; Sat, 17 Jul 2021 22:04:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 838423836003 Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-528-aEEtTBXLMKqXf0cKDUTv7Q-1; Sat, 17 Jul 2021 18:04:26 -0400 X-MC-Unique: aEEtTBXLMKqXf0cKDUTv7Q-1 Received: by mail-qv1-f70.google.com with SMTP id u8-20020a0562141c08b02902e82df307f0so10246718qvc.4 for ; Sat, 17 Jul 2021 15:04:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=905X0AK4y27fD5E4za+p4bJMLlUBsCT/xg9lW+HP4Mg=; b=cmd7lujx/2wIAhp0K3ogNSrC0+H+RDwvw/hRyx14ZGrQPsD+evCAqvPEXmjjeC3FyL aOAafCQf7iwPiWrf64x4JAImSL28mse2xkvxDw8fi3k6tIdioKvey2L/lxBxp6nD4FA+ 5+X97TKCB+4u02WOkXXa77FFbjS56cEOxfxNOMfOCmuNcSPI8XPu+WISBPbwMr9LR5ue g12XCZHK3OhXwkVxsN+F2k5/clbKrk90jsL/8QtqDuUGqexVOm1rihYCjnMJnZ74UZ5w KCN4kfW7O8JDADsfbryO3tl29QjUjxJjtsA5fEWDKCK+c6XuJ5sDcbcwp9bSZyEVnpNe YFaA== X-Gm-Message-State: AOAM530k42Mo03DMOr4rmJaKRQM+RtZnC6WvrGhZCkMr/IJ8+xC1oe7x DVbGrKwmjKlqTtkWjJ0v3A6EeWTnCJyaj37YKvwOQfWylKKQJhGiTzpK03/r4gE+/XBEcs7SlSj aVowR+3nx44dJuZDQ3PRq X-Received: by 2002:ac8:4f13:: with SMTP id b19mr15765997qte.185.1626559465847; Sat, 17 Jul 2021 15:04:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxLxcTlGyy/sZOzgv+TAaTOVxuvbgS/PagQSuG8gIOgxLKWkamMegZl4Wp1SHmRR0LUGQ+LLw== X-Received: by 2002:ac8:4f13:: with SMTP id b19mr15765953qte.185.1626559465151; Sat, 17 Jul 2021 15:04:25 -0700 (PDT) Received: from [192.168.1.16] (198-84-214-74.cpe.teksavvy.com. [198.84.214.74]) by smtp.gmail.com with ESMTPSA id 143sm2648053qkf.3.2021.07.17.15.04.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 17 Jul 2021 15:04:24 -0700 (PDT) Subject: Re: [PATCH v8 07/10] mtrace: Wean away from malloc hooks To: Siddhesh Poyarekar , libc-alpha@sourceware.org References: <20210713073845.504356-1-siddhesh@sourceware.org> <20210713073845.504356-8-siddhesh@sourceware.org> Organization: Red Hat Message-ID: <8f6ce396-a015-984b-d73b-909a93376554@redhat.com> Date: Sat, 17 Jul 2021 18:04:23 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210713073845.504356-8-siddhesh@sourceware.org> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Carlos O'Donell via Libc-alpha Reply-To: Carlos O'Donell Cc: fweimer@redhat.com Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org Sender: "Libc-alpha" 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 Tested-by: Carlos O'Donell > --- > 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 > + . */ > + > + > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > + > +#include > + > +#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 > . */ > > -#ifndef _MALLOC_INTERNAL > -# define _MALLOC_INTERNAL > -# include > -# include > -# include > -# include > +#if !IS_IN (libc) > +# include "mtrace-impl.c" > +#else > +# include > +# include > #endif > > -#include > -#include > -#include > -#include > -#include > - > -#include <_itoa.h> > - > -#include > -#include > - > -#include > -#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 > - > -#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.