-*- text -*-

* Add -z indirect-extern-access/-z noindirect-extern-access to x86 ELF
  linker to control canonical function pointers and copy relocation.

* Add --max-cache-size=SIZE to set the the maximum cache size to SIZE
  bytes.

Changes in 2.37:

* arm-symbianelf support removed.

* Add -z report-relative-reloc to x86 ELF linker to report dynamic
  relative relocations.

* Add -z start-stop-gc to disable special treatment of __start_*/__stop_*
  references when --gc-sections.

* Add -Bno-symbolic to cancel -Bsymbolic and -Bsymbolic-functions.

Changes in 2.36:

* Add libdep plugin, for linking dependencies of static libraries that
  were recorded by ar in the __.LIBDEP archive member.

* Add --error-handling-script=<NAME> command line option to allow a helper
  script to be invoked when an undefined symbol or a missing library is
  encountered.  This option can be suppressed via the configure time
  switch: --enable-error-handling-script=no.

* Add -z lam-u48 to x86-64 ELF linker to generate LAM_U48 property.

* Add -z lam-u57 to x86-64 ELF linker to enerate LAM_U57 property.

* Add -z lam-u48-report=[none|warning|error] to report missing LAM_U48
  property.

* Add -z lam-u57-report=[none|warning|error] to report missing LAM_U57
  property.

* Add -z lam-report=[none|warning|error] to report missing LAM_U48 and
  LAM_U57 properties.

* Add -z x86-64-{baseline|v[234]} to the x86 ELF linker to mark
  x86-64-{baseline|v[234]} ISA level as needed.

* Add -z unique-symbol to avoid duplicated local symbol names.

* The creation of PE format DLLs now defaults to using a more secure set of DLL
  characteristics.

* The linker now deduplicates the types in .ctf sections.  The new
  command-line option --ctf-share-types describes how to do this:
  its default value, share-unconflicted, produces the most compact
  output.

* The linker now omits the "variable section" from .ctf sections by
  default, saving space.  This is almost certainly what you want
  unless you are working on a project that has its own analogue
  of symbol tables that are not reflected in the ELF symtabs.

* Add support for the SHF_GNU_RETAIN ELF section flag.
  This flag specifies that the section should not be garbage collected by the
  linker.

Changes in 2.35:

* X86 NaCl target support is removed.

* Add ELF linker command-line options, --export-dynamic-symbol and
  --export-dynamic-symbol-list, to make symbols dynamic.

* Add a configure option, --enable-textrel-check=[no|yes|warning|error],
  to decide what ELF linker should do by default with DT_TEXTREL in an
  executable or shared library.  Default to yes for Linux/x86 targets.

* The -Map=<filename> command line option has been extended so that if
  <filename> is a directory then <filename>/<output-filename>.map will be
  created.

* Add a command-line option for ELF linker, --warn-textrel, to warn that
  DT_TEXTREL is set in a position-independent executable or shared object.

* Add command-line options --enable-non-contiguous-regions and
  --enable-non-contiguous-regions-warnings.

* Add command-line option --imagic for the pdp11-aout target to output format
  IMAGIC (0411) for separate instruction and data spaces, and change the
  default format option for pdp11-aout to be --omagic.

* Relative pathnames in INPUT() and GROUP() directives in linker scripts are
  searched relative to the directory of the linker script before other search
  paths.

* Add ELF linker command-line option `-z start-stop-visibility=...' to control
  the visibility of synthetic `__start_SECNAME` and `__stop_SECNAME` symbols.

* Add command-line option --dependency-file to write a Make-style dependency
  file listing the input files consulted by the linker, like the files written
  by the compiler's -M -MP options.

Changes in 2.34:

* The ld check for "PHDR segment not covered by LOAD segment" is more
  effective, catching cases that were wrongly allowed by previous versions of
  ld.  If you see this error it is likely you are linking with a bad linker
  script or the binary you are building is not intended to be loaded by a
  dynamic loader.  In the latter case --no-dynamic-linker is appropriate.

* cr16c support removed.

* Add support for z80-elf.

* Add support for relocation of each byte or word of multibyte value to Z80
  targets.

* Add support for Zilog eZ80 (both ADL and Z80 mode) and Zilog Z180 CPUs.

Changes in 2.33:

* Add command-line option --no-print-map-discarded.

* The Cortex-A53 Erratum 843419 workaround now supports a choice of which
  workaround to use.  The option --fix-cortex-a53-843419 now takes an
  optional argument --fix-cortex-a53-843419[=full|adr|adrp] which can be
  used to force a particular workaround to be used.  See --help for AArch64
  for more details.

* Add target handlers for AArch64 for ELF GNU program properties.

* Add support for GNU_PROPERTY_AARCH64_FEATURE_1_BTI in ELF GNU program
  properties in the AArch64 ELF linker.

* Add support for GNU_PROPERTY_AARCH64_FEATURE_1_PAC in ELF GNU program
  properties in the AArch64 ELF linker.

* Add -z force-bti for AArch64 to enable GNU_PROPERTY_AARCH64_FEATURE_1_BTI
  on output while warning about missing GNU_PROPERTY_AARCH64_FEATURE_1_BTI
  on inputs and use PLTs protected with BTI.

* Add -z pac-plt for AArch64 to pick PAC enabled PLTs.

Changes in 2.32:

* Report property change in linker map file when merging GNU properties.

* Add support for the C-SKY processor series.

* -t now doesn't report members within archives, unless -t is given twice.
  A single -t is now more useful when generating a list of files that should be
  packaged for a linker bug report.  For example:
    gcc hello.c -save-temps -Wl,-t | xargs realpath | sort | uniq > files
    tar cJf test.tar.xz `cat files`

Changes in 2.31:

* Speed up direct linking with DLLs for Cygwin and Mingw targets.

* Add a configure option --enable-separate-code to decide whether
  -z separate-code should be enabled in ELF linker by default.  Default
  to yes for Linux/x86 targets.  Note that -z separate-code can increase
  disk and memory size.

Changes in 2.30:

* Add -z separate-code to generate separate code PT_LOAD segment.

* Add "-z undefs" command-line option as the inverse of the "-z defs" option.

* Add -z globalaudit command-line option to force audit libraries to be run
  for every dynamic object loaded by an executable - provided that the loader
  supports this functionality.

* Tighten linker script grammar around file name specifiers to prevent the use
  of SORT_BY_ALIGNMENT and SORT_BY_INIT_PRIORITY on filenames.  These would
  previously be accepted but had no effect.

* The EXCLUDE_FILE directive can now be placed within any SORT_* directive
  within input section lists.

Changes in 2.29:

* Support for -z shstk in the x86 ELF linker to generate
  GNU_PROPERTY_X86_FEATURE_1_SHSTK in ELF GNU program properties.

* Add support for GNU_PROPERTY_X86_FEATURE_1_SHSTK in ELF GNU program
  properties in the x86 ELF linker.

* Add support for GNU_PROPERTY_X86_FEATURE_1_IBT in ELF GNU program
  properties in the x86 ELF linker.

* Support for -z ibtplt in the x86 ELF linker to generate IBT-enabled
  PLT.

* Support for -z ibt in the x86 ELF linker to generate IBT-enabled
  PLT as well as GNU_PROPERTY_X86_FEATURE_1_IBT in ELF GNU program
  properties.

* Add support for ELF SHF_GNU_MBIND and PT_GNU_MBIND_XXX.

* Add support for ELF GNU program properties.

* Add support for the Texas Instruments PRU processor.

* When configuring for arc*-*-linux* targets the default linker emulation will
  change if --with-cpu=nps400 is used at configure time.

* Improve assignment of LMAs to orphan sections in some edge cases where a
  mixture of both AT>LMA_REGION and AT(LMA) are used.

* Orphan sections placed after an empty section that has an AT(LMA) will now
  take an load memory address starting from LMA.

* Section groups can now be resolved (the group deleted and the group members
  placed like normal sections) at partial link time either using the new linker
  option --force-group-allocation or by placing FORCE_GROUP_ALLOCATION into the
  linker script.

Changes in 2.28:

* The EXCLUDE_FILE linker script construct can now be applied outside of the
  section list in order for the exclusions to apply over all input sections in
  the list.

* Add support for the RISC-V architecture.

* The command-line option --no-eh-frame-hdr can now be used in ELF based
  linkers to disable the automatic generation of .eh_frame_hdr sections.

* Add --in-implib=<infile> to the ARM linker to enable specifying a set of
  Secure Gateway veneers that must exist in the output import library specified
  by --out-implib=<outfile> and the address they must have.  As such,
  --in-implib is only supported in combination with --cmse-implib.

* Extended the --out-implib=<file> option, previously restricted to x86 PE
  targets, to any ELF based target.  This allows the generation of an import
  library for an ELF executable, which can then be used by another application
  to link against the executable.

Changes in 2.27:

* Add a configure option --enable-relro to decide whether -z relro should
  be enabled in ELF linker by default.  Default to yes for all Linux
  targets except FRV, HPPA, IA64 and MIPS.  Note that -z relro can increase
  disk and memory size.

* Support for -z noreloc-overflow in the x86-64 ELF linker to disable
  relocation overflow check.

* Add -z common/-z nocommon options for ELF targets to control whether to
  convert common symbols to the STT_COMMON type during a relocatable link.

* Support for -z nodynamic-undefined-weak in the x86 ELF linker, which
  avoids dynamic relocations against undefined weak symbols in executable.

* The NOCROSSREFSTO command was added to the linker script language.

* Add --no-apply-dynamic-relocs to the AArch64 linker to do not apply link-time
  values for dynamic relocations.

Changes in 2.26:

* Add --fix-stm32l4xx-629360 to the ARM linker to enable a link-time
  workaround for a bug in the bus matrix / memory controller for some of
  the STM32 Cortex-M4 based products (STM32L4xx)

* Add a configure option --enable-compressed-debug-sections={all,ld} to
  decide whether DWARF debug sections should be compressed by default.

* Add support for the ARC EM/HS, and ARC600/700 architectures.

* Experimental support for linker garbage collection (--gc-sections)
  has been enabled for COFF and PE based targets.

* New command-line option for ELF targets to compress DWARF debug
  sections, --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi].

* New command-line option, --orphan-handling=[place|warn|error|discard], to
  adjust how orphan sections are handled.  The default is 'place' which gives
  the current behaviour, 'warn' and 'error' issue a warning or error
  respectively when orphan sections are found, and 'discard' will discard all
  orphan sections.

* Add support for LLVM plugin.

* Add --print-memory-usage option to report memory blocks usage.

* Add --require-defined option, it's like --undefined except the new symbol
  must be defined by the end of the link.

Changes in 2.25:

* PE binaries now once again contain real timestamps by default.  To disable
  the inclusion of a timestamp in a PE binary, use the --no-insert-timestamp
  command-line option.

* Replace support for openrisc and or32 with support for or1k.

* Add support for the --build-id command-line option to COFF based targets.

* x86/x86_64 pe-coff now supports the --build-id option.

* Add support for the Andes NDS32.

Changes in 2.24:

* Add LOG2CEIL() builtin function to the linker script language

* Add support for the Texas Instruments MSP430X processor.

* Add support for Altera Nios II.

* Add support for the V850E3V5 architecture.

* Add support for the Imagination Technologies Meta processor.

* --enable-new-dtags no longer generates old dtags in addition to new dtags.

* Remove linker support for MIPS ECOFF targets.

* Add ALIGN_WITH_INPUT to the linker script language to force the alignment of
  an output section to use the maximum alignment of all its input sections.

Changes in 2.23:

* Enable compressed debug section feature for x86/x86_64 pe-coff.

* Add support for the 64-bit ARM architecture: AArch64.

* Added SORT_NONE to the linker script language to disable section sorting.

* Add a linker-provided symbol when producing ELF output, '__ehdr_start'
  to point to the ELF file header (and nearby program headers) in the
  program's memory image.

* Add support for S12X processor.

* Add support for the VLE extension to the PowerPC architecture.

* Add support for the Freescale XGATE architecture.

* Add option -f FILE on AIX (for response file).

* Add support for the Renesas RL78 architecture.

* Add support for the Adapteva EPIPHANY architecture.

Changes in 2.22:

* --copy-dt-needed-entries is no longer enabled by default.  Instead
  --no-copy-dt-needed-entries is the default.

* INPUT_SECTION_FLAGS has been added to the linker script language
  to allow selection of input sections by section header section flags.

* Add support for the Tilera TILEPro and TILE-Gx architectures.

* Added SORT_BY_INIT_PRIORITY to the linker script language to permit
  sorting sections by numerical value of the GCC init_priority attribute
  encoded in the section name.

Changes in 2.21:

* Linker script expression evaluation is somewhat more sane.  This may
  break scripts that depend on quirks of the old expression evaluation.

* Turn off underscoring for x86_64 PE+-COFF targets.  For old behavior the
  option --enable-leading-mingw64-underscores can be used on configure of
  bfd.

* Add support for the TMS320C6000 (TI C6X) processor family.

* --add-needed renamed to --copy-dt-needed-entries in order to avoid confusion
  with --as-needed option.

* Extend .def file syntax by '== <ID>' for imports and exports. This allows
  to alias the import/export table name written in PE image.

* Add --exclude-all-symbols option to PE based linkers.  This prevents all
  symbols from automatically being exported.

* Add support for the Renesas RX processor.

* Add support for alpha-vms target.

Changes in 2.20:

* GNU/Linux targets now support the STB_GNU_UNIQUE symbol binding.  This is a
  GNU extension to the standard set of ELF symbol bindings.  The binding will
  be passed on to the dynamic linker which will make sure that in the entire
  process there is just one symbol with the given name and type in use.

* PE targets now support a GNU extension to allow the alignment of common
  common symbols to be specified.  This support uses custom options in
  the .drectve section, which will be disregarded by the native tools.

* PE targets now add primitive support for ELF version scripts; symbols
  are not versioned, but the local and global symbol visibility directives
  are respected when filtering symbols in auto-export mode.

* New option --no-export-dynamic to undo the effect of the -E and
  --export-dynamic options.

* ELF: --warn-alternate-em option to warn if an object has alternate
  ELF machine code.

* New script function REGION_ALIAS to add alias names to memory regions.

* PE targets no longer make use of the long section names PE extension to
  the COFF format when generating executable images, by default.  The old
  (slightly non-conformant) behaviour can still be invoked by using the
  new '--enable-long-section-names' command-line option.  It is also enabled
  automatically in the presence of un-stripped debug information, as GDB
  needs to be able to find the debug info sections by their full names.

* For GNU/Linux systems the linker will now avoid processing any relocations
  made against symbols of the STT_GNU_IFUNC type and instead emit them into
  the resulting binary for processing by the loader.

* --as-needed now links in a dynamic library if it satisfies undefined
  symbols in regular objects, or in other dynamic libraries.  In the
  latter case the library is not linked if it is found in a DT_NEEDED
  entry of one of the libraries already linked.

* Add a new command-line option, -Ttext-segment ADDR, for ELF targets
  to set the address of the first byte of the text segment.

* Add support for Sunplus score architecture.

* Add new option --use-nul-prefixed-import-tables to ld for PE targets to
  allow fallback to old import table generation with null element prefix.

* Windows PE systems now support a new --exclude-modules-for-implib option,
  allowing users to partition object files and archive members between a DLL
  and its associated import library as they are generated during linking.

* Add support for Lattice Mico32 (lm32) architecture.

* Add CR16 ELF --embedded-relocs (used to embedded relocations into binaries
  for Embedded-PIC code) option.

* Add to the PE/PE+ targets the support of two different kinds of
  pseudo-relocations.  They can be selected by the switches
  --enable-runtime-pseudo-reloc-v1 and --enable-runtime-pseudo-reloc-v2.
  For the switch --enable-runtime-pseudo-reloc it uses for 32-bit
  runtime pseudo relocation version one, for 64-bit the version two.

Changes in 2.19:

* Linker scripts support a new INSERT command that makes it easier to
  augment the default script.

* Linker script input section filespecs may now specify a file within an
  archive by writing "archive:file".

* The --sort-common switch now has an optional argument which specifies the
  direction of sorting.

* The M68K linker now supports multiple GOT generation schemes controlled via
  the --got=<type> command-line option.

* The ARM EABI linker will now generate stubs for function calls to symbols
  that are too far away.  The placement of the stubs is controlled by a new
  linker command-line option: --stub-group-size=N.

Changes in 2.18:

* Linker sources now released under version 3 of the GNU General Public
  License.

* ELF: New --build-id option to generate a unique per-binary identifier
  embedded in a note section.

* Added support for National Semicondutor CompactRISC (ie CR16) target.

* -l:foo now searches the library path for a filename called foo,
  without converting it to libfoo.a or libfoo.so.

* Add a new command-line option '--default-script=FILE' or '-dT FILE'
  which specifies a replacement for the built in, default linker
  script.

* ELF: Add -Bsymbolic-functions, --dynamic-list-cpp-new, which puts C++
  operator new and delete on the dynamic list, and --dynamic-list-data,
  builtin list for --dynamic-list, which puts global data symbols on the
  dynamic list.

* Add support for x86_64 PE+ target.

* Add support for Score target.

* ELF: Add --dynamic-list option to specify a list of global symbols
  whose references shouldn't be bound to the definition within the
  shared library, or a list of symbols which should be added to the
  symbol table in the executable.

* The default output section LMA has changed for allocatable sections from
  being equal to VMA, to keeping the difference between LMA and VMA the same as
  the previous output section in the same region.  This is a more useful
  default when using overlays and other cases where you specify an LMA
  differing from the VMA for some sections.

* New switch: --print-gc-sections to list any sections removed by garabge
  collection.

* ARM: Added --vfp11-denorm-fix option to work around an erratum in current
  VFP11 coprocessors.

Changes in 2.17:

* Support for the Infineon XC16X has been added by KPIT Cummins Infosystems.

* Modify the Linux linker search order to better match ld.so search order.
  Look for DT_NEEDED libraries in paths specified by ld.so.conf before
  searching the default directories, rather than vice versa.
  Use $prefix/etc/ld.so.conf if it exists, otherwise /etc/ld.so.conf.

* PE-COFF: Forward exports from DLL's can now be specified in .def files
  passed directly to ld.

* Support for the Z80 processor family has been added.

* Add support for the "@<file>" syntax to the command line, so that extra
  switches can be read from <file>.

Changes in 2.16:

* Support for the R_ARM_V4BX relocation as defined in the ARM AAELF
  specification has been added via the --fix-v4bx command-line option.

* New linker script construct AS_NEEDED(), which sets the --as-needed flag
  for input files listed inside of it.

* A new command-line option, --sysroot, can be used to override the
  default sysroot location.  It only applies to toolchains that were
  configured using --with-sysroot.

* New linker script functions: ORIGIN() and LENGTH() which return information
  about a specified memory region.

* Port to MAXQ processor contributed by HCL Tech.

* Added SEGMENT_START to the linker script language to permit the user to
  override the base address for a segment from the command-line.

* ELF: --warn-shared-textrel option to warn if adding a DT_TEXTREL to a shared
  object.

* Added SORT_BY_NAME and SORT_BY_ALIGNMENT to the linker script
  language to permit sorting sections by section name or section
  maximum alignment.

* Added a new linker command-line switch, --sort-section name|alignment,
  to sort sections by section name or maximum alignment.

* ELF: --add-needed/--no-add-needed options to control if a DT_NEEDED tag
  should be added when a shared library comes from DT_NEEDED tags.

* Support for the crx-elf target added.

* Support for the sh-symbianelf target added.

* A new linker command-line switch has been added which allows the hash table
  size to be set to a suitable prime value near to its argument.  This switch
  is --hash-size=<NUMBER>.  Also if the switch --reduce-memory-overheads is
  used, and --hash-size has not been used, then the default value will be set
  to 1021.

* Linker map files are now generated with an O(N) algorithm for finding symbols
  that are defined in each section.  This uses about 40% more memory for
  symbols than the old O(N^2) algorithm.  You can use the new
  --reduce-memory-overheads option to select the old algorithm; this option
  might also be used in the future to select similar tradeoffs.

Changes in 2.15:

* ELF: --as-needed/--no-as-needed options to control if a DT_NEEDED tag should
  be added only when a shared library is referenced.

* PE: --large-address-aware option to indicate executables support virtual
  addresses greater than 2 gigabytes.

* DWARF 2 support for i386pe added.

* The linker script operator DEFINED() will now yield 1 only for a symbol that
  is defined before the statement where DEFINED is used.

* The MIPS --embedded-relocs (used to embed relocations into binaries for
  Embedded-PIC code) is deprecated and will be removed in a future release.

* cr16c support added by NSC.

* m32r Linux (ELF) support added by Renesas.

* Improved linker's handling of unresolved symbols.  The switch
  --unresolved-symbols=<method> has been added to tell the linker when it
  should report them and the switch --warn-unresolved-symbols has been added to
  make reports be issued as warning messages rather than errors.

Changes in 2.14:

* Added support for Xtensa architecture.

* Added --with-sysroot configure switch to specify a target system root, for
  linking against a target filesystem image.

* Added --accept-unknown-linker-format to restore old linker behaviour (pre
  2.14) of silently accepting and linking in any files in an unknown binary
  file format.

* Added --no-omagic to undo the effects of the -N option.

* Support for Texas Instruments TMS320C4x and TMS320C3x series of
  DSP's contributed by Michael Hayes and Svein E. Seldal.

* Added --with-lib-path configure switch to specify default value for
  LIB_PATH.

* ARM port to QNX operating system added by Graeme Peterson.

* IP2K support added by Denis Chertykov.

Changes in 2.13:

* Support for the Fujitsu FRV architecture added by Red Hat. Models for FR400
  and FR500 included.

Changes in version 2.13:

* DEC VAX ELF support, by Matt Thomas.

Changes in version 2.12:

* Support for Don Knuth's MMIX, by Hans-Peter Nilsson.

* Support for the OpenRISC 32-bit embedded processor by OpenCores.

* Support for -z nocopyreloc in the x86 ELF linker, which disables
  production of copy relocs.  Warning: using this option may result in
  non-sharable applications.

* Support for -z combreloc in the ELF linker, which puts dynamic
  relocations against the same symbol together, so that dynamic linker
  can use an one-entry symbol lookup cache.

* Support for ELF SHF_MERGE section merging, by Jakub Jelinek.

Changes in version 2.11:

* Support for AMD x86-64 architecture, by Jan Hubicka, SuSE Labs.

* Support added for eliminating duplicate DWARF2 debug information by
  having the compiler generate the information in sections called
  .gnu.linkonce.wi.XXXX where XXXX is a checksum for the contents.  The
  linker then merges these sections together into the normal .debug_info
  section.

* The native ELF linker now searches the directories in DT_RUNPATH or
  DT_RPATH of a shared library for shared libraries needed by it.

* TI C54x support, by Timothy Wall.

* Added command-line switch --section-start to set the start address of any
  specified section.

* Added ability to emit full relocation information in linked executables,
  enabled by --emit-relocs.  Some post-linkage optimization tools need
  this information in order to be able to correctly identify and perform
  symbol relative addressing in the event of changes in section contents
  (instructions being added or deleted, extending data sections, etc.)

* Support for i860, by Jason Eckhardt (preliminary, alpha quality).

* Support for CRIS (Axis Communications ETRAX series).

* Support for PDP-11 and 2.11BSD a.out format, by Lars Brinkhoff.

Changes in version 2.10:

* Added AT> to the linker script language to allow load-time allocation of
  sections into regions.

* Added garbage collection of unused sections, enabled by --gc-sections.
  It does require a bit of backend support; currently implemented are
  arm-elf, avr-elf, d10v-elf, fr30-elf, i386-elf, m32r-elf, m68k-elf,
  mcore-elf, mips-elf, mn10300-elf, ppc-elf, sh-elf, sparc-elf, and v850-elf.
  Others will ignore the option.

* Added SORT to the linker script language to permit sorting sections by file
  name or section name.

* Added EXTERN to the linker script language as an equivalent to the -u
  command-line option.

* Added ASSERT to the linker script language.

* Added EXCLUDE_FILE to the linker script language for further control over
  wildcard file names.

* Added -O option to optimize linker output (as of this writing, this only
  affects ELF shared library generation).

* The -e option now accepts a number as well as a symbol name.

* Added --no-undefined option to disallow undefined symbols when creating a
  shared library.

* The linker now issues a warning, not an error, for an undefined symbol when
  using -Bsymbolic; use the new --no-undefined option to get the old
  behaviour.

* Added --demangle and --no-demangle options.

Changes in version 2.9:

* Added SQUAD to the linker script language.

* New option --no-warn-mismatch.

* The MEMORY command now parses the attributes to determine where sections that
  are not placed in a specific memory region are placed.

Changes in version 2.8:

* Linker scripts may now contain shell wildcard characters for file and section
  names.

* The linker now supports symbol versions in ELF.

* The NOCROSSREFS command was added to the linker script language.

* The LOADADDR expression was added to the linker script language.

* MAX and MIN functions were added to the linker script language.

* The OVERLAY construct was added to the linker script language.

* New option --warn-section-align to warn when the address of an output section
  changes due to alignment of an input section.

* New options --filter/-F and --auxiliary/-f.

Changes in version 2.7:

* New option --cref to print out a cross reference table.

* New option --wrap SYMBOL.

* New option --no-whole-archive, to turn off the effect of --whole-archive.

* Input sections assigned to the output section /DISCARD/ in the linker script
  are not included in the output file.

* The SunOS and ELF linkers now merge stabs debugging information which uses
  the N_BINCL and N_EINCL stab types.  This reduces the amount of debugging
  information generated.

Changes in version 2.6:

* When an ELF section name is representable as a C identifier (this is not true
of most ELF section names), the linker will automatically define symbols
__start_SECNAME and __stop_SECNAME, where SECNAME is the section name, at the
beginning and the end of the section.  This is used by glibc.

  Addendum: Current versions of the linker (at least for version 2.18 onwards
and possibly much earlier as well) place two restrictions on this feature:  The
symbols are only implemented for orphaned sections, not for explicitly placed
sections and they are PROVIDEd rather than being defined.

* When an ELF section named .gnu.warning is encountered in an input file, the
contents of the section are displayed as an error message, and the section is
not copied into the output file.  This is used by glibc.

* When an ELF section named .gnu.warning.SYMBOL is encountered in an input
file, and the symbol SYMBOL is referenced by some object file, the contents of
the section are displayed as an error message.  The section is not copied into
the output file, unless doing a relocatable or shared link.  This is used by
glibc.

* New options -split-by-reloc and -split-by-file.

* The linker now supports linking PIC compiled code on SPARC SunOS.  It can
also create SPARC SunOS shared libraries, and, like the native SunOS linker,
will do so whenever there is an undefined symbol in the link and neither the -e
nor the -r option was used.

* The -rpath option may be used on SunOS to set the list of directories to be
searched at run time.  This overrides the default of building the list from the
-L options.

* The COFF linker now combines debugging information for structs, unions, and
enums, so that even if the same type is defined in multiple input files it will
only be defined once in the output file.  The --traditional-format switch will
prevent this optimization.

Changes in version 2.5:

* The linker now supports linking against SunOS shared libraries.  It still can
not link SunOS PIC (Position Independent Code) files, so it can not be used to
generate shared libraries.

* The linker now supports linking against ELF shared libraries for the i386
(UnixWare) and SPARC (Solaris).  It can also link ELF PIC files, and can be
used to generate shared libraries.  Shared library generation is not well
tested; please report any problems encountered.  The linker is now enabled for
Solaris again.

* Eric Youngdale has contributed Linux support code, including linking against
Linux a.out shared libraries.  The linker produces Linux QMAGIC binaries.

* The ELF backend has been converted to the new linker code.  To use the new
ELF linker, each particular target requires a relocation function.  So far,
this function has been written for i386 (UnixWare), SPARC (Solaris) MIPS (Irix
5), and HPPA ELF targets.

* The -( (--start-group) and -) (--end-group) options have been added to
support searching a group of archives as though they were a single archive.
This can also be used in a linker script, as GROUP ( files ).

* When a file is named on the command line, and the linker does not recognize
it as an object file, the linker will now treat the file as a linker script
file.  A linker script named in this way augments, but does not replace, the
default linker script.

* The -warn-once option was added.  It causes the linker to only warn once per
undefined symbol, rather than once per reference.

* The COFF backend has been converted to the new linker code.  As with ELF, to
use the new linker, each particular target requires a relocation function.  So
far, this function has been written for the i386, m68k, a29k and SH targets.

* The -V flag was made a synonym for -v, for SVR4 compatibility.  The old -V
behaviour is available via --verbose.

Changes in version 2.4:

* New linker code, by Steve Chamberlain and Ian Taylor.  For a.out and ecoff
  formats (so far), this should result in considerable savings in time
  and memory used while linking; slightly poorer performance than
  before for formats not converted yet.

* Command-line parsing is no longer done with flex.  This means
  oddball characters in filenames won't get treated as argument
  separators.

* HP-PA ELF support, by Jeff Law.  (No SOM support yet.)

* Mach i386 support, by David Mackenzie.

* Irix 4 shared libraries are now supported (Irix 5 uses ELF, and ELF shared
  libraries are not yet supported).

* COFF shared libraries (as on SCO) should work as well.

* The linker is disabled for Solaris.  (Actually, it was in 2.3 also, I just
  forgot to note it.)  Some of their C library routines don't work when
  statically linked, and the GNU linker doesn't support dynamic linking yet.

Changes in version 2.3:

* Weak symbols are now supported.

* ELF support has been added.  The linker has been bootstrapped on
  UnixWare and Solaris.

* Alpha OSF/1 support has been added (non dynamic linking only).

Changes in version 2.2:

* The `bfd' library has been updated to reduce a.out-format string
  table size.  The effect of this is that files linked from many input
  files with duplicate symbols (`-g' debugging records, or identical
  static symbols) should be much smaller.

Changes in version 2.1:

* The ld -ySYMBOL flag (to trace references to SYMBOL) is now implemented.

* There is now support for writing ECOFF files, so ld and the
  other utilities should work on Risc/Ultrix and Irix.


Copyright (C) 2012-2021 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.

Local variables:
fill-column: 79
End:
