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
       libraries.  It can change the dynamic loader ("ELF interpreter")	of ex-
       ecutables 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  li-
	      brary.

       --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 exe-
	      cutable 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 ob-
	      ject 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 de-
	      bugger does not connect to it correctly and symbols are not  re-
	      solved.

       --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 in-
	      stead 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)

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+14.3.quarterly>

home | help