From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 64934 invoked by alias); 14 Feb 2020 22:36:59 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 64830 invoked by uid 89); 14 Feb 2020 22:36:58 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.5 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 spammy=22106 X-HELO: us-smtp-delivery-1.mimecast.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581719809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=A/jvHr9TGo+KwPB80TyuIxiOIIHbYE3X8Rz4QIyrCIo=; b=JgfFdec8KHAKYnxoCbn9X6276sjSS6Yfo2RrvtSbCBt+uFKXUKYO+QKReLRw1zPttmKL6D v7ish1l7dlVTs+t+kBWZjird/fc7fVxCxhxyvL4kqjCjFWSc1oZ8gBUNmbBSo5TV76Zq3b bXsiYc1s6f2k1kDgJFWdgkaFwlTzazI= Return-Path: Subject: Re: [PATCH 4/4] ld.so: Do not export free/calloc/malloc/realloc functions [BZ #25486] To: Florian Weimer , libc-alpha@sourceware.org References: From: Carlos O'Donell Message-ID: <52e3808c-4ff6-3c0c-ac06-bc628247fd10@redhat.com> Date: Fri, 14 Feb 2020 22:36:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2020-02/txt/msg00698.txt.bz2 On 2/8/20 2:01 PM, Florian Weimer wrote: > Exporting functions and relying on symbol interposition from libc.so > makes the choice of implementation dependent on DT_NEEDED order, which > is not what some compiler drivers expect. > > This commit replaces one magic mechanism (symbol interposition) with > another one (preprocessor-/compiler-based redirection). This makes > the hand-over from the minimal malloc to the full malloc more > explicit. I LOVE that! Explicit hand-over is much better. > Removing the ABI symbols is backwards-compatible because libc.so is > always in scope, and the dynamic loader will find the malloc-related > symbols there since commit f0b2132b35248c1f4a80f62a2c38cddcc802aa8c > ("ld.so: Support moving versioned symbols between sonames > [BZ #24741]"). Agreed. If anyone argues otherwise I'd like to see the use case e.g. ld.so without libc.so.6. > Tested on aarch64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, > s390x-linux-gnu without the stack protector, and on x86_64-linux-gnu > with stack-protector-strong. Also built with build-many-glibcs.py. OK for master. Reviewed-by: Carlos O'Donell > --- > elf/Makefile | 6 +- > elf/Versions | 3 - > elf/dl-lookup.c | 4 +- > elf/dl-minimal.c | 97 ++++++++++++++++--- > elf/rtld.c | 12 +++ > include/inline-hashtab.h | 4 +- > include/libc-symbols.h | 9 +- > include/malloc.h | 2 + > include/rtld-malloc.h | 85 ++++++++++++++++ > include/stdlib.h | 2 + > sysdeps/generic/localplt.data | 6 -- > sysdeps/mach/hurd/i386/ld.abilist | 4 - > sysdeps/mach/hurd/i386/localplt.data | 6 -- > sysdeps/unix/sysv/linux/aarch64/ld.abilist | 4 - > sysdeps/unix/sysv/linux/aarch64/localplt.data | 6 -- > sysdeps/unix/sysv/linux/alpha/ld.abilist | 4 - > sysdeps/unix/sysv/linux/alpha/localplt.data | 6 -- > sysdeps/unix/sysv/linux/arm/be/ld.abilist | 4 - > sysdeps/unix/sysv/linux/arm/le/ld.abilist | 4 - > sysdeps/unix/sysv/linux/arm/localplt.data | 6 -- > sysdeps/unix/sysv/linux/csky/ld.abilist | 4 - > sysdeps/unix/sysv/linux/csky/localplt.data | 6 -- > sysdeps/unix/sysv/linux/hppa/ld.abilist | 4 - > sysdeps/unix/sysv/linux/hppa/localplt.data | 6 -- > sysdeps/unix/sysv/linux/i386/ld.abilist | 4 - > sysdeps/unix/sysv/linux/i386/localplt.data | 6 -- > sysdeps/unix/sysv/linux/ia64/ld.abilist | 4 - > sysdeps/unix/sysv/linux/ia64/localplt.data | 6 -- > .../unix/sysv/linux/m68k/coldfire/ld.abilist | 4 - > .../sysv/linux/m68k/coldfire/localplt.data | 6 -- > .../unix/sysv/linux/m68k/m680x0/ld.abilist | 4 - > .../unix/sysv/linux/m68k/m680x0/localplt.data | 6 -- > sysdeps/unix/sysv/linux/microblaze/ld.abilist | 4 - > .../unix/sysv/linux/microblaze/localplt.data | 6 -- > .../unix/sysv/linux/mips/mips32/ld.abilist | 4 - > .../sysv/linux/mips/mips64/n32/ld.abilist | 4 - > .../sysv/linux/mips/mips64/n64/ld.abilist | 4 - > sysdeps/unix/sysv/linux/nios2/ld.abilist | 4 - > sysdeps/unix/sysv/linux/nios2/localplt.data | 6 -- > .../linux/powerpc/powerpc32/fpu/localplt.data | 6 -- > .../sysv/linux/powerpc/powerpc32/ld.abilist | 4 - > .../powerpc/powerpc32/nofpu/localplt.data | 6 -- > .../linux/powerpc/powerpc64/be/ld.abilist | 4 - > .../linux/powerpc/powerpc64/le/ld.abilist | 4 - > .../linux/powerpc/powerpc64/localplt.data | 6 -- > sysdeps/unix/sysv/linux/riscv/localplt.data | 6 -- > sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist | 4 - > sysdeps/unix/sysv/linux/s390/localplt.data | 6 -- > .../unix/sysv/linux/s390/s390-32/ld.abilist | 4 - > .../unix/sysv/linux/s390/s390-64/ld.abilist | 4 - > sysdeps/unix/sysv/linux/sh/be/ld.abilist | 4 - > sysdeps/unix/sysv/linux/sh/le/ld.abilist | 4 - > sysdeps/unix/sysv/linux/sh/localplt.data | 6 -- > .../unix/sysv/linux/sparc/sparc32/ld.abilist | 4 - > .../sysv/linux/sparc/sparc32/localplt.data | 6 -- > .../unix/sysv/linux/sparc/sparc64/ld.abilist | 4 - > .../sysv/linux/sparc/sparc64/localplt.data | 6 -- > sysdeps/unix/sysv/linux/x86_64/64/ld.abilist | 4 - > sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist | 4 - > sysdeps/x86_64/localplt.data | 6 -- > 60 files changed, 202 insertions(+), 266 deletions(-) > create mode 100644 include/rtld-malloc.h > > diff --git a/elf/Makefile b/elf/Makefile > index 60c8082d06..74462a5e65 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -486,7 +486,11 @@ $(objpfx)dl-allobjs.os: $(all-rtld-routines:%=$(objpfx)%.os) > # their implementation is provided differently in rtld, and the symbol > # discovery mechanism is not compatible with the libc implementation > # when compiled for libc. > -rtld-stubbed-symbols = > +rtld-stubbed-symbols = \ > + calloc \ > + free \ > + malloc \ > + realloc \ OK. > > # The GCC arguments that implement $(rtld-stubbed-symbols). > rtld-stubbed-symbols-args = \ > diff --git a/elf/Versions b/elf/Versions > index 3b09901f6c..705489fc51 100644 > --- a/elf/Versions > +++ b/elf/Versions > @@ -35,9 +35,6 @@ libc { > > ld { > GLIBC_2.0 { > - # Functions which are interposed from libc.so. > - calloc; free; malloc; realloc; Yay! > - > _r_debug; > } > GLIBC_2.1 { > diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c > index 378f28fa7d..12a229f06c 100644 > --- a/elf/dl-lookup.c > +++ b/elf/dl-lookup.c > @@ -291,7 +291,7 @@ do_lookup_unique (const char *undef_name, uint_fast32_t new_hash, > tab->size = newsize; > size = newsize; > entries = tab->entries = newentries; > - tab->free = free; > + tab->free = __rtld_free; OK. > } > } > else > @@ -322,7 +322,7 @@ do_lookup_unique (const char *undef_name, uint_fast32_t new_hash, > > tab->entries = entries; > tab->size = size; > - tab->free = free; > + tab->free = __rtld_free; OK. > } > > if ((type_class & ELF_RTYPE_CLASS_COPY) != 0) > diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c > index 42192f8a7b..c79ce23be4 100644 > --- a/elf/dl-minimal.c > +++ b/elf/dl-minimal.c > @@ -26,11 +26,87 @@ > #include > #include > #include > +#include > +#include > +#include > #include <_itoa.h> > #include > > #include > > +/* The rtld startup code calls __rtld_malloc_init_stubs after the > + first self-relocation to adjust the pointers to the minimal > + implementation below. Before the final relocation, > + __rtld_malloc_init_real is called to replace the pointers with the > + real implementation. */ > +__typeof (calloc) *__rtld_calloc; > +__typeof (free) *__rtld_free; > +__typeof (malloc) *__rtld_malloc; > +__typeof (realloc) *__rtld_realloc; > + > +/* Defined below. */ > +static __typeof (calloc) rtld_calloc attribute_relro; > +static __typeof (free) rtld_free attribute_relro; > +static __typeof (malloc) rtld_malloc attribute_relro; > +static __typeof (realloc) rtld_realloc attribute_relro; > + > +void > +__rtld_malloc_init_stubs (void) > +{ > + __rtld_calloc = &rtld_calloc; > + __rtld_free = &rtld_free; > + __rtld_malloc = &rtld_malloc; > + __rtld_realloc = &rtld_realloc; > +} > + > +/* Lookup NAME at VERSION in the scope of MATCH. */ > +static void * > +lookup_malloc_symbol (struct link_map *main_map, const char *name, > + struct r_found_version *version) > +{ > + > + const ElfW(Sym) *ref = NULL; > + lookup_t result = _dl_lookup_symbol_x (name, main_map, &ref, > + main_map->l_scope, > + version, 0, 0, NULL); > + > + assert (ELFW(ST_TYPE) (ref->st_info) != STT_TLS); > + void *value = DL_SYMBOL_ADDRESS (result, ref); > + > + return _dl_sym_post (result, ref, value, 0, main_map); > +} > + > +void > +__rtld_malloc_init_real (struct link_map *main_map) > +{ > + /* We cannot use relocations and initializers for this because the > + changes made by __rtld_malloc_init_stubs break REL-style > + (non-RELA) relocations that depend on the previous pointer > + contents. Also avoid direct relocation depedencies for the > + malloc symbols so this function can be called before the final > + rtld relocation (which enables RELRO, after which the pointer > + variables cannot be written to). */ > + > + struct r_found_version version; > + version.name = symbol_version_string (libc, GLIBC_2_0); > + version.hidden = 0; > + version.hash = _dl_elf_hash (version.name); > + version.filename = NULL; > + > + void *new_calloc = lookup_malloc_symbol (main_map, "calloc", &version); > + void *new_free = lookup_malloc_symbol (main_map, "free", &version); > + void *new_malloc = lookup_malloc_symbol (main_map, "malloc", &version); > + void *new_realloc = lookup_malloc_symbol (main_map, "realloc", &version); > + > + /* Update the pointers in one go, so that any internal allocations > + performed by lookup_malloc_symbol see a consistent > + implementation. */ > + __rtld_calloc = new_calloc; > + __rtld_free = new_free; > + __rtld_malloc = new_malloc; > + __rtld_realloc = new_realloc; OK. Love this manual hand-off. > +} > + > /* Minimal malloc allocator for used during initial link. After the > initial link, a full malloc implementation is interposed, either > the one in libc, or a different one supplied by the user through > @@ -38,14 +114,9 @@ > > static void *alloc_ptr, *alloc_end, *alloc_last_block; > > -/* Declarations of global functions. */ > -extern void weak_function free (void *ptr); > -extern void * weak_function realloc (void *ptr, size_t n); > - > - > /* Allocate an aligned memory block. */ > -void * weak_function > -malloc (size_t n) > +static void * > +rtld_malloc (size_t n) > { > if (alloc_end == 0) > { > @@ -87,8 +158,8 @@ malloc (size_t n) > /* We use this function occasionally since the real implementation may > be optimized when it can assume the memory it returns already is > set to NUL. */ > -void * weak_function > -calloc (size_t nmemb, size_t size) > +static void * > +rtld_calloc (size_t nmemb, size_t size) > { > /* New memory from the trivial malloc above is always already cleared. > (We make sure that's true in the rare occasion it might not be, > @@ -104,8 +175,8 @@ calloc (size_t nmemb, size_t size) > } > > /* This will rarely be called. */ > -void weak_function > -free (void *ptr) > +void > +rtld_free (void *ptr) > { > /* We can free only the last block allocated. */ > if (ptr == alloc_last_block) > @@ -118,8 +189,8 @@ free (void *ptr) > } > > /* This is only called with the most recent block returned by malloc. */ > -void * weak_function > -realloc (void *ptr, size_t n) > +void * > +rtld_realloc (void *ptr, size_t n) > { > if (ptr == NULL) > return malloc (n); OK. > diff --git a/elf/rtld.c b/elf/rtld.c > index 553cfbd1b7..51dfaf966a 100644 > --- a/elf/rtld.c > +++ b/elf/rtld.c > @@ -534,6 +534,9 @@ _dl_start (void *arg) > header table in core. Put the rest of _dl_start into a separate > function, that way the compiler cannot put accesses to the GOT > before ELF_DYNAMIC_RELOCATE. */ > + > + __rtld_malloc_init_stubs (); OK. > + > { > #ifdef DONT_USE_BOOTSTRAP_MAP > ElfW(Addr) entry = _dl_start_final (arg); > @@ -2210,6 +2213,10 @@ ERROR: '%s': cannot process note segment.\n", _dl_argv[0]); > rtld_timer_stop (&relocate_time, start); > } > > + /* The library defining malloc has already been relocated due to > + prelinking. Resolve the malloc symbols for the dynamic > + loader. */ > + __rtld_malloc_init_real (main_map); OK. > > /* Mark all the objects so we know they have been already relocated. */ > for (struct link_map *l = main_map; l != NULL; l = l->l_next) > @@ -2310,6 +2317,11 @@ ERROR: '%s': cannot process note segment.\n", _dl_argv[0]); > re-relocation, we might call a user-supplied function > (e.g. calloc from _dl_relocate_object) that uses TLS data. */ > > + /* The malloc implementation has been relocated, so resolving > + its symbols (and potentially calling IFUNC resolvers) is safe > + at this point. */ > + __rtld_malloc_init_real (main_map); OK. > + > RTLD_TIMING_VAR (start); > rtld_timer_start (&start); > > diff --git a/include/inline-hashtab.h b/include/inline-hashtab.h > index 3c09978199..856719cf9d 100644 > --- a/include/inline-hashtab.h > +++ b/include/inline-hashtab.h > @@ -51,7 +51,7 @@ htab_create (void) > return NULL; > ht->size = 3; > ht->entries = malloc (sizeof (void *) * ht->size); > - ht->free = free; > + ht->free = __rtld_free; > if (! ht->entries) > { > free (ht); > @@ -167,7 +167,7 @@ htab_expand (struct hashtab *htab, int (*hash_fn) (void *)) > > /* Use the free() corresponding to the malloc() above to free this > up. */ > - htab->free = free; > + htab->free = __rtld_free; > > return 1; > } > diff --git a/include/libc-symbols.h b/include/libc-symbols.h > index 685e20fdc0..33e2d34c53 100644 > --- a/include/libc-symbols.h > +++ b/include/libc-symbols.h > @@ -421,7 +421,14 @@ for linking") > # define _default_symbol_version(real, name, version) \ > __asm__ (".symver " #real "," #name "@@" #version) > # endif > -#else > + > +/* Evalutes to a string literal for VERSION in LIB. */ > +# define symbol_version_string(lib, version) \ > + _symbol_version_stringify_1 (VERSION_##lib##_##version) > +# define _symbol_version_stringify_1(arg) _symbol_version_stringify_2 (arg) > +# define _symbol_version_stringify_2(arg) #arg > + > +#else /* !SHARED */ > # define symbol_version(real, name, version) > # define default_symbol_version(real, name, version) \ > strong_alias(real, name) > diff --git a/include/malloc.h b/include/malloc.h > index 70d32c7c84..0765482c51 100644 > --- a/include/malloc.h > +++ b/include/malloc.h > @@ -1,7 +1,9 @@ > #ifndef _MALLOC_H > + > #include > > # ifndef _ISOMAC > +# include > > /* In the GNU libc we rename the global variable > `__malloc_initialized' to `__libc_malloc_initialized'. */ > diff --git a/include/rtld-malloc.h b/include/rtld-malloc.h > new file mode 100644 > index 0000000000..b026a3270c > --- /dev/null > +++ b/include/rtld-malloc.h > @@ -0,0 +1,85 @@ > +/* Redirection of malloc inside the dynamic linker. > + Copyright (C) 2020 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + 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 > + . */ > + > +/* The dynamic linker needs to use its own minimal malloc before libc > + has been relocated, and the libc malloc afterwards. The active > + malloc implementation is reached via the __rtld_* function pointers > + declared below. They are initialized to the minimal malloc by > + __rtld_malloc_init_stubs, and set to the final implementation by > + __rtld_malloc_init_real. */ > + > +#ifndef _RTLD_MALLOC_H > +#define _RTLD_MALLOC_H > + > +#if IS_IN (rtld) > + > +extern __typeof (calloc) *__rtld_calloc attribute_hidden; > +extern __typeof (free) *__rtld_free attribute_hidden; > +extern __typeof (malloc) *__rtld_malloc attribute_hidden; > +extern __typeof (realloc) *__rtld_realloc attribute_hidden; > + > +/* Wrapper functions which call through the function pointers above. > + Note that it is not supported to take the address of those > + functions. Instead the function pointers must be used > + directly. */ > + > +__extern_inline void * > +calloc (size_t a, size_t b) > +{ > + return __rtld_calloc (a, b); > +} > + > +__extern_inline void > +free (void *ptr) > +{ > + __rtld_free (ptr); > +} > + > +__extern_inline void * > +malloc (size_t size) > +{ > + return __rtld_malloc (size); > +} > + > +__extern_inline void * > +realloc (void *ptr, size_t size) > +{ > + return __rtld_realloc (ptr, size); > +} > + > +/* Called after the first self-relocation to activate the minimal malloc > + implementation. */ > +void __rtld_malloc_init_stubs (void) attribute_hidden; > + > +/* Called shortly before the final self-relocation (when RELRO > + variables are still writable) to activate the real malloc > + implementation. MAIN_MAP is the link map of the executable. */ > +struct link_map; > +void __rtld_malloc_init_real (struct link_map *main_map) attribute_hidden; > + > +#else /* !IS_IN (rtld) */ > + > +/* This allows static/non-rtld builds to get a pointer to the > + functions, in the same way that is required inside rtld. */ > +# define __rtld_calloc (&calloc) > +# define __rtld_free (&free) > +# define __rtld_malloc (&malloc) > +# define __rtld_realloc (&realloc) > + > +#endif /* !IS_IN (rtld) */ > +#endif /* _RTLD_MALLOC_H */ OK. > diff --git a/include/stdlib.h b/include/stdlib.h > index 1fab78aa16..926f965f69 100644 > --- a/include/stdlib.h > +++ b/include/stdlib.h > @@ -9,6 +9,8 @@ > #if !defined _ISOMAC > # include > > +# include > + > extern __typeof (strtol_l) __strtol_l; > extern __typeof (strtoul_l) __strtoul_l; > extern __typeof (strtoll_l) __strtoll_l; > diff --git a/sysdeps/generic/localplt.data b/sysdeps/generic/localplt.data > index 2d5c66ae28..e2083c0ce6 100644 > --- a/sysdeps/generic/localplt.data > +++ b/sysdeps/generic/localplt.data > @@ -7,12 +7,6 @@ libc.so: malloc > libc.so: memalign > libc.so: realloc > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free OK. > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/mach/hurd/i386/ld.abilist b/sysdeps/mach/hurd/i386/ld.abilist > index c76b913486..6f591b2496 100644 > --- a/sysdeps/mach/hurd/i386/ld.abilist > +++ b/sysdeps/mach/hurd/i386/ld.abilist > @@ -16,10 +16,6 @@ GLIBC_2.2.6 _dl_mcount F > GLIBC_2.2.6 _hurd_intr_rpc_mach_msg F > GLIBC_2.2.6 _r_debug D 0x14 > GLIBC_2.2.6 abort F > -GLIBC_2.2.6 calloc F > -GLIBC_2.2.6 free F > -GLIBC_2.2.6 malloc F > -GLIBC_2.2.6 realloc F OK. > GLIBC_2.3 ___tls_get_addr F > GLIBC_2.3 __tls_get_addr F > GLIBC_2.4 __stack_chk_guard D 0x4 > diff --git a/sysdeps/mach/hurd/i386/localplt.data b/sysdeps/mach/hurd/i386/localplt.data > index c1725d140f..102323e64f 100644 > --- a/sysdeps/mach/hurd/i386/localplt.data > +++ b/sysdeps/mach/hurd/i386/localplt.data > @@ -9,12 +9,6 @@ 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 main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc + REL R_386_GLOB_DAT > -ld.so: calloc + REL R_386_GLOB_DAT > -ld.so: realloc + REL R_386_GLOB_DAT > -ld.so: free + REL R_386_GLOB_DAT > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error + REL R_386_GLOB_DAT > ld.so: _dl_catch_error + REL R_386_GLOB_DAT > diff --git a/sysdeps/unix/sysv/linux/aarch64/ld.abilist b/sysdeps/unix/sysv/linux/aarch64/ld.abilist > index 4ffe688649..80b2fe6725 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/ld.abilist > +++ b/sysdeps/unix/sysv/linux/aarch64/ld.abilist > @@ -3,7 +3,3 @@ GLIBC_2.17 __stack_chk_guard D 0x8 > GLIBC_2.17 __tls_get_addr F > GLIBC_2.17 _dl_mcount F > GLIBC_2.17 _r_debug D 0x28 > -GLIBC_2.17 calloc F > -GLIBC_2.17 free F > -GLIBC_2.17 malloc 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 a60053b914..56f362d3a7 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/localplt.data > +++ b/sysdeps/unix/sysv/linux/aarch64/localplt.data > @@ -9,12 +9,6 @@ libc.so: realloc > libm.so: matherr > # The dynamic loader needs __tls_get_addr for TLS. > ld.so: __tls_get_addr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/alpha/ld.abilist b/sysdeps/unix/sysv/linux/alpha/ld.abilist > index 98b66edabf..98a03f611f 100644 > --- a/sysdeps/unix/sysv/linux/alpha/ld.abilist > +++ b/sysdeps/unix/sysv/linux/alpha/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x28 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.1 __libc_stack_end D 0x8 > GLIBC_2.1 _dl_mcount F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/alpha/localplt.data b/sysdeps/unix/sysv/linux/alpha/localplt.data > index c69eb04ce5..43f6fdaea1 100644 > --- a/sysdeps/unix/sysv/linux/alpha/localplt.data > +++ b/sysdeps/unix/sysv/linux/alpha/localplt.data > @@ -26,12 +26,6 @@ libm.so: matherr + RELA R_ALPHA_GLOB_DAT > libm.so: __atan2 > # The dynamic loader needs __tls_get_addr for TLS. > ld.so: __tls_get_addr ? > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc + RELA R_ALPHA_GLOB_DAT > -ld.so: calloc + RELA R_ALPHA_GLOB_DAT > -ld.so: realloc + RELA R_ALPHA_GLOB_DAT > -ld.so: free + RELA R_ALPHA_GLOB_DAT > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error + RELA R_ALPHA_GLOB_DAT > ld.so: _dl_catch_error + RELA R_ALPHA_GLOB_DAT > diff --git a/sysdeps/unix/sysv/linux/arm/be/ld.abilist b/sysdeps/unix/sysv/linux/arm/be/ld.abilist > index a301c6ebc4..cc8825c3bc 100644 > --- a/sysdeps/unix/sysv/linux/arm/be/ld.abilist > +++ b/sysdeps/unix/sysv/linux/arm/be/ld.abilist > @@ -3,7 +3,3 @@ GLIBC_2.4 __stack_chk_guard D 0x4 > GLIBC_2.4 __tls_get_addr F > GLIBC_2.4 _dl_mcount F > GLIBC_2.4 _r_debug D 0x14 > -GLIBC_2.4 calloc F > -GLIBC_2.4 free F > -GLIBC_2.4 malloc F > -GLIBC_2.4 realloc F > diff --git a/sysdeps/unix/sysv/linux/arm/le/ld.abilist b/sysdeps/unix/sysv/linux/arm/le/ld.abilist > index a301c6ebc4..cc8825c3bc 100644 > --- a/sysdeps/unix/sysv/linux/arm/le/ld.abilist > +++ b/sysdeps/unix/sysv/linux/arm/le/ld.abilist > @@ -3,7 +3,3 @@ GLIBC_2.4 __stack_chk_guard D 0x4 > GLIBC_2.4 __tls_get_addr F > GLIBC_2.4 _dl_mcount F > GLIBC_2.4 _r_debug D 0x14 > -GLIBC_2.4 calloc F > -GLIBC_2.4 free F > -GLIBC_2.4 malloc 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 7bd541c28a..0c3af0c64e 100644 > --- a/sysdeps/unix/sysv/linux/arm/localplt.data > +++ b/sysdeps/unix/sysv/linux/arm/localplt.data > @@ -8,12 +8,6 @@ libm.so: matherr > libpthread.so: raise > # The dynamic loader needs __tls_get_addr for TLS. > ld.so: __tls_get_addr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/csky/ld.abilist b/sysdeps/unix/sysv/linux/csky/ld.abilist > index 71576160ed..564ac09737 100644 > --- a/sysdeps/unix/sysv/linux/csky/ld.abilist > +++ b/sysdeps/unix/sysv/linux/csky/ld.abilist > @@ -3,7 +3,3 @@ GLIBC_2.29 __stack_chk_guard D 0x4 > GLIBC_2.29 __tls_get_addr F > GLIBC_2.29 _dl_mcount F > GLIBC_2.29 _r_debug D 0x14 > -GLIBC_2.29 calloc F > -GLIBC_2.29 free F > -GLIBC_2.29 malloc 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 14c02cb2d6..0ed8650b65 100644 > --- a/sysdeps/unix/sysv/linux/csky/localplt.data > +++ b/sysdeps/unix/sysv/linux/csky/localplt.data > @@ -6,12 +6,6 @@ libc.so: free > libc.so: malloc > libc.so: memalign > libc.so: realloc > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/hppa/ld.abilist b/sysdeps/unix/sysv/linux/hppa/ld.abilist > index 0387614d8f..d155a59843 100644 > --- a/sysdeps/unix/sysv/linux/hppa/ld.abilist > +++ b/sysdeps/unix/sysv/linux/hppa/ld.abilist > @@ -1,9 +1,5 @@ > GLIBC_2.2 __libc_stack_end D 0x4 > GLIBC_2.2 _dl_mcount F > GLIBC_2.2 _r_debug D 0x14 > -GLIBC_2.2 calloc F > -GLIBC_2.2 free F > -GLIBC_2.2 malloc F > -GLIBC_2.2 realloc F > GLIBC_2.3 __tls_get_addr F > GLIBC_2.4 __stack_chk_guard D 0x4 > diff --git a/sysdeps/unix/sysv/linux/hppa/localplt.data b/sysdeps/unix/sysv/linux/hppa/localplt.data > index 867413f0c5..09893d4dcf 100644 > --- a/sysdeps/unix/sysv/linux/hppa/localplt.data > +++ b/sysdeps/unix/sysv/linux/hppa/localplt.data > @@ -10,12 +10,6 @@ libc.so: __sigsetjmp > libc.so: _IO_funlockfile > libc.so: __errno_location > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/i386/ld.abilist b/sysdeps/unix/sysv/linux/i386/ld.abilist > index edb7307228..0478e22071 100644 > --- a/sysdeps/unix/sysv/linux/i386/ld.abilist > +++ b/sysdeps/unix/sysv/linux/i386/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x14 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.1 __libc_stack_end D 0x4 > GLIBC_2.1 _dl_mcount F > GLIBC_2.3 ___tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/i386/localplt.data b/sysdeps/unix/sysv/linux/i386/localplt.data > index f6f20a5d15..5334875b4b 100644 > --- a/sysdeps/unix/sysv/linux/i386/localplt.data > +++ b/sysdeps/unix/sysv/linux/i386/localplt.data > @@ -7,12 +7,6 @@ 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 main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc + REL R_386_GLOB_DAT > -ld.so: calloc + REL R_386_GLOB_DAT > -ld.so: realloc + REL R_386_GLOB_DAT > -ld.so: free + REL R_386_GLOB_DAT > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error + REL R_386_GLOB_DAT > ld.so: _dl_catch_error + REL R_386_GLOB_DAT > diff --git a/sysdeps/unix/sysv/linux/ia64/ld.abilist b/sysdeps/unix/sysv/linux/ia64/ld.abilist > index 82042472c3..33f91199bf 100644 > --- a/sysdeps/unix/sysv/linux/ia64/ld.abilist > +++ b/sysdeps/unix/sysv/linux/ia64/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.2 __libc_stack_end D 0x8 > GLIBC_2.2 _dl_mcount F > GLIBC_2.2 _r_debug D 0x28 > -GLIBC_2.2 calloc F > -GLIBC_2.2 free F > -GLIBC_2.2 malloc F > -GLIBC_2.2 realloc F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/ia64/localplt.data b/sysdeps/unix/sysv/linux/ia64/localplt.data > index 3820e2a4e6..1c566a503e 100644 > --- a/sysdeps/unix/sysv/linux/ia64/localplt.data > +++ b/sysdeps/unix/sysv/linux/ia64/localplt.data > @@ -6,12 +6,6 @@ libc.so: realloc > libm.so: matherr > libm.so: matherrf > libm.so: matherrl > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist > index a301c6ebc4..cc8825c3bc 100644 > --- a/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist > @@ -3,7 +3,3 @@ GLIBC_2.4 __stack_chk_guard D 0x4 > GLIBC_2.4 __tls_get_addr F > GLIBC_2.4 _dl_mcount F > GLIBC_2.4 _r_debug D 0x14 > -GLIBC_2.4 calloc F > -GLIBC_2.4 free F > -GLIBC_2.4 malloc 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 4a07bf387e..3c5efb7204 100644 > --- a/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data > +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/localplt.data > @@ -5,12 +5,6 @@ libc.so: malloc > libc.so: memalign > libc.so: realloc > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist > index c9ec45cf1c..3ba474c27f 100644 > --- a/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x14 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.1 __libc_stack_end D 0x4 > GLIBC_2.1 _dl_mcount F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data b/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data > index c70d6ea301..843f4e25f2 100644 > --- a/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data > +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/localplt.data > @@ -6,12 +6,6 @@ libc.so: malloc > libc.so: memalign > libc.so: realloc > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/microblaze/ld.abilist b/sysdeps/unix/sysv/linux/microblaze/ld.abilist > index aa0d71150a..a4933c3541 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/ld.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/ld.abilist > @@ -3,7 +3,3 @@ GLIBC_2.18 __stack_chk_guard D 0x4 > GLIBC_2.18 __tls_get_addr F > GLIBC_2.18 _dl_mcount F > GLIBC_2.18 _r_debug D 0x14 > -GLIBC_2.18 calloc F > -GLIBC_2.18 free F > -GLIBC_2.18 malloc 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 8ca23897df..0e98d5251e 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/localplt.data > +++ b/sysdeps/unix/sysv/linux/microblaze/localplt.data > @@ -7,12 +7,6 @@ libc.so: realloc > libm.so: matherr > # The dynamic loader needs __tls_get_addr for TLS. > ld.so: __tls_get_addr ? > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist > index 55d48868e8..be09641a48 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x14 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.2 __libc_stack_end D 0x4 > GLIBC_2.2 _dl_mcount F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist > index 55d48868e8..be09641a48 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x14 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.2 __libc_stack_end D 0x4 > GLIBC_2.2 _dl_mcount F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist > index 44b345b7cf..1ea36e13f2 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x28 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.2 __libc_stack_end D 0x8 > GLIBC_2.2 _dl_mcount F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/nios2/ld.abilist b/sysdeps/unix/sysv/linux/nios2/ld.abilist > index 110f1039fa..52178802dd 100644 > --- a/sysdeps/unix/sysv/linux/nios2/ld.abilist > +++ b/sysdeps/unix/sysv/linux/nios2/ld.abilist > @@ -3,7 +3,3 @@ GLIBC_2.21 __stack_chk_guard D 0x4 > GLIBC_2.21 __tls_get_addr F > GLIBC_2.21 _dl_mcount F > GLIBC_2.21 _r_debug D 0x14 > -GLIBC_2.21 calloc F > -GLIBC_2.21 free F > -GLIBC_2.21 malloc 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 3805ed56b9..b37987c7c0 100644 > --- a/sysdeps/unix/sysv/linux/nios2/localplt.data > +++ b/sysdeps/unix/sysv/linux/nios2/localplt.data > @@ -28,12 +28,6 @@ libc.so: __eqdf2 > libc.so: __extendsfdf2 > libc.so: __floatundidf ? > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data > index e822e0a480..a02dd5cc24 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data > @@ -5,12 +5,6 @@ libc.so: malloc > libc.so: memalign > libc.so: realloc > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist > index e8b0ea3a9b..4bbfba7a61 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x14 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.1 __libc_stack_end D 0x4 > GLIBC_2.1 _dl_mcount F > GLIBC_2.22 __tls_get_addr_opt F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data > index 647e735fdf..d8072597b7 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data > @@ -36,12 +36,6 @@ libc.so: realloc > libm.so: copysignl ? > libm.so: fabsl > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist > index edfc9ca56f..283fb4510b 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist > @@ -4,7 +4,3 @@ GLIBC_2.3 __libc_stack_end D 0x8 > GLIBC_2.3 __tls_get_addr F > GLIBC_2.3 _dl_mcount F > GLIBC_2.3 _r_debug D 0x28 > -GLIBC_2.3 calloc F > -GLIBC_2.3 free F > -GLIBC_2.3 malloc F > -GLIBC_2.3 realloc F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist > index 37c8f6684b..b1f313c7cd 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist > @@ -2,9 +2,5 @@ GLIBC_2.17 __libc_stack_end D 0x8 > GLIBC_2.17 __tls_get_addr F > GLIBC_2.17 _dl_mcount F > GLIBC_2.17 _r_debug D 0x28 > -GLIBC_2.17 calloc F > -GLIBC_2.17 free F > -GLIBC_2.17 malloc F > -GLIBC_2.17 realloc F > GLIBC_2.22 __tls_get_addr_opt F > GLIBC_2.23 __parse_hwcap_and_convert_at_platform F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data > index c1209336d2..bb498fbe3a 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data > @@ -4,12 +4,6 @@ libc.so: malloc > libc.so: memalign > libc.so: realloc > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/riscv/localplt.data b/sysdeps/unix/sysv/linux/riscv/localplt.data > index 14c02cb2d6..0ed8650b65 100644 > --- a/sysdeps/unix/sysv/linux/riscv/localplt.data > +++ b/sysdeps/unix/sysv/linux/riscv/localplt.data > @@ -6,12 +6,6 @@ libc.so: free > libc.so: malloc > libc.so: memalign > libc.so: realloc > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist > index b411871d06..845f356c3c 100644 > --- a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist > +++ b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist > @@ -3,7 +3,3 @@ GLIBC_2.27 __stack_chk_guard D 0x8 > GLIBC_2.27 __tls_get_addr F > GLIBC_2.27 _dl_mcount F > GLIBC_2.27 _r_debug D 0x28 > -GLIBC_2.27 calloc F > -GLIBC_2.27 free F > -GLIBC_2.27 malloc 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 e822e0a480..a02dd5cc24 100644 > --- a/sysdeps/unix/sysv/linux/s390/localplt.data > +++ b/sysdeps/unix/sysv/linux/s390/localplt.data > @@ -5,12 +5,6 @@ libc.so: malloc > libc.so: memalign > libc.so: realloc > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist > index 0576c9575e..b56f005beb 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x14 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.1 __libc_stack_end D 0x4 > GLIBC_2.1 _dl_mcount F > GLIBC_2.3 __tls_get_offset F > diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist > index 1fbb890d1d..6f788a086d 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.2 __libc_stack_end D 0x8 > GLIBC_2.2 _dl_mcount F > GLIBC_2.2 _r_debug D 0x28 > -GLIBC_2.2 calloc F > -GLIBC_2.2 free F > -GLIBC_2.2 malloc F > -GLIBC_2.2 realloc F > GLIBC_2.3 __tls_get_offset F > diff --git a/sysdeps/unix/sysv/linux/sh/be/ld.abilist b/sysdeps/unix/sysv/linux/sh/be/ld.abilist > index 0387614d8f..d155a59843 100644 > --- a/sysdeps/unix/sysv/linux/sh/be/ld.abilist > +++ b/sysdeps/unix/sysv/linux/sh/be/ld.abilist > @@ -1,9 +1,5 @@ > GLIBC_2.2 __libc_stack_end D 0x4 > GLIBC_2.2 _dl_mcount F > GLIBC_2.2 _r_debug D 0x14 > -GLIBC_2.2 calloc F > -GLIBC_2.2 free F > -GLIBC_2.2 malloc F > -GLIBC_2.2 realloc F > GLIBC_2.3 __tls_get_addr F > GLIBC_2.4 __stack_chk_guard D 0x4 > diff --git a/sysdeps/unix/sysv/linux/sh/le/ld.abilist b/sysdeps/unix/sysv/linux/sh/le/ld.abilist > index 0387614d8f..d155a59843 100644 > --- a/sysdeps/unix/sysv/linux/sh/le/ld.abilist > +++ b/sysdeps/unix/sysv/linux/sh/le/ld.abilist > @@ -1,9 +1,5 @@ > GLIBC_2.2 __libc_stack_end D 0x4 > GLIBC_2.2 _dl_mcount F > GLIBC_2.2 _r_debug D 0x14 > -GLIBC_2.2 calloc F > -GLIBC_2.2 free F > -GLIBC_2.2 malloc F > -GLIBC_2.2 realloc F > GLIBC_2.3 __tls_get_addr F > GLIBC_2.4 __stack_chk_guard D 0x4 > diff --git a/sysdeps/unix/sysv/linux/sh/localplt.data b/sysdeps/unix/sysv/linux/sh/localplt.data > index babb19d717..3225177c50 100644 > --- a/sysdeps/unix/sysv/linux/sh/localplt.data > +++ b/sysdeps/unix/sysv/linux/sh/localplt.data > @@ -12,12 +12,6 @@ libc.so: __errno_location > libm.so: matherr > # Generated by the compiler because there is no trap insn pattern. > libc.so: abort ? > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist > index fd0b33f86d..0c6610e3c2 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.0 _r_debug D 0x14 > -GLIBC_2.0 calloc F > -GLIBC_2.0 free F > -GLIBC_2.0 malloc F > -GLIBC_2.0 realloc F > GLIBC_2.1 __libc_stack_end D 0x4 > GLIBC_2.1 _dl_mcount F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data > index 6bf10ff858..be51efd566 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data > +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data > @@ -19,12 +19,6 @@ libc.so: malloc > libc.so: memalign > libc.so: realloc > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist > index 82042472c3..33f91199bf 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.2 __libc_stack_end D 0x8 > GLIBC_2.2 _dl_mcount F > GLIBC_2.2 _r_debug D 0x28 > -GLIBC_2.2 calloc F > -GLIBC_2.2 free F > -GLIBC_2.2 malloc F > -GLIBC_2.2 realloc F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data > index b881b9096d..809062d46c 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data > @@ -18,12 +18,6 @@ libc.so: malloc > libc.so: memalign > libc.so: realloc > libm.so: matherr > -# The main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc > -ld.so: calloc > -ld.so: realloc > -ld.so: free > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error > ld.so: _dl_catch_error > diff --git a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist > index 0dc9430611..d3cdf7611e 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist > @@ -1,8 +1,4 @@ > GLIBC_2.2.5 __libc_stack_end D 0x8 > GLIBC_2.2.5 _dl_mcount F > GLIBC_2.2.5 _r_debug D 0x28 > -GLIBC_2.2.5 calloc F > -GLIBC_2.2.5 free F > -GLIBC_2.2.5 malloc F > -GLIBC_2.2.5 realloc F > GLIBC_2.3 __tls_get_addr F > diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist > index 80f3161586..c70bccf782 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist > @@ -2,7 +2,3 @@ GLIBC_2.16 __libc_stack_end D 0x4 > GLIBC_2.16 __tls_get_addr F > GLIBC_2.16 _dl_mcount F > GLIBC_2.16 _r_debug D 0x14 > -GLIBC_2.16 calloc F > -GLIBC_2.16 free F > -GLIBC_2.16 malloc F > -GLIBC_2.16 realloc F > diff --git a/sysdeps/x86_64/localplt.data b/sysdeps/x86_64/localplt.data > index c27a02b66a..8f41e92870 100644 > --- a/sysdeps/x86_64/localplt.data > +++ b/sysdeps/x86_64/localplt.data > @@ -9,12 +9,6 @@ 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 main malloc is interposed into the dynamic linker, for > -# allocations after the initial link (when dlopen is used). > -ld.so: malloc + RELA R_X86_64_GLOB_DAT > -ld.so: calloc + RELA R_X86_64_GLOB_DAT > -ld.so: realloc + RELA R_X86_64_GLOB_DAT > -ld.so: free + RELA R_X86_64_GLOB_DAT > # The TLS-enabled version of these functions is interposed from libc.so. > ld.so: _dl_signal_error + RELA R_X86_64_GLOB_DAT > ld.so: _dl_catch_error + RELA R_X86_64_GLOB_DAT > -- Cheers, Carlos.