FreeBSD Manual Pages
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)
NAME | SYNOPSIS | DESCRIPTION | OPTIONS | EXAMPLES | AUTHOR | SEE ALSO
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>