259065 |
07-Dec-2013 |
gjb |
- Copy stable/10 (r259064) to releng/10.0 as part of the 10.0-RELEASE cycle. - Update __FreeBSD_version [1] - Set branch name to -RC1
[1] 10.0-CURRENT __FreeBSD_version value ended at '55', so start releng/10.0 at '100' so the branch is started with a value ending in zero.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
256281 |
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
234841 |
30-Apr-2012 |
kib |
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
|
233307 |
22-Mar-2012 |
kib |
Use xmalloc() instead of malloc() in the places where malloc() calls are assumed to not fail.
Make the xcalloc() calling conventions follow the calloc(3) calling conventions and replace unchecked calls to calloc() with calls to xcalloc().
Remove redundand declarations from xmalloc.c, which are already present in rtld.h.
Reviewed by: kan Discussed with: bde MFC after: 2 weeks
|
233231 |
20-Mar-2012 |
kib |
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
|
232831 |
11-Mar-2012 |
kib |
Add support for preinit, init and fini arrays. Some ABIs, in particular on ARM, do require working init arrays.
Traditional FreeBSD crt1 calls _init and _fini of the binary, instead of allowing runtime linker to arrange the calls. This was probably done to have the same crt code serve both statically and dynamically linked binaries. Since ABI mandates that first is called preinit array functions, then init, and then init array functions, the init have to be called from rtld now.
To provide binary compatibility to old FreeBSD crt1, which calls _init itself, rtld only calls intializers and finalizers for main binary if binary has a note indicating that new crt was used for linking. Add parsing of ELF notes to rtld, and cache p_osrel value since we parsed it anyway.
The patch is inspired by init_array support for DragonflyBSD, written by John Marino.
Reviewed by: kan Tested by: andrew (arm, previous version), flo (sparc64, previous version) MFC after: 3 weeks
|
228435 |
12-Dec-2011 |
kib |
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
|
217851 |
25-Jan-2011 |
kib |
When loading dso without PT_GNU_STACK phdr, only call __pthread_map_stacks_exec() on architectures that allow executable stacks.
Reported and tested by: marcel (ia64)
|
216695 |
25-Dec-2010 |
kib |
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)
|
214194 |
22-Oct-2010 |
marcel |
Unbreak ia64.
With r169630 I disabled symbol versioning because it broke rtld. With r211706 rtld got broken for ia64 & powerpc64. It was fixed for powerpc64 with r212497. In between, r211749 removed the exports table because the version script handled the exports. But wait, symbol versioning was disabled on ia64.
With exports controlled by the version script and symbol versioning disabled, all symbols are exported and too many symbols bind to the definition in rtld. Let's just say that waird things happen.
So, enable symbol versioning on ia64 and apply a work-around for the SIGSEGV that triggered r169630 to begin with: when rtld relocates itself, it comes across r_debug_state and for some reason can't find the definition. This causes a failure, relocation aborts and null pointers galore. The work-around is to ignore the missing definition when rtld is relocating itself and keep going.
Maybe with the next binutils this will all go away. Maybe not, in which case I still need to figure out why r_debug_state cannot be found.
BTW: r_debug_state is in the symbol map -- I don't think any other rtld symbols that rtld references are in the symbol map...
|
191291 |
19-Apr-2009 |
rwatson |
Now that the kernel defines CACHE_LINE_SIZE in machine/param.h, use that definition in the custom locking code for the run-time linker rather than local definitions.
Pointed out by: tinderbox MFC after: 2 weeks
|
169629 |
16-May-2007 |
marcel |
We don't need --export-dynamic for ld-elf.so.1, because it's a shared object.
|
161798 |
01-Sep-2006 |
marcel |
Use NULL for null-pointer argument.
|
161783 |
31-Aug-2006 |
marcel |
Replace magic 16 with TLS_TCB_SIZE.
|
161728 |
30-Aug-2006 |
marcel |
Prevent dead code elimination for the TP assignmient by using inline assembly.
|
154958 |
28-Jan-2006 |
marcel |
s/DT_IA64_PLT_RESERVE/DT_IA_64_PLT_RESERVE/
|
154957 |
28-Jan-2006 |
marcel |
s/R_IA64_/R_IA_64_/
|
154491 |
17-Jan-2006 |
marcel |
s/R_IA64_/R_IA_64_/g as per the ia64 psABI.
|
153503 |
18-Dec-2005 |
marcel |
Explicitly cast ELF_R_TYPE() to the right type.
|
137619 |
12-Nov-2004 |
jhb |
Remove these unused files before any other archs include the same bogus file.
|
133063 |
03-Aug-2004 |
dfr |
Add support for Thread Local Storage.
|
115940 |
07-Jun-2003 |
marcel |
Don't fail if we encounter a relocation of type "none". Just ignore it. It's a no-op relocation.
Trigger case: ports/x11-toolkits/pango
|
115396 |
29-May-2003 |
kan |
Allow threading libraries to register their own locking implementation in case default one provided by rtld is not suitable.
Consolidate various identical MD lock implementation into a single file using appropriate machine/atomic.h.
Approved by: re (scottl)
|
112419 |
19-Mar-2003 |
arun |
Fix for ia64/48024 - ensure function pointer equality across elf objects.
Programs such as sshd depend on two pointers to the same function being equal in a given process. However, the current ia64 implementation ensures that they're equal when both the pointers are instantiated in the same ELF object. The attached patch ensures that they're equal irrespective of where they're instantiated.
Reviewed by marcel@ (mentor) and kan@
|
112242 |
14-Mar-2003 |
kan |
No need to zero fill memory, mmapped anonymously. Kernel will return pre-zeroed pages itself.
Noticed by: jake
|
107071 |
18-Nov-2002 |
tmm |
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
|
102249 |
22-Aug-2002 |
marcel |
Fix a nasty memory corruption bug caused by having a bogus pointer for the DT_IA64_PLT_RESERVE dynamic table entry. When a shared object does not have any PLT relocations, the linker apparently doesn't find it necessary to actually reserve the space for the BOR (Bind On Reference) entries as pointed to by the DTE. As a result, relocatable data in the PLT was overwritten, causing some unexpected control flow with annoyingly predictable outcome: coredump. To reproduce: % echo 'int main() { return 0; }' > foo.c % cc -o foo foo.c -lxpg4
|
102155 |
20-Aug-2002 |
marcel |
Add support for the R_IA64_IPLTLSB relocation in non-PLT context. This relocation creates a function descriptor at the specified address and is commonly used for C++ to create virtual function tables.
|
99506 |
06-Jul-2002 |
jdp |
Remove the nanosleep calls from the spin loops in the locking code. They provided little benefit (if any) and they caused some problems in OpenOffice, at least in post-KSE -current and perhaps in other environments too. The nanosleep calls prevented the profiling timer from advancing during the spinloops, thereby preventing the thread scheduler from ever pre-empting the spinning thread. Alexander Kabaev diagnosed this problem, Martin Blapp helped with testing, and Matt Dillon provided some helpful suggestions.
This is a short-term fix for a larger problem. The use of spinlocking isn't guaranteed to work in all cases. For example, if the spinning thread has higher priority than all other threads, it may never be pre-empted, and the thread holding the lock may never progress far enough to release the lock. On the other hand, spinlocking is the only locking that can work with an arbitrary unknown threads package.
I have some ideas for a much better fix in the longer term. It would eliminate all locking inside the dynamic linker by making it safe for symbol lookups and lazy binding to proceed in parallel with a call to dlopen or dlclose. This means that the only mutual exclusion needed would be to prevent multiple simultaneous calls to dlopen and/or dlclose. That mutual exclusion could be put into the native pthreads library. Applications using foreign threads packages would have to make their own arrangements to ensure that they did not have multiple threads in dlopen and/or dlclose -- a reasonable requirement in my opinion.
MFC after: 3 days
|
98629 |
22-Jun-2002 |
dillon |
The last bits of the alloca -> mmap fix. IA64 and SPARC64 (current only). Untested (testing request went unanswered), but sparc64 is not expected to cause problems. IA64 is not expected to cause problems but the patch was slightly more complex so the possibility exists.
Approved by: jdp
|
97026 |
21-May-2002 |
marcel |
Include machine/ia64_cpu.h because we use ia64_mf().
Submitted by: ru
|
95544 |
27-Apr-2002 |
marcel |
Fix handling of weak references to undefined symbols on ia64: o Set st_shndx for sym_zero to SHN_UNDEF instead of SHN_ABS. This gives us something to reliably test against. o For weak references to undefined sysmbols (as indicated by having st_shndx equals SHN_UNDEF) in the context of OPDs, the address of the OPD is to be zero, not the address of the function it contains. o For weak references to undefined symbols in all other cases (only DIR64LSB at this time), the actual relocated value is to be zero, not the value prior to relocating.
Roughly speaking, weak references to undefined symbols are no-ops.
Tested on: i386, ia64
|
95540 |
27-Apr-2002 |
marcel |
Now that local symbols aren't looked up with the symbol hash table, binding works for local symbols. Remove the workaround...
|
94021 |
07-Apr-2002 |
peter |
Fix a relocation bug in the ia64 ld.so. Weak function pointers in shared objects were not being correctly set to zero. Instead, the function descriptor pointer was set to the load address of the .so object. This caused gcc generated binaries to segfault on exit when crtbegin.asm's _fini code tested the __cxa_finalize() function pointer for zero.
This is a bit of a hack because of a problem nearby workaround for find_symdef and its quirks (failures) for local symbols. This still needs to be fixed.
|
85677 |
29-Oct-2001 |
peter |
Update rtld for the "new" ia64 ABI. In the old toolchain, the DT_INIT and DT_FINI tags pointed to fptr records. In 2.11.2, it points to the actuall address of the function. On IA64 you cannot just take an address of a function, store it in a function pointer variable and call it.. the function pointers point to a fptr data block that has the target gp and address in it. This is absolutely necessary for using the in-tree binutils toolchain, but (unfortunately) will not work with old shared libraries. Save your old ld-elf.so.1 if you want to use old ones still. Do not mix-and-match.
This is a no-op change for i386 and alpha.
Reviewed by: dfr
|
85676 |
29-Oct-2001 |
peter |
Fix a dependency violation (branch after alloc)
|
85004 |
15-Oct-2001 |
dfr |
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.
|