diff options
| author | cvs2svn <cvs2svn@FreeBSD.org> | 1999-01-21 00:55:31 +0000 |
|---|---|---|
| committer | cvs2svn <cvs2svn@FreeBSD.org> | 1999-01-21 00:55:31 +0000 |
| commit | 4b4d01da6f07f7754ff6a6e4f5223e9f0984d1a6 (patch) | |
| tree | 9ef395ed57f97b5613d996298d19e60c8e518010 /libexec | |
| parent | 99af619cb2f1dac921ef1dd9fe5661503220f524 (diff) | |
Notes
Diffstat (limited to 'libexec')
| -rw-r--r-- | libexec/rtld-aout/rtld.1aout | 224 | ||||
| -rw-r--r-- | libexec/rtld-elf/amd64/reloc.c | 236 | ||||
| -rw-r--r-- | libexec/rtld-elf/amd64/rtld_start.S | 88 | ||||
| -rw-r--r-- | libexec/rtld-elf/rtld.1 | 224 |
4 files changed, 0 insertions, 772 deletions
diff --git a/libexec/rtld-aout/rtld.1aout b/libexec/rtld-aout/rtld.1aout deleted file mode 100644 index 90e9d546837c..000000000000 --- a/libexec/rtld-aout/rtld.1aout +++ /dev/null @@ -1,224 +0,0 @@ -.\" $Id: rtld.1,v 1.14 1997/05/27 13:46:40 max Exp $ -.\" -.\" Copyright (c) 1995 Paul Kranenburg -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgment: -.\" This product includes software developed by Paul Kranenburg. -.\" 3. The name of the author may not be used to endorse or promote products -.\" derived from this software without specific prior written permission -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.Dd June 27, 1995 -.Dt RTLD 1 -.Os FreeBSD -.Sh NAME -.Nm ld.so -.Nd run-time link-editor -.Sh DESCRIPTION -.Nm -is a self-contained, position independent program image providing run-time -support for loading and link-editing shared objects into a process' -address space. It uses the data structures -.Po -see -.Xr link 5 -.Pc -contained within dynamically linked programs to determine which shared -libraries are needed and loads them at a convenient virtual address -using the -.Xr mmap 2 -system call. -.Pp -After all shared libraries have been successfully loaded, -.Nm -proceeds to resolve external references from both the main program and -all objects loaded. A mechanism is provided for initialization routines -to be called, on a per-object basis, giving a shared object an opportunity -to perform any extra set-up, before execution of the program proper begins. -This is useful for C++ libraries that contain static constructors. -.Pp -.Nm -is itself a shared object that is initially loaded by the startup module -.Em crt0 . -Since -.Xr a.out 5 -formats do not provide easy access to the file header from within a running -process, -.Em crt0 -uses the special symbol -.Va _DYNAMIC -to determine whether a program is in fact dynamically linked or not. Whenever -the linker -.Xr ld 1 -has relocated this symbol to a location other than 0, -.Em crt0 -assumes the services of -.Nm -are needed -.Po -see -.Xr link 5 -for details -.Pc \&. -.Em crt0 -passes control to -.Nm -\&'s entry point before the program's -.Fn main -routine is called. Thus, -.Nm -can complete the link-editing process before the dynamic program calls upon -services of any dynamic library. -.Pp -To quickly locate the required shared objects in the filesystem, -.Nm -may use a -.Dq hints -file, prepared by the -.Xr ldconfig 8 -utility, in which the full path specification of the shared objects can be -looked up by hashing on the 3-tuple -.Ao -library-name, major-version-number, minor-version-number -.Ac \&. -.Pp -.Nm -recognizes a number of environment variables that can be used to modify -its behaviour as follows: -.Pp -.Bl -tag -width "LD_IGNORE_MISSING_OBJECTS" -.It Ev LD_LIBRARY_PATH -A colon separated list of directories, overriding the default search path -for shared libraries. -This is ignored for set-user-ID and set-group-ID programs. -.It Ev LD_PRELOAD -A colon separated list of shared libraries, to be linked in before any -other shared libraries. If the directory is not specified then -the directories specified by LD_LIBRARY_PATH will be searched first -followed by the set of built-in standard directories. -This is ignored for set-user-ID and set-group-ID programs. -.It Ev LD_BIND_NOW -When set to a nonempty string, causes -.Nm -to relocate all external function calls before starting execution of the -program. Normally, function calls are bound lazily, at the first call -of each function. -.Ev LD_BIND_NOW -increases the start-up time of a program, but it avoids run-time -surprises caused by unexpectedly undefined functions. -.It Ev LD_WARN_NON_PURE_CODE -When set to a nonempty string, issue a warning whenever a link-editing -operation requires modification of the text segment of some loaded -object. This is usually indicative of an incorrectly built library. -.It Ev LD_SUPPRESS_WARNINGS -When set to a nonempty string, no warning messages of any kind are -issued. Normally, a warning is given if satisfactorily versioned -library could not be found. -.It Ev LD_IGNORE_MISSING_OBJECTS -When set to a nonempty string, makes it a nonfatal condition if -one or more required shared objects cannot be loaded. -Loading and execution proceeds using the objects that are -available. -A warning is produced for each missing object, unless the environment -variable -.Ev LD_SUPPRESS_WARNINGS -is set to a nonempty string. -.Pp -This is ignored for set-user-ID and set-group-ID programs. -.Pp -Missing shared objects can be ignored without errors if all the -following conditions hold: -.Bl -bullet -.It -They do not supply definitions for any required data symbols. -.It -No functions defined by them are called during program execution. -.It -The environment variable -.Ev LD_BIND_NOW -is unset or is set to the empty string. -.El -.It Ev LD_TRACE_LOADED_OBJECTS -When set to a nonempty string, causes -.Nm -to exit after loading the shared objects and printing a summary which includes -the absolute pathnames of all objects, to standard output. -.It Ev LD_TRACE_LOADED_OBJECTS_FMT1 -.It Ev LD_TRACE_LOADED_OBJECTS_FMT2 -When set, these variables are interpreted as format strings a la -.Xr printf 3 -to customize the trace output and are used by -.Xr ldd 1 's -.Fl f -option and allows -.Xr ldd 1 -to be operated as a filter more conveniently. -The following conversions can be used: -.Bl -tag -indent "LD_TRACE_LOADED_OBJECTS_FMT1 " -width "xxxx" -.It \&%a -The main program's name -.Po also known as -.Dq __progname -.Pc . -.It \&%A -The value of the environment variable -.Ev LD_TRACE_LOADED_OBJECTS_PROGNAME -.It \&%o -The library name. -.It \&%m -The library's major version number. -.It \&%n -The library's minor version number. -.It \&%p -The full pathname as determined by -.Nm rtld Ns 's -library search rules. -.It \&%x -The library's load address. -.El -.Pp -Additionally, -.Sy \en -and -.Sy \et -are recognized and have their usual meaning. -.\" .It Ev LD_NO_INTERN_SEARCH -.\" When set, -.\" .Nm -.\" does not process any internal search paths that were recorded in the -.\" executable. -.\" .It Ev LD_NOSTD_PATH -.\" When set, do not include a set of built-in standard directory paths for -.\" searching. This might be useful when running on a system with a completely -.\" non-standard filesystem layout. -.El -.Pp -.Sh FILES -/var/run/ld.so.hints -.Pp -.Sh SEE ALSO -.Xr ld 1 , -.Xr link 5 , -.Xr ldconfig 8 -.Sh HISTORY -The shared library model employed first appeared in SunOS 4.0 diff --git a/libexec/rtld-elf/amd64/reloc.c b/libexec/rtld-elf/amd64/reloc.c deleted file mode 100644 index d34d892b9036..000000000000 --- a/libexec/rtld-elf/amd64/reloc.c +++ /dev/null @@ -1,236 +0,0 @@ -/*- - * Copyright 1996-1998 John D. Polstra. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $Id: rtld.c,v 1.3 1998/05/01 08:39:27 dfr Exp $ - */ - -/* - * Dynamic linker for ELF. - * - * John Polstra <jdp@polstra.com>. - */ - -#include <sys/param.h> -#include <sys/mman.h> - -#include <dlfcn.h> -#include <err.h> -#include <errno.h> -#include <fcntl.h> -#include <stdarg.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include "debug.h" -#include "rtld.h" - -/* - * Debugging support. - */ - -#define assert(cond) ((cond) ? (void) 0 :\ - (msg("oops: " __XSTRING(__LINE__) "\n"), abort())) -#define msg(s) (write(1, s, strlen(s))) -#define trace() msg("trace: " __XSTRING(__LINE__) "\n"); - -/* - * Process the special R_386_COPY relocations in the main program. These - * copy data from a shared object into a region in the main program's BSS - * segment. - * - * Returns 0 on success, -1 on failure. - */ -int -do_copy_relocations(Obj_Entry *dstobj) -{ - const Elf_Rel *rellim; - const Elf_Rel *rel; - - assert(dstobj->mainprog); /* COPY relocations are invalid elsewhere */ - - rellim = (const Elf_Rel *) ((caddr_t) dstobj->rel + dstobj->relsize); - for (rel = dstobj->rel; rel < rellim; rel++) { - if (ELF_R_TYPE(rel->r_info) == R_386_COPY) { - void *dstaddr; - const Elf_Sym *dstsym; - const char *name; - unsigned long hash; - size_t size; - const void *srcaddr; - const Elf_Sym *srcsym; - Obj_Entry *srcobj; - - dstaddr = (void *) (dstobj->relocbase + rel->r_offset); - dstsym = dstobj->symtab + ELF_R_SYM(rel->r_info); - name = dstobj->strtab + dstsym->st_name; - hash = elf_hash(name); - size = dstsym->st_size; - - for (srcobj = dstobj->next; srcobj != NULL; srcobj = srcobj->next) - if ((srcsym = symlook_obj(name, hash, srcobj, false)) != NULL) - break; - - if (srcobj == NULL) { - _rtld_error("Undefined symbol \"%s\" referenced from COPY" - " relocation in %s", name, dstobj->path); - return -1; - } - - srcaddr = (const void *) (srcobj->relocbase + srcsym->st_value); - memcpy(dstaddr, srcaddr, size); - } - } - - return 0; -} - -/* Process the non-PLT relocations. */ -int -reloc_non_plt(Obj_Entry *obj, Obj_Entry *obj_rtld) -{ - const Elf_Rel *rellim; - const Elf_Rel *rel; - - rellim = (const Elf_Rel *) ((caddr_t) obj->rel + obj->relsize); - for (rel = obj->rel; rel < rellim; rel++) { - Elf_Addr *where = (Elf_Addr *) (obj->relocbase + rel->r_offset); - - switch (ELF_R_TYPE(rel->r_info)) { - - case R_386_NONE: - break; - - case R_386_32: - { - const Elf_Sym *def; - const Obj_Entry *defobj; - - def = find_symdef(ELF_R_SYM(rel->r_info), obj, &defobj, - false); - if (def == NULL) - return -1; - - *where += (Elf_Addr) (defobj->relocbase + def->st_value); - } - break; - - case R_386_PC32: - /* - * I don't think the dynamic linker should ever see this - * type of relocation. But the binutils-2.6 tools sometimes - * generate it. - */ - { - const Elf_Sym *def; - const Obj_Entry *defobj; - - def = find_symdef(ELF_R_SYM(rel->r_info), obj, &defobj, - false); - if (def == NULL) - return -1; - - *where += - (Elf_Addr) (defobj->relocbase + def->st_value) - - (Elf_Addr) where; - } - break; - - case R_386_COPY: - /* - * These are deferred until all other relocations have - * been done. All we do here is make sure that the COPY - * relocation is not in a shared library. They are allowed - * only in executable files. - */ - if (!obj->mainprog) { - _rtld_error("%s: Unexpected R_386_COPY relocation" - " in shared library", obj->path); - return -1; - } - break; - - case R_386_GLOB_DAT: - { - const Elf_Sym *def; - const Obj_Entry *defobj; - - def = find_symdef(ELF_R_SYM(rel->r_info), obj, &defobj, - false); - if (def == NULL) - return -1; - - *where = (Elf_Addr) (defobj->relocbase + def->st_value); - } - break; - - case R_386_RELATIVE: - *where += (Elf_Addr) obj->relocbase; - break; - - default: - _rtld_error("%s: Unsupported relocation type %d" - " in non-PLT relocations\n", obj->path, - ELF_R_TYPE(rel->r_info)); - return -1; - } - } - return 0; -} - -/* Process the PLT relocations. */ -int -reloc_plt(Obj_Entry *obj, bool bind_now) -{ - const Elf_Rel *rellim; - const Elf_Rel *rel; - - /* Process the PLT relocations. */ - rellim = (const Elf_Rel *) ((caddr_t) obj->pltrel + obj->pltrelsize); - if (bind_now) { - /* Fully resolve procedure addresses now */ - for (rel = obj->pltrel; rel < rellim; rel++) { - Elf_Addr *where = (Elf_Addr *) - (obj->relocbase + rel->r_offset); - const Elf_Sym *def; - const Obj_Entry *defobj; - - assert(ELF_R_TYPE(rel->r_info) == R_386_JMP_SLOT); - - def = find_symdef(ELF_R_SYM(rel->r_info), obj, &defobj, true); - if (def == NULL) - return -1; - - *where = (Elf_Addr) (defobj->relocbase + def->st_value); - } - } else { /* Just relocate the GOT slots pointing into the PLT */ - for (rel = obj->pltrel; rel < rellim; rel++) { - Elf_Addr *where = (Elf_Addr *) - (obj->relocbase + rel->r_offset); - *where += (Elf_Addr) obj->relocbase; - } - } - return 0; -} diff --git a/libexec/rtld-elf/amd64/rtld_start.S b/libexec/rtld-elf/amd64/rtld_start.S deleted file mode 100644 index d678f2ef8d68..000000000000 --- a/libexec/rtld-elf/amd64/rtld_start.S +++ /dev/null @@ -1,88 +0,0 @@ -/*- - * Copyright 1996-1998 John D. Polstra. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $Id: rtld_start.S,v 1.1.1.1 1998/03/07 19:24:35 jdp Exp $ - */ - - .text - .align 4 - .globl .rtld_start - .type .rtld_start,@function -.rtld_start: - xorl %ebp,%ebp # Clear frame pointer for good form - movl %esp,%eax # Save initial stack pointer - subl $8,%esp # A place to store exit procedure addr - movl %esp,%ebx # save address of exit proc - movl %esp,%ecx # construct address of obj_main - addl $4,%ecx - pushl %ecx # Pass address of obj_main - pushl %ebx # Pass address of exit proc - pushl %eax # Pass initial stack pointer to rtld - call _rtld@PLT # Call rtld(sp); returns entry point - addl $12,%esp # Remove arguments from stack - popl %edx # Get exit procedure address - addl $4,%esp # Ignore obj_main -/* - * At this point, %eax contains the entry point of the main program, and - * %edx contains a pointer to a termination function that should be - * registered with atexit(). (crt1.o registers it.) - */ -.globl .rtld_goto_main -.rtld_goto_main: # This symbol exists just to make debugging easier. - jmp *%eax # Enter main program - - -/* - * Binder entry point. Control is transferred to here by code in the PLT. - * On entry, there are two arguments on the stack. In ascending address - * order, they are (1) "obj", a pointer to the calling object's Obj_Entry, - * and (2) "reloff", the byte offset of the appropriate relocation entry - * in the PLT relocation table. - * - * We are careful to preserve all registers, even the the caller-save - * registers. That is because this code may be invoked by low-level - * assembly-language code that is not ABI-compliant. - */ - .align 4 - .globl _rtld_bind_start - .type _rtld_bind_start,@function -_rtld_bind_start: - pushf # Save eflags - pushl %eax # Save %eax - pushl %edx # Save %edx - pushl %ecx # Save %ecx - pushl 20(%esp) # Copy reloff argument - pushl 20(%esp) # Copy obj argument - - call _rtld_bind@PLT # Transfer control to the binder - /* Now %eax contains the entry point of the function being called. */ - - addl $8,%esp # Discard binder arguments - movl %eax,20(%esp) # Store target over obj argument - popl %ecx # Restore %ecx - popl %edx # Restore %edx - popl %eax # Restore %eax - popf # Restore eflags - leal 4(%esp),%esp # Discard reloff, do not change eflags - ret # "Return" to target address diff --git a/libexec/rtld-elf/rtld.1 b/libexec/rtld-elf/rtld.1 deleted file mode 100644 index 90e9d546837c..000000000000 --- a/libexec/rtld-elf/rtld.1 +++ /dev/null @@ -1,224 +0,0 @@ -.\" $Id: rtld.1,v 1.14 1997/05/27 13:46:40 max Exp $ -.\" -.\" Copyright (c) 1995 Paul Kranenburg -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgment: -.\" This product includes software developed by Paul Kranenburg. -.\" 3. The name of the author may not be used to endorse or promote products -.\" derived from this software without specific prior written permission -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.Dd June 27, 1995 -.Dt RTLD 1 -.Os FreeBSD -.Sh NAME -.Nm ld.so -.Nd run-time link-editor -.Sh DESCRIPTION -.Nm -is a self-contained, position independent program image providing run-time -support for loading and link-editing shared objects into a process' -address space. It uses the data structures -.Po -see -.Xr link 5 -.Pc -contained within dynamically linked programs to determine which shared -libraries are needed and loads them at a convenient virtual address -using the -.Xr mmap 2 -system call. -.Pp -After all shared libraries have been successfully loaded, -.Nm -proceeds to resolve external references from both the main program and -all objects loaded. A mechanism is provided for initialization routines -to be called, on a per-object basis, giving a shared object an opportunity -to perform any extra set-up, before execution of the program proper begins. -This is useful for C++ libraries that contain static constructors. -.Pp -.Nm -is itself a shared object that is initially loaded by the startup module -.Em crt0 . -Since -.Xr a.out 5 -formats do not provide easy access to the file header from within a running -process, -.Em crt0 -uses the special symbol -.Va _DYNAMIC -to determine whether a program is in fact dynamically linked or not. Whenever -the linker -.Xr ld 1 -has relocated this symbol to a location other than 0, -.Em crt0 -assumes the services of -.Nm -are needed -.Po -see -.Xr link 5 -for details -.Pc \&. -.Em crt0 -passes control to -.Nm -\&'s entry point before the program's -.Fn main -routine is called. Thus, -.Nm -can complete the link-editing process before the dynamic program calls upon -services of any dynamic library. -.Pp -To quickly locate the required shared objects in the filesystem, -.Nm -may use a -.Dq hints -file, prepared by the -.Xr ldconfig 8 -utility, in which the full path specification of the shared objects can be -looked up by hashing on the 3-tuple -.Ao -library-name, major-version-number, minor-version-number -.Ac \&. -.Pp -.Nm -recognizes a number of environment variables that can be used to modify -its behaviour as follows: -.Pp -.Bl -tag -width "LD_IGNORE_MISSING_OBJECTS" -.It Ev LD_LIBRARY_PATH -A colon separated list of directories, overriding the default search path -for shared libraries. -This is ignored for set-user-ID and set-group-ID programs. -.It Ev LD_PRELOAD -A colon separated list of shared libraries, to be linked in before any -other shared libraries. If the directory is not specified then -the directories specified by LD_LIBRARY_PATH will be searched first -followed by the set of built-in standard directories. -This is ignored for set-user-ID and set-group-ID programs. -.It Ev LD_BIND_NOW -When set to a nonempty string, causes -.Nm -to relocate all external function calls before starting execution of the -program. Normally, function calls are bound lazily, at the first call -of each function. -.Ev LD_BIND_NOW -increases the start-up time of a program, but it avoids run-time -surprises caused by unexpectedly undefined functions. -.It Ev LD_WARN_NON_PURE_CODE -When set to a nonempty string, issue a warning whenever a link-editing -operation requires modification of the text segment of some loaded -object. This is usually indicative of an incorrectly built library. -.It Ev LD_SUPPRESS_WARNINGS -When set to a nonempty string, no warning messages of any kind are -issued. Normally, a warning is given if satisfactorily versioned -library could not be found. -.It Ev LD_IGNORE_MISSING_OBJECTS -When set to a nonempty string, makes it a nonfatal condition if -one or more required shared objects cannot be loaded. -Loading and execution proceeds using the objects that are -available. -A warning is produced for each missing object, unless the environment -variable -.Ev LD_SUPPRESS_WARNINGS -is set to a nonempty string. -.Pp -This is ignored for set-user-ID and set-group-ID programs. -.Pp -Missing shared objects can be ignored without errors if all the -following conditions hold: -.Bl -bullet -.It -They do not supply definitions for any required data symbols. -.It -No functions defined by them are called during program execution. -.It -The environment variable -.Ev LD_BIND_NOW -is unset or is set to the empty string. -.El -.It Ev LD_TRACE_LOADED_OBJECTS -When set to a nonempty string, causes -.Nm -to exit after loading the shared objects and printing a summary which includes -the absolute pathnames of all objects, to standard output. -.It Ev LD_TRACE_LOADED_OBJECTS_FMT1 -.It Ev LD_TRACE_LOADED_OBJECTS_FMT2 -When set, these variables are interpreted as format strings a la -.Xr printf 3 -to customize the trace output and are used by -.Xr ldd 1 's -.Fl f -option and allows -.Xr ldd 1 -to be operated as a filter more conveniently. -The following conversions can be used: -.Bl -tag -indent "LD_TRACE_LOADED_OBJECTS_FMT1 " -width "xxxx" -.It \&%a -The main program's name -.Po also known as -.Dq __progname -.Pc . -.It \&%A -The value of the environment variable -.Ev LD_TRACE_LOADED_OBJECTS_PROGNAME -.It \&%o -The library name. -.It \&%m -The library's major version number. -.It \&%n -The library's minor version number. -.It \&%p -The full pathname as determined by -.Nm rtld Ns 's -library search rules. -.It \&%x -The library's load address. -.El -.Pp -Additionally, -.Sy \en -and -.Sy \et -are recognized and have their usual meaning. -.\" .It Ev LD_NO_INTERN_SEARCH -.\" When set, -.\" .Nm -.\" does not process any internal search paths that were recorded in the -.\" executable. -.\" .It Ev LD_NOSTD_PATH -.\" When set, do not include a set of built-in standard directory paths for -.\" searching. This might be useful when running on a system with a completely -.\" non-standard filesystem layout. -.El -.Pp -.Sh FILES -/var/run/ld.so.hints -.Pp -.Sh SEE ALSO -.Xr ld 1 , -.Xr link 5 , -.Xr ldconfig 8 -.Sh HISTORY -The shared library model employed first appeared in SunOS 4.0 |
