Commit Graph

276 Commits

Author SHA1 Message Date
kmacy
3785d22822 Fix TLS on sparc64 for statically and dynamically linked binaries
Approved by: rwatson (mentor)
Reviewed by: jmg and marcel
2006-10-08 02:50:34 +00:00
jkim
5f888e4283 Clean up white spaces and fix style(9). 2006-09-19 16:48:08 +00:00
kib
7c4f63574d Fix the buggy rev. 1.117. dagmembers are only initialized for dlopen'ed
dso that are actually loading. If dso a.so depends on b.so, then dlsym
with handle from dlopen("b.so") will fail unconditionally.

Correct implementation shall use the Obj_Entry.needed list to walk
dependencies DAG.

Test provided by: jkim
Tested (prev. version) by:	jkim, Nicolas Blais <nb_root at videotron ca>, h.blanke at chello nl
Pointy hat to:	kib
Approved by:	kan (mentor)
2006-09-19 12:47:13 +00:00
ru
18a5062f98 Markup fixes. 2006-09-17 21:48:47 +00:00
kib
c0568f66e0 When looking up the symbol by dlsym, look it not only in the object
given as dso handle, but also in the implicit dependencies of that dso.

Also, const-ify the read-only parameter objlist of symlook_list.

Reported by:	"Simon 'corecode' Schubert" <corecode at fs ei tum de>
Approved by:	kan (mentor)
X-MFC-After:	6.2
2006-09-08 14:59:54 +00:00
marcel
a2087dd751 Fix the variant I allocation for KSE: Allow a larger TCB and assume
that the documented TCB is at the tail of the extended TCB. In other
words, the base of the TCB has a negative offset from the TLS.
2006-09-01 06:13:16 +00:00
marcel
deb78746ab o Fix the static TLS relocation. We were subtracting the size of
the TCB.
o  Use NULL for null pointer argument.
o  Replace magic 8 with TLS_TCB_SIZE.
2006-09-01 06:08:50 +00:00
marcel
3b0abc3d1b Use NULL for null-pointer argument. 2006-09-01 06:07:26 +00:00
marcel
6defe18053 Replace magic 16 with TLS_TCB_SIZE. 2006-08-31 19:42:39 +00:00
marcel
007866fe9c Prevent dead code elimination for the TP assignmient by using inline
assembly.
2006-08-30 00:39:07 +00:00
ru
4d582ffe09 Remove alpha left-overs. 2006-08-22 08:03:01 +00:00
delphij
bd6ce8ca51 In symlook_obj(): fix _rtld_error output.
MFC After:	2 weeks
2006-08-04 13:37:54 +00:00
des
c3c1cc1abc *thwack*! all the world's not i386.
Pointy hat to:	des
2006-03-29 12:29:01 +00:00
des
ccc2cbd6d1 Don't use dbg if it isn't defined (such as when this file is used by
code outside of rtld-elf)
2006-03-28 18:28:07 +00:00
des
eaebf6a04f Use C99's varadic macro syntax instead of gcc's. 2006-03-28 18:26:47 +00:00
davidxu
88e93ccaa9 Er, forgot to clear tls space to zero for Variant II. 2006-03-28 06:14:22 +00:00
davidxu
f8168da7cf Allocate space for thread pointer, this allows thread library to access
its pointer from begin, and simplifies _get_curthread() in libthr.
2006-03-28 06:09:24 +00:00
pav
8f5f14e1c2 - Document LD_32_* environment variables
- Mention 32-bit files in FILES section

MFC after:	1 week
2006-03-27 00:53:58 +00:00
peter
5d37faaea2 Fix a malloc overrun in 32-bit compat libmap lookup code. 2006-01-31 06:08:28 +00:00
marcel
597a7332d8 s/DT_IA64_PLT_RESERVE/DT_IA_64_PLT_RESERVE/ 2006-01-28 17:58:22 +00:00
marcel
07b3a00d83 s/R_IA64_/R_IA_64_/ 2006-01-28 17:56:16 +00:00
marcel
408ca433c5 s/R_IA64_/R_IA_64_/g as per the ia64 psABI. 2006-01-17 21:03:22 +00:00
jasone
3668a2e494 In preparation for a new malloc implementation:
* Add posix_memalign().

  * Move calloc() from calloc.c to malloc.c.  Add a calloc() implementation in
    rtld-elf in order to make the loader happy (even though calloc() isn't
    used in rtld-elf).

  * Add _malloc_prefork() and _malloc_postfork(), and use them instead of
    directly manipulating __malloc_lock.

Approved by:	phk, markm (mentor)
2006-01-12 07:28:21 +00:00
kan
7ed4cc5d21 Make lookups for relocations from old unversioned binaries return
oldest versioned symbol available. Do not accept hidden symbols for
all other versions.

Use "<obj->path>: <error message>" for all error messages in new
functions to make them more consistent.
2005-12-24 15:37:30 +00:00
kan
bb7dfbb0a8 Remove debugging statement that slipped into lone of the previous commits
unintentionally.
2005-12-23 15:30:53 +00:00
kan
0abef7d070 Initialize object dagmembers list before checking version dependencies. 2005-12-22 16:42:38 +00:00
kan
8d6f05d58b Implement ELF symbol versioning using GNU semantics. This code aims
to be compatible with symbol versioning support as implemented by
GNU libc and documented by http://people.redhat.com/~drepper/symbol-versioning
and LSB 3.0.

Implement dlvsym() function to allow lookups for a specific version of
a given symbol.
2005-12-18 19:43:33 +00:00
marcel
0a081d09f4 Make our ELF64 type definitions match standards. In particular this
means:
o  Remove Elf64_Quarter,
o  Redefine Elf64_Half to be 16-bit,
o  Redefine Elf64_Word to be 32-bit,
o  Add Elf64_Xword and Elf64_Sxword for 64-bit entities,
o  Use Elf_Size in MI code to abstract the difference between
   Elf32_Word and Elf64_Word.
o  Add Elf_Ssize as the signed counterpart of Elf_Size.

MFC after: 2 weeks
2005-12-18 04:52:37 +00:00
marcel
3394701ae1 Explicitly cast ELF_R_TYPE() to the right type. 2005-12-18 01:38:26 +00:00
jhb
2ef18a36a5 Fix a bug in dlinfo(RTLD_DI_SERINFOSIZE) requests. For each search path
we included the length of the path in the returned size but not the length
of the associated Dl_serpath structure.  Without this fix, programs
attempting to allocate a structure to hold the search path information
would allocate too small of a buffer and rtld would overrun the buffer
while filling it via a subsequent RTLD_DI_SERINFO request.

Submitted by:	"William K. Josephson" wkj at morphisms dot net
Reviewed by:	jdp
MFC after:	2 weeks
2005-11-11 19:57:41 +00:00
peter
db8830bc2d Clean out the leftovers from the i386_set_gsbase() TLS conversion.
Like on libthr, there is an i386_set_gsbase() stub implementation here
to avoid libc.so.5 issues.  This should likely be a weak symbol and I
expect this will be fixed soon.

Approved by:	re
2005-06-29 23:15:36 +00:00
ru
e2200cd04b Removed trailing whitespace.
Approved by:	re (blanket)
2005-06-14 08:41:11 +00:00
marius
4eca37e10b MFNetBSD: src/libexec/ld.elf_so/arch/sparc64/mdreloc.c 1.26 (partial)
Fix an obvious bug in the 64-bit PLT fixup: the SLLX was by 12 bits, when
it should be 32.

MFC after:	1 month
2005-06-04 20:49:15 +00:00
marcel
97c723a388 Fix the load64 and store64 macros, created to handle 8-byte unaligned
loads and stores (resp.) The ldq_u and stq_u instruction mask off the
lower 3 bits of the final address before loading from or storing to
the address, so as to avoid unaligned loads and stores. They do not
themselves allow loads from or stores to unaligned addresses. Replace
the macro definitions by a packed struct dereference.

Submitted by: Richard Henderson (rth at twiddle dot net)
2005-06-02 05:34:08 +00:00
dfr
46ba1c3d37 Align the stack to a 16 byte boundary before calling _rtld so that we can
safely initialise shared libraries that use SSE in their init sections.

MFC After: 1 week
2005-05-19 07:32:42 +00:00
davidxu
581ef8042b Fix compilation problem. 2005-04-27 13:17:23 +00:00
peter
55bba67087 Stop calling _amd64_set_gsbase() for COMPAT_32BIT. The amd64 kernel
implements i386_set_gsbase(), so there is no need for the variation.
2005-04-26 20:38:44 +00:00
peter
1fad513bbc Attempt to use i386_set_gsbase(), and gracefully fall back to LDT methods
if the direct access methods are not implemented.
2005-04-14 00:04:50 +00:00
cognet
6bb6868e16 No need to provide atomic_cmpset_32() anymore. 2005-04-07 22:04:49 +00:00
dfr
cfeb84df7a When allocating TLS and DTV, make sure that any unused slots in the DTV
are initialised to zero. When freeing TLS, don't attempt to free DTV
slots which were not used.

Pointed out by: Joerg Sonnenberger
X-MFC-After: After the branch, probably
2005-03-30 08:28:26 +00:00
cperciva
fdbab8722b If "dangerous" environment variables (LD_PRELOAD, LD_LIBMAP,
LD_LIBMAP_DISABLE, LD_LIBRARY_PATH) are used, then make sure the
libraries being loaded aren't on a noexec-mounted filesystem.

This is a compromise position: I'm assuming that nobody will be silly
enough to set the noexec mount flag on part of the default library
path, in order to avoid adding extra overhead into the common case
(where those environment variables aren't used).

Discussed with:	csjp, secteam
MFC after:	1 week
2005-03-24 10:12:29 +00:00
davidxu
4da02be559 Add locking code for tls routines. 2005-03-20 23:28:25 +00:00
dfr
0c34e7e727 Attempt to free any static TLS space used by a shared library when it
is unloaded. This allows applications which load and unload libraries
like libGL.so.1 several times to work properly.

MFC after: 2 days
2005-02-27 12:55:40 +00:00
cognet
3eb9286d7e Only provide the dummy, non-atomic atomic_cmpset_32() if
ARM_HAS_ATOMIC_CMPSET_32 isn't defined.
2005-02-26 22:49:19 +00:00
mdodd
07c084eb10 Description from Dan:
Another handy libmap patch.  Lets you do stuff like this:

	LD_LIBMAP="libpthread.so.1=libthr.so.1" mythreadedapp

	If you already have a program-specific override in libmap.conf, note
	that you must use a program-specific override in LD_LIBMAP:

	LD_LIBMAP="[mythreadedapp],libpthread.so.1=libthr.so.1" mythreadedapp

PR:		bin/74471
Submitted by:	Dan Nelson <dnelson AT allantgroup.com>
MFC after:	2 weeks
2005-02-04 02:46:41 +00:00
mdodd
c0a4f2af34 style(9) 2005-02-04 02:13:37 +00:00
cognet
d983d8756d Implement a dummy atomic_cmpset_32(). It should be safe to use it in rtld as
the signals are masked anyway.
2004-11-23 16:32:34 +00:00
jhb
59f4aaaef0 Remove 80386 support from the ELF run time linker. 2004-11-16 20:45:51 +00:00
ru
1808b89247 So do it like we do in usr.bin/tip/tip/Makefile. ;) 2004-11-14 22:18:31 +00:00
schweikh
de23b48160 Revert previous commit. As ru explains:
In the old world (as the surrounding comment in makefile says), there
 was the /usr/libexec/ld-elf.so.1 binary which is now a symlink to
 /libexec/ld-elf.so.1. To symlink, we need to make sure that the
 _target_ (and the target is /usr/libexec/ld-elf.so.1) doesn't have
 "schg" flag set. A real solution is to protect the chflags call only if
 target exists, like we do in usr.bin/tip/tip/Makefile.

Requested by:	ru
2004-11-14 21:14:06 +00:00