-*- text -*-

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.

* 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-2016 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:
