* [PATCH] Kill 2 .plt slots in ld.so and fix symbol versions in libpthread.so
@ 2003-01-03 20:33 Jakub Jelinek
2003-01-03 21:25 ` Ulrich Drepper
0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2003-01-03 20:33 UTC (permalink / raw)
To: Ulrich Drepper; +Cc: Glibc hackers
Hi!
_dl_allocate_tls and _dl_deallocate_tls were called through .plt in ld.so.
Also, IMHO libpthread.so needs to be linked against ld.so like
libc.so, because it calls various ld.so functions and accesses _rtld_global;
without that all the symbol references are unversioned.
2003-01-03 Jakub Jelinek <jakub@redhat.com>
* sysdeps/generic/ldsodefs.h (_dl_allocate_tls, _dl_deallocate_tls):
Add rtld_hidden_proto.
* sysdeps/generic/dl-tls.c (_dl_deallocate_tls): Add rtld_hidden_def.
(_dl_allocate_tls): Likewise. Remove INTDEF.
linuxthreads/
* Makefile ($(objpfx)libpthread.so): Depend on ld.so.
nptl/
* Makefile ($(objpfx)libpthread.so): Depend on ld.so.
--- libc/linuxthreads/Makefile.jj 2003-01-03 14:11:54.000000000 +0100
+++ libc/linuxthreads/Makefile 2003-01-03 15:08:31.000000000 +0100
@@ -185,7 +185,9 @@ endif
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
# This ensures they will load libc.so for needed symbols if loaded by
# a statically-linked program that hasn't already loaded it.
-$(objpfx)libpthread.so: $(libc-link.so) $(common-objpfx)libc_nonshared.a
+# Depend on ld.so too to get proper versions of ld.so symbols.
+$(objpfx)libpthread.so: $(libc-link.so) $(common-objpfx)libc_nonshared.a \
+ $(if $(filter yes,$(elf)), $(elfobjdir)/ld.so)
# Make sure we link with the thread library.
ifeq ($(build-shared),yes)
--- libc/sysdeps/generic/ldsodefs.h.jj 2002-12-20 13:36:13.000000000 +0100
+++ libc/sysdeps/generic/ldsodefs.h 2003-01-03 14:59:07.000000000 +0100
@@ -1,5 +1,5 @@
/* Run-time dynamic linker data structures for loaded ELF shared objects.
- Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1995-2002, 2003 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
@@ -769,6 +769,7 @@ rtld_hidden_proto (_dl_tls_setup)
/* Allocate memory for static TLS block (unless MEM is nonzero) and dtv. */
extern void *_dl_allocate_tls (void *mem) internal_function;
+rtld_hidden_proto (_dl_allocate_tls)
/* Get size and alignment requirements of the static TLS block. */
extern void _dl_get_tls_static_info (size_t *sizep, size_t *alignp)
@@ -783,6 +784,7 @@ rtld_hidden_proto (_dl_allocate_tls_init
/* Deallocate memory allocated with _dl_allocate_tls. */
extern void _dl_deallocate_tls (void *tcb, bool dealloc_tcb) internal_function;
+rtld_hidden_proto (_dl_deallocate_tls)
/* Return the symbol address given the map of the module it is in and
the symbol record. */
--- libc/sysdeps/generic/dl-tls.c.jj 2002-12-10 15:08:54.000000000 +0100
+++ libc/sysdeps/generic/dl-tls.c 2003-01-03 15:00:02.000000000 +0100
@@ -1,5 +1,5 @@
/* Thread-local storage handling in the ELF dynamic linker. Generic version.
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003 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
@@ -388,7 +388,7 @@ _dl_allocate_tls (void *mem)
? _dl_allocate_tls_storage ()
: allocate_dtv (mem));
}
-INTDEF(_dl_allocate_tls)
+rtld_hidden_def (_dl_allocate_tls)
void
@@ -409,7 +409,7 @@ _dl_deallocate_tls (void *tcb, bool deal
free (tcb);
}
}
-
+rtld_hidden_def (_dl_deallocate_tls)
# ifdef SHARED
--- libc/nptl/Makefile.jj 2003-01-03 01:55:50.000000000 +0100
+++ libc/nptl/Makefile 2003-01-03 15:11:32.000000000 +0100
@@ -212,8 +212,10 @@ $(objpfx)libpthread.so: +preinit += $(ob
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
# This ensures they will load libc.so for needed symbols if loaded by
# a statically-linked program that hasn't already loaded it.
+# Depend on ld.so too to get proper versions of ld.so symbols.
$(objpfx)libpthread.so: $(common-objpfx)libc.so \
- $(common-objpfx)libc_nonshared.a
+ $(common-objpfx)libc_nonshared.a \
+ $(if $(filter yes,$(elf)), $(elfobjdir)/ld.so)
# Make sure we link with the thread library.
ifeq ($(build-shared),yes)
Jakub
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] Kill 2 .plt slots in ld.so and fix symbol versions in libpthread.so
2003-01-03 20:33 [PATCH] Kill 2 .plt slots in ld.so and fix symbol versions in libpthread.so Jakub Jelinek
@ 2003-01-03 21:25 ` Ulrich Drepper
0 siblings, 0 replies; 2+ messages in thread
From: Ulrich Drepper @ 2003-01-03 21:25 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: Glibc hackers
Jakub Jelinek wrote:
> _dl_allocate_tls and _dl_deallocate_tls were called through .plt in ld.so.
> Also, IMHO libpthread.so needs to be linked against ld.so like
> libc.so, because it calls various ld.so functions and accesses _rtld_global;
> without that all the symbol references are unversioned.
I've applied the patch. Thanks,
--
--------------. ,-. 444 Castro Street
Ulrich Drepper \ ,-----------------' \ Mountain View, CA 94041 USA
Red Hat `--' drepper at redhat.com `---------------------------
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2003-01-03 21:25 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-03 20:33 [PATCH] Kill 2 .plt slots in ld.so and fix symbol versions in libpthread.so Jakub Jelinek
2003-01-03 21:25 ` Ulrich Drepper
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).