summaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorcvs2svn <cvs2svn@FreeBSD.org>1999-01-21 00:55:31 +0000
committercvs2svn <cvs2svn@FreeBSD.org>1999-01-21 00:55:31 +0000
commit4b4d01da6f07f7754ff6a6e4f5223e9f0984d1a6 (patch)
tree9ef395ed57f97b5613d996298d19e60c8e518010 /libexec
parent99af619cb2f1dac921ef1dd9fe5661503220f524 (diff)
Notes
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-aout/rtld.1aout224
-rw-r--r--libexec/rtld-elf/amd64/reloc.c236
-rw-r--r--libexec/rtld-elf/amd64/rtld_start.S88
-rw-r--r--libexec/rtld-elf/rtld.1224
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