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

FreeBSD Manual Pages

  
 
  

home | help
LLVM-OBJCOPY(1) 		      LLVM			 LLVM-OBJCOPY(1)

NAME
     llvm-objcopy - object copying and editing tool

SYNOPSIS
     llvm-objcopy [options] input [output]

DESCRIPTION
     llvm-objcopy  is  a tool to copy and manipulate objects. In basic usage, it
     makes a semantic copy of the input to the output. If any options are speci-
     fied, the output may be modified along the way, e.g. by removing sections.

     If no output file is specified, the input file is modified in-place. If "-"
     is specified for the input file, the input is read from the program's stan-
     dard input stream. If "-" is specified for the output file, the  output  is
     written to the standard output stream of the program.

     If  the  input  is  an archive, any requested operations will be applied to
     each archive member individually.

     The tool is still in active development, but in most scenarios it works  as
     a drop-in replacement for GNU's objcopy.

GENERIC AND CROSS-PLATFORM OPTIONS
     The  following  options are either agnostic of the file format, or apply to
     multiple file formats.

     --add-gnu-debuglink <debug-file>
	    Add a .gnu_debuglink section for <debug-file> to the output.

     --add-section <section=file>
	    Add a section named <section> with the contents  of  <file>  to  the
	    output. For ELF objects the section will be of type SHT_NOTE, if the
	    name starts with ".note". Otherwise, it will have type SHT_PROGBITS.
	    Can be specified multiple times to add multiple sections.

	    For   MachO   objects,  <section>  must  be  formatted  as	<segment
	    name>,<section name>.

     --binary-architecture <arch>, -B
	    Ignored for compatibility.

     --disable-deterministic-archives, -U
	    Use real values for UIDs, GIDs and timestamps when updating  archive
	    member headers.

     --discard-all, -x
	    Remove  most  local  symbols from the output. Different file formats
	    may limit this to a subset of the local symbols. For  example,  file
	    and  section symbols in ELF objects will not be discarded. Addition-
	    ally, remove all debug sections.

     --dump-section <section>=<file>
	    Dump the contents of section <section> into the file <file>. Can  be
	    specified  multiple  times	to  dump  multiple sections to different
	    files.  <file> is unrelated to the input and output  files	provided
	    to	llvm-objcopy  and  as such the normal copying and editing opera-
	    tions will still be performed. No operations are  performed  on  the
	    sections prior to dumping them.

	    For   MachO   objects,  <section>  must  be  formatted  as	<segment
	    name>,<section name>.

     --enable-deterministic-archives, -D
	    Enable deterministic mode when copying  archives,  i.e.  use  0  for
	    archive  member  header  UIDs,  GIDs and timestamp fields. On by de-
	    fault.

     --help, -h
	    Print a summary of command line options.

     --only-keep-debug
	    Produce a debug file as the output that only preserves  contents  of
	    sections useful for debugging purposes.

	    For  ELF  objects,	this  removes the contents of SHF_ALLOC sections
	    that are not SHT_NOTE by making them SHT_NOBITS  and  shrinking  the
	    program headers where possible.

     --only-section <section>, -j
	    Remove all sections from the output, except for sections named <sec-
	    tion>.  Can be specified multiple times to keep multiple sections.

	    For   MachO   objects,  <section>  must  be  formatted  as	<segment
	    name>,<section name>.

     --redefine-sym <old>=<new>
	    Rename symbols called <old> to <new> in the output. Can be specified
	    multiple times to rename multiple symbols.

     --redefine-syms <filename>
	    Rename symbols in the output as described in the file <filename>. In
	    the file, each line represents a single symbol to rename,  with  the
	    old  name and new name separated by whitespace. Leading and trailing
	    whitespace is ignored, as is anything following a '#'. Can be speci-
	    fied multiple times to read names from multiple files.

     --regex
	    If specified, symbol and section names specified by  other	switches
	    are treated as extended POSIX regular expression patterns.

     --remove-section <section>, -R
	    Remove  the specified section from the output. Can be specified mul-
	    tiple times to remove multiple sections simultaneously.

	    For  MachO	objects,  <section>  must  be  formatted   as	<segment
	    name>,<section name>.

     --set-section-alignment <section>=<align>
	    Set the alignment of section <section> to <align>`. Can be specified
	    multiple times to update multiple sections.

     --set-section-flags <section>=<flag>[,<flag>,...]
	    Set  section  properties in the output of section <section> based on
	    the specified <flag> values. Can be specified multiple times to  up-
	    date multiple sections.

	    Supported flag names are alloc, load, noload, readonly, exclude, de-
	    bug,  code,  data,	rom, share, contents, merge and strings. Not all
	    flags are meaningful for all object file formats.

	    For ELF objects, the flags have the following effects:

	    * alloc = add the SHF_ALLOC flag.

	    * load = if the section has SHT_NOBITS type, mark it as a  SHT_PROG-
	      BITS section.

	    * readonly = if this flag is not specified, add the SHF_WRITE flag.

	    * exclude = add the SHF_EXCLUDE flag.

	    * code = add the SHF_EXECINSTR flag.

	    * merge = add the SHF_MERGE flag.

	    * strings = add the SHF_STRINGS flag.

	    * contents	=  if  the  section  has  SHT_NOBITS  type, mark it as a
	      SHT_PROGBITS section.

	    For COFF objects, the flags have the following effects:

	    * alloc  =	add   the   IMAGE_SCN_CNT_UNINITIALIZED_DATA   and   IM-
	      AGE_SCN_MEM_READ flags, unless the load flag is specified.

	    * noload  =  add  the  IMAGE_SCN_LNK_REMOVE  and  IMAGE_SCN_MEM_READ
	      flags.

	    * readonly	=  if  this  flag  is  not  specified,	 add   the   IM-
	      AGE_SCN_MEM_WRITE flag.

	    * exclude  =  add  the  IMAGE_SCN_LNK_REMOVE  and IMAGE_SCN_MEM_READ
	      flags.

	    * debug = add the IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DIS-
	      CARDABLE and  IMAGE_SCN_MEM_READ flags.

	    * code = add the IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE	and  IM-
	      AGE_SCN_MEM_READ flags.

	    * data    =   add	the   IMAGE_SCN_CNT_INITIALIZED_DATA   and   IM-
	      AGE_SCN_MEM_READ flags.

	    * share = add the IMAGE_SCN_MEM_SHARED and IMAGE_SCN_MEM_READ flags.

     --strip-all-gnu
	    Remove all symbols, debug sections and relocations from the  output.
	    This option is equivalent to GNU objcopy's --strip-all switch.

     --strip-all, -S
	    For  ELF  objects,	remove from the output all symbols and non-alloc
	    sections not within  segments,  except  for  .gnu.warning,	.ARM.at-
	    tribute sections and the section name table.

	    For COFF and Mach-O objects, remove all symbols, debug sections, and
	    relocations from the output.

     --strip-debug, -g
	    Remove all debug sections from the output.

     --strip-symbol <symbol>, -N
	    Remove  all symbols named <symbol> from the output. Can be specified
	    multiple times to remove multiple symbols.

     --strip-symbols <filename>
	    Remove all symbols whose names appear in the file  <filename>,  from
	    the  output. In the file, each line represents a single symbol name,
	    with leading and trailing whitespace ignored, as is anything follow-
	    ing a '#'. Can be specified multiple times to read names from multi-
	    ple files.

     --strip-unneeded-symbol <symbol>
	    Remove from the output all symbols named <symbol> that are local  or
	    undefined and are not required by any relocation.

     --strip-unneeded-symbols <filename>
	    Remove  all  symbols whose names appear in the file <filename>, from
	    the output, if they are local or undefined and are not  required  by
	    any  relocation.   In the file, each line represents a single symbol
	    name, with leading and trailing whitespace ignored, as  is	anything
	    following  a '#'. Can be specified multiple times to read names from
	    multiple files.

     --strip-unneeded
	    Remove from the output all local or undefined symbols that	are  not
	    required by relocations. Also remove all debug sections.

     --version, -V
	    Display the version of the llvm-objcopy executable.

     --wildcard, -w
	    Allow  wildcard  syntax  for symbol-related flags. On by default for
	    section-related flags. Incompatible with --regex.

	    Wildcard syntax allows the following special symbols:
		  +----------------+----------------------+------------+
		  | Character	   | Meaning		  | Equivalent |
		  +----------------+----------------------+------------+
		  | *		   | Any number of  char- | .*	       |
		  |		   | acters		  |	       |
		  +----------------+----------------------+------------+
		  | ?		   | Any single character | .	       |
		  +----------------+----------------------+------------+
		  | \		   | Escape    the   next | \	       |
		  |		   | character		  |	       |
		  +----------------+----------------------+------------+
		  | [a-z]	   | Character class	  | [a-z]      |
		  +----------------+----------------------+------------+
		  | [!a-z], [^a-z] | Negated	character | [^a-z]     |
		  |		   | class		  |	       |
		  +----------------+----------------------+------------+

	    Additionally,  starting  a	wildcard  with '!' will prevent a match,
	    even if another flag matches. For example -w -N  '*'  -N  '!x'  will
	    strip all symbols except for x.

	    The  order	of  wildcards does not matter. For example, -w -N '*' -N
	    '!x' is the same as -w -N '!x' -N '*'.

     @<FILE>
	    Read command-line options and commands from response file <FILE>.

ELF-SPECIFIC OPTIONS
     The following options are implemented only for ELF objects.  If  used  with
     other  objects,  llvm-objcopy  will either emit an error or silently ignore
     them.

     --add-symbol <name>=[<section>:]<value>[,<flags>]
	    Add a new symbol called <name> to the output symbol  table,  in  the
	    section  named  <section>,	with  value <value>. If <section> is not
	    specified, the symbol is added as an absolute  symbol.  The  <flags>
	    affect the symbol properties. Accepted values are:

	    * global = the symbol will have global binding.

	    * local = the symbol will have local binding.

	    * weak = the symbol will have weak binding.

	    * default = the symbol will have default visibility.

	    * hidden = the symbol will have hidden visibility.

	    * protected = the symbol will have protected visibility.

	    * file = the symbol will be an STT_FILE symbol.

	    * section = the symbol will be an STT_SECTION symbol.

	    * object = the symbol will be an STT_OBJECT symbol.

	    * function = the symbol will be an STT_FUNC symbol.

	    * indirect-function = the symbol will be an STT_GNU_IFUNC symbol.

	    Additionally,  the	following flags are accepted but ignored: debug,
	    constructor, warning, indirect, synthetic, unique-object, before.

	    Can be specified multiple times to add multiple symbols.

     --allow-broken-links
	    Allow llvm-objcopy to remove sections even if it would leave invalid
	    section references. Any invalid sh_link fields will be set to zero.

     --change-start <incr>, --adjust-start
	    Add <incr> to the program's start address. Can be specified multiple
	    times, in which case the values will be applied cumulatively.

     --compress-debug-sections [<style>]
	    Compress DWARF debug sections in the  output,  using  the  specified
	    style.   Supported styles are zlib-gnu and zlib. Defaults to zlib if
	    no style is specified.

     --decompress-debug-sections
	    Decompress any compressed DWARF debug sections in the output.

     --discard-locals, -X
	    Remove local symbols starting with ".L" from the output.

     --extract-dwo
	    Remove all sections that are not DWARF .dwo sections from  the  out-
	    put.

     --extract-main-partition
	    Extract the main partition from the output.

     --extract-partition <name>
	    Extract the named partition from the output.

     --globalize-symbol <symbol>
	    Mark  any  defined	symbols  named <symbol> as global symbols in the
	    output.  Can be specified multiple times to mark multiple symbols.

     --globalize-symbols <filename>
	    Read a list of names from the file <filename> and mark defined  sym-
	    bols  with	those  names  as global in the output. In the file, each
	    line represents a single symbol, with leading  and	trailing  white-
	    space ignored, as is anything following a '#'. Can be specified mul-
	    tiple times to read names from multiple files.

     --input-target <format>, -I
	    Read  the input as the specified format. See SUPPORTED FORMATS for a
	    list of valid <format> values. If unspecified, llvm-objcopy will at-
	    tempt to determine the format automatically.

     --keep-file-symbols
	    Keep symbols of type STT_FILE,  even  if  they  would  otherwise  be
	    stripped.

     --keep-global-symbol <symbol>
	    Make  all  symbols	local in the output, except for symbols with the
	    name <symbol>. Can be specified multiple times  to	ignore	multiple
	    symbols.

     --keep-global-symbols <filename>
	    Make  all  symbols	local in the output, except for symbols named in
	    the file <filename>. In the file, each line represents a single sym-
	    bol, with leading and trailing whitespace ignored,	as  is	anything
	    following  a '#'. Can be specified multiple times to read names from
	    multiple files.

     --keep-section <section>
	    When removing sections from the output, do not remove sections named
	    <section>. Can be specified multiple times	to  keep  multiple  sec-
	    tions.

     --keep-symbol <symbol>, -K
	    When  removing  symbols from the output, do not remove symbols named
	    <symbol>. Can be specified multiple times to keep multiple symbols.

     --keep-symbols <filename>
	    When removing symbols from the output do not remove symbols named in
	    the file <filename>. In the file, each line represents a single sym-
	    bol, with leading and trailing whitespace ignored,	as  is	anything
	    following  a '#'. Can be specified multiple times to read names from
	    multiple files.

     --localize-hidden
	    Make all symbols with hidden or internal  visibility  local  in  the
	    output.

     --localize-symbol <symbol>, -L
	    Mark  any defined non-common symbol named <symbol> as a local symbol
	    in the output. Can be specified multiple times to mark multiple sym-
	    bols as local.

     --localize-symbols <filename>
	    Read a list of names from  the  file  <filename>  and  mark  defined
	    non-common	symbols  with those names as local in the output. In the
	    file, each line represents a single symbol, with leading and  trail-
	    ing whitespace ignored, as is anything following a '#'. Can be spec-
	    ified multiple times to read names from multiple files.

     --new-symbol-visibility <visibility>
	    Specify the visibility of the symbols automatically created when us-
	    ing binary input or --add-symbol. Valid options are:

	    * default

	    * hidden

	    * internal

	    * protected

	    The default is default.

     --output-target <format>, -O
	    Write  the output as the specified format. See SUPPORTED FORMATS for
	    a list of valid <format> values. If unspecified, the  output  format
	    is	assumed to be the same as the value specified for --input-target
	    or the input file's format if that option is also unspecified.

     --prefix-alloc-sections <prefix>
	    Add <prefix> to the front of the names of all  allocatable	sections
	    in the output.

     --prefix-symbols <prefix>
	    Add <prefix> to the front of every symbol name in the output.

     --preserve-dates, -p
	    Preserve access and modification timestamps in the output.

     --rename-section <old>=<new>[,<flag>,...]
	    Rename  sections  called <old> to <new> in the output, and apply any
	    specified <flag> values. See --set-section-flags for a list of  sup-
	    ported  flags.  Can  be  specified multiple times to rename multiple
	    sections.

     --set-start-addr <addr>
	    Set the start address of the output to <addr>. Overrides any  previ-
	    ously specified --change-start or --adjust-start options.

     --split-dwo <dwo-file>
	    Equivalent to running llvm-objcopy with --extract-dwo and <dwo-file>
	    as	the  output file and no other options, and then with --strip-dwo
	    on the input file.

     --strip-dwo
	    Remove all DWARF .dwo sections from the output.

     --strip-non-alloc
	    Remove from the output all non-allocatable	sections  that	are  not
	    within segments.

     --strip-sections
	    Remove  from the output all section headers and all section data not
	    within segments. Note that many tools will not be able to use an ob-
	    ject without section headers.

     --target <format>, -F
	    Equivalent to --input-target and --output-target for  the  specified
	    format. See SUPPORTED FORMATS for a list of valid <format> values.

     --weaken-symbol <symbol>, -W
	    Mark  any  global symbol named <symbol> as a weak symbol in the out-
	    put. Can be specified multiple times to  mark  multiple  symbols  as
	    weak.

     --weaken-symbols <filename>
	    Read  a  list of names from the file <filename> and mark global sym-
	    bols with those names as weak in the output. In the file, each  line
	    represents a single symbol, with leading and trailing whitespace ig-
	    nored,  as	is  anything  following a '#'. Can be specified multiple
	    times to read names from multiple files.

     --weaken
	    Mark all defined global symbols as weak in the output.

MACH-O-SPECIFIC OPTIONS
     --keep-undefined
	    Keep undefined symbols, even if they would otherwise be stripped.

SUPPORTED FORMATS
     The following values  are	currently  supported  by  llvm-objcopy	for  the
     --input-target, --output-target, and --target options. For GNU objcopy com-
     patibility, the values are all bfdnames.

     * binary

     * ihex

     * elf32-i386

     * elf32-x86-64

     * elf64-x86-64

     * elf32-iamcu

     * elf32-littlearm

     * elf64-aarch64

     * elf64-littleaarch64

     * elf32-littleriscv

     * elf64-littleriscv

     * elf32-powerpc

     * elf32-powerpcle

     * elf64-powerpc

     * elf64-powerpcle

     * elf32-bigmips

     * elf32-ntradbigmips

     * elf32-ntradlittlemips

     * elf32-tradbigmips

     * elf32-tradlittlemips

     * elf64-tradbigmips

     * elf64-tradlittlemips

     * elf32-sparc

     * elf32-sparcel

     Additionally,  all  targets  except  binary and ihex can have -freebsd as a
     suffix.

BINARY INPUT AND OUTPUT
     If binary is used as the value for --input-target, the input file	will  be
     embedded  as a data section in an ELF relocatable object, with symbols _bi-
     nary_<file_name>_start,	   _binary_<file_name>_end,	  and	    _bi-
     nary_<file_name>_size  representing  the  start,  end and size of the data,
     where <file_name> is the path of the input file as specified on the command
     line with non-alphanumeric characters converted to _.

     If binary is used as the value for --output-target, the output file will be
     a raw binary file, containing the memory image of the input file.	 Symbols
     and  relocation  information will be discarded. The image will start at the
     address of the first loadable section in the output.

EXIT STATUS
     llvm-objcopy exits with a non-zero exit code if there is an error.   Other-
     wise, it exits with code 0.

BUGS
     To report bugs, please visit <https://bugs.llvm.org/>.

     There is a known issue with --input-target and --target causing only binary
     and  ihex	formats  to  have  any	effect. Other values will be ignored and
     llvm-objcopy will attempt to guess the input format.

SEE ALSO
     llvm-strip(1)

AUTHOR
     Maintained by the LLVM Team (https://llvm.org/).

COPYRIGHT
     2003-2026, LLVM Project

13				   2026-08-04			 LLVM-OBJCOPY(1)

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

home | help