#
6a068746 |
| 15-May-2012 |
Alexander Motin <mav@FreeBSD.org> |
MFC
|
#
f6265192 |
| 30-Apr-2012 |
Konstantin Belousov <kib@FreeBSD.org> |
Add GNU hash support for rtld.
Based on dragonflybsd support for GNU hash by John Marino <draco marino st> Reviewed by: kan Tested by: bapt MFC after: 2 weeks
|
#
38f1b189 |
| 26-Apr-2012 |
Peter Grehan <grehan@FreeBSD.org> |
IFC @ r234692
sys/amd64/include/cpufunc.h sys/amd64/include/fpu.h sys/amd64/amd64/fpu.c sys/amd64/vmm/vmm.c
- Add API to allow vmm FPU state init/save/restore.
FP stuff discussed with: kib
|
Revision tags: release/8.3.0_cvs, release/8.3.0 |
|
#
8833b15f |
| 03-Apr-2012 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Merge head r232686 through r233825 into projects/pf/head.
|
#
082f959a |
| 20-Mar-2012 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix several problems with our ELF filters implementation.
Do not relocate twice an object which happens to be needed by loaded binary (or dso) and some filtee opened due to symbol resolution when re
Fix several problems with our ELF filters implementation.
Do not relocate twice an object which happens to be needed by loaded binary (or dso) and some filtee opened due to symbol resolution when relocating need objects. Record the state of the relocation processing in Obj_Entry and short-circuit relocate_objects() if current object already processed.
Do not call constructors for filtees loaded during the early relocation processing before image is initialized enough to run user-provided code. Filtees are loaded using dlopen_object(), which normally performs relocation and initialization. If filtee is lazy-loaded during the relocation of dso needed by the main object, dlopen_object() runs too earlier, when most runtime services are not yet ready.
Postpone the constructors call to the time when main binary and depended libraries constructors are run, passing the new flag RTLD_LO_EARLY to dlopen_object(). Symbol lookups callers inform symlook_* functions about early stage of initialization with SYMLOOK_EARLY. Pass flags through all functions participating in object relocation.
Use the opportunity and fix flags argument to find_symdef() in arch-specific reloc.c to use proper name SYMLOOK_IN_PLT instead of true, which happen to have the same numeric value.
Reported and tested by: theraven Reviewed by: kan MFC after: 2 weeks
show more ...
|
#
8fa0b743 |
| 23-Jan-2012 |
Xin LI <delphij@FreeBSD.org> |
IFC @230489 (pending review).
|
#
581f58e7 |
| 17-Jan-2012 |
Ed Schouten <ed@FreeBSD.org> |
Remove unneeded dtv variable.
It is only assigned and not used at all. The object files stay identical when the variables are removed.
Approved by: kib
|
#
80dbff4e |
| 04-Jan-2012 |
Sean Bruno <sbruno@FreeBSD.org> |
IFC to head to catch up the bhyve branch
Approved by: grehan@
|
Revision tags: release/9.0.0 |
|
#
5734c46c |
| 14-Dec-2011 |
Konstantin Belousov <kib@FreeBSD.org> |
_rtld_bind() read-locks the bind lock, and possible plt resolution from the dispatcher would also acquire bind lock in read mode, which is the supported operation. plt is explicitely designed to allo
_rtld_bind() read-locks the bind lock, and possible plt resolution from the dispatcher would also acquire bind lock in read mode, which is the supported operation. plt is explicitely designed to allow safe multithreaded updates, so the shared lock do not cause problems.
The error in r228435 is that it allows read lock acquisition after the write lock for the bind block. If we dlopened the shared object that contains IRELATIVE or jump slot which target is STT_GNU_IFUNC, then possible recursive plt resolve from the dispatcher would cause it.
Postpone the resolution for irelative/ifunc right before initializers are called, and drop bind lock around calls to dispatcher. Use initlist to iterate over the objects instead of the ->next, due to drop of the bind lock in iteration.
For i386/reloc.c:reloc_iresolve(), fix calculation of the dispatch function address for dso, by taking into account possible non-zero relocbase.
MFC after: 3 weeks
show more ...
|
#
6be4b697 |
| 12-Dec-2011 |
Konstantin Belousov <kib@FreeBSD.org> |
Add support for STT_GNU_IFUNC and R_MACHINE_IRELATIVE GNU extensions to rtld on 386 and amd64. This adds runtime bits neccessary for the use of the dispatch functions from the dynamically-linked exec
Add support for STT_GNU_IFUNC and R_MACHINE_IRELATIVE GNU extensions to rtld on 386 and amd64. This adds runtime bits neccessary for the use of the dispatch functions from the dynamically-linked executables and shared libraries.
To allow use of external references from the dispatch function, resolution of the R_MACHINE_IRESOLVE relocations in PLT is postponed until GOT entries for PLT are prepared, and normal resolution of the GOT entries is finished. Similar to how it is done by GNU, IRELATIVE relocations are resolved in advance, instead of normal lazy handling for PLT.
Move the init_pltgot() call before the relocations for the object are processed.
MFC after: 3 weeks
show more ...
|
Revision tags: release/7.4.0_cvs, release/8.2.0_cvs, release/7.4.0, release/8.2.0 |
|
#
8569deaf |
| 25-Dec-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
Implement support for ELF filters in rtld. Both normal and auxillary filters are implemented.
Filtees are loaded on demand, unless LD_LOADFLTR environment variable is set or -z loadfltr was specifie
Implement support for ELF filters in rtld. Both normal and auxillary filters are implemented.
Filtees are loaded on demand, unless LD_LOADFLTR environment variable is set or -z loadfltr was specified during the linking. This forces rtld to upgrade read-locked rtld_bind_lock to write lock when it encounters an object with filter during symbol lookup.
Consolidate common arguments of the symbol lookup functions in the SymLook structure. Track the state of the rtld locks in the RtldLockState structure. Pass local RtldLockState through the rtld symbol lookup calls to allow lock upgrades.
Reviewed by: kan Tested by: Mykola Dzham <i levsha me>, nwhitehorn (powerpc)
show more ...
|
Revision tags: release/8.1.0_cvs, release/8.1.0 |
|
#
1dfdc15b |
| 18-May-2010 |
Roman Divacky <rdivacky@FreeBSD.org> |
Only use the cache after the early stage of loading. This is because calling mmap() etc. may use GOT which is not set up yet. Use calloc() instead of mmap() in cases where this was the case before (s
Only use the cache after the early stage of loading. This is because calling mmap() etc. may use GOT which is not set up yet. Use calloc() instead of mmap() in cases where this was the case before (sparc64, powerpc, arm).
Submitted by: Dimitry Andric (dimitry andric com) Reviewed by: kan Approved by: ed (mentor)
show more ...
|
Revision tags: release/7.3.0_cvs, release/7.3.0, release/8.0.0_cvs, release/8.0.0, release/7.2.0_cvs, release/7.2.0, release/7.1.0_cvs, release/7.1.0, release/6.4.0_cvs, release/6.4.0, release/7.0.0_cvs, release/7.0.0, release/6.3.0_cvs, release/6.3.0, release/6.2.0_cvs, release/6.2.0, release/5.5.0_cvs, release/5.5.0, release/6.1.0_cvs, release/6.1.0 |
|
#
c0d2338c |
| 28-Mar-2006 |
David Xu <davidxu@FreeBSD.org> |
Allocate space for thread pointer, this allows thread library to access its pointer from begin, and simplifies _get_curthread() in libthr.
|
#
0eb88f20 |
| 18-Dec-2005 |
Alexander Kabaev <kan@FreeBSD.org> |
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/symb
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.
show more ...
|
#
55dfaa91 |
| 18-Dec-2005 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Explicitly cast ELF_R_TYPE() to the right type.
|
Revision tags: release/6.0.0_cvs, release/6.0.0, release/5.4.0_cvs, release/5.4.0, release/4.11.0_cvs, release/4.11.0, release/5.3.0_cvs, release/5.3.0 |
|
#
017246d0 |
| 03-Aug-2004 |
Doug Rabson <dfr@FreeBSD.org> |
Add support for Thread Local Storage.
|
Revision tags: release/4.10.0_cvs, release/4.10.0, release/5.2.1_cvs, release/5.2.1, release/5.2.0_cvs, release/5.2.0 |
|
#
6143d8ba |
| 12-Dec-2003 |
Peter Wemm <peter@FreeBSD.org> |
Fix dynamic linking a bit more.. enough that mozilla-firebird works if you dig up the patches for amd64 support for it.
Note to self: do not put a 64 bit value in a 32 bit space.
|
Revision tags: release/4.9.0_cvs, release/4.9.0, release/5.1.0_cvs, release/5.1.0 |
|
#
9783a12b |
| 24-May-2003 |
Peter Wemm <peter@FreeBSD.org> |
Initial pass at supporting shared libraries on amd64. There are still a few missing relocation types in amd64/reloc.c, but I have not found any of them in use yet. :-)
Approved by: re (amd64/* bla
Initial pass at supporting shared libraries on amd64. There are still a few missing relocation types in amd64/reloc.c, but I have not found any of them in use yet. :-)
Approved by: re (amd64/* blanket)
show more ...
|
Revision tags: release/4.8.0_cvs, release/4.8.0 |
|
#
605f36fc |
| 14-Mar-2003 |
Alexander Kabaev <kan@FreeBSD.org> |
No need to zero fill memory, mmapped anonymously. Kernel will return pre-zeroed pages itself.
Noticed by: jake
|
Revision tags: release/5.0.0_cvs, release/5.0.0 |
|
#
a42a42e9 |
| 18-Nov-2002 |
Thomas Moestl <tmm@FreeBSD.org> |
Fix the handling of high PLT entries (> 32764) on sparc64. This requires additional arguments to reloc_jmpslot(), which is why MI code and MD code of other platforms had to be changed.
Reviewed by:
Fix the handling of high PLT entries (> 32764) on sparc64. This requires additional arguments to reloc_jmpslot(), which is why MI code and MD code of other platforms had to be changed.
Reviewed by: jake Approved by: re
show more ...
|
Revision tags: release/4.7.0_cvs, release/4.6.2_cvs, release/4.6.2, release/4.6.1, release/4.6.0_cvs |
|
#
b08440e5 |
| 10-Jun-2002 |
Matthew Dillon <dillon@FreeBSD.org> |
Correct a bug in the last commit. The whole point of creating a 'done:' goto target was so the cache could be freed. So free the cache after done: rather then before done: (!)
Submitted by: Gavin
Correct a bug in the last commit. The whole point of creating a 'done:' goto target was so the cache could be freed. So free the cache after done: rather then before done: (!)
Submitted by: Gavin Atkinson <gavin@ury.york.ac.uk>
show more ...
|
#
b603db30 |
| 10-Jun-2002 |
Matthew Dillon <dillon@FreeBSD.org> |
In tracking down an installation seg fault with then openoffice port Martin Blapp determined that the elf dynamic loader was at fault. In particular, the loader uses alloca() to allocate a symbol ca
In tracking down an installation seg fault with then openoffice port Martin Blapp determined that the elf dynamic loader was at fault. In particular, the loader uses alloca() to allocate a symbol cache on the stack. Normally this would work just fine, but if the loader is called from a threaded program and the object being loaded is fairly large the alloca() can blow away the thread stack and effect other nearby thread stacks as well. My testing showed that the symbol cache can be as large as 250KBytes during the openoffice port build and install sequence. Martin was able to work around the problem by disabling the symbol cache (cache = NULL;). However, this solution is not adequate for commit because it can cause an enormous cpu burden for applications which do a lot of dynamic loading (e.g. like konqueror).
The solution is to use anonymous mmap() to temporarily allocate space to hold the symbol cache. In testing I found that replacing the alloca() with mmap() has no observable degredation in performance.
It should be noted that this bug does not necessarily cause an immediate crash but can instead result in long term corruption and instability in applications that load modules from threads. The bug is almost certainly responsible for some of the instabilities found in konqueror, for example, and possibly netscape too.
Sleuthing work by: Martin Blapp <mb@imp.ch> X-MFC after: Before or after the 4.6 release depending on the release engineers
show more ...
|
Revision tags: release/4.5.0_cvs, release/4.4.0_cvs |
|
#
b5393d9f |
| 15-Oct-2001 |
Doug Rabson <dfr@FreeBSD.org> |
Add ia64 support. Various adjustments were made to existing targets to cope with a few interface changes required by the ia64. In particular, function pointers on ia64 need special treatment in rtld.
|
#
c15e7faa |
| 06-May-2001 |
John Polstra <jdp@FreeBSD.org> |
Performance improvements for the ELF dynamic linker. These particularly help programs which load many shared libraries with a lot of relocations. Large C++ programs such as are found in KDE are a p
Performance improvements for the ELF dynamic linker. These particularly help programs which load many shared libraries with a lot of relocations. Large C++ programs such as are found in KDE are a prime example.
While relocating a shared object, maintain a vector of symbols which have already been looked up, directly indexed by symbol number. Typically, symbols which are referenced by a relocation entry are referenced by many of them. This is the same optimization I made to the a.out dynamic linker in 1995 (rtld.c revision 1.30).
Also, compare the first character of a sought-after symbol with its symbol table entry before calling strcmp().
On a PII/400 these changes reduce the start-up time of a typical KDE program from 833 msec (elapsed) to 370 msec.
MFC after: 5 days
show more ...
|
Revision tags: release/4.3.0_cvs, release/4.3.0, release/4.2.0, release/4.1.1_cvs, release/4.1.0, release/3.5.0_cvs, release/4.0.0_cvs |
|
#
7dbe16fb |
| 29-Jan-2000 |
John Polstra <jdp@FreeBSD.org> |
When a threads package registers locking methods with dllockinit(), figure out which shared object(s) contain the the locking methods and fully bind those objects as if they had been loaded with LD_B
When a threads package registers locking methods with dllockinit(), figure out which shared object(s) contain the the locking methods and fully bind those objects as if they had been loaded with LD_BIND_NOW=1. The goal is to keep the locking methods from requiring any lazy binding. Otherwise infinite recursion occurs in _rtld_bind.
This fixes the infinite recursion problem in the linuxthreads port.
show more ...
|