-*- text -*-

Changes in 2.29:

* The MIPS port now supports microMIPS eXtended Physical Addressing (XPA)
  instructions for assembly and disassembly.

* The MIPS port now supports the microMIPS Release 5 ISA for assembly and
  disassembly.

* The MIPS port now supports the Imagination interAptiv MR2 processor,
  which implements the MIPS32r3 ISA, the MIPS16e2 ASE as well as a couple
  of implementation-specific regular MIPS and MIPS16e2 ASE instructions.

* The SPARC port now supports the SPARC M8 processor, which implements the
  Oracle SPARC Architecture 2017.

* The MIPS port now supports the MIPS16e2 ASE for assembly and disassembly.

* Add support for ELF SHF_GNU_MBIND and PT_GNU_MBIND_XXX.

* Add support for the wasm32 ELF conversion of the WebAssembly file format.

* Add --inlines option to objdump, which extends the --line-numbers option
  so that inlined functions will display their nesting information.

* Add --merge-notes options to objcopy to reduce the size of notes in
  a binary file by merging and deleting redundant notes.

* Add support for locating separate debug info files using the build-id
  method, where the separate file has a name based upon the build-id of
  the original file.

Changes in 2.28:

* This version of binutils fixes a problem with PowerPC VLE 16A and 16D
  relocations which were functionally swapped, for example,
  R_PPC_VLE_HA16A performed like R_PPC_VLE_HA16D while R_PPC_VLE_HA16D
  performed like R_PPC_VLE_HA16A.  This could have been fixed by
  renumbering relocations, which would keep object files created by an
  older version of gas compatible with a newer ld.  However, that would
  require an ABI update, affecting other assemblers and linkers that
  create and process the relocations correctly.  It is recommended that
  all VLE object files be recompiled, but ld can modify the relocations
  if --vle-reloc-fixup is passed to ld.  If the new ld command line
  option is not used, ld will ld warn on finding relocations inconsistent
  with the instructions being relocated.

* The nm program has a new command line option (--with-version-strings)
  which will display a symbol's version information, if any, after the
  symbol's name.

* The ARC port of objdump now accepts a -M option to specify the extra
  instruction class(es) that should be disassembled.

* The --remove-section option for objcopy and strip now accepts section
  patterns starting with an exclamation point to indicate a non-matching
  section.  A non-matching section is removed from the set of sections
  matched by an earlier --remove-section pattern.

* The --only-section option for objcopy now accepts section patterns
  starting with an exclamation point to indicate a non-matching section.
  A non-matching section is removed from the set of sections matched by
  an earlier --only-section pattern.

* New --remove-relocations=SECTIONPATTERN option for objcopy and strip.
  This option can be used to remove sections containing relocations.
  The SECTIONPATTERN is the section to which the relocations apply, not
  the relocation section itself.

Changes in 2.27:

* Add a configure option, --enable-64-bit-archive, to force use of a
  64-bit format when creating an archive symbol index.

* Add --elf-stt-common= option to objcopy for ELF targets to control
  whether to convert common symbols to the STT_COMMON type.

Changes in 2.26:

* Add option to objcopy to insert new symbols into a file:
  --add-symbol <name>=[<section>:]<value>[,<flags>]

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

* Extend objcopy --compress-debug-sections option to support
  --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi] for ELF
  targets.

* Add --update-section option to objcopy.

* Add --output-separator option to strings.

Changes in 2.25:

* Add --data option to strings to only print strings in loadable, initialized
  data sections.  Change the default behaviour to be --all, but add a new
  configure time option of --disable-default-strings-all to restore the old
  default behaviour.

* Add --include-all-whitespace to strings.

* Add --dump-section option to objcopy.

* Add support for the Andes NDS32.

Changes in 2.24:

* Objcopy now supports wildcard characters in command line options that take
  section names.

* Add support for Altera Nios II.

Changes in 2.23:

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

* Add support for x64 Windows target of the delayed-load-library.

* Add support for the Renesas RL78 architecture.

Changes in 2.22:

* Add support for displaying the contents of .debug.macro sections.

* Add --preprocessor-arg option to windres to specify additional options
  passed to preprocessor.

* Add --dwarf-start and --dwarf-end to readelf and objdump.  These are used by
  the new Emacs mode, see dwarf-mode.el.

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

changes in 2.21:

* Add --interleave-width option to objcopy to allowing copying a range of
  bytes from the input to the output with the --interleave option.

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

* Readelf can now display ARM unwind tables (.ARM.exidx / .ARM.extab) using
  the -u / --unwind option.

* Add --dyn-syms to readelf to dump dynamic symbol table.

* A new tool - elfedit - has been added to directly manipulate ELF format
  binaries.

* Add to dlltool .def file feature of aliasing PE internal symbol name by
  '== <ID>' option.

* Add a new command line option -a / --addresses to addr2line to display the
  address before function name or source filename.

* Add a new command line option -p / --pretty-print to addr2line to have
  a more human readable output.

* The hppa/som targets can now be compiled on any host.

Changes in 2.20:

* Add support for delay importing to dlltool.  Use the --output-delaylib <file>
  switch to create a delay-import library.  The resulting app will load the dll
  as soon as the first function is called.  It will link to __delayLoadHelper2()
  from the static delayimp library, which will import LoadLibraryA and
  GetProcAddress from kernel32.

* Add a new command line option, --insn-width=WIDTH, to objdump to specify
  number of bytes to be displayed on a single line when disassembling
  instructions.

* Readelf can now display the relocated contents of a section as a sequence
  of bytes via the --relocated-dump=<name|number> command line option.

* The gprof program has been given a new command line option:
  --external-symbols-table=<filename> which reads in symbols from a specified
  file.

* The plugin target has been added to bfd. It can load the same shared objects
  used by gold and uses them to provide basic support for new file formats.

* The verilog memory hex dump file format is now supported as an output format
  for objcopy.

* Add --file-alignment, --heap, --image-base, --section-alignment,
  --stack and --subsystem command line options to objcopy, which will
  set PE optional header.

* Option --dwarf/-W of objdump is now as flexible as readelf --debug-dump/-w.

* --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.

* Added --prefix=PREFIX and --prefix-strip=LEVEL switches to objdump to
  add absolute paths for -S.

* Add new option --use-nul-prefixed-import-tables to dlltool to allow fall-
  back to old import table generation with null element prefix.

* Added --identify-strict switch to cause --identify <implib> to
  report an error when the import library is associated with
  multiple DLLs.

* Added --identify <implib> option to dlltool, which determines the
  name of the DLL associated with the specified <implib>.

* Support for PowerPC booke64 instructions has been removed.  The assembler no
  longer accepts -mbooke32 or -mbooke64 and the disassembler no longer accepts
  -Mbooke32 or -Mbooke64.  Instead, -mbooke and -Mbooke should be used.

Changes in 2.19:

* Added -wL switch to dump decoded contents of .debug_line.

* Added support for "thin" archives which contain pathnames pointing to
  object files rather than the files themselves and which contain a
  flattened symbol index for all objects, and archives, which have been
  added to the archive.

* Added -F switch to objdump to include file offsets in the disassembly.

* Added -c switch to readelf to allow string dumps of archive symbol index.

* Support for SSE5 has been added to the i386 port.

* Added -p switch to readelf to allow string dumps of sections.

Changes in 2.18:

* Resolved 37 coding problems in bfd including static array overruns, null
  pointer dereferences and use of a malloc buffer after it has been freed, as
  revealed by static analysis donated by Coverity, Inc. (http://scan.coverity.com).

* The binutils sources are now released under version 3 of the GNU General
  Public License.

* A new tool "windmc" has been added for some targets.  This is a message
  compiler which attempts to be compatible with the MS version.

* Add codepage support to the windres tool.  It now supports many new
  resource types (e.g. MANIFEST, TOOLBAR, etc).  The output generation
  for binary files is done now via bfd itself.  The endianess problems
  for different hosts are solved.  Dumps of .res files can now be
  re-compiled by windres without lossing resources or compilation errors.
  Some problems on dialog resource translations are corrected.

* Add --extract-symbol command line option to objcopy, which will
  strip everything out of an ordinary object file or executable except
  for its symbol table.  Files containing just symbols can be useful
  to some OSes.

Changes in 2.17:

* Add "-x NAME" to readelf in addition to "-x NUMBER".

* Add -i and -t switches to cxxfilt.  -i disables the display of implementation
  specific extra demangling information (if any) and -t disables the demangling
  of types.

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

* Add "-W/--dwarf" to objdump to display the contents of the DWARF
  debug sections.

* Add "-t/--section-details" to readelf to display section details.
  "-N/--full-section-name" is deprecated.

* powerpc-linux ld now supports a variant form of PLT and GOT for the security
  conscious.  This form will automatically be chosen when ld detects that all
  code in regular object files was generated by gcc -msecure-plt.  The old PLT
  and GOT may be forced by a new ld option, --bss-plt.

* Add "-i/--inlines" to addr2line to print enclosing scope information
  for inlined function chains, back to first non-inlined function.

* Add "-N/--full-section-name" to readelf to display full section name.

* Add "-M entry:<addr>" switch to objdump to specify a function entry address
  when disassembling VAX binaries.

* Add "--globalize-symbol <name>" and "--globalize-symbols <filename>" switches
  to objcopy to convert local symbols into global symbols.

* gprof now allows input files to have histogram records for
  several memory ranges, provided those ranges are disjoint.

Changes in 2.16:

* Add "-g/--section-groups" to readelf to display section groups.

* objcopy recognizes two new options --strip-unneeded-symbol and
  --strip-unneeded-symbols, namely for use together with the wildcard
  matching the original --strip-symbol/--strip-symbols provided, but
  retaining any symbols matching but needed by relocations.

* readelf can now display address ranges from .debug_range sections.  This
  happens automatically when a DW_AT_range attribute is encountered.  The
  command line switch --debug-dump=Ranges (or -wR) can also be used to display
  the contents of the .debug_range section.

* nm and objdump now have a switch "--special-syms" to enable the displaying of
  symbols which the target considers to be special.  By default these symbols
  are no longer displayed.  Currently the only special symbols are the Mapping
  symbols used by the ARM port to mark transitions between text and data and
  between ARM and THUMB code.

* dlltool has a switch "--ext-prefix-alias <prefix>" to generate additional
  import and export symbols with <preifx> prepended to them.

Changes in 2.15:

* objcopy for MIPS targets now accepts "-M no-aliases" as an option to the
  disassembler to print the "raw" mips instruction mnemonic instead of some
  pseudo instruction name.  I.E. print "daddu" or "or" instead of "move",
  "sll" instead of "nop", etc.

* objcopy and strip can now take wildcard patterns in symbol names specified on
  the command line provided that the --wildcard switch is used to enable them.

* readelf can now parse archives.

* objdump now accepts --debugging-tags to print the debug information in a
  format compatible with ctags tool.

* objcopy and strip now accept --only-keep-debug to create a file containing
  those sections that would be stripped out by --strip-debug.  The idea is that
  this can be used in conjunction with the --add-gnu-debuglink switch to create
  a two part program distribution - one a stripped executable and the other the
  debugging info.

* objcopy now accepts --add-gnu-debuglink=<file> to insert a .gnu_debuglink
  section into a (presumably stripped) executable.  This allows the debug
  information for the file to be held in a separate file.

* BFD marks the sections .comment and .note as 'n' in the BSD/POSIX
  single-character representation.  This can be checked by running nm
  with the -a switch.

Changes in 2.14:

* Added --info switch to objcopy and strip.

* Support for Vitesse IQ2000 added by Red Hat.

* Added 'S' encoding to strings to allow the display of 8-bit characters.

* Added --prefix-symbols=<text>, --prefix-sections=<text> and
  --prefix-alloc-sections=<text> to objcopy.

* readelf can handle the extensions to the DWARF2 spec used by the Unified
  Parallel C compiler.

* BFD no longer declares a "boolean" type, to avoid clashes with other
  headers that declare the same.  Users of BFD should replace boolean,
  false and true, with int, 0 and 1, or define their own boolean type.

* Support for IP2K 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.12:

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

* size: Add --totals to display summary of sizes (Berkeley format only).

* readelf: Add --wide option to not break section header or segment listing
  lines to fit into 80 columns.

* strings: Add --encoding to display wide character strings.  By Markus Kuhn.

* objcopy: Add --rename-section to change section names.

* readelf: Support added for DWARF 2.1 extensions.  Support added for
  displaying the contents of .debug.macinfo sections.

* New command line switches added to objcopy to allow symbols to be kept as
  global symbols, and also to specify files containing lists of such symbols.
  by Honda Hiroki.

* Support for OpenRISC by Johan Rydberg.

* New command line switch to objcopy --alt-machine-code which creates a binary
  with an alternate machine code if one is defined in the architecture
  description.  Only supported for ELF targets.  By Alexandre Oliva.

* New command line switch to objcopy -B (or --binary-architecture) which sets
  the architecture of the output file to the given argument.  This option only
  makes sense, if the input target is binary.  Otherwise it is ignored.
  By Stefan Geuken.

* Support for PDP-11 by Lars Brinkhoff.

Changes in binutils 2.11:

* Add support for ARM v5t and v5te architectures and Intel's XScale ARM
  extenstions.

* Add --srec-len and --srec-forceS3 command line switch to objcopy.
  By Luciano Gemme.

* Support for the MIPS32, by Anders Norlander.

* Support for the i860, by Jason Eckhardt.

* Support for CRIS (Axis Communications ETRAX series).

Changes in binutils 2.10:

* Support for 64-bit ELF on HPPA.

* New command line switch to objdump --file-start-context which shows the
  entire file contents up to the source line first encountered for a given
  file.

* New command line switch to objdump -M (or --disassembler-options) which takes
  a parameter which can then be interpreted on a per-target basis by the
  disassembler.  Used by ARM targets to select register name sets, ISA, APCS or
  raw verions.

* objdump support for -mi386:intel which causes disassembly to be displayed
  with intel syntax.

* New program: readelf.  This displays the contents of ELF format files,
  regardless of target machine.

* objcopy now takes --change-section-lma, --change-section-vma, and
  --change-section-address options.  The old --adjust-section-vma option is
  equivalent to --change-section-address.  The other --adjust-* options are now
  renamed to --change-*, although --adjust-* continues to work.

* objcopy has a --redefine-sym option that lets you rename symbols.

* objcopy now takes a -j/--only-section option to copy only the specified
  sections.

* dlltool now supports the IMPORTS command.

* dlltool now takes --export-all-symbols, --no-export-all-symbols,
  --exclude-symbols, and --no-default-excludes options.

Changes in binutils 2.9:

* Added windres program, which can be used to manipulate resources in WIN32
  files as used on Windows 95 and Windows NT.

* The objcopy --gap-fill and --pad-to options operate on the LMA rather than
  the VMA of the sections.

* Added S modifier to ar to not build a symbol table.

Changes in binutils 2.8:

* The objdump disassembly format has been changed, and hopefully improved.  Use
  the new --prefix-addresses option to get the old format.  There are also new
  --disassemble-zeroes and --no-show-raw-insn options which affect disassembler
  output.

* Formats may now be specified as configuration triplets.  For example,
  objdump -b i386-pc-linux.  The triplets are not passed through config.sub,
  so they must be in canonical form.

* Added new addr2line program.  This uses the debugging information to convert
  an address into a file name and line number within a program.

* Added --change-leading-char argument to objcopy.

* Added --weaken argument to objcopy.

* objdump --dynamic-reloc now works on ELF executables and shared libraries.

* Added --adjust-vma option to objdump.

* Added -C/--demangle option to objdump.

* Added -p/--preserve-dates option to strip and objcopy.

Changes in binutils 2.7:

* Added --enable-shared and --enable-commonbfdlib options to configure.

* Added --debugging argument to objdump and objcopy.

* Added --defined-only argument to nm.

* Added --remove-leading-char argument to objcopy.

* The objdump --line-numbers option is now meaningful with --reloc.

* Added --line-numbers option to nm.

* Added --endian/-EB/-EL option to objdump.

* Added support for Alpha OpenVMS/AXP.

Changes in binutils 2.6:

* Added -N/--strip-symbol and -K/--keep-symbol arguments to strip and objcopy.

* Added several arguments to objcopy to provide some control over how the new
  file is laid out in memory.  Also added binary output format to BFD to permit
  generating plain binary files.

* Added --start-address and --stop-address options to objdump.

* ar and ranlib now work on AIX.  The tools are now built by default on AIX.

Changes in binutils 2.5:

* Changed objdump -dr to dump the relocs interspersed with the assembly
  listing, for a more useful listing of relocatable files.

* Changed objdump -d/--disassemble to only disassemble SEC_CODE sections.
  Added -D/--disassemble-all option to disassemble all sections.

* Added --size-sort option to nm.

* strip and objcopy should now be able to handle dynamically linked ELF
  executables.

Changes in binutils 2.4:

* Support for HP-PA (by Jeff Law), i386 Mach (by David Mackenzie), RS/6000 and
  PowerPC (except ar and ranlib; by Ian Taylor).

* Support for Irix 5.

* Programs `strip' and `objcopy' will not attempt to write dynamically linked
  ELF output files, since BFD currently can't create them properly.

Changes in binutils 2.3:

* A new --stabs argument has been added to objdump to dump stabs sections in
  ELF and COFF files.

* A new program, nlmconv, has been added.  It can convert object files into
  Novell NetWare Loadable Modules.

* The strings program has been added.

Changes in binutils 2.2:

* The 'copy' program has been renamed to 'objcopy', for consistency with
  'objdump', and because 'copy' might more plausibly be used as a synonym for
  'cp'.

* The new stand-alone program c++filt is a filter that converts encoded
  (mangled) C++ assembly-level identifiers to user-level names.  (Note: This
  may get moved to the gcc distribution.)

* nm -o on an archive now prefixes each line with the archive name, matching
  the output from BSD nm.

* ar (and ld) can now read (but not write) BSD4.4-style archives.

* New support for H8500, Z8000, and the Hitach SH.

* Dis-assembler interface changed to allow sharing with gdb.

* There is new Elf code, but it is not yet ready for general use.

* There is the beginnings of a test suite.

Changes in binutils 2.1:

* There is now support for writing ECOFF files, so ld and the other utilities
  should work on Risc/Ultrix and Irix.  Please let us know how well this works.

* ar now automatically creates a symbol table (a __.SYMDEF member, in the BSD
  version), if there are any object files in the archive.  So running ranlib is
  now redundant (unless the non-standard q command is used).  This is required
  for Posix.2 conformance.

* The archive-reading code now reads both BSD-style and SYSV-style archives
  independently of the selected target format.  This is to encourage people to
  switch to SYSV-format, which has a number of advantages.

* The strip and copy programs now have options to remove debug-symbols only
  and/or local symbols only.  They now also support long options.


Copyright (C) 2012-2017 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:
