-*- text -*-

Changes in binutils 2.10:

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

* dlltool now supports the IMPORTS command.

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

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

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 relocateable 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:
