Home | History | Annotate | Line # | Download | only in ld
      1 -*- text -*-
      2 
      3 Changes in 2.45:
      4 
      5 * On s390 64-bit (s390x), generate SFrame stack trace information (.sframe)
      6   for the linker generated .plt section.  Enabled by default.  Can be disabled
      7   using linker option --no-ld-generated-unwind-info.
      8 
      9 * All SFrame sections generated by the linker have the header flag
     10   SFRAME_F_FDE_FUNC_START_PCREL set to indicate the new encoding for
     11   sfde_func_start_address field in the SFrame section.  Relocatable SFrame
     12   links are now fixed.
     13 
     14   ELF SFrame sections now have section type set to SHT_GNU_SFRAME.
     15 
     16 * On RISC-V, add new PLT formats, and GNU property merge rules for zicfiss and
     17   zicfilp extensions.
     18 
     19 * The linker's --stats option can take an optional argument which if used is
     20   interpreted as a filename into which resource usage information should be
     21   stored.  As an alternative mechanism the LD_STATS environment variable can
     22   also be used to achieve the same results.  Resource usage information for
     23   various phases of the linking operation is now included in the report.
     24   If a map file is being produced then the information is also included there.
     25   The --no-stats option can be used to disable stat reporting, should it have
     26   been enabled.
     27 
     28 * Remove the linker -taso option for Alpha target, as Linux/Alpha kernel
     29   support for 32-bit pointers has been removed.
     30 
     31 * On avr, the default linker scripts now assert that the .progmem sections
     32   don't extend past 0xffff since they are accessed by means of LPM.
     33   For data in program memory that may be located past 0xffff, a .progmemx
     34   section should be used.
     35 
     36 * On s390, generate ".eh_frame" unwind information for the linker generated
     37   .plt section.  Enabled by default.  Can be disabled using linker option
     38   --no-ld-generated-unwind-info.
     39 
     40 * On s390, add support for linker option --[no-]ld-generated-unwind-info.
     41 
     42 * On LoongArch, linker relaxation time complexity is no longer quadratic with
     43   respect to relocation counts.  Linking time of large software should be
     44   improved.
     45 
     46 * On LoongArch, R_LARCH_32_PCREL records are now checked for overflow.
     47 
     48 Changes in 2.44:
     49 
     50 * Support for Nios II target has been removed, as this architecture has been
     51   EOL'ed by Intel.
     52 
     53 * The default maximum page size was changed from 16KiB to 64KiB for LoongArch.
     54 
     55 * Add support for mixed LTO and non-LTO codes in relocatable output.
     56 
     57 * Add --image-base=<ADDR> option to the ELF linker to behave the same
     58   as -Ttext-segment for compatibility with LLD.
     59 
     60 * Add a "--build-id=xx" option, if built with the xxhash library.  This
     61   produces a 128-bit hash, 2-4x faster than md5 or sha1.
     62 
     63 * The ELF linker option --package-metadata supports percent-encoded and
     64   %[string] encoded JSON payload now to ease passing around this option
     65   without getting the JSON payload corrupted.
     66 
     67 Changes in 2.43:
     68 
     69 * Add support for LoongArch DT_RELR (compressed R_LARCH_RELATIVE).
     70 
     71 * Put .got .got.plt in the relro to make it read-only after relocation.
     72 
     73 * Add -z isa-level-report=[none|all|needed|used] to the x86 ELF linker
     74   to report needed and used x86-64 ISA levels.
     75 
     76 * Add --rosegment option which changes the -z separate-code option so that
     77   only one read-only segment is created (instead of two).  (The option name
     78   is misleading, but it matches the name used by LLD and GOLD).
     79 
     80 * Add --section-ordering-file <FILE> option to add extra mapping of input
     81   sections to output sections.
     82 
     83 * Add -plugin-save-temps to store plugin intermediate files permanently.
     84 
     85 * Add -z memory-seal/-z nomemory-seal options to ELF linker to mark the
     86   object to memory sealed.   Also added --enable-memory-seal configure option
     87   to enable the memory sealing by default.
     88 
     89 Changes in 2.42:
     90 
     91 * Add -z mark-plt/-z nomark-plt options to x86-64 ELF linker to mark PLT
     92   entries with DT_X86_64_PLT, DT_X86_64_PLTSZ and DT_X86_64_PLTENT dynamic
     93   tags.  Also added --enable-mark-plt configure option to mark PLT entries
     94   by default.
     95 
     96 * Support Intel APX relocations.
     97 
     98 * On RISC-V, add ld target option --[no-]check-uleb128.  Should rebuild the
     99   objects by binutils 2.42 and up if enabling the option and get warnings,
    100   since the non-zero addend of SUB_ULEB128 shouldn't be generated from .uleb128
    101   directives.
    102 
    103 * Add support for the KVX instruction set.
    104 
    105 * A new linker script sorting directive has been added: REVERSE.  This reverses
    106   the order of the sorting.  It may be combined with either SORT_BY_NAME or
    107   SORT_BY_INIT_PRIORITY.
    108 
    109 * Added --warn-execstack-objects to warn about executable stacks only when an
    110   input object file requests one.  Also added --error-execstack and
    111   --error-rxw-segments options to convert warnings about executable stacks and
    112   segments into errors.
    113 
    114   Also added --enable-error-execstack=[yes|no] and
    115   --enable-error-rwx-segments=[yes|no] configure options to set the default for
    116   converting warnings into errors.
    117 
    118 * On LoongArch, various linker relaxation bugs are fixed; the most notable
    119   of which is BZ 30944 (incorrect .balign semantics).
    120 
    121 * On LoongArch, the LoongArch ABI v2.30 (LoongArch ELF psABI v20231219) is
    122   now implemented. This includes new relocation types, and changed
    123   semantics for PC-relative relocations handling the higher half of 64-bit
    124   offsets.
    125 
    126 * On LoongArch, link-time TLS optimization and TLS relaxation are now
    127   supported.
    128 
    129 Changes in 2.41:
    130 
    131 * The linker now accepts a command line option of --remap-inputs
    132   <PATTERN>=<FILE> to relace any input file that matches <PATTERN> with
    133   <FILE>.  In addition the option --remap-inputs-file=<FILE> can be used to
    134   specify a file containing any number of these remapping directives.
    135 
    136 * The linker command line option --print-map-locals can be used to include
    137   local symbols in a linker map.  (ELF targets only).
    138 
    139 * For most ELF based targets, if the --enable-linker-version option is used
    140   then the version of the linker will be inserted as a string into the .comment
    141   section.
    142 
    143 * The linker script syntax has a new command for output sections: ASCIZ "string"
    144   This will insert a zero-terminated string at the current location.
    145 
    146 * Add command-line option, -z nosectionheader, to omit ELF section
    147   header.
    148 
    149 Changes in 2.40:
    150 
    151 * The linker has a new command line option to suppress the generation of any
    152   warning or error messages.  This can be useful when there is a need to create
    153   a known non-working binary.  The option is -w or --no-warnings.
    154 
    155 * ld now supports zstd compressed debug sections.  The new option
    156   --compress-debug-sections=zstd compresses debug sections with zstd.
    157 
    158 * Add --enable-default-compressed-debug-sections-algorithm={zlib,zstd}
    159   that selects the default compression algorithm
    160   for --enable-compressed-debug-sections.
    161 
    162 * Remove support for -z bndplt (MPX prefix instructions).
    163 
    164 Changes in 2.39:
    165 
    166 * The ELF linker will now generate a warning message if the stack is made
    167   executable.  By default this warning is not issued if the user has
    168   specifically requested an executable stack via the "-z execstack"
    169   command line option, but the warning can be forced via the new
    170   "--warn-execstack" option.  Alternatively all warnings about creating
    171   an executable stack can be suppressed via the "--no-warn-execstack"
    172   option.
    173 
    174   In addition the ELF linker will also warn if it creates a memory resident
    175   segment with all three of the Read, Write and eXecute permissions set, or
    176   if it creates a thread local data segment with the eXecute permission set.
    177   These warnings can be disabled via --no-warn-rwx-segments option and
    178   re-enabled via the --warn-rwx-segments option.
    179 
    180   New configure options can also control these new features:
    181   
    182   --enable-warn-execstack=no
    183      will disable the warnings about creating an executable stack.
    184      
    185   --enable-warn-execstack=yes
    186      will make --warn-execstack enabled by default.
    187      
    188   --enable-warn-rwx-segments=no
    189      will make --no-warn-rwx-segments enabled by default.
    190      
    191   --enable-default-execstack=no
    192      will stop the creation of an executable stack simply because an input file
    193      is missing a .note.GNU-stack section, even on architectures where this
    194      behaviour is the default.
    195 
    196 * TYPE=<type> is now supported in an output section description to set the
    197   section type value.
    198 
    199 * Remove (rudimentary) support for the x86-64 sub-architectures Intel L1OM and
    200   Intel K1OM.
    201 
    202 * The ELF linker now supports a new --package-metadata option that allows
    203   embedding a JSON payload in accordance to the Package Metadata specification.
    204   If support for libjansson is enabled at build time, the linker will use it to
    205   validate the input. This can be enabled with --enable-jansson.
    206   For more details, see: https://systemd.io/ELF_PACKAGE_METADATA/
    207 
    208 Changes in 2.38:
    209 
    210 * Add -z pack-relative-relocs/-z no pack-relative-relocs to x86 ELF
    211   linker to pack relative relocations in the DT_RELR section.
    212 
    213 * Add support for the LoongArch architecture.
    214 
    215 * Add -z indirect-extern-access/-z noindirect-extern-access to x86 ELF
    216   linker to control canonical function pointers and copy relocation.
    217 
    218 * Add --max-cache-size=SIZE to set the the maximum cache size to SIZE
    219   bytes.
    220 
    221 Changes in 2.37:
    222 
    223 * arm-symbianelf support removed.
    224 
    225 * Add -z report-relative-reloc to x86 ELF linker to report dynamic
    226   relative relocations.
    227 
    228 * Add -z start-stop-gc to disable special treatment of __start_*/__stop_*
    229   references when --gc-sections.
    230 
    231 * Add -Bno-symbolic to cancel -Bsymbolic and -Bsymbolic-functions.
    232 
    233 Changes in 2.36:
    234 
    235 * Add libdep plugin, for linking dependencies of static libraries that
    236   were recorded by ar in the __.LIBDEP archive member.
    237 
    238 * Add --error-handling-script=<NAME> command line option to allow a helper
    239   script to be invoked when an undefined symbol or a missing library is
    240   encountered.  This option can be suppressed via the configure time
    241   switch: --enable-error-handling-script=no.
    242 
    243 * Add -z lam-u48 to x86-64 ELF linker to generate LAM_U48 property.
    244 
    245 * Add -z lam-u57 to x86-64 ELF linker to enerate LAM_U57 property.
    246 
    247 * Add -z lam-u48-report=[none|warning|error] to report missing LAM_U48
    248   property.
    249 
    250 * Add -z lam-u57-report=[none|warning|error] to report missing LAM_U57
    251   property.
    252 
    253 * Add -z lam-report=[none|warning|error] to report missing LAM_U48 and
    254   LAM_U57 properties.
    255 
    256 * Add -z x86-64-{baseline|v[234]} to the x86 ELF linker to mark
    257   x86-64-{baseline|v[234]} ISA level as needed.
    258 
    259 * Add -z unique-symbol to avoid duplicated local symbol names.
    260 
    261 * The creation of PE format DLLs now defaults to using a more secure set of DLL
    262   characteristics.
    263 
    264 * The linker now deduplicates the types in .ctf sections.  The new
    265   command-line option --ctf-share-types describes how to do this:
    266   its default value, share-unconflicted, produces the most compact
    267   output.
    268 
    269 * The linker now omits the "variable section" from .ctf sections by
    270   default, saving space.  This is almost certainly what you want
    271   unless you are working on a project that has its own analogue
    272   of symbol tables that are not reflected in the ELF symtabs.
    273 
    274 * Add support for the SHF_GNU_RETAIN ELF section flag.
    275   This flag specifies that the section should not be garbage collected by the
    276   linker.
    277 
    278 Changes in 2.35:
    279 
    280 * X86 NaCl target support is removed.
    281 
    282 * Add ELF linker command-line options, --export-dynamic-symbol and
    283   --export-dynamic-symbol-list, to make symbols dynamic.
    284 
    285 * Add a configure option, --enable-textrel-check=[no|yes|warning|error],
    286   to decide what ELF linker should do by default with DT_TEXTREL in an
    287   executable or shared library.  Default to yes for Linux/x86 targets.
    288 
    289 * The -Map=<filename> command line option has been extended so that if
    290   <filename> is a directory then <filename>/<output-filename>.map will be
    291   created.
    292 
    293 * Add a command-line option for ELF linker, --warn-textrel, to warn that
    294   DT_TEXTREL is set in a position-independent executable or shared object.
    295 
    296 * Add command-line options --enable-non-contiguous-regions and
    297   --enable-non-contiguous-regions-warnings.
    298 
    299 * Add command-line option --imagic for the pdp11-aout target to output format
    300   IMAGIC (0411) for separate instruction and data spaces, and change the
    301   default format option for pdp11-aout to be --omagic.
    302 
    303 * Relative pathnames in INPUT() and GROUP() directives in linker scripts are
    304   searched relative to the directory of the linker script before other search
    305   paths.
    306 
    307 * Add ELF linker command-line option `-z start-stop-visibility=...' to control
    308   the visibility of synthetic `__start_SECNAME` and `__stop_SECNAME` symbols.
    309 
    310 * Add command-line option --dependency-file to write a Make-style dependency
    311   file listing the input files consulted by the linker, like the files written
    312   by the compiler's -M -MP options.
    313 
    314 Changes in 2.34:
    315 
    316 * The ld check for "PHDR segment not covered by LOAD segment" is more
    317   effective, catching cases that were wrongly allowed by previous versions of
    318   ld.  If you see this error it is likely you are linking with a bad linker
    319   script or the binary you are building is not intended to be loaded by a
    320   dynamic loader.  In the latter case --no-dynamic-linker is appropriate.
    321 
    322 * cr16c support removed.
    323 
    324 * Add support for z80-elf.
    325 
    326 * Add support for relocation of each byte or word of multibyte value to Z80
    327   targets.
    328 
    329 * Add support for Zilog eZ80 (both ADL and Z80 mode) and Zilog Z180 CPUs.
    330 
    331 Changes in 2.33:
    332 
    333 * Add command-line option --no-print-map-discarded.
    334 
    335 * The Cortex-A53 Erratum 843419 workaround now supports a choice of which
    336   workaround to use.  The option --fix-cortex-a53-843419 now takes an
    337   optional argument --fix-cortex-a53-843419[=full|adr|adrp] which can be
    338   used to force a particular workaround to be used.  See --help for AArch64
    339   for more details.
    340 
    341 * Add target handlers for AArch64 for ELF GNU program properties.
    342 
    343 * Add support for GNU_PROPERTY_AARCH64_FEATURE_1_BTI in ELF GNU program
    344   properties in the AArch64 ELF linker.
    345 
    346 * Add support for GNU_PROPERTY_AARCH64_FEATURE_1_PAC in ELF GNU program
    347   properties in the AArch64 ELF linker.
    348 
    349 * Add -z force-bti for AArch64 to enable GNU_PROPERTY_AARCH64_FEATURE_1_BTI
    350   on output while warning about missing GNU_PROPERTY_AARCH64_FEATURE_1_BTI
    351   on inputs and use PLTs protected with BTI.
    352 
    353 * Add -z pac-plt for AArch64 to pick PAC enabled PLTs.
    354 
    355 Changes in 2.32:
    356 
    357 * Report property change in linker map file when merging GNU properties.
    358 
    359 * Add support for the C-SKY processor series.
    360 
    361 * -t now doesn't report members within archives, unless -t is given twice.
    362   A single -t is now more useful when generating a list of files that should be
    363   packaged for a linker bug report.  For example:
    364     gcc hello.c -save-temps -Wl,-t | xargs realpath | sort | uniq > files
    365     tar cJf test.tar.xz `cat files`
    366 
    367 Changes in 2.31:
    368 
    369 * Speed up direct linking with DLLs for Cygwin and Mingw targets.
    370 
    371 * Add a configure option --enable-separate-code to decide whether
    372   -z separate-code should be enabled in ELF linker by default.  Default
    373   to yes for Linux/x86 targets.  Note that -z separate-code can increase
    374   disk and memory size.
    375 
    376 Changes in 2.30:
    377 
    378 * Add -z separate-code to generate separate code PT_LOAD segment.
    379 
    380 * Add "-z undefs" command-line option as the inverse of the "-z defs" option.
    381 
    382 * Add -z globalaudit command-line option to force audit libraries to be run
    383   for every dynamic object loaded by an executable - provided that the loader
    384   supports this functionality.
    385 
    386 * Tighten linker script grammar around file name specifiers to prevent the use
    387   of SORT_BY_ALIGNMENT and SORT_BY_INIT_PRIORITY on filenames.  These would
    388   previously be accepted but had no effect.
    389 
    390 * The EXCLUDE_FILE directive can now be placed within any SORT_* directive
    391   within input section lists.
    392 
    393 Changes in 2.29:
    394 
    395 * Support for -z shstk in the x86 ELF linker to generate
    396   GNU_PROPERTY_X86_FEATURE_1_SHSTK in ELF GNU program properties.
    397 
    398 * Add support for GNU_PROPERTY_X86_FEATURE_1_SHSTK in ELF GNU program
    399   properties in the x86 ELF linker.
    400 
    401 * Add support for GNU_PROPERTY_X86_FEATURE_1_IBT in ELF GNU program
    402   properties in the x86 ELF linker.
    403 
    404 * Support for -z ibtplt in the x86 ELF linker to generate IBT-enabled
    405   PLT.
    406 
    407 * Support for -z ibt in the x86 ELF linker to generate IBT-enabled
    408   PLT as well as GNU_PROPERTY_X86_FEATURE_1_IBT in ELF GNU program
    409   properties.
    410 
    411 * Add support for ELF SHF_GNU_MBIND and PT_GNU_MBIND_XXX.
    412 
    413 * Add support for ELF GNU program properties.
    414 
    415 * Add support for the Texas Instruments PRU processor.
    416 
    417 * When configuring for arc*-*-linux* targets the default linker emulation will
    418   change if --with-cpu=nps400 is used at configure time.
    419 
    420 * Improve assignment of LMAs to orphan sections in some edge cases where a
    421   mixture of both AT>LMA_REGION and AT(LMA) are used.
    422 
    423 * Orphan sections placed after an empty section that has an AT(LMA) will now
    424   take an load memory address starting from LMA.
    425 
    426 * Section groups can now be resolved (the group deleted and the group members
    427   placed like normal sections) at partial link time either using the new linker
    428   option --force-group-allocation or by placing FORCE_GROUP_ALLOCATION into the
    429   linker script.
    430 
    431 Changes in 2.28:
    432 
    433 * The EXCLUDE_FILE linker script construct can now be applied outside of the
    434   section list in order for the exclusions to apply over all input sections in
    435   the list.
    436 
    437 * Add support for the RISC-V architecture.
    438 
    439 * The command-line option --no-eh-frame-hdr can now be used in ELF based
    440   linkers to disable the automatic generation of .eh_frame_hdr sections.
    441 
    442 * Add --in-implib=<infile> to the ARM linker to enable specifying a set of
    443   Secure Gateway veneers that must exist in the output import library specified
    444   by --out-implib=<outfile> and the address they must have.  As such,
    445   --in-implib is only supported in combination with --cmse-implib.
    446 
    447 * Extended the --out-implib=<file> option, previously restricted to x86 PE
    448   targets, to any ELF based target.  This allows the generation of an import
    449   library for an ELF executable, which can then be used by another application
    450   to link against the executable.
    451 
    452 Changes in 2.27:
    453 
    454 * Add a configure option --enable-relro to decide whether -z relro should
    455   be enabled in ELF linker by default.  Default to yes for all Linux
    456   targets except FRV, HPPA, IA64 and MIPS.  Note that -z relro can increase
    457   disk and memory size.
    458 
    459 * Support for -z noreloc-overflow in the x86-64 ELF linker to disable
    460   relocation overflow check.
    461 
    462 * Add -z common/-z nocommon options for ELF targets to control whether to
    463   convert common symbols to the STT_COMMON type during a relocatable link.
    464 
    465 * Support for -z nodynamic-undefined-weak in the x86 ELF linker, which
    466   avoids dynamic relocations against undefined weak symbols in executable.
    467 
    468 * The NOCROSSREFSTO command was added to the linker script language.
    469 
    470 * Add --no-apply-dynamic-relocs to the AArch64 linker to do not apply link-time
    471   values for dynamic relocations.
    472 
    473 Changes in 2.26:
    474 
    475 * Add --fix-stm32l4xx-629360 to the ARM linker to enable a link-time
    476   workaround for a bug in the bus matrix / memory controller for some of
    477   the STM32 Cortex-M4 based products (STM32L4xx)
    478 
    479 * Add a configure option --enable-compressed-debug-sections={all,ld} to
    480   decide whether DWARF debug sections should be compressed by default.
    481 
    482 * Add support for the ARC EM/HS, and ARC600/700 architectures.
    483 
    484 * Experimental support for linker garbage collection (--gc-sections)
    485   has been enabled for COFF and PE based targets.
    486 
    487 * New command-line option for ELF targets to compress DWARF debug
    488   sections, --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi].
    489 
    490 * New command-line option, --orphan-handling=[place|warn|error|discard], to
    491   adjust how orphan sections are handled.  The default is 'place' which gives
    492   the current behaviour, 'warn' and 'error' issue a warning or error
    493   respectively when orphan sections are found, and 'discard' will discard all
    494   orphan sections.
    495 
    496 * Add support for LLVM plugin.
    497 
    498 * Add --print-memory-usage option to report memory blocks usage.
    499 
    500 * Add --require-defined option, it's like --undefined except the new symbol
    501   must be defined by the end of the link.
    502 
    503 Changes in 2.25:
    504 
    505 * PE binaries now once again contain real timestamps by default.  To disable
    506   the inclusion of a timestamp in a PE binary, use the --no-insert-timestamp
    507   command-line option.
    508 
    509 * Replace support for openrisc and or32 with support for or1k.
    510 
    511 * Add support for the --build-id command-line option to COFF based targets.
    512 
    513 * x86/x86_64 pe-coff now supports the --build-id option.
    514 
    515 * Add support for the Andes NDS32.
    516 
    517 Changes in 2.24:
    518 
    519 * Add LOG2CEIL() builtin function to the linker script language
    520 
    521 * Add support for the Texas Instruments MSP430X processor.
    522 
    523 * Add support for Altera Nios II.
    524 
    525 * Add support for the V850E3V5 architecture.
    526 
    527 * Add support for the Imagination Technologies Meta processor.
    528 
    529 * --enable-new-dtags no longer generates old dtags in addition to new dtags.
    530 
    531 * Remove linker support for MIPS ECOFF targets.
    532 
    533 * Add ALIGN_WITH_INPUT to the linker script language to force the alignment of
    534   an output section to use the maximum alignment of all its input sections.
    535 
    536 Changes in 2.23:
    537 
    538 * Enable compressed debug section feature for x86/x86_64 pe-coff.
    539 
    540 * Add support for the 64-bit ARM architecture: AArch64.
    541 
    542 * Added SORT_NONE to the linker script language to disable section sorting.
    543 
    544 * Add a linker-provided symbol when producing ELF output, '__ehdr_start'
    545   to point to the ELF file header (and nearby program headers) in the
    546   program's memory image.
    547 
    548 * Add support for S12X processor.
    549 
    550 * Add support for the VLE extension to the PowerPC architecture.
    551 
    552 * Add support for the Freescale XGATE architecture.
    553 
    554 * Add option -f FILE on AIX (for response file).
    555 
    556 * Add support for the Renesas RL78 architecture.
    557 
    558 * Add support for the Adapteva EPIPHANY architecture.
    559 
    560 Changes in 2.22:
    561 
    562 * --copy-dt-needed-entries is no longer enabled by default.  Instead
    563   --no-copy-dt-needed-entries is the default.
    564 
    565 * INPUT_SECTION_FLAGS has been added to the linker script language
    566   to allow selection of input sections by section header section flags.
    567 
    568 * Add support for the Tilera TILEPro and TILE-Gx architectures.
    569 
    570 * Added SORT_BY_INIT_PRIORITY to the linker script language to permit
    571   sorting sections by numerical value of the GCC init_priority attribute
    572   encoded in the section name.
    573 
    574 Changes in 2.21:
    575 
    576 * Linker script expression evaluation is somewhat more sane.  This may
    577   break scripts that depend on quirks of the old expression evaluation.
    578 
    579 * Turn off underscoring for x86_64 PE+-COFF targets.  For old behavior the
    580   option --enable-leading-mingw64-underscores can be used on configure of
    581   bfd.
    582 
    583 * Add support for the TMS320C6000 (TI C6X) processor family.
    584 
    585 * --add-needed renamed to --copy-dt-needed-entries in order to avoid confusion
    586   with --as-needed option.
    587 
    588 * Extend .def file syntax by '== <ID>' for imports and exports. This allows
    589   to alias the import/export table name written in PE image.
    590 
    591 * Add --exclude-all-symbols option to PE based linkers.  This prevents all
    592   symbols from automatically being exported.
    593 
    594 * Add support for the Renesas RX processor.
    595 
    596 * Add support for alpha-vms target.
    597 
    598 Changes in 2.20:
    599 
    600 * GNU/Linux targets now support the STB_GNU_UNIQUE symbol binding.  This is a
    601   GNU extension to the standard set of ELF symbol bindings.  The binding will
    602   be passed on to the dynamic linker which will make sure that in the entire
    603   process there is just one symbol with the given name and type in use.
    604 
    605 * PE targets now support a GNU extension to allow the alignment of common
    606   common symbols to be specified.  This support uses custom options in
    607   the .drectve section, which will be disregarded by the native tools.
    608 
    609 * PE targets now add primitive support for ELF version scripts; symbols
    610   are not versioned, but the local and global symbol visibility directives
    611   are respected when filtering symbols in auto-export mode.
    612 
    613 * New option --no-export-dynamic to undo the effect of the -E and
    614   --export-dynamic options.
    615 
    616 * ELF: --warn-alternate-em option to warn if an object has alternate
    617   ELF machine code.
    618 
    619 * New script function REGION_ALIAS to add alias names to memory regions.
    620 
    621 * PE targets no longer make use of the long section names PE extension to
    622   the COFF format when generating executable images, by default.  The old
    623   (slightly non-conformant) behaviour can still be invoked by using the
    624   new '--enable-long-section-names' command-line option.  It is also enabled
    625   automatically in the presence of un-stripped debug information, as GDB
    626   needs to be able to find the debug info sections by their full names.
    627 
    628 * For GNU/Linux systems the linker will now avoid processing any relocations
    629   made against symbols of the STT_GNU_IFUNC type and instead emit them into
    630   the resulting binary for processing by the loader.
    631 
    632 * --as-needed now links in a dynamic library if it satisfies undefined
    633   symbols in regular objects, or in other dynamic libraries.  In the
    634   latter case the library is not linked if it is found in a DT_NEEDED
    635   entry of one of the libraries already linked.
    636 
    637 * Add a new command-line option, -Ttext-segment ADDR, for ELF targets
    638   to set the address of the first byte of the text segment.
    639 
    640 * Add support for Sunplus score architecture.
    641 
    642 * Add new option --use-nul-prefixed-import-tables to ld for PE targets to
    643   allow fallback to old import table generation with null element prefix.
    644 
    645 * Windows PE systems now support a new --exclude-modules-for-implib option,
    646   allowing users to partition object files and archive members between a DLL
    647   and its associated import library as they are generated during linking.
    648 
    649 * Add support for Lattice Mico32 (lm32) architecture.
    650 
    651 * Add CR16 ELF --embedded-relocs (used to embedded relocations into binaries
    652   for Embedded-PIC code) option.
    653 
    654 * Add to the PE/PE+ targets the support of two different kinds of
    655   pseudo-relocations.  They can be selected by the switches
    656   --enable-runtime-pseudo-reloc-v1 and --enable-runtime-pseudo-reloc-v2.
    657   For the switch --enable-runtime-pseudo-reloc it uses for 32-bit
    658   runtime pseudo relocation version one, for 64-bit the version two.
    659 
    660 Changes in 2.19:
    661 
    662 * Linker scripts support a new INSERT command that makes it easier to
    663   augment the default script.
    664 
    665 * Linker script input section filespecs may now specify a file within an
    666   archive by writing "archive:file".
    667 
    668 * The --sort-common switch now has an optional argument which specifies the
    669   direction of sorting.
    670 
    671 * The M68K linker now supports multiple GOT generation schemes controlled via
    672   the --got=<type> command-line option.
    673 
    674 * The ARM EABI linker will now generate stubs for function calls to symbols
    675   that are too far away.  The placement of the stubs is controlled by a new
    676   linker command-line option: --stub-group-size=N.
    677 
    678 Changes in 2.18:
    679 
    680 * Linker sources now released under version 3 of the GNU General Public
    681   License.
    682 
    683 * ELF: New --build-id option to generate a unique per-binary identifier
    684   embedded in a note section.
    685 
    686 * Added support for National Semicondutor CompactRISC (ie CR16) target.
    687 
    688 * -l:foo now searches the library path for a filename called foo,
    689   without converting it to libfoo.a or libfoo.so.
    690 
    691 * Add a new command-line option '--default-script=FILE' or '-dT FILE'
    692   which specifies a replacement for the built in, default linker
    693   script.
    694 
    695 * ELF: Add -Bsymbolic-functions, --dynamic-list-cpp-new, which puts C++
    696   operator new and delete on the dynamic list, and --dynamic-list-data,
    697   builtin list for --dynamic-list, which puts global data symbols on the
    698   dynamic list.
    699 
    700 * Add support for x86_64 PE+ target.
    701 
    702 * Add support for Score target.
    703 
    704 * ELF: Add --dynamic-list option to specify a list of global symbols
    705   whose references shouldn't be bound to the definition within the
    706   shared library, or a list of symbols which should be added to the
    707   symbol table in the executable.
    708 
    709 * The default output section LMA has changed for allocatable sections from
    710   being equal to VMA, to keeping the difference between LMA and VMA the same as
    711   the previous output section in the same region.  This is a more useful
    712   default when using overlays and other cases where you specify an LMA
    713   differing from the VMA for some sections.
    714 
    715 * New switch: --print-gc-sections to list any sections removed by garabge
    716   collection.
    717 
    718 * ARM: Added --vfp11-denorm-fix option to work around an erratum in current
    719   VFP11 coprocessors.
    720 
    721 Changes in 2.17:
    722 
    723 * Support for the Infineon XC16X has been added by KPIT Cummins Infosystems.
    724 
    725 * Modify the Linux linker search order to better match ld.so search order.
    726   Look for DT_NEEDED libraries in paths specified by ld.so.conf before
    727   searching the default directories, rather than vice versa.
    728   Use $prefix/etc/ld.so.conf if it exists, otherwise /etc/ld.so.conf.
    729 
    730 * PE-COFF: Forward exports from DLL's can now be specified in .def files
    731   passed directly to ld.
    732 
    733 * Support for the Z80 processor family has been added.
    734 
    735 * Add support for the "@<file>" syntax to the command line, so that extra
    736   switches can be read from <file>.
    737 
    738 Changes in 2.16:
    739 
    740 * Support for the R_ARM_V4BX relocation as defined in the ARM AAELF
    741   specification has been added via the --fix-v4bx command-line option.
    742 
    743 * New linker script construct AS_NEEDED(), which sets the --as-needed flag
    744   for input files listed inside of it.
    745 
    746 * A new command-line option, --sysroot, can be used to override the
    747   default sysroot location.  It only applies to toolchains that were
    748   configured using --with-sysroot.
    749 
    750 * New linker script functions: ORIGIN() and LENGTH() which return information
    751   about a specified memory region.
    752 
    753 * Port to MAXQ processor contributed by HCL Tech.
    754 
    755 * Added SEGMENT_START to the linker script language to permit the user to
    756   override the base address for a segment from the command-line.
    757 
    758 * ELF: --warn-shared-textrel option to warn if adding a DT_TEXTREL to a shared
    759   object.
    760 
    761 * Added SORT_BY_NAME and SORT_BY_ALIGNMENT to the linker script
    762   language to permit sorting sections by section name or section
    763   maximum alignment.
    764 
    765 * Added a new linker command-line switch, --sort-section name|alignment,
    766   to sort sections by section name or maximum alignment.
    767 
    768 * ELF: --add-needed/--no-add-needed options to control if a DT_NEEDED tag
    769   should be added when a shared library comes from DT_NEEDED tags.
    770 
    771 * Support for the crx-elf target added.
    772 
    773 * Support for the sh-symbianelf target added.
    774 
    775 * A new linker command-line switch has been added which allows the hash table
    776   size to be set to a suitable prime value near to its argument.  This switch
    777   is --hash-size=<NUMBER>.  Also if the switch --reduce-memory-overheads is
    778   used, and --hash-size has not been used, then the default value will be set
    779   to 1021.
    780 
    781 * Linker map files are now generated with an O(N) algorithm for finding symbols
    782   that are defined in each section.  This uses about 40% more memory for
    783   symbols than the old O(N^2) algorithm.  You can use the new
    784   --reduce-memory-overheads option to select the old algorithm; this option
    785   might also be used in the future to select similar tradeoffs.
    786 
    787 Changes in 2.15:
    788 
    789 * ELF: --as-needed/--no-as-needed options to control if a DT_NEEDED tag should
    790   be added only when a shared library is referenced.
    791 
    792 * PE: --large-address-aware option to indicate executables support virtual
    793   addresses greater than 2 gigabytes.
    794 
    795 * DWARF 2 support for i386pe added.
    796 
    797 * The linker script operator DEFINED() will now yield 1 only for a symbol that
    798   is defined before the statement where DEFINED is used.
    799 
    800 * The MIPS --embedded-relocs (used to embed relocations into binaries for
    801   Embedded-PIC code) is deprecated and will be removed in a future release.
    802 
    803 * cr16c support added by NSC.
    804 
    805 * m32r Linux (ELF) support added by Renesas.
    806 
    807 * Improved linker's handling of unresolved symbols.  The switch
    808   --unresolved-symbols=<method> has been added to tell the linker when it
    809   should report them and the switch --warn-unresolved-symbols has been added to
    810   make reports be issued as warning messages rather than errors.
    811 
    812 Changes in 2.14:
    813 
    814 * Added support for Xtensa architecture.
    815 
    816 * Added --with-sysroot configure switch to specify a target system root, for
    817   linking against a target filesystem image.
    818 
    819 * Added --accept-unknown-linker-format to restore old linker behaviour (pre
    820   2.14) of silently accepting and linking in any files in an unknown binary
    821   file format.
    822 
    823 * Added --no-omagic to undo the effects of the -N option.
    824 
    825 * Support for Texas Instruments TMS320C4x and TMS320C3x series of
    826   DSP's contributed by Michael Hayes and Svein E. Seldal.
    827 
    828 * Added --with-lib-path configure switch to specify default value for
    829   LIB_PATH.
    830 
    831 * ARM port to QNX operating system added by Graeme Peterson.
    832 
    833 * IP2K support added by Denis Chertykov.
    834 
    835 Changes in 2.13:
    836 
    837 * Support for the Fujitsu FRV architecture added by Red Hat. Models for FR400
    838   and FR500 included.
    839 
    840 Changes in version 2.13:
    841 
    842 * DEC VAX ELF support, by Matt Thomas.
    843 
    844 Changes in version 2.12:
    845 
    846 * Support for Don Knuth's MMIX, by Hans-Peter Nilsson.
    847 
    848 * Support for the OpenRISC 32-bit embedded processor by OpenCores.
    849 
    850 * Support for -z nocopyreloc in the x86 ELF linker, which disables
    851   production of copy relocs.  Warning: using this option may result in
    852   non-sharable applications.
    853 
    854 * Support for -z combreloc in the ELF linker, which puts dynamic
    855   relocations against the same symbol together, so that dynamic linker
    856   can use an one-entry symbol lookup cache.
    857 
    858 * Support for ELF SHF_MERGE section merging, by Jakub Jelinek.
    859 
    860 Changes in version 2.11:
    861 
    862 * Support for AMD x86-64 architecture, by Jan Hubicka, SuSE Labs.
    863 
    864 * Support added for eliminating duplicate DWARF2 debug information by
    865   having the compiler generate the information in sections called
    866   .gnu.linkonce.wi.XXXX where XXXX is a checksum for the contents.  The
    867   linker then merges these sections together into the normal .debug_info
    868   section.
    869 
    870 * The native ELF linker now searches the directories in DT_RUNPATH or
    871   DT_RPATH of a shared library for shared libraries needed by it.
    872 
    873 * TI C54x support, by Timothy Wall.
    874 
    875 * Added command-line switch --section-start to set the start address of any
    876   specified section.
    877 
    878 * Added ability to emit full relocation information in linked executables,
    879   enabled by --emit-relocs.  Some post-linkage optimization tools need
    880   this information in order to be able to correctly identify and perform
    881   symbol relative addressing in the event of changes in section contents
    882   (instructions being added or deleted, extending data sections, etc.)
    883 
    884 * Support for i860, by Jason Eckhardt (preliminary, alpha quality).
    885 
    886 * Support for CRIS (Axis Communications ETRAX series).
    887 
    888 * Support for PDP-11 and 2.11BSD a.out format, by Lars Brinkhoff.
    889 
    890 Changes in version 2.10:
    891 
    892 * Added AT> to the linker script language to allow load-time allocation of
    893   sections into regions.
    894 
    895 * Added garbage collection of unused sections, enabled by --gc-sections.
    896   It does require a bit of backend support; currently implemented are
    897   arm-elf, avr-elf, d10v-elf, fr30-elf, i386-elf, m32r-elf, m68k-elf,
    898   mcore-elf, mips-elf, mn10300-elf, ppc-elf, sh-elf, sparc-elf, and v850-elf.
    899   Others will ignore the option.
    900 
    901 * Added SORT to the linker script language to permit sorting sections by file
    902   name or section name.
    903 
    904 * Added EXTERN to the linker script language as an equivalent to the -u
    905   command-line option.
    906 
    907 * Added ASSERT to the linker script language.
    908 
    909 * Added EXCLUDE_FILE to the linker script language for further control over
    910   wildcard file names.
    911 
    912 * Added -O option to optimize linker output (as of this writing, this only
    913   affects ELF shared library generation).
    914 
    915 * The -e option now accepts a number as well as a symbol name.
    916 
    917 * Added --no-undefined option to disallow undefined symbols when creating a
    918   shared library.
    919 
    920 * The linker now issues a warning, not an error, for an undefined symbol when
    921   using -Bsymbolic; use the new --no-undefined option to get the old
    922   behaviour.
    923 
    924 * Added --demangle and --no-demangle options.
    925 
    926 Changes in version 2.9:
    927 
    928 * Added SQUAD to the linker script language.
    929 
    930 * New option --no-warn-mismatch.
    931 
    932 * The MEMORY command now parses the attributes to determine where sections that
    933   are not placed in a specific memory region are placed.
    934 
    935 Changes in version 2.8:
    936 
    937 * Linker scripts may now contain shell wildcard characters for file and section
    938   names.
    939 
    940 * The linker now supports symbol versions in ELF.
    941 
    942 * The NOCROSSREFS command was added to the linker script language.
    943 
    944 * The LOADADDR expression was added to the linker script language.
    945 
    946 * MAX and MIN functions were added to the linker script language.
    947 
    948 * The OVERLAY construct was added to the linker script language.
    949 
    950 * New option --warn-section-align to warn when the address of an output section
    951   changes due to alignment of an input section.
    952 
    953 * New options --filter/-F and --auxiliary/-f.
    954 
    955 Changes in version 2.7:
    956 
    957 * New option --cref to print out a cross reference table.
    958 
    959 * New option --wrap SYMBOL.
    960 
    961 * New option --no-whole-archive, to turn off the effect of --whole-archive.
    962 
    963 * Input sections assigned to the output section /DISCARD/ in the linker script
    964   are not included in the output file.
    965 
    966 * The SunOS and ELF linkers now merge stabs debugging information which uses
    967   the N_BINCL and N_EINCL stab types.  This reduces the amount of debugging
    968   information generated.
    969 
    970 Changes in version 2.6:
    971 
    972 * When an ELF section name is representable as a C identifier (this is not true
    973 of most ELF section names), the linker will automatically define symbols
    974 __start_SECNAME and __stop_SECNAME, where SECNAME is the section name, at the
    975 beginning and the end of the section.  This is used by glibc.
    976 
    977   Addendum: Current versions of the linker (at least for version 2.18 onwards
    978 and possibly much earlier as well) place two restrictions on this feature:  The
    979 symbols are only implemented for orphaned sections, not for explicitly placed
    980 sections and they are PROVIDEd rather than being defined.
    981 
    982 * When an ELF section named .gnu.warning is encountered in an input file, the
    983 contents of the section are displayed as an error message, and the section is
    984 not copied into the output file.  This is used by glibc.
    985 
    986 * When an ELF section named .gnu.warning.SYMBOL is encountered in an input
    987 file, and the symbol SYMBOL is referenced by some object file, the contents of
    988 the section are displayed as an error message.  The section is not copied into
    989 the output file, unless doing a relocatable or shared link.  This is used by
    990 glibc.
    991 
    992 * New options -split-by-reloc and -split-by-file.
    993 
    994 * The linker now supports linking PIC compiled code on SPARC SunOS.  It can
    995 also create SPARC SunOS shared libraries, and, like the native SunOS linker,
    996 will do so whenever there is an undefined symbol in the link and neither the -e
    997 nor the -r option was used.
    998 
    999 * The -rpath option may be used on SunOS to set the list of directories to be
   1000 searched at run time.  This overrides the default of building the list from the
   1001 -L options.
   1002 
   1003 * The COFF linker now combines debugging information for structs, unions, and
   1004 enums, so that even if the same type is defined in multiple input files it will
   1005 only be defined once in the output file.  The --traditional-format switch will
   1006 prevent this optimization.
   1007 
   1008 Changes in version 2.5:
   1009 
   1010 * The linker now supports linking against SunOS shared libraries.  It still can
   1011 not link SunOS PIC (Position Independent Code) files, so it can not be used to
   1012 generate shared libraries.
   1013 
   1014 * The linker now supports linking against ELF shared libraries for the i386
   1015 (UnixWare) and SPARC (Solaris).  It can also link ELF PIC files, and can be
   1016 used to generate shared libraries.  Shared library generation is not well
   1017 tested; please report any problems encountered.  The linker is now enabled for
   1018 Solaris again.
   1019 
   1020 * Eric Youngdale has contributed Linux support code, including linking against
   1021 Linux a.out shared libraries.  The linker produces Linux QMAGIC binaries.
   1022 
   1023 * The ELF backend has been converted to the new linker code.  To use the new
   1024 ELF linker, each particular target requires a relocation function.  So far,
   1025 this function has been written for i386 (UnixWare), SPARC (Solaris) MIPS (Irix
   1026 5), and HPPA ELF targets.
   1027 
   1028 * The -( (--start-group) and -) (--end-group) options have been added to
   1029 support searching a group of archives as though they were a single archive.
   1030 This can also be used in a linker script, as GROUP ( files ).
   1031 
   1032 * When a file is named on the command line, and the linker does not recognize
   1033 it as an object file, the linker will now treat the file as a linker script
   1034 file.  A linker script named in this way augments, but does not replace, the
   1035 default linker script.
   1036 
   1037 * The -warn-once option was added.  It causes the linker to only warn once per
   1038 undefined symbol, rather than once per reference.
   1039 
   1040 * The COFF backend has been converted to the new linker code.  As with ELF, to
   1041 use the new linker, each particular target requires a relocation function.  So
   1042 far, this function has been written for the i386, m68k, a29k and SH targets.
   1043 
   1044 * The -V flag was made a synonym for -v, for SVR4 compatibility.  The old -V
   1045 behaviour is available via --verbose.
   1046 
   1047 Changes in version 2.4:
   1048 
   1049 * New linker code, by Steve Chamberlain and Ian Taylor.  For a.out and ecoff
   1050   formats (so far), this should result in considerable savings in time
   1051   and memory used while linking; slightly poorer performance than
   1052   before for formats not converted yet.
   1053 
   1054 * Command-line parsing is no longer done with flex.  This means
   1055   oddball characters in filenames won't get treated as argument
   1056   separators.
   1057 
   1058 * HP-PA ELF support, by Jeff Law.  (No SOM support yet.)
   1059 
   1060 * Mach i386 support, by David Mackenzie.
   1061 
   1062 * Irix 4 shared libraries are now supported (Irix 5 uses ELF, and ELF shared
   1063   libraries are not yet supported).
   1064 
   1065 * COFF shared libraries (as on SCO) should work as well.
   1066 
   1067 * The linker is disabled for Solaris.  (Actually, it was in 2.3 also, I just
   1068   forgot to note it.)  Some of their C library routines don't work when
   1069   statically linked, and the GNU linker doesn't support dynamic linking yet.
   1070 
   1071 Changes in version 2.3:
   1072 
   1073 * Weak symbols are now supported.
   1074 
   1075 * ELF support has been added.  The linker has been bootstrapped on
   1076   UnixWare and Solaris.
   1077 
   1078 * Alpha OSF/1 support has been added (non dynamic linking only).
   1079 
   1080 Changes in version 2.2:
   1081 
   1082 * The `bfd' library has been updated to reduce a.out-format string
   1083   table size.  The effect of this is that files linked from many input
   1084   files with duplicate symbols (`-g' debugging records, or identical
   1085   static symbols) should be much smaller.
   1086 
   1087 Changes in version 2.1:
   1088 
   1089 * The ld -ySYMBOL flag (to trace references to SYMBOL) is now implemented.
   1090 
   1091 * There is now support for writing ECOFF files, so ld and the
   1092   other utilities should work on Risc/Ultrix and Irix.
   1093 
   1094 
   1096 Copyright (C) 2012-2025 Free Software Foundation, Inc.
   1097 
   1098 Copying and distribution of this file, with or without modification,
   1099 are permitted in any medium without royalty provided the copyright
   1100 notice and this notice are preserved.
   1101 
   1102 Local variables:
   1103 fill-column: 79
   1104 End:
   1105