---
name: "gold"
section: "1"
platform: "linux"
package: "binutils-common"
version: "2.40-2"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/ld.gold"
---

# gold(1)

The GNU ELF linker

Part of [ld.gold(1)](/ld.gold/1.md).

## NAME

gold - The GNU ELF linker

## SYNOPSIS

**ld.gold** \[*options*\] *file*...

## OPTIONS

- **--help**

  Report usage information

- **-v**, **--version**

  Report version information

- **-V**

  Report version and target information

- **--add-needed**

  Not supported

- **--no-add-needed**

  Do not copy DT\_NEEDED tags from shared libraries (default)

**--allow-multiple-definition** Allow multiple definitions of symbols

- **--no-allow-multiple-definition**

  Do not allow multiple definitions (default)

- **--allow-shlib-undefined**

  Allow unresolved references in shared libraries

- **--no-allow-shlib-undefined**

  Do not allow unresolved references in shared libraries (default)

- **--apply-dynamic-relocs**

  Apply link-time values for dynamic relocations (default)

- **--no-apply-dynamic-relocs**

  (aarch64 only) Do not apply link-time values for dynamic relocations

- **--as-needed**

  Use DT\_NEEDED only for shared libraries that are used

- **--no-as-needed**

  Use DT\_NEEDED for all shared libraries (default)

- **-assert** \[ignored\]

  Ignored

- **-b** \[elf,binary\], **--format** \[elf,binary\]

  Set input format

- **--be8**

  Output BE8 format image

- **--build-id** \[=STYLE\]

  Generate build ID note

- **--build-id-chunk-size-for-treehash** SIZE

  Chunk size for '--build-id=tree'

- **--build-id-min-file-size-for-treehash** SIZE

  Minimum output file size for '--build-id=tree' to work differently than '--build-id=sha1'

**-Bdynamic**                   **-l** searches for shared libraries (default)

**-Bstatic**                    **-l** does not search for shared libraries

- **-dy**

  alias for **-Bdynamic** (default)

- **-dn**

  alias for **-Bstatic**

- **-Bgroup**

  Use group name lookup rules for shared library

- **-Bshareable**

  Generate shared library (alias for **-G**/-shared)

- **-Bno-symbolic**

  Don't bind default visibility defined symbols locally for **-shared** (default)

- **-Bsymbolic-functions**

  Bind default visibility defined function symbols locally for **-shared**

- **-Bsymbolic**

  Bind default visibility defined symbols locally for **-shared**

- **--check-sections**

  Check segment addresses for overlaps (default)

- **--no-check-sections**

  Do not check segment addresses for overlaps

- **--compress-debug-sections** \[none,zlib,zlib-gnu,zlib-gabi,zstd\]

  Compress .debug\_\* sections in the output file

- **--copy-dt-needed-entries**

  Not supported

**--no-copy-dt-needed-entries** Do not copy DT\_NEEDED tags from shared libraries (default)

- **--cref**

  Output cross reference table

- **--no-cref**

  Do not output cross reference table (default)

- **--ctors-in-init-array**

  Use DT\_INIT\_ARRAY for all constructors (default)

- **--no-ctors-in-init-array**

  Handle constructors as directed by compiler

- **-d**, **--define-common**

  Define common symbols

- **--no-define-common**

  Do not define common symbols in relocatable output (default)

- **-dc**

  Alias for **-d**

- **-dp**

  Alias for **-d**

- **--debug** \[all,files,script,task\]\[,...\]

  Turn on debugging

- **--defsym** SYMBOL=EXPRESSION

  Define a symbol

- **--demangle** \[=STYLE\]

  Demangle C++ symbols in log messages

- **--no-demangle**

  Do not demangle C++ symbols in log messages

- **--dependency-file** FILE

  Write a dependency file listing all files read

- **--detect-odr-violations**

  Look for violations of the C++ One Definition Rule

- **--no-detect-odr-violations**

  Do not look for violations of the C++ One Definition Rule (default)

- **--dynamic-list-data**

  Add data symbols to dynamic symbols

- **--dynamic-list-cpp-new**

  Add C++ operator new/delete to dynamic symbols

**--dynamic-list-cpp-typeinfo** Add C++ typeinfo to dynamic symbols

- **--dynamic-list** FILE

  Read a list of dynamic symbols

- **--emit-stub-syms**

  (PowerPC only) Label linker stubs with a symbol (default)

- **--no-emit-stub-syms**

  (PowerPC only) Do not label linker stubs with a symbol

**-e** ADDRESS, **--entry** ADDRESS Set program start address

- **--eh-frame-hdr**

  Create exception frame header

- **--no-eh-frame-hdr**

  Do not create exception frame header (default)

- **--enable-new-dtags**

  Enable use of DT\_RUNPATH (default)

- **--disable-new-dtags**

  Disable use of DT\_RUNPATH

- **--no-enum-size-warning**

  (ARM only) Do not warn about objects with incompatible enum sizes

- **--exclude-libs** lib,lib ...

  Exclude libraries from automatic export

- **-E**, **--export-dynamic**

  Export all dynamic symbols

- **--no-export-dynamic**

  Do not export all dynamic symbols (default)

- **--export-dynamic-symbol** SYMBOL

  Export SYMBOL to dynamic symbol table

- **-EB**

  Link big-endian objects.

- **-EL**

  Link little-endian objects.

**-f** SHLIB, **--auxiliary** SHLIB Auxiliary filter for shared object symbol table

- **-F** SHLIB, **--filter** SHLIB

  Filter for shared object symbol table

- **--fatal-warnings**

  Treat warnings as errors

- **--no-fatal-warnings**

  Do not treat warnings as errors (default)

- **-fini** SYMBOL

  Call SYMBOL at unload-time

- **--fix-arm1176**

  (ARM only) Fix binaries for ARM1176 erratum (default)

- **--no-fix-arm1176**

  (ARM only) Do not fix binaries for ARM1176 erratum

- **--fix-cortex-a8**

  (ARM only) Fix binaries for Cortex-A8 erratum

- **--no-fix-cortex-a8**

  (ARM only) Do not fix binaries for Cortex-A8 erratum (default)

- **--fix-cortex-a53-843419**

  (AArch64 only) Fix Cortex-A53 erratum 843419

- **--no-fix-cortex-a53-843419**

  (AArch64 only) Do not fix Cortex-A53 erratum 843419 (default)

- **--fix-cortex-a53-835769**

  (AArch64 only) Fix Cortex-A53 erratum 835769

- **--no-fix-cortex-a53-835769**

  (AArch64 only) Do not fix Cortex-A53 erratum 835769 (default)

- **--fix-v4bx**

  (ARM only) Rewrite BX rn as MOV pc, rn for ARMv4

- **--fix-v4bx-interworking**

  (ARM only) Rewrite BX rn branch to ARMv4 interworking veneer

- **-fuse-ld** \[gold,bfd\]

  Ignored for GCC linker option compatibility

- **-g**

  Ignored

- **--gc-sections**

  Remove unused sections

- **--no-gc-sections**

  Don't remove unused sections (default)

- **--gdb-index**

  Generate .gdb\_index section

- **--no-gdb-index**

  Do not generate .gdb\_index section (default)

- **--gnu-unique**

  Enable STB\_GNU\_UNIQUE symbol binding (default)

- **--no-gnu-unique**

  Disable STB\_GNU\_UNIQUE symbol binding

- **-G**, **-shared**

  Generate shared library

- **-h** FILENAME, **-soname** FILENAME

  Set shared library name

- **--hash-bucket-empty-fraction** FRACTION

  Min fraction of empty buckets in dynamic hash

- **--hash-style** \[sysv,gnu,both\]

  Dynamic hash style

- **-i**

  Alias for **-r**

- **--icf** \[none,all,safe\]

  Identical Code Folding. '--icf=safe' Folds ctors, dtors and functions whose pointers are definitely not taken

- **--icf-iterations** COUNT

  Number of iterations of ICF (default 3)

- **--incremental**

  Do an incremental link if possible; otherwise, do a full link and prepare output for incremental linking

- **--no-incremental**

  Do a full link (default)

- **--incremental-full**

  Do a full link and prepare output for incremental linking

- **--incremental-update**

  Do an incremental link; exit if not possible

- **--incremental-base** FILE

  Set base file for incremental linking (default is output file)

- **--incremental-changed**

  Assume files changed

- **--incremental-unchanged**

  Assume files didn't change

- **--incremental-unknown**

  Use timestamps to check files (default)

- **--incremental-startup-unchanged**

  Assume startup files unchanged (files preceding this option)

**--incremental-patch** PERCENT Amount of extra space to allocate for patches (default 10)

- **-init** SYMBOL

  Call SYMBOL at load-time

- **-I** PROGRAM, **--dynamic-linker** PROGRAM

  Set dynamic linker path

- **--just-symbols** FILE

  Read only symbol values from FILE

- **--keep-files-mapped**

  Keep files mapped across passes (default on 64bit architectures)

- **--no-keep-files-mapped**

  Release mapped files after each pass (default on 32bit architectures)

- **--keep-unique** SYMBOL

  Do not fold this symbol during ICF

- **-l** LIBNAME, **--library** LIBNAME

  Search for library LIBNAME

- **--ld-generated-unwind-info**

  Generate unwind information for PLT (default)

- **--no-ld-generated-unwind-info**

  Do not generate unwind information for PLT

- **-L** DIR, **--library-path** DIR

  Add directory to search path

- **--long-plt**

  (ARM only) Generate long PLT entries

- **--no-long-plt**

  (ARM only) Do not generate long PLT entries (default)

- **-m** EMULATION

  Set GNU linker emulation; obsolete

- **--map-whole-files**

  Map whole files to memory (default on 64bit architectures)

- **--no-map-whole-files**

  Map relevant file parts to memory (default on 32bit architectures)

- **--merge-exidx-entries**

  (ARM only) Merge exidx entries in debuginfo (default)

- **--no-merge-exidx-entries**

  (ARM only) Do not merge exidx entries in debuginfo

- **--mmap-output-file**

  Map the output file for writing (default)

- **--no-mmap-output-file**

  Do not map the output file for writing

- **-M**, **--print-map**

  Write map file on standard output

- **-Map** MAPFILENAME

  Write map file

- **-n**, **--nmagic**

  Do not page align data

- **-N**, **--omagic**

  Do not page align data, do not make text readonly

- **--no-omagic**

  Page align data, make text readonly (default)

- **--no-keep-memory**

  Use less memory and more disk I/O (included only for compatibility with GNU ld)

- **--no-undefined**

  Report undefined symbols (even with **--shared**)

- **--noinhibit-exec**

  Create an output file even if errors occur

- **-nostdlib**

  Only search directories specified on the command line

- **-o** FILE, **--output** FILE

  Set output file name

- **--oformat** \[binary\]

  Set output format

- **-O** LEVEL, **-optimize** LEVEL

  Optimize output file size

- **--orphan-handling** \[place,discard,warn,error\]

  Orphan section handling

- **-p**

  Ignored for ARM compatibility

- **--package-metadata** \[=JSON\]

  Generate package metadata note

- **-pie**

  Create a position independent executable

- **-no-pie**

  Do not create a position independent executable (default)

- **--pic-executable**

  Create a position independent executable

- **--no-pic-executable**

  Do not create a position independent executable (default)

- **--pic-veneer**

  Force PIC sequences for ARM/Thumb interworking veneers

- **-no-pipeline-knowledge**

  (ARM only) Ignore for backward compatibility (default)

- **--plt-align** \[=P2ALIGN\]

  (PowerPC only) Align PLT call stubs to fit cache lines

- **--plt-localentry**

  (PowerPC64 only) Optimize calls to ELFv2 localentry:0 functions

- **--no-plt-localentry**

  (PowerPC64 only) Don't optimize ELFv2 calls (default)

- **--plt-static-chain**

  (PowerPC64 only) PLT call stubs should load r11

- **--no-plt-static-chain**

  (PowerPC64 only) PLT call stubs should not load r11 (default)

- **--plt-thread-safe**

  (PowerPC64 only) PLT call stubs with load-load barrier

- **--no-plt-thread-safe**

  (PowerPC64 only) PLT call stubs without barrier (default)

- **--plugin** PLUGIN

  Load a plugin library

- **--plugin-opt** OPTION

  Pass an option to the plugin

- **--posix-fallocate**

  Use posix\_fallocate to reserve space in the output file (default)

- **--no-posix-fallocate**

  Use fallocate or ftruncate to reserve space

- **--power10-stubs** \[=auto,no,yes\]

  (PowerPC64 only) stubs use power10 insns

- **--no-power10-stubs**

  (PowerPC64 only) stubs do not use power10 insns

- **--preread-archive-symbols**

  Preread archive symbols when multi-threaded

- **--print-gc-sections**

  List removed unused sections on stderr

- **--no-print-gc-sections**

  Do not list removed unused sections (default)

- **--print-icf-sections**

  List folded identical sections on stderr

- **--no-print-icf-sections**

  Do not list folded identical sections (default)

- **--print-output-format**

  Print default output format

- **--print-symbol-counts** FILENAME

  Print symbols defined and used for each input

- **--push-state**

  Save the state of flags related to input files

- **--pop-state**

  Restore the state of flags related to input files

- **-q**, **--emit-relocs**

  Generate relocations in output

- **-Qy**

  Ignored for SVR4 compatibility

- **-r**, **-relocatable**

  Generate relocatable output

- **--relax**

  Relax branches on certain targets

- **--no-relax**

  Do not relax branches (default)

- **--retain-symbols-file** FILE

  keep only symbols listed in this file

- **--rosegment**

  Put read-only non-executable sections in their own segment

- **--no-rosegment**

  Do not put read-only non-executable sections in their own segment (default)

- **--rosegment-gap** OFFSET

  Set offset between executable and read-only segments

- **-R** DIR

  Add DIR to runtime search path

- **-rpath** DIR

  Add DIR to runtime search path

- **--rpath-link** DIR

  Add DIR to link time shared library search path

- **-s**, **--strip-all**

  Strip all symbols

- **-S**, **--strip-debug**

  Strip debugging information

- **--strip-debug-non-line**

  Emit only debug line number information

- **--strip-debug-gdb**

  Strip debug symbols that are unused by gdb (at least versions \<= 7.4)

- **--strip-lto-sections**

  Strip LTO intermediate code sections (default)

- **--section-ordering-file** FILENAME

  Layout sections in the order specified

- **--section-start** SECTION=ADDRESS

  Set address of section

- **--secure-plt**

  (PowerPC only) Use new-style PLT (default)

- **--sort-common** \[={ascending,descending}\]

  Sort common symbols by alignment

- **--sort-section** \[none,name\]

  Sort sections by name.  '--no-text-reorder' will override '--sort-section=name' for .text

- **--spare-dynamic-tags** COUNT

  Dynamic tag slots to reserve (default 5)

- **--stub-group-size** SIZE

  (ARM, PowerPC only) The maximum distance from instructions in a group of sections to their stubs. Negative values mean stubs are always after the group. 1 means use default size

- **--stub-group-multi**

  (PowerPC only) Allow a group of stubs to serve multiple output sections (default)

- **--no-stub-group-multi**

  (PowerPC only) Each output section has its own stubs

- **--split-stack-adjust-size** SIZE

  Stack size when **-fsplit-stack** function calls non-split

- **-static**

  Do not link against shared libraries

- **--start-lib**

  Start a library

- **--end-lib**

  End a library

- **--stats**

  Print resource usage statistics

- **--sysroot** DIR

  Set target system root directory

- **-t**, **--trace**

  Print the name of each input file

- **--target1-abs**

  (ARM only) Force R\_ARM\_TARGET1 type to R\_ARM\_ABS32

- **--target1-rel**

  (ARM only) Force R\_ARM\_TARGET1 type to R\_ARM\_REL32

- **--target2** \[rel, abs, got-rel

  (ARM only) Set R\_ARM\_TARGET2 relocation type

- **--text-reorder**

  Enable text section reordering for GCC section names (default)

- **--no-text-reorder**

  Disable text section reordering for GCC section names

- **--threads**

  Run the linker multi-threaded

- **--no-threads**

  Do not run the linker multi-threaded (default)

- **--thread-count** COUNT

  Number of threads to use

- **--thread-count-initial** COUNT

  Number of threads to use in initial pass

**--thread-count-middle** COUNT Number of threads to use in middle pass

- **--thread-count-final** COUNT

  Number of threads to use in final pass

- **--tls-optimize**

  (PowerPC/64 only) Optimize GD/LD/IE code to IE/LE (default)

- **--no-tls-optimize**

  (PowerPC/64 only) Don'''t try to optimize TLS accesses

- **--tls-get-addr-optimize**

  (PowerPC/64 only) Use a special \_\_tls\_get\_addr call (default)

- **--no-tls-get-addr-optimize**

  (PowerPC/64 only) Don't use a special \_\_tls\_get\_addr call

- **--toc-optimize**

  (PowerPC64 only) Optimize TOC code sequences (default)

- **--no-toc-optimize**

  (PowerPC64 only) Don't optimize TOC code sequences

- **--toc-sort**

  (PowerPC64 only) Sort TOC and GOT sections (default)

- **--no-toc-sort**

  (PowerPC64 only) Don't sort TOC and GOT sections

- **-T** FILE, **--script** FILE

  Read linker script

- **-Tbss** ADDRESS

  Set the address of the bss segment

- **-Tdata** ADDRESS

  Set the address of the data segment

- **-Ttext** ADDRESS

  Set the address of the text segment

- **-Ttext-segment** ADDRESS

  Set the address of the text segment

- **-Trodata-segment** ADDRESS

  Set the address of the rodata segment

- **-u** SYMBOL, **--undefined** SYMBOL

  Create undefined reference to SYMBOL

- **--unresolved-symbols** ignore-all,report-all,ignore-in-object-files,ignore-in-shared-libs

  How to handle unresolved symbols

- **--verbose**

  Alias for **--debug**=*files*

- **--version-script** FILE

  Read version script

- **--warn-common**

  Warn about duplicate common symbols

- **--no-warn-common**

  Do not warn about duplicate common symbols (default)

- **--warn-constructors**

  Ignored

- **--no-warn-constructors**

  Ignored

- **--warn-drop-version**

  Warn when discarding version information

- **--no-warn-drop-version**

  Do not warn when discarding version information (default)

- **--warn-execstack**

  Warn if the stack is executable

- **--no-warn-execstack**

  Do not warn if the stack is executable (default)

- **--no-warn-mismatch**

  Don't warn about mismatched input files

- **--warn-multiple-gp**

  Ignored

- **--warn-search-mismatch**

  Warn when skipping an incompatible library (default)

- **--no-warn-search-mismatch**

  Don't warn when skipping an incompatible library

- **--warn-shared-textrel**

  Warn if text segment is not shareable

- **--no-warn-shared-textrel**

  Do not warn if text segment is not shareable (default)

- **--warn-unresolved-symbols**

  Report unresolved symbols as warnings

- **--error-unresolved-symbols**

  Report unresolved symbols as errors (default)

- **-z** buildd

  Dummy z option

- **--no-wchar-size-warning**

  (ARM only) Do not warn about objects with incompatible wchar\_t sizes

- **--weak-unresolved-symbols**

  Convert unresolved symbols to weak references

- **--whole-archive**

  Include all archive contents

- **--no-whole-archive**

  Include only needed archive contents (default)

- **--wrap** SYMBOL

  Use wrapper functions for SYMBOL

- **-x**, **--discard-all**

  Delete all local symbols

- **-X**, **--discard-locals**

  Delete all temporary local symbols

- **--discard-none**

  Keep all local symbols

- **-y** SYMBOL, **--trace-symbol** SYMBOL

  Trace references to symbol

- **--undefined-version**

  Allow unused version in script (default)

- **--no-undefined-version**

  Do not allow unused version in script

- **-Y** PATH

  Default search path for Solaris compatibility

- \-(, **--start-group**

  Start a library search group

- \-), **--end-group**

  End a library search group

- **-z** combreloc

  Sort dynamic relocs (default)

- **-z** nocombreloc

  Do not sort dynamic relocs

- **-z** common-page-size=SIZE

  Set common page size to SIZE

- **-z** defs

  Report undefined symbols (even with **--shared**)

- **-z** execstack

  Mark output as requiring executable stack

- **-z** global

  Make symbols in DSO available for subsequently loaded objects

- **-z** initfirst

  Mark DSO to be initialized first at runtime

- **-z** interpose

  Mark object to interpose all DSOs but executable

- **-z** unique

  Mark DSO to be loaded at most once, and only in the main namespace

- **-z** nounique

  Do not mark the DSO as one to be loaded only in the main namespace (default)

- **-z** lazy

  Mark object for lazy runtime binding (default)

- **-z** loadfltr

  Mark object requiring immediate process

- **-z** max-page-size=SIZE

  Set maximum page size to SIZE

- **-z** muldefs

  Allow multiple definitions of symbols

- **-z** nocopyreloc

  Do not create copy relocs

- **-z** nodefaultlib

  Mark object not to use default search paths

- **-z** nodelete

  Mark DSO non-deletable at runtime

- **-z** nodlopen

  Mark DSO not available to dlopen

- **-z** nodump

  Mark DSO not available to dldump

- **-z** noexecstack

  Mark output as not requiring executable stack

- **-z** now

  Mark object for immediate function binding

- **-z** origin

  Mark DSO to indicate that needs immediate $ORIGIN processing at runtime

- **-z** relro

  Where possible mark variables read-only after relocation (default)

- **-z** norelro

  Don't mark variables read-only after relocation

- **-z** stack-size=SIZE

  Set PT\_GNU\_STACK segment p\_memsz to SIZE

- **-z** start-stop-visibility=\[default,internal,hidden,protected\]

  ELF symbol visibility for synthesized \_\_start\_\* and \_\_stop\_\* symbols

- **-z** text

  Do not permit relocations in read-only segments

- **-z** notext

  Permit relocations in read-only segments (default)

- **-z** textoff

  Permit relocations in read-only segments (default)

- **-z** text-unlikely-segment

  Move .text.unlikely sections to a separate segment.

- **-z** notext-unlikely-segment

  Do not move .text.unlikely sections to a separate segment. (default)

**-z** keep-text-section-prefix Keep .text.hot, .text.startup, .text.exit and .text.unlikely as separate sections in the final binary.

- **-z** nokeep-text-section-prefix

  Merge all .text.\* prefix sections. (default)

Run gold --help for a list of supported targets and emulations.

## REPORTING BUGS

Report bugs to \<https://sourceware.org/bugzilla/\>

## COPYRIGHT

Copyright © 2023 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty.
