Provided by: patchelf_0.18.0-1.1build1_amd64 bug

NAME

       patchelf - Modify ELF files

SYNOPSIS

       patchelf OPTION FILE ...

DESCRIPTION

       PatchELF is a simple utility for modifying existing ELF executables and libraries.  It can
       change the dynamic loader ("ELF interpreter") of  executables  and  change  the  RPATH  of
       executables and libraries.

OPTIONS

       The single option given operates on each FILE, editing in place.

       Any  option  taking  a string argument can also take a file by prefixing the argument with
       the @ symbol. See EXAMPLES

       --page-size SIZE
              Uses the given page size instead of the default.

       --set-interpreter INTERPRETER
              Change the dynamic loader ("ELF interpreter") of executable given to INTERPRETER.

       --print-interpreter
              Prints the ELF interpreter of the executable.

       --print-os-abi
              Prints the OS ABI of the executable (EI_OSABI field of an ELF file).

       --set-os-abi ABI
              Changes the OS ABI of the executable (EI_OSABI field of  an  ELF  file).   The  ABI
              parameter  is  pretty  flexible.  For  example,  you  can  specify it as a "Linux",
              "linux", or even "lInUx" - all those names will  set  EI_OSABI  field  of  the  ELF
              header  to  the  value "3", which corresponds to Linux OS ABI.  The same applies to
              other ABI names - System V, FreeBSD, Solaris, etc.

       --print-soname
              Prints DT_SONAME entry of .dynamic section.  Raises an error if  DT_SONAME  doesn't
              exist.

       --set-soname SONAME
              Sets DT_SONAME entry of a library to SONAME.

       --set-rpath RUNPATH
              Change the DT_RUNPATH of the executable or library to RUNPATH.

       --add-rpath RUNPATH
              Add RUNPATH to the existing DT_RUNPATH of the executable or library.

       --remove-rpath
              Removes the DT_RPATH or DT_RUNPATH entry of the executable or library.

       --shrink-rpath
              Remove  from  the  DT_RUNPATH  or  DT_RPATH  all  directories that do not contain a
              library referenced by DT_NEEDED fields of the executable or library.

              For instance, if an executable references  one  library  libfoo.so,  has  an  RPATH
              "/lib:/usr/lib:/foo/lib", and libfoo.so can only be found in /foo/lib, then the new
              RPATH will be "/foo/lib".

       --allowed-rpath-prefixes PREFIXES
              Combined with the "--shrink-rpath" option, this  can  be  used  for  further  rpath
              tuning.    For   instance,   if   an   executable   has   an   RPATH   "/tmp/build-
              foo/.libs:/foo/lib", it is probably desirable  to  keep  the  "/foo/lib"  reference
              instead of the "/tmp" entry.

       --print-rpath
              Prints the DT_RUNPATH or DT_RPATH for an executable or library.

       --force-rpath
              Forces  the  use  of  the  obsolete  DT_RPATH in the file instead of DT_RUNPATH. By
              default DT_RPATH is converted to DT_RUNPATH.

       --add-needed LIBRARY
              Adds a declared dependency on a dynamic library (DT_NEEDED).  This  option  can  be
              given multiple times.

       --replace-needed LIB_ORIG LIB_NEW
              Replaces  a  declared dependency on a dynamic library with another one (DT_NEEDED).
              This option can be given multiple times.

       --remove-needed LIBRARY
              Removes a declared dependency on LIBRARY (DT_NEEDED  entry).  This  option  can  be
              given multiple times.

       --print-needed
              Prints all DT_NEEDED entries of the executable.

       --no-default-lib
              Marks the object so that the search for dependencies of this object will ignore any
              default library search paths.

       --no-sort
              Do not sort program headers or section headers.   This  is  useful  when  debugging
              patchelf, because it makes it easier to read diffs of the output of "readelf -a".

       --add-debug-tag
              Adds  DT_DEBUG  tag  to the .dynamic section if not yet present in an ELF object. A
              shared library (-shared) by default does not receive DT_DEBUG tag.  This means that
              when  a shared library has an entry point (so that it can be run as an executable),
              the debugger does not connect to it correctly and symbols are not resolved.

       --print-execstack
              Prints the state of the  executable  flag  of  the  GNU_STACK  program  header,  if
              present.

       --clear-execstack
              Clears the executable flag of the GNU_STACK program header, or adds a new header.

       --set-execstack
              Sets the executable flag of the GNU_STACK program header, or adds a new header.

       --rename-dynamic-symbols NAME_MAP_FILE
              Renames  dynamic  symbols.  The name map file should contain lines with the old and
              the new name separated by spaces like this:

              old_name new_name

              Symbol names do not contain version specifier that are also shown in the output  of
              the  nm  -D  command  from binutils. So instead of the name write@GLIBC_2.2.5 it is
              just write.

       --output FILE
              Set the output file name.  If not specified, the input will be modified in place.

       --debug
              Prints details of the changes made to the input file.

       --version
              Shows the version of patchelf.

EXAMPLES

       To use the contents on an external file as a parameter:

              $ patchelf a.out --add-rpath @/tmp/generated-rpath.bin

       To change the RPATH of a binary. Note that $ORIGIN is a special symbol used by the loader,
       so must be quoted.

              patchelf --set-rpath '$ORIGIN/../lib64' a.out

AUTHOR

       Eelco Dolstra <e.dolstra@tudelft.nl>

SEE ALSO

       elf(5), ld.so(8)