prelink(8) — Linux manual page

NAME | SYNOPSIS | DESCRIPTION | OPTIONS | ARGUMENTS | EXAMPLES | FILES | SEE ALSO | BUGS | AUTHORS | COLOPHON

prelink(8)               System Manager's Manual              prelink(8)

NAME         top

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

SYNOPSIS         top

       prelink [OPTION...] [FILES]

DESCRIPTION         top

       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         top

       -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.

       -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).

       --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).

       --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         top

       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         top

              # /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         top

       /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         top

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

BUGS         top

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

AUTHORS         top

       Jakub Jelinek <jakub@redhat.com>.

COLOPHON         top

       This page is part of the prelink (prelink ELF shared libraries
       and binaries) project.  Information about the project can be
       found at ⟨http://people.redhat.com/jakub/prelink/⟩.  It is not
       known how to report bugs for this man page; if you know, please
       send a mail to man-pages@man7.org.  This page was obtained from
       the tarball prelink-20130503.tar.bz2 fetched from
       ⟨http://people.redhat.com/jakub/prelink/⟩ on 2023-12-22.  If you
       discover any rendering problems in this HTML version of the page,
       or you believe there is a better or more up-to-date source for
       the page, or you have corrections or improvements to the
       information in this COLOPHON (which is not part of the original
       manual page), send a mail to man-pages@man7.org

                              01 March 2007                   prelink(8)