-*- text -*-
* The x86 and x86_64 disassemblers now accept a command line option of
"-M annotate-immediates" which displays the symbol associated with immediate
values, should there be one.
* Objdump and readelf now have a --debug-dir=
option which can be used to
tell them where to find separate debug info files.
* Add --map-global-vars option to objdump which displays the location and type
of global variables in object files. This feature was developed by Guillaume
Vacherias .
Changes in 2.46:
* SFrame stack trace format now represents an undefined return address as
an SFrame FRE without any offsets. libsframe provides a new API to test
for RA undefined, which is used when dumping SFrame information (e.g. using
objdump and readelf) to show such FREs as "RA undefined".
* Add --got-contents option to readelf to display the contents of
Global Offset Table (GOT) sections.
* Internal changes to plugin support, and stricter target checking may result
in some errors being exposed in user options passed to the various binutils.
For example objcopy --target=TARGET now will only work if the input file is
for TARGET whereas prior versions of objcopy accepted other target input
files and produced a TARGET output. If you do in fact want the old
behaviour the correct usage is objcopy --output-target=TARGET.
* NaCl target support is removed.
* New versioned release of libsframe: libsframe.so.3. This release introduces
versioned symbols with version node name LIBSFRAME_3.0.
* objdump and readelf now support displaying SFrame Version 3 information.
The existing --sframe option can be used to display sections in the the new
V3 format. Display of SFrame Version 2 information continues to be supported
(NB: Emission and linking of SFrame Version 2 is discontinued).
Changes in 2.45:
* New versioned release of libsframe: libsframe.so.2. This release introduces
versioned symbols with version node name LIBSFRAME_2.0. Some new symbols
have been added to support the new flag SFRAME_F_FDE_FUNC_START_PCREL and
retrieving flags from SFrame decoder and encoder objects:
- Addition of sframe_decoder_get_flags,
sframe_decoder_get_offsetof_fde_start_addr, sframe_encoder_get_flags,
sframe_encoder_get_offsetof_fde_start_addr.
This release also includes backward-incompatible ABI changes:
- Removal of sframe_get_funcdesc_with_addr.
- Change in the behavior of sframe_decoder_get_funcdesc_v2,
sframe_encoder_add_funcdesc_v2 and sframe_encoder_write.
* On s390 64-bit (s390x), gas, ld, objdump, and readelf now support generating
and processing SFrame V2 stack trace information (.sframe). The assembler
generates SFrame info from CFI directives with option "--gsframe". The
linker generates SFrame info for the linker-generated .plt section and merges
all .sframe sections. Both objdump and readelf dump SFrame info with option
"--sframe[=]".
* For SFrame stack trace format, the function start address in each SFrame
FDE has a changed encoding: The 32-bit signed integer now holds the offset
of the start PC of the associated function from the sfde_func_start_address
field itself (instead of the earlier where it was the offset from the start
of the SFrame section itself). All SFrame sections generated by gas and ld
now default to this new encoding, setting the (new)
SFRAME_F_FDE_FUNC_START_PCREL flag.
Relocatable SFrame links are now fixed.
* Readelf now recognizes RISC-V GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS and
GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED for zicfiss and zicfilp
extensions.
* For RISC-V dis-assembler, the definition of mapping symbol $x is changed,
so the file needs to be rebuilt since 2.45 once used .option arch directives.
* The LoongArch disassembler now properly accepts multiple disassembly
options given by -M, such as "-M no-aliases,numeric". (Previously only the
first option took effect.)
Changes in 2.44:
* Support for Nios II targets has been removed except in the readelf utility,
as this architecture has been EOL'ed by Intel.
* RISC-V disassembly now supports -M,max option like QEMU to dump instruction
without checking architecture support as usual.
* gprofng:
Support for hardware event counters for Neoverse-N1, Ampere-1, and
Appliedmicro processors.
Changes in 2.43:
* The MIPS port now supports microMIPS MT Application Specific Extension
instructions for assembly and disassembly.
* Readelf now displays RELR relocations in full detail.
* Readelf now has a -j/--display-section option which takes the name or index
of a section and displays its contents according to its type. The option can
be used multiple times on the command line to display multiple sections.
* Base register 0 is now printed as "0" instead of "%r0" in s390 disassembly.
* When objdump or readelf are used to display the contents of a .eh_frame
section they will now also display the contents of the .eh_frame_hdr section,
if present.
* Support for the Maverick co-processor (via -mfpu=maverick) on Arm has been
removed. The CPU name ep9312 is still recognized, but treated as an alias
for arm920t.
* Support for the FPA co-procossor on Arm has been removed. In cases where a
legacy CPU previously defaulted to using this instruction set extension, the
assembler now defaults to no-FPU to avoid quietly misassembling legacy code.
* gprofng:
Improved the support for hardware event counters:
- Re-designed and streamlined the implementation.
- Defined a common set of events for ARM processors.
- Added specific events for AMD ZEN3 / ZEN4, and Intel Ice Lake processors.
Added a minimal support for RISC-V.
Changes in 2.42:
* The objdump program has a new command line option -Z/--decompress which
changes the behaviour of the -s/--full-contents option, forcing it to
decompress the contents of any compressed section before they are displayed.
In addition when objdump is displaying sections headers (via the -h/--headers
command line option) it will now display "COMPRESSED" in the Flags field of
any compressed section.
* The readelf program has a new command line option --extra-sym-info which
extends the information displayed by the --symbols option. When enabled
the display will include the name of the section referenced by a symbol's
index field (st_shndx). In the future more information may also be displayed
when this option is enabled.
* objcopy --set-section-flags now supports "large" to set SHF_X86_64_LARGE
for ELF x86-64 objects.
* objdump --visualize-jumps is now supported on s390 architecture.
* The s390 disassembly now optionally includes the instruction description as
comment with the s390-specific disassembler option "insndesc":
- For objdump it can be enabled with "objdump -M insndesc ...".
- In gdb it can be enabled with "set disassembler-options insndesc".
Changes in 2.41:
* The MIPS port now supports the Sony Interactive Entertainment Allegrex
processor, used with the PlayStation Portable, which implements the MIPS
II ISA along with a single-precision FPU and a few implementation-specific
integer instructions.
* Objdump's --private option can now be used on PE format files to display the
fields in the file header and section headers.
* New versioned release of libsframe: libsframe.so.1. This release introduces
versioned symbols with version node name LIBSFRAME_1.0. This release also
updates the ABI in an incompatible way: this includes removal of
sframe_get_funcdesc_with_addr API, change in the behavior of
sframe_fre_get_ra_offset and sframe_fre_get_fp_offset APIs.
* SFrame Version 2 is now the default (and only) format version supported by
gas, ld, readelf and objdump.
* Add command-line option, --strip-section-headers, to objcopy and strip to
remove ELF section header from ELF file.
* The RISC-V port now supports the following new standard extensions:
- Zicond (conditional zero instructions)
- Zfa (additional floating-point instructions)
- Zvbb, Zvbc, Zvkg, Zvkned, Zvknh[ab], Zvksed, Zvksh, Zvkn, Zvknc, Zvkng,
Zvks, Zvksc, Zvkg, Zvkt (vector crypto instructions)
* The RISC-V port now supports the following vendor-defined extensions:
- XVentanaCondOps
* The LoongArch port now supports the following extensions:
- LSX (Loongson SIMD eXtension; 128-bit vectors)
- LASX (Loongson Advanced SIMD eXtension; 256-bit vectors)
- LVZ (Loongson Virtualization extension)
- LBT (Loongson Binary Translation extension)
* The LoongArch disassembly output received the following tweaks:
- Colored output is now supported.
- Some pseudo-instructions are now shown in place of the canonical forms,
where semantics are equivalent. A disassembler option '-M no-aliases' is
added to disable the new behavior.
- Signed immediates are no longer printed with their hex representation.
- Unrecognized instruction words are now shown with '.word'.
Changes in 2.40:
* Objdump has a new command line option --show-all-symbols which will make it
display all symbols that match a given address when disassembling. (Normally
only the first symbol that matches an address is shown).
* Add --enable-colored-disassembly configure time option to enable colored
disassembly output by default, if the output device is a terminal. Note,
this configure option is disabled by default.
* DCO signed contributions are now accepted.
* objcopy --decompress-debug-sections now supports zstd compressed debug
sections. The new option --compress-debug-sections=zstd compresses debug
sections with zstd.
* addr2line and objdump --dwarf now support zstd compressed debug sections.
* The dlltool program now accepts --deterministic-libraries and
--non-deterministic-libraries as command line options to control whether or
not it generates deterministic output libraries. If neither of these options
are used the default is whatever was set when the binutils were configured.
* readelf and objdump now have a newly added option --sframe which dumps the
SFrame section.
Changes in 2.39:
* Add --no-weak/-W option to nm to make it ignore weak symbols.
* Add an option to objdump and readelf to prevent attempts to access debuginfod
servers when following links.
* objcopy --weaken, --weaken-symbol, and --weaken-symbols now make ELF
STB_GNU_UNIQUE symbols weak.
* objdump now supports syntax highlighting of disassembler output for some
architectures. Use the --disassembler-color=MODE command line flag, with
mode being either off, color, or extended-color.
Changes in 2.38:
* elfedit: Add --output-abiversion option to update ABIVERSION.
* Add support for the LoongArch instruction set.
* Tools which display symbols or strings (readelf, strings, nm, objdump)
have a new command line option which controls how unicode characters are
handled. By default they are treated as normal for the tool. Using
--unicode=locale will display them according to the current locale.
Using --unicode=hex will display them as hex byte values, whilst
--unicode=escape will display them as escape sequences. In addition
using --unicode=highlight will display them as unicode escape sequences
highlighted in red (if supported by the output device).
* readelf -r dumps RELR relative relocations now.
* Support for efi-app-aarch64, efi-rtdrv-aarch64 and efi-bsdrv-aarch64 has been
added to objcopy in order to enable UEFI development using binutils.
* ar: Add --thin for creating thin archives. -T is a deprecated alias without
diagnostics. In many ar implementations -T has a different meaning, as
specified by X/Open System Interface.
Changes in 2.37:
* The readelf tool has a new command line option which can be used to specify
how the numeric values of symbols are reported. --sym-base=0|8|10|16 tells
readelf to display the values in base 8, base 10 or base 16. A sym base of 0
represents the default action of displaying values under 10000 in base 10 and
values above that in base 16.
* Binutils now requires a C99 compiler and library to build.
* A new format has been added to the nm program. Specifying
--format=just-symbols (or just using -j) will tell the program to only
display symbol names and nothing else.
* A new command line --keep-section-symbols has been added to objcopy and
strip. This stops the removal of unused section symbols when the file is
copied. Removing these symbols saves space, but sometimes they are needed by
other tools.
* objcopy --weaken, --weaken-symbol and --weaken-symbols now make undefined
symbols weak on targets that support weak symbols.
* Readelf and objdump can now display and use the contents of .debug_sup
sections.
* Readelf and objdump will now follow links to separate debug info files by
default. This behaviour can be stopped via the use of the new -wN or
--debug-dump=no-follow-links options for readelf and the -WN or
--dwarf=no-follow-links options for objdump. Also the old behaviour can be
restored by the use of the --enable-follow-debug-links=no configure time
option.
The semantics of the =follow-links option have also been slightly changed.
When enabled, the option allows for the loading of symbol tables and string
tables from the separate files which can be used to enhance the information
displayed when dumping other sections, but it does not automatically imply
that information from the separate files should be displayed.
If other debug section display options are also enabled (eg
--debug-dump=info) then the contents of matching sections in both the main
file and the separate debuginfo file *will* be displayed. This is because in
most cases the debug section will only be present in one of the files.
If however non-debug section display options are enabled (eg --sections) then
the contents of matching parts of the separate debuginfo file will *not* be
displayed. This is because in most cases the user probably only wanted to
load the symbol information from the separate debuginfo file. In order to
change this behaviour a new command line option --process-links can be used.
This will allow di0pslay options to applied to both the main file and any
separate debuginfo files.
* Nm has a new command line option: --quiet. This suppresses "no symbols"
diagnostic.
Changes in 2.36:
* Update elfedit and readelf with LAM_U48 and LAM_U57 support.
* Nm has a new command line option: --ifunc-chars=CHARS. This specifies a
string of one or two characters. The first character is used as the type
character when displaying global ifunc symbols. The second character, if
present is used when displaying local ifunc symbols.
In addition a new configure time option --enable-f-for-ifunc-symbols has been
created, which if used will change nm's default characters for ifunc symbols
from i (both local and global) to F (global) and f (local).
* The ar tool's previously unused l modifier is now used for specifying
dependencies of a static library. The arguments of this option
(or --record-libdeps long form option) will be stored verbatim in the
__.LIBDEP member of the archive, which the linker may read at link time.
* Readelf can now display the contents of LTO symbol table sections when asked
to do so via the --lto-syms command line option.
* Readelf now accepts the -C command line option to enable the demangling of
symbol names. In addition the --demangle=