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


Local variables:
fill-column: 79
End:
