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=<style>, --no-demangle,
--recurse-limit and --no-recurse-limit options are also now availale.
* Add support for the SHF_GNU_RETAIN ELF section flag.
This flag specifies that the section should not be garbage collected by the
linker.
gas changes in 2.36:
* Add support for Intel AVX VNNI instructions.
* Add support for Intel HRESET instruction.
* Add support for Intel UINTR instructions.
* Support non-absolute segment values for i386 lcall and ljmp.
* When setting the link order attribute of ELF sections, it is now possible to
use a numeric section index instead of symbol name.
* Add support for Cortex-A78, Cortex-A78AE, Cortex-A78C and Cortex-X1 for
AArch64 and ARM.
Add support for Cortex-R82, Neoverse V1, and Neoverse N2 for ARM.
* Add support for ETMv4 (Embedded Trace Macrocell), ETE (Embedded Trace
Extension), TRBE (Trace Buffer Extension)and BRBE (Branch Record Buffer
Extension) system registers for AArch64.
* Add support for Armv8-R and Armv8.7-A AArch64.
* Add support for DSB memory nXS barrier, WFET and WFIT instruction for Armv8.7
AArch64.
* Add support for +flagm feature for -march in Armv8.4 AArch64.
* Add support for +ls64 feature for -march in Armv8.7 AArch64. Add atomic
64-byte load/store instructions for this feature.
* Add support for +pauth (Pointer Authentication) feature for -march in
AArch64.
* Add support for Intel TDX instructions.
* Add support for Intel Key Locker instructions.
* Added a .nop directive to generate a single no-op instruction in a target
neutral manner. This instruction does have an effect on DWARF line number
generation, if that is active.
* Removed --reduce-memory-overheads and --hash-size as gas now
uses hash tables that can be expand and shrink automatically.
* Add {disp16} pseudo prefix to x86 assembler.
* Add support for Intel AMX instructions.
* Configure with --enable-x86-used-note by default for Linux/x86.
* Add support for the SHF_GNU_RETAIN flag, which can be applied to
sections using the 'R' flag in the .section directive.
SHF_GNU_RETAIN specifies that the section should not be garbage
collected by the linker. It requires the GNU or FreeBSD ELF OSABIs.
ld changes in 2.36:
* Add libdep plugin, for linking dependencies of static libraries that
were recorded by ar in the __.LIBDEP archive member.
* Add --error-handling-script=<NAME> command line option to allow a helper
script to be invoked when an undefined symbol or a missing library is
encountered. This option can be suppressed via the configure time
switch: --enable-error-handling-script=no.
* Add -z lam-u48 to x86-64 ELF linker to generate LAM_U48 property.
* Add -z lam-u57 to x86-64 ELF linker to enerate LAM_U57 property.
* Add -z lam-u48-report=[none|warning|error] to report missing LAM_U48
property.
* Add -z lam-u57-report=[none|warning|error] to report missing LAM_U57
property.
* Add -z lam-report=[none|warning|error] to report missing LAM_U48 and
LAM_U57 properties.
* Add -z x86-64-{baseline|v[234]} to the x86 ELF linker to mark
x86-64-{baseline|v[234]} ISA level as needed.
* Add -z unique-symbol to avoid duplicated local symbol names.
* The creation of PE format DLLs now defaults to using a more secure set of DLL
characteristics.
* The linker now deduplicates the types in .ctf sections. The new
command-line option --ctf-share-types describes how to do this:
its default value, share-unconflicted, produces the most compact
output.
* The linker now omits the "variable section" from .ctf sections by
default, saving space. This is almost certainly what you want
unless you are working on a project that has its own analogue
of symbol tables that are not reflected in the ELF symtabs.
* Add support for the SHF_GNU_RETAIN ELF section flag.
This flag specifies that the section should not be garbage collected by the
linker.
This was added in 2014 in r1.57 along with patches to add OpenBSD/amd64
5.4 support, which have long been removed.
In OpenBSD 6.2, the default compiler on amd64 was switched from GCC to
Clang, which does not support this option and emits unknown warning
option '-Wno-bounded' warnings.
Looks OK to kamil@
Changes in 2.35:
* Changed readelf's display of symbol names when wide mode is not enabled.
If the name is too long it will be truncated and the last five characters
replaced with "[...]". The old behaviour of displaying 5 more characters but
not indicating that truncation has happened can be restored by the use of the
-T or --silent-truncation options.
* X86 NaCl target support is removed.
* The readelf tool now has a -L or --lint or --enable-checks option which turns
on warning messages about possible problems with the file(s) being examined.
These checks include things like zero-sized sections, which are allowed by
the ELF standard but which nevertheless might be of concern if the user
was expecting them to actually contain something.
The binutils project released the binutils-2.34 tarball without pre-generated
documentation included due to a bug in their Makefiles. This was fixed in the
source code 2 months ago, but they still have not issued a new tarball since
then, either via a new release or a snapshot.
Building the documentation ourselves is untenable, as it would require pulling
in perl and gtexinfo which would create major circular dependency headaches.
So we're left with no option but to remove the documentation completely until
there is a new release. Note that until now we've actually been shipping
empty files, as we were ignoring perl errors that were trying to create the
docs.
While here tidy up a few things. Bump PKGREVISION.
Currently libctf builds but does not install on Linux.
The Linux implementation of libctf is very new, so we disable it in pkgsrc
for now pending future updates and thorough testing.
pkgsrc changes:
MAKE_JOBS_SAFE=no has been removed since binutils built fine with
MAKE_JOBS=3 on NetBSD-8.0-x86_64.
In some of the patches, all context lines have been removed since the raw
change is expressive enough without any context.
The patch for popcount is no longer necessary since the function has been
renamed in bfd.
upstream changes since 2.26:
Changes in 2.34:
* Binutils now supports debuginfod, an HTTP server for distributing
ELF/DWARF debugging information as well as source code. When built with
debuginfod, readelf and objdump can automatically query debuginfod
servers for separate debug files when they otherwise cannot be found.
To build binutils with debuginfod, pass --with-debuginfod to configure.
This requires libdebuginfod, the debuginfod client library. debuginfod
is distributed with elfutils, starting with version 0.178. For more
information see https://sourceware.org/elfutils.
* Add --output option to the "ar" program. This option can be used to specify
the output directory when extracting members from an archive.
* Add --keep-section option to objcopy and strip. This option keeps the
specified section from being removed.
* Add visualization of jumps inside a function by drawing an ascii character
graph between the address and the disassembler column. Enabled via the
--visualize-jumps command line option for objdump. Currently supported by
the x86, x86_64, and ARM targets. The output looks something like this:
c6: | | \----------> be 00 00 00 00 mov $0x0,%esi
cb: | | /----> 48 8b 3d 00 00 00 00 mov 0x0(%rip),%rdi # d2 <main+0xd2>
d2: | | | 31 c0 xor %eax,%eax
d4: | | | /-- e8 00 00 00 00 callq d9 <main+0xd9>
d9: | | | \-> bf 02 00 00 00 mov $0x2,%edi
de: | +-----------|----- e8 00 00 00 00 callq e3 <main+0xe3>
e3: | \-----------|----> 48 89 da mov %rbx,%rdx
e6: | | be 00 00 00 00 mov $0x0,%esi
eb: | \----- eb de jmp cb <main+0xcb>
ed: \-------------------> 48 8b 16 mov (%rsi),%rdx
Additional arguments to the --visualize-jumps option add colors to the
output.
Changes in 2.33:
* Add --source-comment[=<txt>] option to objdump which if present,
provides a prefix to source code lines displayed in a disassembly.
* Add --set-section-alignment <section-name>=<align> option to objcopy to allow
the changing of section alignments.
* Add --verilog-data-width option to objcopy for verilog targets to control
width of data elements in verilog hex format.
* Add support for the Armv8.1-M Mainline and M-profile Vector Extension (MVE)
instructions.
* The separate debug info file options of readelf (--debug-dump=links
and --debug-dump=follow) and objdump (--dwarf=links and
--dwarf=follow-links) will now display and/or follow multiple links if
more than one are present in a file. (This usually happens when gcc's
-gsplit-dwarf option is used).
In addition objdump's --dwarf=follow-links now also affects its other
display options, so that for example, when combined with --syms it will
cause the symbol tables in any linked debug info files to also be
displayed. In addition when combined with --disassemble the --dwarf=
follow-links option will ensure that any symbol tables in the linked
files are read and used when disassembling code in the main file.
* Add support for dumping types encoded in the Compact Type Format
to objdump and readelf.
Changes in 2.32:
* The addr2line, c++filt, nm and objdump tools now have a limit on the
maximum amount of recursion that is allowed whilst demangling strings.
The value for this limit is defined by the DEMANGLE_RECRUSE_LIMIT
constant declared in the include/demangle.h header file. At the time
of writing this constant has the value of 2048.
The --no-recurse-limit option can be used to remove the limit, restoring
the behaviour of earlier versions of these tools. This may be needed in
order to dmangle truly complicated names, but it also leaves the tools
vulnerable to stack exhaustion from maliciously constructed mangled names.
* Objdump's --disassemble option can now take a parameter, specifying the
starting symbol for disassembly. Disassembly will continue from this
symbol up to the next symbol or the end of the function.
* The MIPS port now supports the Loongson 2K1000 processor which implements
the MIPS64r2 ISA, the Loongson-mmi ASE, Loongson-cam ASE, Loongson-ext ASE,
Loongson-ext2 ASE and MSA ASE instructions. Add -march=gs264e option for
Loongson 2K1000 processor.
* The MIPS port now supports the Loongson 3A2000/3A3000 processor which
implements the MIPS64r2 ISA, the Loongson-mmi ASE, Loongson-cam ASE,
Loongson-ext ASE and Loongson-ext2 ASE instructions. Add -march=gs464e
option for Loongson 3A2000/3A3000 processor.
* The MIPS port now supports the Loongson 3A1000 processor, aka Loongson3a,
which implements the MIPS64r2 ISA, the Loongson-mmi ASE, Loongson-cam ASE
and Loongson-ext ASE instructions. Add -march=gs464 option for Loongson
3A1000 processor, The -march=loongson3a is an alias of -march=gs464 for
compatibility.
* The size tool now has a new output format '--format=GNU' or '-G'. The
results are displayed in a similar manor to the default berkeley layout,
except read-only data is counted in the data column, not the text column.
Additionally the total is only included once.
Changes in 2.31:
* Add support for disassembling netronome Flow Processor (NFP) firmware files.
* The AArch64 port now supports showing disassembly notes which are emitted
when inconsistencies are found with the instruction that may result in the
instruction being invalid. These can be turned on with the option -M notes
to objdump.
* The AArch64 port now emits warnings when a combination of an instruction and
a named register could be invalid.
* Added O modifier to ar to display member offsets inside an archive
Changes in 2.30:
* Add --debug-dump=links option to readelf and --dwarf=links option to objdump
which displays the contents of any .gnu_debuglink or .gnu_debugaltlink
sections.
Add a --debug-dump=follow-links option to readelf and a --dwarf=follow-links
option to objdump which causes indirect links into separate debug info files
to be followed when dumping other DWARF sections.
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.
RHEL/CentOS place standard libraries in /lib64 and /usr/lib64.
The binutils Makefile had a hard-coded --libpath=/lib:/usr/lib.
This patch prepends the lib64 directories if they exist.
OK wiz@
* Remove merged patches
Changelog:
gas:
* Add a configure option --enable-x86-relax-relocations to decide whether
x86 assembler should generate relax relocations by default. Default to
yes, except for x86 Solaris targets older than Solaris 12.
* New command line option -mrelax-relocations= for x86 target to control
whether to generate relax relocations.
Changelog:
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.
The gold linker is overly pedantic for dynamic references to symbols
with hidden visibility. It will spew error messages about weak symbols
in libc.so that ld.bfd does not complain about. Until the bug is resolved
disable the hidden symbol warnings. These warning also cause > 200
false failures in the gcc gnat.dg testsuite.
https://sourceware.org/bugzilla/show_bug.cgi?id=15574
This patch will keep the internal symbol warnings but suppress those
regaring symbols with hidden visibility because they aren't considered
errors by the bfd linker.
The Gold linker defaults to the use of --new-dtags which uses DT_RUNPATH
instead of DT_RPATH. In previous version of binutils, --new-dtags would
write set both DT_RUNPATH and DT_PATH, but not anymore. The problem is
that neither NetBSD nor OpenBSD runtime linkers properly handle it
AFAICT. Use macros to make DT_RPATH get set when -rpath switch is used
so that linked libraries can get found on these platforms.
Similarly, it appears that DT_INIT_ARRAY tags are also not handled by
rtld, so don't use these tags by default otherwise C++ will not link
on these platforms.
The copy-as-needed attribute has been left at its binutils default of
--no-copy-dt-needed. This has been the default since binutils 2.22.
The gold linker isn't a default option on binutils. Change the Makefile
to make gold build on recent *BSD. Tested on NetBSD 6.1.4 and OpenBSD 5.5.
Gold is known to build on FreeBSD although FreeBSD 10 may need additional
patches. Gold is part of the system binutils on DragonFly.
binutils:
Changes in 2.24:
* Objcopy now supports wildcard characters in command line options that take
section names.
* Add support for Altera Nios II.
gas:
Changes in 2.24:
* Add support for the Texas Instruments MSP430X processor.
* Add -gdwarf-sections command line option to enable per-code-section
generation of DWARF .debug_line sections.
* Add support for Altera Nios II.
* Add support for the Imagination Technologies Meta processor.
* Add support for the v850e3v5.
* Remove assembler support for MIPS ECOFF targets.
ld:
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.
a) refer 'perl' in their Makefile, or
b) have a directory name of p5-*, or
c) have any dependency on any p5-* package
Like last time, where this caused no complaints.