March 2017 GNU Toolchain Update
Wed Mar 15 14:29:00 GMT 2017
There is a lot to tell you about this time. First up is glibc:
The GNU C Library version 2.25 is now available. In this version you
* Provisional support for ISO/IEC TR 24731-1:2010 which provides
replacement versions of many of the memory allocation functions
that include bounds checking.
* Provisional support for ISO/IEC TR 24731-2:2010 which provides
replacement versions of many of the memory allocation functions
that use dynamically allocated memory to ensure that buffer
overflow do not occur.
* Provisional support for *some* of the new features that are
defined in ISO/IEC TS 18661-4:2015, which is an implementation of
the ISO/IEC/IEEE 60559:2011 floating point standard.
* Full support for ISO/IEC TS 18661-1:2014 standard which implements
support for binary floating-point arithmetic conforming to
ISO/IEC/IEEE 60559:2011. This does not cover decimal
floating-point arithmetic, nor does it cover many of the optional
features of IEC 60559.
* Glibc can now be built with the stack smashing protector enabled.
This means that distributions can build glibc with
--enable-stack-protector=strong defined and expect it to work.
* The function explicit_bzero, from OpenBSD, has been added to glibc.
It is intended to be used instead of memset() to erase sensitive
data after use; the compiler will not optimize out calls to
explicit_bzero even if they are "unnecessary" (in the sense that
no _correct_ program can observe the effects of the memory clear).
* On ColdFire, MicroBlaze, Nios II and SH3, the float_t type is now
defined to float instead of double. This does not affect the ABI of
any libraries that are part of the GNU C Library, but may affect the
ABI of other libraries that use this type in their interfaces.
* On x86_64, when compiling with -mfpmath=387 or -mfpmath=sse+387,
the float_t and double_t types are now defined to long double
instead of float and double. These options are not the default,
and this does not affect the ABI of any libraries that are part of
the GNU C Library, but it may affect the ABI of other libraries
that use this type in their interfaces, if they are compiled or
used with those options.
* The getentropy and getrandom functions, and the <sys/random.h>
header file have been added.
* The buffer size for byte-oriented stdio streams is now limited to
8192 bytes by default. Previously, on Linux, the default buffer
size on most file systems was 4096 bytes (and thus remains
unchanged), except on network file systems, where the buffer size
was unpredictable and could be as large as several megabytes.
* GDB pretty printers have been added for mutex and condition
variable structures in POSIX Threads. When installed and loaded in
gdb these pretty printers show various pthread variables in
human-readable form when read using the 'print' or 'display'
commands in gdb.
* A tunables feature has been added to allow tweaking of the runtime
for an application program. This feature can be enabled with the
'--enable-tunables' configure flag when glibc is built. The GNU C
Library manual has details on usage and README.tunables file has
instructions on adding new tunables to the library.
Meanwhile in the mainline development sources of glibc you can also
find these new features:
* Unicode 9.0.0 Support: Character encoding, character type info,
and transliteration tables are all updated to Unicode 9.0.0.
* The rpcgen, librpcsvc and related headers will only be built and
installed when glibc is configured with --enable-obsolete-rpc.
This allows alternative RPC implementations, like TIRPC, to be
used by default. Applications needing features missing from TIRPC
should consider the rpcsvc-proto project developed by Thorsten
GDB 7.12.1 has been released. This is a point release over 7.12
and so it only contains bug-fixes rather then new features, but if you
have been using 7.12 then it is worth upgrading to 7.12.1.
Version 5 of the DWARF debug standard has now been officially
released. This has improvements in many areas, such as: better data
compression, separation of debugging data from executable files,
improved description of macros and source files, faster searching for
symbols, improved debugging of optimized code, as well as numerous
improvements in functionality and performance.
If you want to read the new standard it is here:
Meanwhile in the development sources:
* GDB can now access to the PKU register on x86_64 GNU/Linux. The
register is added by the Memory Protection Keys for Userspace
feature which will be available in future Intel CPUs.
* Python scripts can now start, stop and access a running btrace
* GDB now supports recording and replaying rdrand and rdseed Intel 64
Newlib 2.5.0 has been released. The main change in this release is
* The ctype and string functions are now locale aware and
will behave correctly according to the current locale.
In addition the current development sources has another new feature:
* The locking routines can be retargetted at link time, allowing
applications the ability to override the lock functions.
GCC version 6.3 has been released. This is a bug-fix release, and
does not contain any new features.
GCC 7.0 is still undergoing regression fixing and is tentatively
scheduled for an April release.
Meanwhile in the development sources a new feature has been added:
* It is now possible add the column number into source locations in
DWARF debug information, alongside the regular file name and line
numbers. This feature has to be explicitly enabled however by
using the new command line option: -gcolumn-info.
Binutils 2.28 has now been released. Most of the new features in this
version have already been reported, but there is one significant
* 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.
Plus in the development sources we have:
* Add --merge-notes options to objcopy to reduce the size of notes in
a binary file by merging and deleting redundant notes.
* PowerPC gas now checks that the correct register class is used in
instructions. For instance, "addi %f4,%cr3,%r31" warns three times
that the registers are invalid.
That is it for now.
Due to various work constraints I am going to have to acknowledge that
I can no longer produce this blog as a monthly update, so I am
switching to a quarterly schedule instead. This will mean fewer, but
longer blogs, but hopefully it will still be interesting reading.
More information about the Gcc