#
272461 |
|
02-Oct-2014 |
gjb |
Copy stable/10@r272459 to releng/10.1 as part of the 10.1-RELEASE process.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
271469 |
|
12-Sep-2014 |
kib |
MFC r270798: Process STT_GNU_IFUNC when doing non-plt relocations.
MFC r270802: Only do the second pass over non-plt relocations when the first pass found IFUNCs.
Approved by: re (gjb)
|
#
269680 |
|
07-Aug-2014 |
markj |
MFC r265456, r265578: Add a postinit debugger hook to rtld. This will be used by dtrace(1) to halt the victim process before its entry point is called, at which point probes and DOF data are registered with the kernel. The r_debug_state hook cannot be used for this purpose, as it is called before the program's init routines are invoked and in particular before DOF data is registered (via drti.o).
|
#
259292 |
|
13-Dec-2013 |
kib |
MFC r259044: For variant II static TLS, properly align tls segments.
MFC r259072: Cast Elf_Addr to void * to match the free_aligned() argument type.
|
#
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
|
#
256101 |
|
07-Oct-2013 |
kib |
Implement support for the interpose dso flag.
Requested by: bf Reviewed by: kan Sponsored by: The FreeBSD Foundation MFC after: 1 week Approved by: re (glebius)
|
#
255983 |
|
02-Oct-2013 |
emaste |
Populate .rld_map on MIPS for debuggers
On MIPS the .dynamic section is read-only, so the pointer to rtld information for debuggers cannot be stored there (in DT_DEBUG). Instead, a special section .rld_map is used.
Sponsored by: DARPA, AFRL Approved by: re (delphij)
|
#
255765 |
|
21-Sep-2013 |
des |
Make the directory mapping functionality, which was previously only available in 32-bit compatibility mode, unconditional.
Overhaul the man page, which had evolved more by accretion than by design.
Approved by: re (gjb) MFC after: 3 weeks
|
#
250075 |
|
29-Apr-2013 |
kib |
Properly terminate the result string for intermediate results, to allow the final strcpy() to start at the intended place.
Reported and tested by: pgj Pointy hat to: kib MFC after: 3 days
|
#
249525 |
|
15-Apr-2013 |
kib |
The origin_subst_one() function limits the length of the string to PATH_MAX after the token substitution. This is wrong, because origin_subst_one() performs the substitution on the whole rpath and similar strings, which contain several pathes separated by colon. As result, long (but correct) rpath consisting of many path elements is rejected by the function.
Correct the problem by rewriting the origin_subst_one() to perform two passes, first pass to calculate the number of substitutions to be performed, and second pass to generate the resulting string. Second pass allocates the memory for the result based on the count from the first pass, without enforcing a limit.
Reported and tested by: pgj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
|
#
242587 |
|
04-Nov-2012 |
jilles |
rtld: Fix fd leak with parallel dlopen and fork/exec.
Rtld did not set FD_CLOEXEC on its internal file descriptors; therefore, such a file descriptor may be passed to a process created by another thread running in parallel to dlopen() or fdlopen().
No other threads are expected to be running during parsing of the hints and libmap files but the file descriptors need not be passed to child processes so add O_CLOEXEC there as well.
This change will break fdlopen() (as used by OpenPAM) on kernels without F_DUPFD_CLOEXEC (added in July). Note that running new userland on old kernels is not supported.
Reviewed by: kib
|
#
240686 |
|
19-Sep-2012 |
kib |
Do not reference z_nodeflib for !objgiven case, thus fixing LD_PRELOAD for a non-absolute path.
PR: bin/171604 MFC after: 3 days
|
#
239470 |
|
20-Aug-2012 |
kan |
Do not call process_nodelete with NULL object pointer.
The place where the function is called can be reached if object loading and relocation fails too, in which case obj pointer will be NULL. Do not call process_nodelete then, or crash will follow.
Pointy hat to: kan
|
#
239253 |
|
14-Aug-2012 |
kan |
Pospone the DF_1_NODELETE processing until object DAG is fully loaded.
Trying to up the reference from the load loop risks missing dependencies that have not been loaded yet.
MFC afer: 1 week Reported by: nox Reviewd by: kib
|
#
238471 |
|
15-Jul-2012 |
kib |
Import the DragonFly BSD commit 4f0bc915b65fcf5a23214f6d221d65c80be68ad4 by John Marino <draco@marino.st>, with the following (edited) commit message Date: Sat, 24 Mar 2012 06:40:50 +0100 Subject: [PATCH 1/1] rtld: Implement DT_RUNPATH and -z nodefaultlib
DT_RUNPATH is incorrectly being considered as an alias of DT_RPATH. The purpose of DT_RUNPATH is to have two different types of rpath: one that can be overridden by the environment variable LD_LIBRARY_PATH and one that can't. With the currently implementation, LD_LIBRARY_PATH will always trump any embedded rpath or runpath tags.
Current path search order by rtld: ================================== LD_LIBRARY_PATH DT_RPATH / DT_RUNPATH (always the same) ldconfig hints file (default: /var/run/ld-elf.so.hints) /usr/lib
New path search order by rtld: ============================== DT_RPATH of the calling object if no DT_RUNPATH DT_RPATH of the main binary if no DT_RUNPATH and binary isn't calling obj LD_LIBRARY_PATH DT_RUNPATH ldconfig hints file /usr/lib
The new path search matches how the linux runtime loader works. The other major added feature is support for linker flag "-z nodefaultlib". When this flag is passed to the linker, rtld will skip all references to the standard library search path ("/usr/lib" in this case but it could handle more color delimited paths) except in DT_RPATH and DT_RUNPATH.
New path search order by rtld with -z nodefaultlib flag set: ============================================================ DT_RPATH of the calling object if no DT_RUNPATH DT_RPATH of the main binary if no DT_RUNPATH and binary isn't calling obj LD_LIBRARY_PATH DT_RUNPATH ldconfig hints file (skips all references to /usr/lib)
FreeBSD notes: - we fixed some bugs which were submitted to DragonFly and merged there as commit 1ff8a2bd3eb6e5587174c6a983303ea3a79e0002; - we added LD_LIBRARY_PATH_RPATH environment variable to switch to the previous behaviour of considering DT_RPATH a synonym for DT_RUNPATH; - the FreeBSD default search path is /lib:/usr/lib and not /usr/lib.
Reviewed by: kan MFC after: 1 month MFC note: flip the ld_library_path_rpath default value for stable/9
|
#
237659 |
|
27-Jun-2012 |
kib |
Ensure that for the object which is a dependency for some filtee, relocations are performed before the object's initializer is called. When dlopen()ing an object, relocate the whole DAG rooted in the object instead of only relocating the object itself and list of newly loaded dependencies.
Reversed sequence currently can occur if the same object is a dependency for both filtee and filter, since filtees are loaded typically during the relocation processing, when some filter dependencies might be already loaded but not relocated yet.
Reported and tested by: swills Reviewed by: kan MFC after: 1 week
|
#
235054 |
|
05-May-2012 |
kib |
Work around a situation where symlook_obj() could be called for the object for which digest_dynamic1() was not done yet. Just return EINVAL and do not try to dereference NULL buckets hash array.
This seems to happen on ia64 for rtld object itself, where the R_IA_64_FPTR64LSB relocations require symbol lookup. The dynamic linker itself does not rely on identity of the C-level function pointers (i.e. function descriptors).
Reported and reviewed by: marcel MFC after: 8 days
|
#
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
|
#
234840 |
|
30-Apr-2012 |
kib |
Split the symlook_obj1 into a loop iterating over the ELF object symbol hash elements, and a helper matched_symbol() which match the given hash entry and request, performing needed type and version checks.
Based on dragonflybsd support for GNU hash by John Marino <draco marino st> Reviewed by: kan Tested by: bapt MFC after: 2 weeks
|
#
234170 |
|
12-Apr-2012 |
kib |
Propagate the current state of rtld_bind_lock to dlopen_object() calls through the filter loading call chain. This fixes attempts to write-lock the already locked rtld_bind_lock when filter loading is initiated by relocation of dlopening dso.
Reported and tested by: Taku YAMAMOTO <taku tackymt homeip net> MFC after: 1 week
|
#
233927 |
|
05-Apr-2012 |
kib |
Properly handle absent AT_CANARY aux entry.
Submitted by: Andrey Zonov <andrey zonov org> MFC after: 3 days
|
#
233778 |
|
02-Apr-2012 |
kan |
Remove extra blank line from revious commit.
Submitted by: trema
|
#
233777 |
|
02-Apr-2012 |
kan |
Do not try to adjust stacks if dlopen_object is called too early.
This is a follow-up to r233231, which fixed similar issue with object initialization code.
Reviewed by: kib MFC after: 1 week (with 233231)
|
#
233674 |
|
29-Mar-2012 |
kib |
Fix ia64 build after r233655.
MFC after: 1 week
|
#
233655 |
|
29-Mar-2012 |
kib |
Import DragonFly BSD commit
From: Sascha Wildner <saw@online.de> Date: Fri, 2 Mar 2012 09:15:56 +0000 (+0100) Subject: rtld: Add a special case in do_dlsym() for TLS stored symbols. X-Git-Url: http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/1388aaafe730c85693936aaf9bc6d83fc2d981be?hp=bca4412595a8979ab9f1bf36068c806ce88a667a
rtld: Add a special case in do_dlsym() for TLS stored symbols.
Submitted-by: Markus Pfeiffer <markus.pfeiffer@morphism.de>
Discussed with: kan MFC after: 1 week
|
#
233546 |
|
27-Mar-2012 |
kib |
Prevent rtld_verify_object_versions() from being called several times for the same object. This can happen when object is a dependency of the dlopen()ed dso. When called several times, we waste time due to unneeded processing, and memory, because obj->vertab is allocated anew on each iteration.
Reviewed by: kan MFC after: 2 weeks
|
#
233431 |
|
24-Mar-2012 |
kib |
Remove libssp_nonshared from the rtld linking set. The only use for the library was definition for the weak alias of __stack_chk_fail.
No objections from: kan MFC after: 2 weeks
|
#
233430 |
|
24-Mar-2012 |
kib |
Provide short-circuit exit(3) implementation for rtld. There is no atexit finalizers in rtld to call on rtld exiting (due to errors).
Submitted by: bde No objections from: kan 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
|
#
232974 |
|
14-Mar-2012 |
kib |
Rtld on diet 3.
Stop using strerror(3) in rtld, which brings in msgcat and stdio. Directly access sys_errlist array of errno messages with private rtld_strerror() function.
Now, $ size /libexec/ld-elf.so.1 text data bss dec hex filename 96983 2480 8744 108207 1a6af /libexec/ld-elf.so.1
Reviewed by: dim, kan MFC after: 2 weeks
|
#
232861 |
|
12-Mar-2012 |
kib |
Rtld on diet part 1:
Provide rtld-private implementations of __stack_chk_guard, __stack_chk_fail() and __chk_fail() symbols, to be used by functions linked from libc_pic.a. This avoids use of libc stack_protector.c, which pulls in syslog(3) and stdio as dependency.
Also, do initialize rtld-private copy __stack_chk_guard, previously libc-provided one was not initialized, since we do not call rtld object _init() methods.
Reviewed by: kan MFC after: 3 weeks
|
#
232859 |
|
12-Mar-2012 |
dim |
Amend r232857, now dropping the casts entirely, as they were not necessary at all.
Submitted by: stefanf
|
#
232857 |
|
12-Mar-2012 |
dim |
Fix the following warning/error with clang:
libexec/rtld-elf/rtld.c:1898:22: error: comparison between pointer and integer ('Elf_Addr *' (aka 'unsigned int *') and 'Elf_Addr' (aka 'unsigned int')) [-Werror] if (preinit_addr == (Elf_Addr)NULL) ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~ libexec/rtld-elf/rtld.c:2039:16: error: comparison between pointer and integer ('Elf_Addr *' (aka 'unsigned int *') and 'Elf_Addr' (aka 'unsigned int')) [-Werror] if (init_addr != (Elf_Addr)NULL) { ~~~~~~~~~ ^ ~~~~~~~~~~~~~~
Reviewed by: kib
|
#
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
|
#
232777 |
|
10-Mar-2012 |
kib |
Optimize tls_get_addr_common(). The change provides around 30% speedup for TLS microbenchmark using global-dynamic TLS model on amd64 (which is default for PIC dso objects).
Split the slow path into tls_get_addr_slow(), for which inlining is disabled. This prevents the registers spill on tls_get_addr_common() entry.
Provide static branch hint to the compiler, indicating that slow path is not likely to be taken.
While there, do some minimal style adjustments.
Reported and tested by: davidxu MFC after: 1 week
|
#
231618 |
|
13-Feb-2012 |
gonzo |
Add thread-local storage support for ARM to rtld-elf
Reviewed by: cognet Obtained from: NetBSD
|
#
231582 |
|
13-Feb-2012 |
kib |
Add missed EOL when die() was converted to use rtld_fdputstr() instead of errx().
Reported by: amdmi3 PR: bin/165075 MFC after: 3 days
|
#
231347 |
|
10-Feb-2012 |
gonzo |
Switch MIPS TLS implementation to Variant I
|
#
230784 |
|
30-Jan-2012 |
kib |
Add support for GNU RELRO.
Submitted by: John Marino <draco marino st> MFC after: 2 weeks
|
#
229768 |
|
07-Jan-2012 |
kib |
Implement fdlopen(3), an rtld interface to load shared object by file descriptor.
Requested and tested by: des (previous version) Reviewed by: des, kan (previous version) MFC after: 2 weeks
|
#
229508 |
|
04-Jan-2012 |
kib |
Postpone the resolution of IRELATIVE relocations and IFUNC-targeted relocations until tls is initialized and stacks permissions correctly set. This allows the ifunc to call malloc(3) and some other heavy services.
Add debug banner.
MFC after: 3 days
|
#
228503 |
|
14-Dec-2011 |
kib |
_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
|
#
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
|
#
227660 |
|
18-Nov-2011 |
kib |
Fix fd leak.
Reported by: slonoman2011 yandex ru MFC after: 1 week
|
#
226155 |
|
08-Oct-2011 |
kib |
Setting up TLS block for the main thread must be done after the relocations are processed, since tls initialization section might be itself subject for relocations. Only set up of the block is postponed, the tls block offsets are allocated before relocation processing, since TLS-related relocations may need offsets ready.
Reported by: ale PR: threads/161344 Reviewed by: kan MFC after: 1 week
|
#
225582 |
|
15-Sep-2011 |
kib |
Use the proper dynamic tls block to calculate the tls variable address in case tls data generation was updated.
PR: misc/160721 Submitted by: "Thinker K.F. Li" <thinker codemud net> Tested by: flo Approved by: re (bz) MFC after: 1 week
|
#
225366 |
|
03-Sep-2011 |
dim |
When libexec/rtld-elf/rtld.c is compiled with clang, the r_debug_state() function (a hook necessary for gdb support), is inlined, but since the function contains no code, no calls to it are generated. When gdb is debugging a dynamically linked program, this causes backtraces to be corrupted.
Fix it by marking the function __noinline, and inserting an empty asm statement, that pretends to clobber memory. This forces the compiler to emit calls to r_debug_state() throughout rtld.c.
Approved by: re (kib)
|
#
225152 |
|
24-Aug-2011 |
kib |
Rtld links with the specially built pic static libc library to get some C runtime services, like printf(). Unfortunately, the multithread-safeness measures in the libc do not work in rtld environment.
Rip the kernel printf() implementation and use it in the rtld instead of libc version. This printf does not require any shared global data and thus is mt-safe. Systematically use rtld_printf() and related functions, remove the calls to err(3).
Note that stdio is still pulled from libc due to libmap implementaion using fopen(). This is safe but unoptimal, and can be changed later.
Reported and tested by: pgj Diagnosed and reviewed by: kan (previous version) Approved by: re (bz)
|
#
223262 |
|
18-Jun-2011 |
benl |
Fix clang warnings.
Approved by: philip (mentor)
|
#
220004 |
|
25-Mar-2011 |
avg |
rtld: eliminate double call to close(2) that may occur in load_object
The second close(2) call resulted in heisenbugs in some multi-threaded applications where e.g. dlopen(3) call in one thread could close a file descriptor for a file having been opened in other thread concurrently.
My litmus test for this issue was an openoffice.org build.
Reviewed by: jhb MFC after: 2 weeks
|
#
218476 |
|
09-Feb-2011 |
kib |
Use sigsetjmp/siglongjmp with disabled signal mask access for lock upgrade in rtld. There is no need to care about the mask, which causes a lot of unneeded sigprocmask(2) calls during each symbol lookup.
|
#
218099 |
|
30-Jan-2011 |
kib |
Fix grammar in comment.
Pointy hat to: kib MFC after: 1 week
|
#
218098 |
|
30-Jan-2011 |
kib |
Make ldd(1) work when versioned dependency file is cannot be loaded. Instead of aborting in locate_dependency(), propagate the error to caller. The rtld startup function does the right thing with an error from rtld_verify_versions(), depending on the mode of operation.
Reported by: maho In collaboration with: kan MFC after: 1 week
|
#
218051 |
|
28-Jan-2011 |
kan |
Eliminate the use of symlook_needed function in favor of DAGS.
Place elements on DAG lists in breadth-first order. This allows us to walk pre-built list in all cases where breadth-first dependency chain enumeration is required.
Fix dlsym on special handle obtained by dlopen(NULL, ...) to do what comment claims it does. Take advantage of recently added symlook_global function to iterate over main objects and global DAGs lists properly in search of a symbol. Since rtld itself provides part of the global namespace, search rtld_obj too.
Remove recursion from init_dag and symlook_needed functions. Use symlook_needed for ELF filtee processing only and change lookup order used in the function to match the order used by Solaris runtime linker under same circumstances. While there, fix weak symbol handling in the loop so that we return the first weak symbol definition if no strong one was found, instead of the last one.
Reviewed by: kib MFC after: 1 month
|
#
218025 |
|
28-Jan-2011 |
pluknet |
Remove SuperH architecture from a comment as we do not support it. Presumably it was leaked from NetBSD together with rtld-elf mips support.
Approved by: kib (mentor) MFC after: 3 days
|
#
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)
|
#
217849 |
|
25-Jan-2011 |
kib |
Fix get_program_var_addr() when type of the resolved symbol is functional. Use make_function_pointer then, otherwise ia64 is broken.
Reported and tested by: marcel
|
#
217722 |
|
22-Jan-2011 |
kib |
Add my copyright.
Discussed with: kan
|
#
217223 |
|
10-Jan-2011 |
kib |
get_program_var_addr() must prefer the strong symbol to the weak one. Search global objects, together with main object and dependencies, for the requested symbol.
Move the common code from symlook_default() into new helper symlook_global(), and use it both in symlook_global() and get_program_var_addr().
Supply lock state to get_program_var_addr().
Reviewed by: kan Tested by: Mykola Dzham <i levsha me>
|
#
217153 |
|
08-Jan-2011 |
kib |
In rtld, read the initial stack access mode from AT_STACKPROT as set by kernel, and parse PT_GNU_STACK phdr from linked and loaded dsos.
If the loaded dso requires executable stack, as specified by PF_X bit of p_flags of PT_GNU_STACK phdr, but current stack protection does not permit execution, the __pthread_map_stacks_exec symbol is looked up and called. It should be implemented in libc or threading library and change the protection mode of all thread stacks to be executable.
Provide a private interface _rtld_get_stack_prot() to export the stack access mode as calculated by rtld.
Reviewed by: kan
|
#
216728 |
|
26-Dec-2010 |
kan |
Fix an apparent cop-and-paste mistake in previous commit.
This makes dlsym(RTLD_DEFAULT) work properly again.
|
#
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)
|
#
216489 |
|
16-Dec-2010 |
jh |
If dlclose() is called recursively from a _fini() function, the inner dlclose() call may unload the object of the outer call prematurely because objects are unreferenced before _fini() calls.
Fix this by unreferencing objects after calling objlist_call_fini() in dlclose(). Therefore objlist_call_fini() now calls the fini function if the reference count of an object is 1. In addition we must restart the list_fini traversal after every _fini() call because another dlclose() call might have modified the reference counts.
Add an XXX comment to objlist_call_fini() about possible race with dlopen().
PR: 133246, 149464 Reviewed by: kan, kib
|
#
214777 |
|
04-Nov-2010 |
kib |
In r214728, if dlopen() is called for the object that has been already loaded as a dependency and marked -z nodlopen, object' DAG is already initialized by load_needed_objects(). Due to this, the init_dag() call from dlopen() does not increment refcount for the object [1].
Change init_dag() to not increment DAG refcount. Require explicit calls to ref_dag() to increment, and assert that ref_dag() and unref_dag() are called for root that has dag initialized. To fix the noted issue, unconditionally call both init_dag() and ref_dag() in dlopen() for the case when the object was already loaded, making it similar to the case of newly loaded object.
Noted by: jh [1] Reviewed by: jh, kan MFC after: 6 days
|
#
214776 |
|
04-Nov-2010 |
kib |
Fix style.
MFC after: 6 days
|
#
214728 |
|
03-Nov-2010 |
kib |
If dlopen() is called for the dso that has been already loaded as a dependency, then the dso never has its DAG initialized. Empty DAG makes ref_dag() call in dlopen() a nop, and the dso refcount is off by one.
Initialize the DAG on the first dlopen() call, using a boolean flag to prevent double initialization.
From the PR (edited): Assume we have a library liba.so, containing a function a(), and a library libb.so, containing function b(). liba.so needs functionality from libb.so, so liba.so links in libb.so.
An application doesn't know about the relation between these libraries, but needs to call a() and b(). It dlopen()s liba.so and obtains a pointer to a(), then it dlopen()s libb.so and obtains a pointer to b().
As soon as the application doesn't need a() anymore, it dlclose()s liba.so.
Expected result: the pointer to b() is still valid and can be called Actual result: the pointer to b() has become invalid, even though the application did not dlclose() the handle to libb.so. On calling b(), the application crashes with a segmentation fault.
PR: misc/151861 Based on patch by: jh Reviewed by: kan Tested by: Arjan van Leeuwen <freebsd-maintainer opera com> MFC after: 1 week
|
#
212497 |
|
12-Sep-2010 |
nwhitehorn |
Check for undefined weak symbols during PLT binding on powerpc64, and do not attempt to copy NULL function descriptors. This fixes LD_BIND_NOW on powerpc64 after r211706.
Reviewed by: kib
|
#
211749 |
|
24-Aug-2010 |
kib |
Remove exports table. Export control by the version script is enough.
Reviewed by: kan MFC after: 3 weeks
|
#
211706 |
|
23-Aug-2010 |
kib |
On shared object unload, in __cxa_finalize, call and clear all installed atexit and __cxa_atexit handlers that are either installed by unloaded dso, or points to the functions provided by the dso.
Use _rtld_addr_phdr to locate segment information from the address of private variable belonging to the dso, supplied by crtstuff.c. Provide utility function __elf_phdr_match_addr to do the match of address against dso executable segment.
Call back into libthr from __cxa_finalize using weak __pthread_cxa_finalize symbol to remove any atfork handler which function points into unloaded object.
The rtld needs private __pthread_cxa_finalize symbol to not require resolution of the weak undefined symbol at initialization time. This cannot work, since rtld is relocated before sym_zero is set up.
Idea by: kan Reviewed by: kan (previous version) MFC after: 3 weeks
|
#
211705 |
|
23-Aug-2010 |
kib |
Introduce implementation-private rtld interface _rtld_addr_phdr, which fills struct dl_phdr_info for the shared object that contains the specified address, if any.
Idea and reviewed by: kan MFC after: 3 weeks
|
#
211414 |
|
17-Aug-2010 |
kib |
Provide the starting image with the pointer to ELF aux vector. It is written into the __elf_aux_vector variable, if the symbol is present.
Idea from: kan Tested by: marius (sparc64) MFC after: 1 month
|
#
211413 |
|
17-Aug-2010 |
kib |
Use the newly provided aux vectors to get pagesize and osreldate information. Use local version of getpagesize(), rtld_getpagesize() in private allocator. Override the __getosreldate() previously fetched from libc_pic.a with local version that uses aux value if present. Note that __getosreldate() is used by rtld indirectly, by mmap(2) libc wrapper.
To be able to utilize aux, split digest_dynamic() for use by init_rtld() into two parts, where the first one does not call malloc(), and the second part uses it. init_rtld() is able to initialize global variables before digest_dynamic2() calls. In particular, pagesize and osreldate are set up from the aux values.
Now, rtld avoids (two) sysctl calls in startup.
Tested by: marius (sparc64) MFC after: 1 month
|
#
209558 |
|
27-Jun-2010 |
nwhitehorn |
Revert r209544. It papers over a binutils bug, and is not even a reliable fix for it.
The bug occurs when using the --as-needed flag to ld in the presence of synthetic linker-generated symbols that reference symbols defined in linked-to shared libraries with versioned symbols. When the only symbols used from a library fall into this category, ld will drop the DT_NEEDED entry for it, but retain the versioning information. This bug is best fixed/hacked around in binutils, not in rtld.
Discussed with: kan
|
#
209544 |
|
26-Jun-2010 |
nwhitehorn |
Ignore versioned dependencies on shared objects to which we do not link. This fixes an error with files like this created by GNU ld under certain circumstances.
|
#
208763 |
|
02-Jun-2010 |
kan |
Plug possible memory leak.
Found by: Coverity MFC after: 2 weeks
|
#
208256 |
|
18-May-2010 |
rdivacky |
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)
|
#
205606 |
|
24-Mar-2010 |
gahr |
- Remove const'ness from dlerror(3) prototype, for consistency with POSIX.
Approved by: cognet MFC after: 1 week
|
#
203947 |
|
16-Feb-2010 |
marcel |
Improve TLS variant I: o Use obj->tlsinitsize to determine whether there's initialized data. o If obj->tlssize > obj->tlsinitsize, then bzero uninitialized data. o Don't exclude variant I from the work-around in free_tls_offset().
|
#
199979 |
|
01-Dec-2009 |
cperciva |
Fix local root vulnerability.
Security: Advisory will be coming soon. X-MFC-After: 30 seconds
|
#
199877 |
|
28-Nov-2009 |
kib |
Allow to load not-openable dso when tracing. This fixes ldd on such dso or dso linked to non-openable object. Remove '\n' at the end of error message. End comments with dot.
MFC after: 3 weeks (together with r199829)
|
#
199829 |
|
26-Nov-2009 |
kib |
Implement rtld part of the support for -z nodlopen (see ld(1)).
Reviewed by: kan MFC after: 3 weeks
|
#
199828 |
|
26-Nov-2009 |
kib |
Flag controlling origin expansion in DT_FLAGS is DF_ORIGIN, not DF_1_ORIGIN.
Reviewed by: kan MFC after: 3 days
|
#
199270 |
|
14-Nov-2009 |
rwatson |
Fix white space in rtld runtime error printf.
MFC after: 3 days
|
#
197931 |
|
10-Oct-2009 |
kib |
Calculate relocation base for the main object, and apply the relocation adjustment for all virtual addresses encoded into the ELF structures of it. PIE binary could and should be loaded at non-zero mapbase.
For sym_zero pseudosymbol used as a return value from find_symdef() for undefined weak symbols, st_value also should be adjusted, since _rtld_bind corrects symbol values by relocbase.
Discussed with: bz Reviewed by: kan Tested by: bz (i386, amd64), bsam (linux) MFC after: some time
|
#
195745 |
|
17-Jul-2009 |
kib |
Implement RTLD_NOLOAD flag for dlopen(3).
Requested and tested by: jkim Reviewed by: kan Approved by: re (kensmith)
|
#
194705 |
|
23-Jun-2009 |
ed |
Fix a typo in the same comment, one line below.
Submitted by: bf1783 googlemail com
|
#
194689 |
|
23-Jun-2009 |
ed |
Fix typo in comment.
Submitted by: Christoph Mallon
|
#
194531 |
|
20-Jun-2009 |
kan |
Allow order of initialization of loaded shared objects to be altered through their .init code. This might happen if init vector calls dlopen on its own and that dlopen causes some not yet initialized object to be initialized earlier as part of that dlopened DAG.
Do not reset module reference counts to zero on final fini vector run when process is exiting. Just add an additional parameter to force fini vector invocation regardless of current reference count value if object was not destructed yet. This allows dlclose called from fini vector to proceed normally instead of failing with handle validation error.
Reviewed by: kib Reported by: venki kaps
|
#
194298 |
|
16-Jun-2009 |
kan |
FreeBSD returns main object handle from dlopen(NULL, ...) calls. dlsym seaches using this handle are expected to look for symbol definitions in all objects loaded at the program start time along with all objects currently in RTLD_GLOBAL scope.
Discussed with: kib Reported by: Maho NAKATA MFC after: 2 weeks
|
#
190673 |
|
03-Apr-2009 |
kib |
Allow the NULL, RTLD_SELF and RTLD_NEXT handles to work with dlfunc(3). dlfunc() called dlsym() to do the work, and dlsym() determines the dso that originating the call by the return address. Due to this, dlfunc() operated as if the caller is always the libc.
To fix this, move the dlfunc() to rtld, where it can call the internal implementation of dlsym, and still correctly fetch return address. Provide usual weak stub for the symbol from libc for static binaries. dlfunc is put to FBSD_1.0 symver namespace in the ld.so export to override dlfunc@FBSD_1.0 weak symbol, exported by libc.
Reported, analyzed and tested by: Tijl Coosemans <tijl ulyssis org> PR: standards/133339 Reviewed by: kan
|
#
190543 |
|
30-Mar-2009 |
kib |
Implement support for RTLD_NODELETE flag for dlopen() and -z nodelete static linker option. Do it by incrementing reference count on the loaded object and its dependencies.
Reviewed by: davidxu, kan
|
#
190505 |
|
28-Mar-2009 |
kib |
Do not dereference NULL pointer. refobj is NULL for the objects that are preloaded.
Reported and tested by: ed
|
#
190324 |
|
23-Mar-2009 |
delphij |
Support for a new environment variable, LD_ELF_HINTS_PATH for overriding the rtld hints file. This environment variable would be unset if the process is considered as tainted with setuid/setgid. This feature gives a convenient way of using a custom set of shared library that is not located in the default location and switch back.
Feature requested by: iXsystems Original patch by: John Hixson MFC after: 2 weeks
|
#
189959 |
|
18-Mar-2009 |
kib |
Implement the dynamic string token substitution in the rpath and soneeded pathes. The $ORIGIN, $OSNAME, $OSREL and $PLATFORM tokens are supported. Enabling the substitution requires DF_ORIGIN flag in DT_FLAGS or DF_1_ORIGIN if DF_FLAGS_1, that may be set with -z origin gnu ld flag. Translation is unconditionally disabled for setuid/setgid processes.
The $ORIGIN translation relies on the AT_EXECPATH auxinfo supplied by kernel.
Requested by: maho Tested by: maho, pho Reviewed by: kan
|
#
185369 |
|
27-Nov-2008 |
kib |
Add two rtld exported symbols, _rtld_atfork_pre and _rtld_atfork_post. Threading library calls _pre before the fork, allowing the rtld to lock itself to ensure that other threads of the process are out of dynamic linker. _post releases the locks.
This allows the rtld to have consistent state in the child. Although child may legitimately call only async-safe functions, the call may need plt relocation resolution, and this requires working rtld.
Reported and debugging help by: rink Reviewed by: kan, davidxu MFC after: 1 month (anyway, not before 7.1 is out)
|
#
183737 |
|
09-Oct-2008 |
kan |
Allow strong symbols to override weak ones for lookups done through dlsym with RTLD_NEXT/RTLD_SELF handles.
Allow symbols from ld-elf.so to be located this way too.
Based on report and original patch from sobomax@.
|
#
182698 |
|
02-Sep-2008 |
kan |
Make sure internal rtld malloc routines are not called from unlocked contexts as rtld's malloc is not thread safe and is only supposed to be called with exclusive bind lock already held.
The originating PR submitted a patch on top of different pre-requisite workaroud for unsafe dlopen calls, and the patch was midief slighlty to apply to stock sources for the purpose of this commit. Running rtld malloc from unlocked contexts is a bug on its own.
PR: 126950 Submited by: Oleg Dolgov
|
#
178807 |
|
06-May-2008 |
kib |
Fix the problem with the C++ exception handling for the multithreaded programs.
From the PR description: The gcc runtime's _Unwind_Find_FDE function, invoked during exception handling's stack unwinding, is not safe to execute from within multiple threads. FreeBSD' s dl_iterate_phdr() however permits multiple threads to pass through it though. The result is surprisingly reliable infinite looping of one or more threads if they just happen to be unwinding at the same time.
Introduce the new lock that is write locked around the dl_iterate_pdr, thus providing required exclusion for the stack unwinders.
PR: threads/123062 Submitted by: Andy Newman <an at atrn org> Reviewed by: kan MFC after: 2 weeks
|
#
177924 |
|
04-Apr-2008 |
imp |
MFp4: Add mips support for dynamic linking.
This code came from the merged mips2 and Juniper mips repositories. Warner Losh, Randall Seager, Oleksandr Tymoshenko and Olivier Houchard worked to merge, debug and integrate this code. This code may also contain code derived from NetBSD.
|
#
169661 |
|
17-May-2007 |
csjp |
In the event a process is tainted (setuid/setgid binaries), un-set any potentially dangerous environment variables all together. It should be noted that the run-time linker will not honnor these environment variables if the process is tainted currently. However, once a child of the tainted process calls setuid(2), it's status as being tainted (as defined by issetugid(2)) will be removed. This could be problematic because subsequent activations of the run-time linker could honnor these dangerous variables.
This is more of an anti foot-shot mechanism, there is nothing I am aware of in base that does this, however there may be third party utilities which do, and there is no real negative impact of clearing these environment variables.
Discussed on: secteam Reviewed by: cperciva PR: kern/109836 MFC after: 2 weeks
|
#
169276 |
|
05-May-2007 |
davidxu |
Fix a TLS memory leak.
PR: threads/112297 MFC: 1 week
|
#
168479 |
|
07-Apr-2007 |
kan |
Catch up on rtld's special status. Since it does not appear on main object list, its versioning information needs to be examined separately.
This hopefully fixes problems that people running with SYMVER_ENABLED are experiencing.
|
#
168312 |
|
03-Apr-2007 |
kan |
Implement dl_iterate_phdr function. Convert boolean flags in internal Obj_Entry structure into bitfields. Properly check for loaded segment alignment in map_object.
|
#
165916 |
|
09-Jan-2007 |
jhb |
Add various utrace's for use with ktrace to the ELF runtime linker. To activate the traces, set the LD_UTRACE (or LD_32_UTRACE) environment variable. This also includes code in kdump(8) to parse the traces.
Reviewed by: kan, jdp MFC after: 2 weeks
|
#
162449 |
|
19-Sep-2006 |
jkim |
Clean up white spaces and fix style(9).
|
#
162438 |
|
19-Sep-2006 |
kib |
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)
|
#
162156 |
|
08-Sep-2006 |
kib |
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
|
#
161800 |
|
01-Sep-2006 |
marcel |
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.
|
#
160969 |
|
04-Aug-2006 |
delphij |
In symlook_obj(): fix _rtld_error output.
MFC After: 2 weeks
|
#
157199 |
|
28-Mar-2006 |
davidxu |
Er, forgot to clear tls space to zero for Variant II.
|
#
157198 |
|
28-Mar-2006 |
davidxu |
Allocate space for thread pointer, this allows thread library to access its pointer from begin, and simplifies _get_curthread() in libthr.
|
#
153703 |
|
24-Dec-2005 |
kan |
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.
|
#
153686 |
|
23-Dec-2005 |
kan |
Remove debugging statement that slipped into lone of the previous commits unintentionally.
|
#
153648 |
|
22-Dec-2005 |
kan |
Initialize object dagmembers list before checking version dependencies.
|
#
153515 |
|
18-Dec-2005 |
kan |
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.
|
#
153504 |
|
18-Dec-2005 |
marcel |
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
|
#
152320 |
|
11-Nov-2005 |
jhb |
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
|
#
144326 |
|
30-Mar-2005 |
dfr |
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
|
#
144062 |
|
24-Mar-2005 |
cperciva |
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
|
#
143893 |
|
20-Mar-2005 |
davidxu |
Add locking code for tls routines.
|
#
142645 |
|
27-Feb-2005 |
dfr |
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
|
#
141232 |
|
04-Feb-2005 |
mdodd |
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
|
#
137121 |
|
02-Nov-2004 |
ssouhlal |
Do the TLS offset allocations before relocations, as otherwise there can be overlap in the TLS offsets, if the relocations are done in a certain order.
Approved by: dfr, grehan (mentor)
|
#
135680 |
|
23-Sep-2004 |
cognet |
Add stubs for TLS. Arbitraly choose the 2nd variant until I figure out which one I should use.
|
#
133133 |
|
04-Aug-2004 |
dfr |
Add stubs for powerpc TLS.
Submitted by: ssouhlal
|
#
133063 |
|
03-Aug-2004 |
dfr |
Add support for Thread Local Storage.
|
#
130661 |
|
18-Jun-2004 |
tmm |
Fix the problem that surfaced with the new binutils import on sparc64 (and that is for now being worked around by a binutils patch).
The rtld code tested &_DYNAMIC against 0 to see whether rtld itself was built as PIC or not. While the sparc64 MD code did not rely on the preset value of the GOT slot for _DYNAMIC any more due to previous binutils changes, it still used to not be 0, so that this check did work. The new binutils do however initialize this slot with 0. As a consequence, rtld would not properly initialize itself and crash. Fix that by introducing a new macro, RTLD_IS_DYNAMIC, to take the role of this test. For sparc64, it is implemented using the rtld_dynamic() code that was already there. If an architecture does not provide its own implementation, we default to the old check.
While being there, mark _DYNAMIC as a weak symbol in the sparc64 rtld_start.S. This is needed in the LDSCRIPT case, which is however not currently supported for want of an actual ldscript.
Sanity checked with md5 on alpha, amd64, i386 and ia64.
|
#
129792 |
|
27-May-2004 |
eik |
give out a little more information in case of a missing dependency
PR: 56549 Submitted by: edwin Reviewed by: joerg, ru Approved by: joerg MFC after: 2 weeks
|
#
127579 |
|
29-Mar-2004 |
dfr |
If we change obj_rtld.path after initialising __progname, make sure we change __progname to point at the new storage otherwise it ends up pointing at freed memory which leads to confusing garbled error messages.
|
#
127250 |
|
20-Mar-2004 |
peter |
Add initial support for compiling a special 32 bit version of ld-elf.so.1 on 64 bit systems. Most of this involves using alternate paths, environment variables and diagnostic messages.
The build glue is seperate.
|
#
126643 |
|
05-Mar-2004 |
markm |
Make NULL a (void*)0 whereever possible, and fix the warnings(-Werror) that this provokes. "Wherever possible" means "In the kernel OR NOT C++" (implying C).
There are places where (void *) pointers are not valid, such as for function pointers, but in the special case of (void *)0, agreement settles on it being OK.
Most of the fixes were NULL where an integer zero was needed; many of the fixes were NULL where ascii <nul> ('\0') was needed, and a few were just "other".
Tested on: i386 sparc64
|
#
126236 |
|
25-Feb-2004 |
kan |
Do not depend on existence of _end symbol in obj_from_addr, use obj->mapbase and obj->mapsize instead.
Prompted by: OpenOffice debugging session at last BSDCon.
|
#
124020 |
|
31-Dec-2003 |
dfr |
Initialise some uninitialised variables.
Thanks to: valgrind
|
#
122665 |
|
14-Nov-2003 |
tobez |
Sync comment with code's reality.
MFC after: 1 week
|
#
120039 |
|
13-Sep-2003 |
mdodd |
Retire the WITH_LIBMAP compile knob; libmap is now a standard feature.
|
#
120038 |
|
13-Sep-2003 |
mdodd |
Change libmap.c:lm_init() to return a status value; 0 for success (libmap available) and 1 for failure. Assign this return to the global 'libmap_disable' variable in rtld.c.
This totally prevents any libmap functions from being called after lm_init() if no config file is present.
|
#
119014 |
|
17-Aug-2003 |
gordon |
As long threatened, stage 2 of making a dynamically-linked root a reality. Install rtld into /libexec.
|
#
119013 |
|
17-Aug-2003 |
gordon |
Prepend /lib to the builtin library search path in rtld.
|
#
116563 |
|
19-Jun-2003 |
mdodd |
Provide a mechanism for dumping relocation information.
Setting the LD_DUMP_REL_PRE or LD_DUMP_REL_POST environment variables cause rtld-elf to output a table of all relocations.
This is useful for debugging.
|
#
116539 |
|
18-Jun-2003 |
mdodd |
Avoid a NULL pointer dereference.
|
#
116511 |
|
18-Jun-2003 |
mdodd |
- Add support for DT_FLAGS. - Define various things from the most recent ELF spec.
|
#
115448 |
|
31-May-2003 |
mdodd |
- use issetugid() - be paranoid about honoring LD_LIBMAP_DISABLE.
Suggested by: rwatson
|
#
115444 |
|
31-May-2003 |
mdodd |
Use the environment variable LD_LIBMAP_DISABLE to disable libmap.conf(5) functionality.
|
#
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)
|
#
114826 |
|
07-May-2003 |
kan |
Rethink the way we count module references. Simply following DT_NEEDED links is not flexible enough for cases where dynamically loaded modules form a dependency cycle.
This should fix an infinite recursion problem encountered by Yahoo.
Approved by: re (jhb)
|
#
114625 |
|
03-May-2003 |
obrien |
Fix signed/unsigned comparison warnings.
|
#
113229 |
|
07-Apr-2003 |
mdodd |
Dynamic object dependency mapping: libmap.
This is an optional feature, disabled by default.
This will be useful to people testing the various POSIX threading libraries under -CURRENT but can easily serve other needs.
|
#
111054 |
|
17-Feb-2003 |
kan |
Do not remove object from the lists at the unref_dag() stage. Introduce a new unlink_object() function and call it in unload_object() instead. Removing the object in unref_dag() is too early, rtld calls _fini() function after that and shared objects might fail resolve their own symbols.
|
#
110834 |
|
13-Feb-2003 |
kan |
Fix a typo in rtld_dirname.
|
#
110804 |
|
13-Feb-2003 |
kan |
Implement dlinfo() function.
Introdice RTLD_SELF special handle and properly process it within dlsym() and dlinfo() functions.
The intention is to improve our compatibility with Solaris and to make a Java port easier.
Partially submitted by: phantom
|
#
110801 |
|
13-Feb-2003 |
kan |
Remove /usr/lib/elf from a default search path. Move xprintf to malloc.c, it is only used there. Make static.
Submitted by: phantom
|
#
110659 |
|
10-Feb-2003 |
kan |
When unloading dependencies make sure they are removed from all the associated lists: remove RTLD_GLOBAL objects from global objects list; remove the parent object from dldags list of its children.
Previosly we were doing that only to the top-level object OF the DAG being unloaded and all its dependencies were ignored, leading to mysterious crashes later.
Submitted by: peter (partially)
|
#
107390 |
|
29-Nov-2002 |
kan |
Put back a test for binaries with no PT_LOAD entries I over-jealosly removed in r1.69.
Apploved by: re (rwatson)
|
#
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
|
#
105753 |
|
22-Oct-2002 |
kan |
Add support for binaries with arbitrary number of PT_LOAD sections.
Reviewed by: peter
|
#
105492 |
|
19-Oct-2002 |
kan |
Change the symbol lookup order to search RTLD_GLOBAL objects before referencing object's DAG. This makes it possible for C++ exceptions to work across shared libraries and brings us closer to the search order used by Solaris/Linux.
Reviewed by: jdp Approved by: obrien MFC after: 1 month
|
#
105439 |
|
19-Oct-2002 |
sobomax |
Fix a problem with RTLD_TRACE flag to dlopen(3), which sometimes can return even if there was no error occured (when trying to dlopen(3) object that already linked into executable which does dlopen(3) call). This is more proper fix for `ldd /usr/lib/libc.so' problem, because the new behaviour conforms to documentation.
Remove workaround from ldd.c (rev.1.32).
PR: 35099 Submitted by: Nathan Hawkins <utsl@quic.net> MFC after: 1 week
|
#
101532 |
|
08-Aug-2002 |
jdp |
Don't acquire the writer lock in rtld_exit when clearing the shared objects' reference counts. This function is called by the atexit mechanism at program shutdown. I don't think the locking is necessary here. It caused OpenOffice builds to hang more often than not. Credit to Martin Blapp and Matt Dillon for helping to diagnose this problem and for testing the fix.
|
#
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
|
#
95539 |
|
27-Apr-2002 |
marcel |
Don't do symbol lookups for local symbols. The symbol index in the relocation identifies the symbol to which we need to bind. This solves a problem seen on ia64 where the symbol hash table does not contain local symbols and thus resulted in unresolved symbols.
Tested on: alpha, i386, ia64
|
#
93610 |
|
02-Apr-2002 |
jake |
Minor changes to make this work on sparc64.
Approved by: jdp Tested on: alpha, i386, sparc64
|
#
91636 |
|
04-Mar-2002 |
des |
Forced commit to note that the previous revision applied jdp's own patch for the RTLD_GLOBAL problem, not mine.
|
#
91444 |
|
27-Feb-2002 |
des |
When searching an object that was opened with RTLD_GLOBAL, search its DAG too.
PR: bin/25059 Approved by: jdp MFC after: 3 weeks
|
#
90755 |
|
17-Feb-2002 |
obrien |
Add support such that if LD_TRACE_LOADED_OBJECTS_ALL is defined to a non-empty string in the environment; we indicate which objects caused each object to be loaded.
PR: 30908 Submitted-by: Mike Meyer <mwm@mired.org>
|
#
90174 |
|
04-Feb-2002 |
sobomax |
(forced)
Previous commit (ldd on shlibs) is a subject of:
MFC after: 2 weeks
|
#
90172 |
|
04-Feb-2002 |
sobomax |
Allow ldd(1) be used on shared libraries in addition to executables.
|
#
90162 |
|
03-Feb-2002 |
kris |
Mark a function as __printflike()
MFC after: 1 week
|
#
89783 |
|
25-Jan-2002 |
jdp |
Change the library search order so that LD_LIBRARY_PATH overrides all others.
PR: bin/28191 MFC after: 2 weeks
|
#
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
|
#
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.
|
#
80381 |
|
26-Jul-2001 |
sheldonh |
Use STD{ERR,IN,OUT}_FILENO instead of their numeric values. The definitions are more readable, and it's possible that they're more portable to pathalogical platforms.
Submitted by: David Hill <david@phobia.ms>
|
#
76296 |
|
05-May-2001 |
jdp |
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
|
#
70677 |
|
05-Jan-2001 |
jdp |
Fix a bug in which a program called dlclose from a destructor and got an assert failure in the dynamic linker.
|
#
68458 |
|
07-Nov-2000 |
jdp |
Remove the superfluous call to _rtld_error() in symlook_default(). The function's callers generate the error message when appropriate.
This eliminates the message ``Undefined symbol "__register_frame_info"'' which was bogusly returned by dlerror() in some cases.
|
#
66056 |
|
19-Sep-2000 |
jdp |
Add support for dlsym(RTLD_DEFAULT, ...).
|
#
65109 |
|
26-Aug-2000 |
jwd |
Pass two pointer parameters to the r_debug_state() hook function, thus allowing a debugger or other trace tool to easily grab the addresses of the needed structures off the stack.
This change is transparent to gdb, which locates the link_map list and transfers it to debugger memory for comparison purposes.
A sample program will be committed showing how this can be used.
Reviewed by: John Polstra <jdp@FreeBSD.org>
|
#
63870 |
|
26-Jul-2000 |
jdp |
Revamp the code that calls shared libraries' init and fini functions. Formerly the init functions were called in the opposite of the order in which libraries were loaded, and libraries were loaded according to a breadth-first traversal of the dependency graph. That ordering came from SVR4.0, and it was easy to implement but not always sensible.
Now we do a depth-first walk over the dependency graph and call the init functions in an order such that each shared object's needed objects are initialized before the shared object itself. At the same time we build a list of finalization (fini) functions in the opposite order, to guarantee correct C++ destructor ordering whenever possible. (It may not be possible if dlopen and dlclose are used in strange ways, but we come as close as one can come.)
The need for this renovation has become apparent as more programs have started using multithreading. The multithreaded C library libc_r requires initialization, whereas the standard libc does not. Since virtually every other object depends on the C library, it is important that it get initialized first.
|
#
62801 |
|
08-Jul-2000 |
jdp |
Solve the dynamic linker's problems with multithreaded programs once and for all (I hope). Packages such as wine, JDK, and linuxthreads should no longer have any problems with re-entering the dynamic linker.
This commit replaces the locking used in the dynamic linker with a new spinlock-based reader/writer lock implementation. Brian Fundakowski Feldman <green> argued for this from the very beginning, but it took me a long time to come around to his point of view. Spinlocks are the only kinds of locks that work with all thread packages. But on uniprocessor systems they can be inefficient, because while a contender for the lock is spinning the holder of the lock cannot make any progress toward releasing it. To alleviate this disadvantage I have borrowed a trick from Sleepycat's Berkeley DB implementation. When spinning for a lock, the requester does a nanosleep() call for 1 usec. each time around the loop. This will generally yield the CPU to other threads, allowing the lock holder to finish its business and release the lock. I chose 1 usec. as the minimum sleep which would with reasonable certainty not be rounded down to 0.
The formerly machine-independent file "lockdflt.c" has been moved into the architecture-specific subdirectories by repository copy. It now contains the machine-dependent spinlocking code. For the spinlocks I used the very nifty "simple, non-scalable reader-preference lock" which I found at
<http://www.cs.rochester.edu/u/scott/synchronization/pseudocode/rw.html>
on all CPUs except the 80386 (the specific CPU model, not the architecture). The 80386 CPU doesn't support the necessary "cmpxchg" instruction, so on that CPU a simple exclusive test-and-set lock is used instead. 80386 CPUs are detected at initialization time by trying to execute "cmpxchg" and catching the resulting SIGILL signal.
To reduce contention for the locks, I have revamped a couple of key data structures, permitting all common operations to be done under non-exclusive (reader) locking. The only operations that require exclusive locking now are the rare intrusive operations such as dlopen() and dlclose().
The dllockinit() interface is now deprecated. It still exists, but only as a do-nothing stub. I plan to remove it as soon as is reasonably possible. (From the very beginning it was clearly labeled as experimental and subject to change.) As far as I know, only the linuxthreads port uses dllockinit(). This interface turned out to have several problems. As one example, when the dynamic linker called a client-supplied locking function, that function sometimes needed lazy binding, causing re-entry into the dynamic linker and a big looping mess. And in any case, it turned out to be too burdensome to require threads packages to register themselves with the dynamic linker.
|
#
60938 |
|
26-May-2000 |
jake |
Back out the previous change to the queue(3) interface. It was not discussed and should probably not happen.
Requested by: msmith and others
|
#
60833 |
|
23-May-2000 |
jake |
Change the way that the queue(3) structures are declared; don't assume that the type argument to *_HEAD and *_ENTRY is a struct.
Suggested by: phk Reviewed by: phk Approved by: mdodd
|
#
56780 |
|
28-Jan-2000 |
jdp |
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.
|
#
56405 |
|
22-Jan-2000 |
jdp |
Allow files in LD_PRELOAD to be separated by white space, like Solaris and Linux.
|
#
55687 |
|
09-Jan-2000 |
jdp |
Revamp the mechanism for enumerating and calling shared objects' init and fini functions. Now the code is very careful to hold no locks when calling these functions. Thus the dynamic linker cannot be re-entered with a lock already held.
Remove the tolerance for recursive locking that I added in revision 1.2 of dllockinit.c. Recursive locking shouldn't happen any more.
Mozilla and JDK users: I'd appreciate confirmation that things still work right (or at least the same) with these changes.
|
#
55122 |
|
27-Dec-1999 |
jdp |
Add a new function dllockinit() for registering thread locking functions to be used by the dynamic linker. This can be called by threads packages at start-up time. I will add the call to libc_r soon.
Also add a default locking method that is used up until dllockinit() is called. The default method works by blocking SIGVTALRM, SIGPROF, and SIGALRM in critical sections. It is based on the observation that most user-space threads packages implement thread preemption with one of these signals (usually SIGVTALRM).
The dynamic linker has never been reentrant, but it became less reentrant in revision 1.34 of "src/libexec/rtld-elf/rtld.c". Starting with that revision, multiple threads each doing lazy binding could interfere with each other. The usual symptom was that a symbol was falsely reported as undefined at start-up time. It was rare but not unseen. This commit fixes it.
|
#
53400 |
|
19-Nov-1999 |
jdp |
In revision 1.21 I changed the search order for shared libraries, but I forgot to make the corresponding fix to the comment. Rectify that.
Submitted by: Tony Finch <fanf@demon.net>
|
#
50928 |
|
04-Sep-1999 |
jdp |
Change the warning about unrecognized entries in the dynamic table to a debug message which is disabled in production builds of the dynamic linker. The condition warned about is normally harmless.
PR: bin/12849
|
#
50873 |
|
04-Sep-1999 |
jdp |
When looking up symbols, search the objects loaded at program start up first -- before the dlopened DAGs containing the referencing object.
This makes dynamically loaded perl modules work properly again.
|
#
50610 |
|
29-Aug-1999 |
jdp |
Get the actual pathname of the dynamic linker from the executable's PT_INTERP program header entry, to ensure that gdb always finds the right dynamic linker.
Use obj->relocbase to simplify a few calculations where appropriate.
|
#
50609 |
|
29-Aug-1999 |
jdp |
When checking to see if a shared object is already loaded, look for a device/inode match if no pathname match is found.
|
#
50608 |
|
29-Aug-1999 |
jdp |
Revamp the symbol lookup algorithm to cope better with objects loaded separately by dlopen that have global symbols with identical names. Viewing each dlopened object as a DAG which is linked by its DT_NEEDED entries in the dynamic table, the search order is as follows:
* If the referencing object was linked with -Bsymbolic, search it internally. * Search all dlopened DAGs containing the referencing object. * Search all objects loaded at program start up. * Search all objects which were dlopened() using the RTLD_GLOBAL flag (which is now supported too).
The search terminates as soon as a strong definition is found. Lacking that, the first weak definition is used.
These rules match those of Solaris, as best I could determine them from its vague manual pages and the results of experiments I performed.
PR: misc/12438
|
#
50607 |
|
29-Aug-1999 |
jdp |
When honoring -Bsymbolic, still keep searching if only a weak definition was found in the referencing object.
|
#
50606 |
|
29-Aug-1999 |
jdp |
Simplify the logic in find_symdef().
|
#
50476 |
|
27-Aug-1999 |
peter |
$Id$ -> $FreeBSD$
|
#
50096 |
|
20-Aug-1999 |
jdp |
Add a NULL pointer check whose absence could cause segmentation violations in certain obscure cases involving failed dlopens. Many thanks to Archie Cobbs for providing me with a good test case.
Eliminate a block that existed only to localize a declaration.
|
#
48871 |
|
17-Jul-1999 |
jdp |
Change many asserts into normal errors. They were all for conditions caused by invalid shared objects rather than by internal errors.
Enable format string mismatch checking for _rtld_error().
|
#
48805 |
|
14-Jul-1999 |
jdp |
Change the symbol used to find the end of an object's address space from "end" to "_end". The former does not exist in most shared libraries. This fixes problems in dladdr() and dlsym(RTLD_NEXT, ...).
|
#
48708 |
|
09-Jul-1999 |
jdp |
Fix bug: if a dlopen() failed (e.g., because of undefined symbols), the dynamic linker didn't clean up properly. A subsequent dlopen() of the same object would appear to succeed.
Another excellent fix from Max Khon.
PR: bin/12471 Submitted by: Max Khon <fjoe@iclub.nsu.ru>
|
#
48543 |
|
03-Jul-1999 |
jdp |
Shake hands with GDB a little bit earlier so that it is possible to debug the init functions.
Submitted by: dfr
|
#
48208 |
|
25-Jun-1999 |
jdp |
Fix a reference counting problem when using dlopen(NULL, ...).
PR: bin/12129
|
#
48205 |
|
25-Jun-1999 |
jdp |
Fix a serious performance bug for large programs on the Alpha, discovered by Hidetoshi Shimokawa. Large programs need multiple GOTs. The lazy binding stub in the PLT can be reached from any of these GOTs, but the dynamic linker only has enough information to fix up the first GOT entry. Thus calls through the other GOTs went through the time-consuming lazy binding process on every call.
This fix rewrites the PLT entries themselves to bypass the lazy binding.
Tested by Hidetoshi Shimokawa and Steve Price.
Reviewed by: Doug Rabson <dfr@freebsd.org>
|
#
45929 |
|
21-Apr-1999 |
jdp |
Back out my change from 6 April PDT that added a new dlversion() function. It was an ill-considered feature. It didn't solve the problem I wanted it to solve. And it added Yet Another Version Number that would have to be maintained at every release point. I'm nuking it now before anybody grows too fond of it.
|
#
45890 |
|
21-Apr-1999 |
jdp |
After relocating the main program, but before calling any of the _init() functions, initialize the global variables "__progname" and "environ". This makes it possible for the _init() functions to call things like getenv() and err().
|
#
45510 |
|
09-Apr-1999 |
jdp |
The ELF specification says that the RPATH in the executable or shared object takes precedence over LD_LIBRARY_PATH. Make the dynamic linker do it that way.
|
#
45501 |
|
08-Apr-1999 |
jdp |
Eliminate all machine-dependent code from the main source body and the Makefile, and move it down into the architecture-specific subdirectories.
Eliminate an asm() statement for the i386.
Make the dynamic linker work if it is built as an executable instead of as a shared library. See i386/Makefile.inc to find out how to do it. Note, this change is not enabled and it might never be enabled. But it might be useful in the future. Building the dynamic linker as an executable should make it start up faster, because it won't have any relocations. But in practice I suspect the difference is negligible.
|
#
45399 |
|
07-Apr-1999 |
jdp |
Fix a couple of typos in comments.
|
#
45398 |
|
07-Apr-1999 |
jdp |
Add a new function dlversion() which returns the version number of the dynamic linker in the same form as __FreeBSD_version. This is mainly intended for checking the dynamic linker version during a make world.
|
#
45320 |
|
05-Apr-1999 |
jdp |
Resolve undefined weak references to a value of 0. This solves the "__deregister_frame_info" problem that was seen when combining a program linked using the old gcc with shared libraries that were built using egcs.
|
#
45292 |
|
04-Apr-1999 |
peter |
If somebody does an execv("foo", NULL) (which theoretically is an error), avoid crashing inside rtld (since it's easy) since everything else handles it. Of course, if the target program checks argv[], it'll fall over.
Reviewed by: jdp
|
#
45018 |
|
24-Mar-1999 |
nate |
- Commit the correct dladdr() implementation.
Reviewed by: jdp@FreeBSD.org <This is the version he reviewed!>
|
#
45015 |
|
24-Mar-1999 |
nate |
- Added dladdr(3) support.
Reviewed by: jdp@FreeBSD.org
|
#
41374 |
|
27-Nov-1998 |
dfr |
Use the runpath of the main program for locating libraries loaded by dlopen().
Reviewed by: jdp
|
#
40280 |
|
13-Oct-1998 |
jdp |
Fix a bug in dlclose that broke the apache13 port. The list of loaded objects wasn't being maintained properly.
|
#
39551 |
|
22-Sep-1998 |
jdp |
Make LD_PRELOAD work for ELF.
|
#
39321 |
|
16-Sep-1998 |
jdp |
Fix a bug that showed up when debugging dynamically linked programs. References from GDB to "printf" and various other functions would find the versions in the dynamic linker itself, rather than the versions in the program's libc. This fix moves the GDB link map entry for the dynamic linker to the end of the search list, where its symbols will be found only if they are not found anywhere else. It was suggested by Doug Rabson, though I implemented it a little differently.
I personally would prefer to leave the dynamic linker's entry out of the GDB search list altogether. But Doug argues that it is handy there for such things as setting breakpoints on dlopen(). So it stays for now, at least.
Note, if we ever integrate the dynamic linker with libc (which has several important benefits to recommend it), this whole problem goes away.
|
#
39306 |
|
15-Sep-1998 |
jdp |
Make the pathname pointed to by the Obj_Entry structure for the dynamic linker itself dynamically allocated. All of them are supposed to be dynamically allocated, but we cheated before. It made gdb unhappy under some circumstances.
|
#
38836 |
|
05-Sep-1998 |
jdp |
Implement ldconfig functionality for ELF. The hints are stored in a different file than the a.out hints, namely, "/var/run/ld-elf.so.hints". These hints consist only of the directory search path. There is no hash table as in the a.out hints, because ELF doesn't have to search for the file with the highest minor version number. (It doesn't have minor version numbers at all.)
A single run of ldconfig updates either the a.out hints or the ELF hints, but not both. The set of hints to process is selected in the usual way, via /etc/objformat, or ${OBJFORMAT}, or the "-aout" or "-elf" command line option. The rationale is that you probably want to search different directories for ELF than for a.out.
"ldconfig -r" is faked up to produce output like we are used to, except that for ELF there are no minor version numbers. This should enable "ldconfig -r" to be used for checking LIB_DEPENDS in ports even for ELF.
I implemented the ELF functionality in a new source file, with an eye toward eliminating the a.out code entirely at some point in the future.
|
#
38816 |
|
04-Sep-1998 |
dfr |
Add alpha support.
Submitted by: John Birrell <jb@cimlogic.com.au> (with extra hacks by me) Obtained from: Probably NetBSD
|
#
38740 |
|
02-Sep-1998 |
jdp |
Suppress duplicate entries in ldd output.
|
#
38739 |
|
02-Sep-1998 |
jdp |
Style fixes. If it seems like a lot of lines of changes, it's because I moved some functions. Mr. Tidy likes them to be in alphabetical order.
|
#
38737 |
|
01-Sep-1998 |
jdp |
Handle dlsym(NULL, ...) properly, by searching in the caller's shared object. Note, this searches _only_ that object, and not its needed objects, in accordance with the documentation.
Also fix dlopen(NULL, ...) so that the executable's needed objects are searched as well as the executable itself.
|
#
35574 |
|
01-May-1998 |
dfr |
Add support for ldd.
|
#
35529 |
|
30-Apr-1998 |
dfr |
Add GDB support. The method and some of the code came from NetBSD's elf runtime linker.
|
#
34193 |
|
07-Mar-1998 |
jdp |
This commit was generated by cvs2svn to compensate for changes in r34192, which included commits to RCS files with non-trunk default branches.
|
#
34192 |
|
07-Mar-1998 |
jdp |
Import the ELF dynamic linker. This is the ElfKit version with quite a few enhancements and bug fixes. There are still some known deficiencies, but it should be adequate to get us started with ELF.
Submitted by: John Polstra <jdp@polstra.com>
|