Provided by: prelink_0.0.20090925-8_amd64 bug

NAME

       prelink - prelink ELF shared libraries and binaries to speed up startup time

SYNOPSIS

       prelink [OPTION...] [FILES]

DESCRIPTION

       prelink  is  a  program  that  modifies  ELF  shared  libraries and ELF dynamically linked
       binaries in such a way that the time needed for the dynamic linker to perform  relocations
       at  startup  significantly  decreases.   Due  to  fewer  relocations,  the run-time memory
       consumption  decreases  as  well  (especially  the  number  of  unshareable  pages).   The
       prelinking  information  is  only  used at startup time if none of the dependent libraries
       have changed since prelinking; otherwise programs are relocated normally.

       prelink first collects ELF binaries to be prelinked and all the ELF shared libraries  they
       depend on. Then it assigns a unique virtual address space slot to each library and relinks
       the shared library to that base address.  When the dynamic linker attempts to load such  a
       library,  unless  that virtual address space slot is already occupied, it maps the library
       into the given slot.  After this is done,  prelink,  with  the  help  of  dynamic  linker,
       resolves  all  relocations  in  the  binary or library against its dependent libraries and
       stores the relocations into the ELF object.  It  also  stores  a  list  of  all  dependent
       libraries together with their checksums into the binary or library.  For binaries, it also
       computes a list of conflicts (relocations that resolve differently in the binary's  symbol
       search scope than in the smaller search scope in which the dependent library was resolved)
       and stores it into a special ELF section.

       At runtime,  the  dynamic  linker  first  checks  whether  all  dependent  libraries  were
       successfully  mapped  into their designated address space slots, and whether they have not
       changed since the prelinking was done.  If all checks are successful, the  dynamic  linker
       just  replays  the  list  of  conflicts (which is usually significantly shorter than total
       number of relocations) instead of relocating each library.

OPTIONS

       -v --verbose
              Verbose mode.  Print the virtual address  slots  assigned  to  libraries  and  what
              binary or library is currently being prelinked.

       -n --dry-run
              Don't  actually  prelink anything; just collect the binaries/libraries, assign them
              addresses, and with -v print what would be prelinked.

       -a --all
              Prelink all  binaries  and  dependent  libraries  found  in  directory  hierarchies
              specified  in  /etc/prelink.conf.  Normally, only binaries specified on the command
              line and their dependent libraries are prelinked.

       -m --conserve-memory
              When assigning addresses  to  libraries,  allow  overlap  of  address  space  slots
              provided  that the two libraries are not present together in any of the binaries or
              libraries. This  results  in  a  smaller  virtual  address  space  range  used  for
              libraries.   On  the  other  hand,  if  prelink  sees  a  binary during incremental
              prelinking which puts together two libraries which were not present together in any
              other  binary  and were given the same virtual address space slots, then the binary
              cannot be prelinked.  Without this  option,  each  library  is  assigned  a  unique
              virtual address space slot.

       -R --random
              When  assigning  addresses  to  libraries,  start  with a random address within the
              architecture-dependent virtual address space range.   This  can  make  some  buffer
              overflow  attacks  slightly harder to exploit, because libraries are not present on
              the  same  addresses  across  different  machines.   Normally,  assigning   virtual
              addresses starts at the bottom of the architecture-dependent range.

       -r --reloc-only=ADDRESS
              Instead  of  prelinking,  just  relink given shared libraries to the specified base
              address.

       -N --no-update-cache
              Don't save the cache file after prelinking.  Normally, the list of  libraries  (and
              with  -m  binaries  also)  is stored into the /etc/prelink.cache file together with
              their given address space slots and dependencies, so the cache can be  used  during
              incremental prelinking (prelinking without -a option).

       -c --config-file=CONFIG
              Specify an alternate config file instead of default /etc/prelink.conf.

       -C --cache-file=CACHE
              Specify an alternate cache file instead of default /etc/prelink.cache.

       -f --force
              Force  re-prelinking  even  for  already  prelinked  objects whose dependencies are
              unchanged.  This option causes new virtual address space slots to  be  assigned  to
              all libraries.  Normally, only binaries or libraries which are either not prelinked
              yet, or whose dependencies have changed, are prelinked.

       -q --quick
              Run prelink in quick mode.  This mode checks just mtime  and  ctime  timestamps  of
              libraries  and  binaries  stored in the cache file.  If they are unchanged from the
              last prelink run, it is assumed that  the  library  in  question  did  not  change,
              without parsing or verifying its ELF headers.

       -p --print-cache
              Print the contents of the cache file (normally /etc/prelink.cache) and exit.

       --dynamic-linker=LDSO
              Specify an alternate dynamic linker instead of the default.

       --ld-library-path=PATH
              Specify  a  special  LD_LIBRARY_PATH  to  be  used when prelink queries the dynamic
              linker about symbol resolution details.

       --libs-only
              Only prelink ELF shared libraries, don't prelink any binaries.

       -h --dereference
              When processing command  line  directory  arguments,  follow  symbolic  links  when
              walking directory hierarchies.

       -l --one-file-system
              When  processing  command  line directory arguments, limit directory tree walk to a
              single file system.

       -T --timestamp-output
              Prefix output with timestamps.

       -u --undo
              Revert binaries and libraries to their original content before they were prelinked.
              Without the -a option, this causes only the binaries and libraries specified on the
              command  line  to  be  reverted  to  their  original  state  (and  e.g.  not  their
              dependencies). If used together with the -a option, all binaries and libraries from
              command line, all their dependencies, all binaries found in  directories  specified
              on command line and in the config file, and all their dependencies are undone.

       -y --verify
              Verifies  a  prelinked binary or library.  This option can be used only on a single
              binary or library. It first applies an --undo operation on the file, then  prelinks
              just  that  file  again  and  compares  this  with  the  original file. If both are
              identical, it prints the file after --undo operation on standard output  and  exits
              with zero status. Otherwise it exits with error status.  Thus if --verify operation
              returns zero exit status and its standard output is equal to  the  content  of  the
              binary  or  library  before  prelinking,  you  can be sure that nobody modified the
              binaries or  libraries  after  prelinking.   Similarly  with  message  digests  and
              checksums  (unless  you  trigger  the improbable case of modified file and original
              file having the same digest or checksum).

       -y --md5
              This is similar to --verify option, except instead of outputting the content of the
              binary or library before prelinking to standard output, MD5 digest is printed.  See
              md5sum(1).

       -y --sha
              This is similar to --verify option, except instead of outputting the content of the
              binary  or  library  before  prelinking to standard output, SHA1 digest is printed.
              See sha1sum(1).

       --exec-shield --no-exec-shield
              On IA-32, if the kernel supports Exec-Shield, prelink attempts to lay libraries out
              similarly  to  how  the kernel places them (i.e. if possible below the binary, most
              widely used into the ASCII armor zone).  These switches  allow  overriding  prelink
              detection of whether Exec-Shield is supported or not.

       -b --black-list=PATH
              This option allows blacklisting certain paths, libraries or binaries.  Prelink will
              not touch them during prelinking.

       -o --undo-output=FILE
              When performing an --undo  operation,  don't  overwrite  the  prelinked  binary  or
              library with its original content (before it was prelinked), but save that into the
              specified file.

       -V --version
              Print version and exit.

       -? --help
              Print short help and exit.

ARGUMENTS

       Command-line arguments should be either directory hierarchies (in which  case  -l  and  -h
       options  apply),  or  particular  ELF  binaries  or shared libraries.  Specifying a shared
       library explicitly on the command line causes it to be prelinked  even  if  no  binary  is
       linked against it.  Otherwise, binaries are collected together and only the libraries they
       depend on are prelinked with them.

EXAMPLES

              # /usr/sbin/prelink -avmR
       prelinks all binaries found in directories specified in /etc/prelink.conf  and  all  their
       dependent  libraries,  assigning libraries unique virtual address space slots only if they
       ever appear together, and starts assigning libraries at a random address.
              # /usr/sbin/prelink -vm ~/bin/progx
       prelinks ~/bin/progx program and all its dependent libraries (unless they  were  prelinked
       already e.g. during prelink -a invocation).
              # /usr/sbin/prelink -au
       reverts all binaries and libraries to their original content.
              #  /usr/sbin/prelink -y /bin/prelinked_prog > /tmp/original_prog; echo $?  verifies
              whether /bin/prelinked_prog is unchanged.

FILES

       /etc/prelink.cache  Binary file containing a list of prelinked libraries  and/or  binaries
                           together   with   their  assigned  virtual  address  space  slots  and
                           dependencies.  You can run /usr/sbin/prelink -p to see what is  stored
                           in there.
       /etc/prelink.conf   Configuration  file  containing  a  list of directory hierarchies that
                           contain ELF shared libraries or binaries which  should  be  prelinked.
                           This  configuration  file  is  used  in -a mode to find binaries which
                           should be prelinked and also, no matter whether -a is given or not, to
                           limit which dependent shared libraries should be prelinked. If prelink
                           finds a dependent library of some binary or other library which is not
                           present    in   any   of   the   directories   specified   either   in
                           /etc/prelink.conf or on the command line, then it cannot be prelinked.
                           Each  line of the config file should be either a comment starting with
                           #, or a directory name, or a blacklist specification.  Directory names
                           can  be  prefixed by the -l switch, meaning the tree walk of the given
                           directory is only limited to  one  file  system;  or  the  -h  switch,
                           meaning  the  tree walk of the given directory follows symbolic links.
                           A blacklist specification should be prefixed by -b and optionally also
                           -l  or  -h  if  needed.   A  blacklist entry can be either an absolute
                           directory name (in that case all files in that directory hierarchy are
                           ignored  by the prelinker); an absolute filename (then that particular
                           library or binary is skipped); or a glob pattern without a / character
                           in  it  (then  all  files  matching  that  glob  in  any directory are
                           ignored).

SEE ALSO

       ldd(1), ld.so(8).

BUGS

       prelink Some architectures, including IA-64 and HPPA, are not yet supported.

AUTHORS

       Jakub Jelinek <jakub@redhat.com>.

                                          01 March 2007                                prelink(8)