Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
PATCHELF(1)			  User Manuals			     PATCHELF(1)

NAME
     patchelf - Modify ELF files

SYNOPSIS
     patchelf OPTION FILE ...

DESCRIPTION
     PatchELF is a simple utility for modifying existing ELF executables and li-
     braries.	It can change the dynamic loader ("ELF interpreter") of executa-
     bles 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 li-
	    brary.

     --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 fur-
	    ther  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 op-
	    tion 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 modi-
	    fied in place.

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

PATCHELF			    JULY 2022			     PATCHELF(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=patchelf&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help