aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2016-11-30 16:23:58 +0100
committerFlorian Weimer <fweimer@redhat.com>2016-11-30 16:23:58 +0100
commitb04beebf0731c0da49bf9113bf299acf56e4c2e5 (patch)
treee9d30cedb0a14f36f23dcab98641603c2cbe92dc
parent9e78f6f6e7134a5f299cc8de77370218f8019237 (diff)
downloadglibc-b04beebf0731c0da49bf9113bf299acf56e4c2e5.tar.xz
glibc-b04beebf0731c0da49bf9113bf299acf56e4c2e5.zip
ld.so: Remove __libc_memalign
It is no longer needed since commit 6c444ad6e953dbdf9c7be065308a0a777 (elf: Do not use memalign for TCB/TLS blocks allocation [BZ #17730]). Applications do not link against ld.so and will use the definition in libc.so, so there is no ABI impact.
-rw-r--r--ChangeLog57
-rw-r--r--elf/Versions4
-rw-r--r--elf/dl-minimal.c18
-rw-r--r--sysdeps/generic/localplt.data6
-rw-r--r--sysdeps/nacl/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/localplt.data7
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/alpha/localplt.data7
-rw-r--r--sysdeps/unix/sysv/linux/arm/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/arm/localplt.data7
-rw-r--r--sysdeps/unix/sysv/linux/hppa/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/hppa/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/i386/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/i386/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/ia64/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/ia64/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/localplt.data7
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/nios2/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/nios2/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/s390/localplt.data13
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sh/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sh/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data6
-rw-r--r--sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/ld.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist1
-rw-r--r--sysdeps/x86_64/localplt.data6
48 files changed, 106 insertions, 119 deletions
diff --git a/ChangeLog b/ChangeLog
index d01747866e..09c2e52afd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,62 @@
2016-11-30 Florian Weimer <fweimer@redhat.com>
+ Remove __libc_memalign from ld.so because it is unused.
+ * elf/dl-minimal.c: Update comment on the malloc implementation.
+ (malloc): Renamed from __libc_memalign, replacing the original
+ malloc implementation. Replace the align parameter with
+ MALLOC_ALIGNMENT.
+ * elf/Versions (ld): Update comment and remove __libc_memalign.
+ * sysdeps/nacl/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/aarch64/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/alpha/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/arm/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/hppa/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/i386/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/ia64/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/microblaze/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips32/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/nios2/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/sh/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/64/ld.abilist: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist: Likewise.
+ * sysdeps/generic/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/aarch64/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/alpha/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/arm/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/hppa/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/i386/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/ia64/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/m68k/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/microblaze/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/nios2/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data
+ (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data
+ (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data (ld.so):
+ Likewise.
+ * sysdeps/unix/sysv/linux/s390/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/sh/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data (ld.so): Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data (ld.so): Likewise.
+ * sysdeps/x86_64/localplt.data (ld.so): Likewise.
+
+2016-11-30 Florian Weimer <fweimer@redhat.com>
+
[BZ #16628]
Implement _dl_catch_error, _dl_signal_error in libc.so.
* elf/dl-error-skeleton.c: Rename from elf/dl-error.c.
diff --git a/elf/Versions b/elf/Versions
index 05e5449f4d..08f76a7a20 100644
--- a/elf/Versions
+++ b/elf/Versions
@@ -34,8 +34,8 @@ libc {
ld {
GLIBC_2.0 {
- # Function from libc.so which must be shared with libc.
- __libc_memalign; calloc; free; malloc; realloc;
+ # Functions which are interposed from libc.so.
+ calloc; free; malloc; realloc;
_r_debug;
}
diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c
index 6034b5a3fa..116ec4978c 100644
--- a/elf/dl-minimal.c
+++ b/elf/dl-minimal.c
@@ -31,8 +31,10 @@
#include <assert.h>
-/* Minimal `malloc' allocator for use while loading shared libraries.
- No block is ever freed. */
+/* 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
+ interposition. */
static void *alloc_ptr, *alloc_end, *alloc_last_block;
@@ -49,7 +51,7 @@ extern unsigned long int weak_function strtoul (const char *nptr,
/* Allocate an aligned memory block. */
void * weak_function
-__libc_memalign (size_t align, size_t n)
+malloc (size_t n)
{
if (alloc_end == 0)
{
@@ -62,8 +64,8 @@ __libc_memalign (size_t align, size_t n)
}
/* Make sure the allocation pointer is ideally aligned. */
- alloc_ptr = (void *) 0 + (((alloc_ptr - (void *) 0) + align - 1)
- & ~(align - 1));
+ alloc_ptr = (void *) 0 + (((alloc_ptr - (void *) 0) + MALLOC_ALIGNMENT - 1)
+ & ~(MALLOC_ALIGNMENT - 1));
if (alloc_ptr + n >= alloc_end || n >= -(uintptr_t) alloc_ptr)
{
@@ -88,12 +90,6 @@ __libc_memalign (size_t align, size_t n)
return alloc_last_block;
}
-void * weak_function
-malloc (size_t n)
-{
- return __libc_memalign (MALLOC_ALIGNMENT, 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. */
diff --git a/sysdeps/generic/localplt.data b/sysdeps/generic/localplt.data
index 5cf53a4c21..81c741b038 100644
--- a/sysdeps/generic/localplt.data
+++ b/sysdeps/generic/localplt.data
@@ -7,10 +7,8 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
-# The dynamic loader uses __libc_memalign internally to allocate aligned
-# TLS storage. The other malloc family of functions are expected to allow
-# user symbol interposition.
-ld.so: __libc_memalign
+# 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
diff --git a/sysdeps/nacl/ld.abilist b/sysdeps/nacl/ld.abilist
index 242f6d0723..0a52a24cad 100644
--- a/sysdeps/nacl/ld.abilist
+++ b/sysdeps/nacl/ld.abilist
@@ -1,5 +1,4 @@
GLIBC_2.22 GLIBC_2.22 A
-GLIBC_2.22 __libc_memalign F
GLIBC_2.22 __libc_stack_end D 0x4
GLIBC_2.22 __stack_chk_guard D 0x4
GLIBC_2.22 __tls_get_addr F
diff --git a/sysdeps/unix/sysv/linux/aarch64/ld.abilist b/sysdeps/unix/sysv/linux/aarch64/ld.abilist
index ab08a9845f..ec7f6174c5 100644
--- a/sysdeps/unix/sysv/linux/aarch64/ld.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/ld.abilist
@@ -1,5 +1,4 @@
GLIBC_2.17 GLIBC_2.17 A
-GLIBC_2.17 __libc_memalign F
GLIBC_2.17 __libc_stack_end D 0x8
GLIBC_2.17 __stack_chk_guard D 0x8
GLIBC_2.17 __tls_get_addr F
diff --git a/sysdeps/unix/sysv/linux/aarch64/localplt.data b/sysdeps/unix/sysv/linux/aarch64/localplt.data
index e431f368e3..bb18ff9bb2 100644
--- a/sysdeps/unix/sysv/linux/aarch64/localplt.data
+++ b/sysdeps/unix/sysv/linux/aarch64/localplt.data
@@ -7,11 +7,10 @@ libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr
-# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
-# internally to allocate aligned TLS storage. The other malloc family of
-# functions are expected to allow user symbol interposition.
+# The dynamic loader needs __tls_get_addr for TLS.
ld.so: __tls_get_addr
-ld.so: __libc_memalign
+# 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
diff --git a/sysdeps/unix/sysv/linux/alpha/ld.abilist b/sysdeps/unix/sysv/linux/alpha/ld.abilist
index 9faf6eb2c6..ca34294610 100644
--- a/sysdeps/unix/sysv/linux/alpha/ld.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/ld.abilist
@@ -1,5 +1,4 @@
GLIBC_2.0 GLIBC_2.0 A
-GLIBC_2.0 __libc_memalign F
GLIBC_2.0 _r_debug D 0x28
GLIBC_2.0 calloc F
GLIBC_2.0 free F
diff --git a/sysdeps/unix/sysv/linux/alpha/localplt.data b/sysdeps/unix/sysv/linux/alpha/localplt.data
index 298439365f..cca17f1e34 100644
--- a/sysdeps/unix/sysv/linux/alpha/localplt.data
+++ b/sysdeps/unix/sysv/linux/alpha/localplt.data
@@ -24,11 +24,10 @@ libm.so: matherr
# We used to offer inline functions that used this, so it must be exported.
# Ought to reorg things such that carg isn't thus forced to use a plt.
libm.so: __atan2
-# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
-# internally to allocate aligned TLS storage. The other malloc family of
-# functions are expected to allow user symbol interposition.
+# The dynamic loader needs __tls_get_addr for TLS.
ld.so: __tls_get_addr ?
-ld.so: __libc_memalign + RELA R_ALPHA_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_ALPHA_GLOB_DAT
ld.so: calloc + RELA R_ALPHA_GLOB_DAT
ld.so: realloc + RELA R_ALPHA_GLOB_DAT
diff --git a/sysdeps/unix/sysv/linux/arm/ld.abilist b/sysdeps/unix/sysv/linux/arm/ld.abilist
index 4de351ea3f..cbf3a3cb2e 100644
--- a/sysdeps/unix/sysv/linux/arm/ld.abilist
+++ b/sysdeps/unix/sysv/linux/arm/ld.abilist
@@ -1,5 +1,4 @@
GLIBC_2.4 GLIBC_2.4 A
-GLIBC_2.4 __libc_memalign F
GLIBC_2.4 __libc_stack_end D 0x4
GLIBC_2.4 __stack_chk_guard D 0x4
GLIBC_2.4 __tls_get_addr F
diff --git a/sysdeps/unix/sysv/linux/arm/localplt.data b/sysdeps/unix/sysv/linux/arm/localplt.data
index a5ccd7fa58..8bc876dd03 100644
--- a/sysdeps/unix/sysv/linux/arm/localplt.data
+++ b/sysdeps/unix/sysv/linux/arm/localplt.data
@@ -7,11 +7,10 @@ libc.so: realloc
libm.so: matherr
libpthread.so: __errno_location
libpthread.so: raise
-# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign
-# internally to allocate aligned TLS storage. The other malloc family of
-# functions are expected to allow user symbol interposition.
+# The dynamic loader needs __tls_get_addr for TLS.
ld.so: __tls_get_addr
-ld.so: __libc_memalign
+# 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
diff --git a/sysdeps/unix/sysv/linux/hppa/ld.abilist b/sysdeps/unix/sysv/linux/hppa/ld.abilist
index dc3ebf48c5..fc1c60ea17 100644
--- a/sysdeps/unix/sysv/linux/hppa/ld.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/ld.abilist
@@ -1,5 +1,4 @@
GLIBC_2.2 GLIBC_2.2 A
-GLIBC_2.2 __libc_memalign F
GLIBC_2.2 __libc_stack_end D 0x4
GLIBC_2.2 _dl_mcount F
GLIBC_2.2 _r_debug D 0x14