Appendix A. Changes in Red Hat Developer Toolset

A.1. Changes in Version 7.1

The sections below document features and compatibility changes introduced in Red Hat Developer Toolset 7.1.

A.1.1. Changes in GCC

Red Hat Developer Toolset 7.1 is distributed with GCC 7.3.1, which provides a number of bug fixes and improvements over the version included in the previous release of Red Hat Developer Toolset.

A.1.1.1. Changes Since Red Hat Developer Toolset 7.0

The following changes have been made since the release of GCC included in Red Hat Developer Toolset 7.0:

  • The -fstack-clash-protection option has been added to the GCC compiler to generate additional code guarding against stack clash. As a result, applications can be hardened against this type of attacks. For more details, see the manual page for GCC. (BZ#1500856)
  • Previously, the GCC compiler handled the Debugging Information Entries (DIE) incorrectly when generating them for a C++ class method nested in another class method. As a consequence, the compiler might terminate unexpectedly when compiling such C++ code. Handling of DIE in this situation has been corrected and the problem no longer occurs. (BZ#1525304)
  • Previously, the GCC compiler did not emit the DW_AT_linkage_name and DW_AT_MIPS_linkage_name linkage name attributes for inline functions in debug information. As a consequence, applications using the DWARF debug information, such as the GDB debugger, could not use this information. GCC has been changed to include these attributes even for inline functions with no out-of-line copies and this information is available for GDB and other tools. (BZ#977960)
  • Previously, the code for the std::promise and std::future C++ standard library class templates contained a data race. The code has been fixed and the race condition no longer exists. (BZ#1512587)
  • Previously, the devtoolset-7-gcc package did not contain a symbolic link to the objcopy utility installed by the devtoolset-7-binutils package. As a consequence, GCC from Red Hat Developer Toolset used the system version of objcopy which lacked some features, such as the -gsplit-dwarf option. The symbolic link has been added and the correct version of objcopy is now used. (BZ#1501355)
  • Previously, some symbols in the libstdc++_nonshared.a static library file used incorrect visibility. As a consequence, linking some C++ programs failed. This bug has been fixed and no longer occurs. (BZ#1519073)

A.1.2. Changes in GDB

Red Hat Developer Toolset 7.1 is distributed with GDB 8.0.1, which provides a number of bug fixes and enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.1.2.1. Changes Since Red Hat Developer Toolset 7.0

The following changes have been added since the release of GDB included in Red Hat Developer Toolset 7.0:

  • Previously, the GDB debugger showed caller function names instead of inlined callee function names when listing breakpoints. As a consequence, GDB users were not able to identify breakpoints placed on inline functions from the function name. GDB has been extended to store names of inline callee functions when breakpoints are placed. As a result, GDB now correctly displays names of inline functions when listing breakpoints. (BZ#1228556)
  • Support for accessing the IBM z14 processor Guarded Storage Facility hardware control registers and software based broadcast control registers has been added to GDB. As a result, GDB can now display the described registers of the IBM z Systems architecture z14 machines, and enables users to investigate more easily boundary check violations on these machines. (BZ#1498758)

A.1.3. Changes in elfutils

Red Hat Developer Toolset 7.1 is distributed with elfutils 0.170, which provides a number of bug fixes and feature enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.1.3.1. Changes Since Red Hat Developer Toolset 7.0

The following bugs have been fixed since the release of elfutils included in Red Hat Developer Toolset 7.0:

  • Previously, the dwarf_aggregate_size() calculated wrong size for multidimensional arrays. The function has been fixed and correctly reports sizes of multidimensional arrays. (BZ#1527966)

A.1.3.2. Changes Since Red Hat Enterprise Linux 7.5

The elfutils version in Red Hat Developer Toolset 7.1 is the same as the version included in Red Hat Enterprise Linux 7.5.

A.1.4. Changes in Valgrind

Red Hat Developer Toolset 7.1 is distributed with Valgrind 3.13.0, which provides numerous enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.1.4.1. Changes Since Red Hat Developer Toolset 7.0

The following bugs have been fixed in Valgrind in Red Hat Developer Toolset version 7.1:

  • The 64-bit timebase register of the PowerPC architecture is no longer modeled by Valgrind as only 32-bit. (BZ#1523871)
  • Previously, Valgrind closed immediately the socket used for output when the option --xml-socket was used. Consequently, using this option caused Valgrind to report an error. This bug has been fixed and the option can be used again.
  • Support for the IBM Power Systems architecture has been extended to include the ISA 3.0B specification.
  • Previously, the memcheck tool could produce a warning "conditional jump or move depends on uninitialised value(s)" in the _dl_runtime_resolve_avx_slow function from the ld.so dynamic linker because of a complicated optimization technique. The function has been added to an exception list and this warning is no longer produced. (BZ#1523872)

A.1.4.2. Changes Since Red Hat Enterprise Linux 7.5

The Valgrind version in Red Hat Developer Toolset 7.1 is the same as the version included in Red Hat Enterprise Linux 7.5.

A.2. Changes in Version 7.0

The sections below document features and compatibility changes introduced in Red Hat Developer Toolset 7.0.

A.2.1. Changes in binutils

Red Hat Developer Toolset 7.0 is distributed with binutils 2.28, which provides numerous enhancements over the version included in Red Hat Enterprise Linux and the previous version of Red Hat Developer Toolset.

A.2.1.1. Changes Since Red Hat Developer Toolset 6.1

The following features have been added since the release of binutils included in Red Hat Developer Toolset 6.1:

  • The ld linker has been extended:

    • Support for creating Secure Gateway Veneers in applications for the ARM architectures has been added.
    • The --no-eh-frame-hdr option has been added to disable generation of .eh_frame_hdr sections in ELF executable files. This results in smaller application size when exception handling is not required.
  • The ld.gold linker has been extended to support the HIDDEN command in linker scripts and generation of executable files for the big-endian ARM architectures.
  • The nm tool --with-version-strings option has been added to display symbol version information.
  • The objcopy tool options --remove-section and --only-section have been extended to accept regular expressions.
  • Support for locating separate debug information files using the build-id method has been added.
GNU Build Notes

The binutils tools in Red Hat Developer Toolset 7.0 contain support for the GNU Build Notes feature. This enables compilers to record additional information in object files:

  • How the object file was built
  • What tests were run when building the object file
  • What are the requirements of the object file for the runtime system

When the linker creates an executable file or a library file, these notes are combined and added. Various tools can extract this information from the resulting file to find out more about it.

Architecture and processor support
  • Support for the IBM Power Systems architecture has been extended.
  • Support for the Scalable Vector Extensions (SVE) on the 64-bit ARM architecture has been added.
  • Support for additional instructions on the IBM z Systems architecture has been added.
  • Support for the ARM Cortex M23 and M33 processors has been added.

A.2.1.2. Changes Since Red Hat Enterprise Linux 7.4

The changes in binutils since the version included in Red Hat Enterprise Linux 7.4 are equivalent to the above listed changes since the version included in Red Hat Developer Toolset 6.1.

A.2.2. Changes in dyninst

Red Hat Developer Toolset 7.0 is distributed with Dyninst 9.3.2, which provides enhancements over the version included in the previous version of Red Hat Developer Toolset.

A.2.2.1. Changes Since Red Hat Developer Toolset 6.1

The following features have been added since the release of Dyninst included in Red Hat Developer Toolset 6.1:

  • Relocation and instrumentation of code containing C++ exceptions has been implemented.
  • Stack analysis on the 32-bit Intel and AMD architecture has been improved.

A.2.3. Changes in elfutils

Red Hat Developer Toolset 7.0 is distributed with elfutils 0.170, which provides a number of bug fixes and feature enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.2.3.1. Changes Since Red Hat Developer Toolset 6.1

The following features have been added since the release of elfutils included in Red Hat Developer Toolset 6.1:

  • The back ends for 32 and 64-bit Intel and AMD architectures, the 64-bit ARM architecture, and the IBM Power Systems architecture have been extended with a fallback for unwinding based on the frame pointer. As a result, the eu-stack utility and the functions dwfl_thread_getframes and dwfl_getthread_frames from the libdw library can unwind code even if the DWARF-based call frame information is not present.
  • The dwarf.h header file from the libdw library has been extended to enable recognition of DWARF format version 5 attributes, tags, character encodings, language codes, calling conventions, defaulted member functions, and macro constants. This enables the eu-readelf tool to show DWARF version 5 extensions in non-strict DWARF mode (version 4 format with version 5 extensions). (BZ#1472979)
  • Two new functions have been added to the libdw library: dwarf_default_lower_bound and dwarf_line_file.
  • The eu-strip tool has been extended with options -R, --remove-section=section, and --keep-section=section to control handling of sections.
  • The eu-objdump option -d has been extended to support disassembling Extended Berkeley Packet Filter (eBPF) code in ELF files by default.

The version of elfutils included in Red Hat Developer Toolset 7.0 includes two bug fixes:

  • Previously, using the eu-strip utility could leave an unused .shstrtab section in the executable file. As a consequence, the optimization resulted in an unoptimized executable file. The utility has been fixed and as a result, eu-strip always removes unused .shstrtab sections. (BZ#1455687)
  • Previously, the eu-strip utility produced empty files if there was no action possible. As a consequence, eu-strip created empty executable files when the file was already optimized, and empty debug files with the -f option if no debug information was found. The utility has been extended to recognize the situation. As a result, eu-strip produces executable file identical to the input when the input is already optimized, and does not write an empty debug file with the -f option if no debug information is found. (BZ#1455620)

A.2.3.2. Changes Since Red Hat Enterprise Linux 7.4

The changes in elfutils since the version included in Red Hat Enterprise Linux 7.4 are equivalent to the above listed changes since the version included in Red Hat Developer Toolset 6.1.

A.2.4. Changes in GCC

Red Hat Developer Toolset 7.0 is distributed with GCC 7.2.1, which provides numerous enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.2.4.1. Changes Since Red Hat Developer Toolset 6.1

The following features have been added since the release of GCC included in Red Hat Developer Toolset 6.1:

  • Support for the DWARF 5 debug information format has been added.
  • A sanitizer to detect variables whose address was taken and used outside the variable’s scope has been added and is available under the -fsanitize-address-use-after-scope option.
  • New warnings for statically detecting certain common types of programming errors have been added. Apart from others, the detected errors include:

    • implicit fall through in switch statements
    • pointer comparison with a zero character constant
    • identical branches of an if-else statement
    • wrong usage of restrict-qualified parameters
    • suspicious arguments to a memset call
    • suspicious uses of integer values in boolean contexts
    • unreachable statements in a switch statement
    • unbounded uses of variable-length arrays
  • The spell-checker has been improved and is now able to detect many more cases.
  • Various compile-time checks for buffer overflows and invalid memory access have been added.
  • Support for the _FloatN and _FloatNx type names specified by the ISO/IEC TS 18661-3:2015 standard has been added to the C front end.
  • The C++ front end fix-it hints have been improved.
  • Experimental support for C17 has been added to the C standard library and the C++ front end.
Optimization Improvements
  • A store merging optimization pass for reducing store operations has been added. This optimization merges constant stores to adjacent memory locations.
  • Better optimization of sprintf function family return values has been added. The function calls can be completely folded into a constant.
  • The code hoisting optimization has been extended to enable moving the expressions evaluated on all paths to the function exit, to the front of the function’s code. This further reduces the code size.
  • The optimization of interprocedural constant propagation has been improved. Information about which bits of variables are known to be zero and ranges of integral variables can be propagated.
  • A new loop splitting optimization pass has been added to better optimize loops which contain a condition that is always true or always false for a certain range of the iteration variable.
  • The shrink-wrapping optimization has been improved.
Architecture support
  • Support for the z14 processor of the IBM z Systems architecture has been added.
  • Support for the ARMv8.2-A and ARMv8.3-A architecture variants and the ARMv8.2-A 16-bit Floating-Point Extensions has been added.
  • Support for the latest revision of the AAPCS64 procedure call standard on the 64-bit ARM architecture has been added.
  • Support for the following ISA extensions for the Intel 64 architecture has been added:

    • AVX-512 Fused Multiply Accumulation Packed Single precision (4FMAPS)
    • AVX-512 Vector Neural Network Instructions Word variable precision (4VNNIW)
    • AVX-512 Vector Population Count (VPOPCNTDQ)
    • Software Guard Extensions (SGX)
Deprecated Features
  • The Cilk+ extensions have been deprecated. Support of Cilk++ in future versions of GCC is not guaranteed.

A.2.5. Changes in GDB

Red Hat Developer Toolset 7.0 is distributed with GDB 8.0.1, which provides a number of enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.2.5.1. Changes Since Red Hat Developer Toolset 6.1

The following features have been added since the release of GDB included in Red Hat Developer Toolset 6.1:

  • Support for C++11 R-value references has been added.
  • Python scripting has been extended with functions to start, stop, and access a running btrace recording. Additionally, support for R-value references has been added to gdb.Type.
  • Support for recording and replaying rdrand and rdseed instructions of the 64-bit Intel architecture has been added.
  • User commands have been extended to accept an unlimited number of arguments istead of the previous maximum of ten.
  • The eval command has been extended to expand user-defined command arguments.
  • Support for the debug information format DWARF version 5 has been added. However, the .debug_names index is not yet supported.
  • The options set disassembler-options and show disassembler-options have been added to control the passing of target-specific information to the disassembler. Multiple disassembler options can be specified as a comma-separated list. Currently, this feature is supported for ARM, PowerPC, and System/390 targets.
  • A new MI command -file-list-shared-libraries has been added to list the shared libraries in the program.

A.2.6. Changes in make

Red Hat Developer Toolset 7.0 is distributed with make 4.2.1, which provides a number of bug fixes and feature enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.2.6.1. Changes Since Red Hat Developer Toolset 6.1

The following changes have been added since the release of make included in Red Hat Developer Toolset 6.1:

  • Previously, running the make tool without arguments resulted in a segmentation fault when the pseudo-terminal /dev/pts was not mounted. The tool has been extended to use the default terminal in such cases. As a result, make no longer produces a segmentation fault when /dev/pts is not present. (BZ#1451452)
  • The functionality of the internal option --jobserver-fds has been made available with the option --jobserver-auth. The former name --jobserver-fds has been removed.

A.2.6.2. Changes Since Red Hat Enterprise Linux 7.4

Since the release of make included in Red Hat Enterprise Linux , the following changes have been made in addition to the changes listed above:

  • Integration with GNU Guile versions 1.8 as well as 2.0 and later is supported.
  • When the special target .POSIX is specified, make adheres to the POSIX requirements for handling backslash and newline. This changes how make handles backslash and newline in non-recipe lines:

    • Trailing spaces before the backslash are preserved
    • Each backslash and newline, including subsequent white space, is converted to single space
  • The BSD != shell assignment operator is now supported as an alternative to the $(shell …​) function. As a consequence, variable names ending in an exclamation mark, defined as myvariable!= somevalue, are now interpreted as shell assignments. To restore the previous behaviour, add white space after the intended variable name, such as myvariable! = somevalue.

A.2.7. Changes in OProfile

Red Hat Developer Toolset 7.0 is distributed with OProfile 1.2.0, which provides a number of bug fixes and feature enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.2.7.1. Changes Since Red Hat Developer Toolset 6.1

Since the release of OProfile included in Red Hat Developer Toolset 6.1, support for the following processors and architectures has been improved:

  • The 8NV and NVL variants of the IBM Power architecture
  • The z14 processor of the IBM z Systems architecture
  • 2nd generation Intel Xeon Phi

A.2.7.2. Changes Since Red Hat Enterprise Linux 7.4

Since the release of OProfile included in Red Hat Enterprise Linux 7.4, the following changes have been made in addition to the changes listed above:

  • The deprecated opcontrol and oprof_start commands have been removed. The operf command should be used in their place. The opreport command is still used to analyze data stored in the oprofile_data/ directory by operf.
  • Fixes have been included to avoid dropping samples from Java programs using Just-In-Time (JIT) translation due to use of anonymous hugepages and changes in the anonymous page mappings.
  • The search logic has been corrected to properly store data in an archive and make use of the archive data.
  • operf now only starts the command to be measured if the performance monitoring hardware is properly set up. This fixes a bug that caused operf to start the command that is to be measured regardless of whether the performance monitoring set up was successful.

Changes in OProfile processor support since Red Hat Enterprise Linux 7.4 are identical to the changes in processor support since Red Hat Developer Toolset 6.1 listed above.

A.2.8. Changes in strace

Red Hat Developer Toolset 7.0 is distributed with strace 4.17, which provides numerous bug fixes and feature enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.2.8.1. Changes Since Red Hat Developer Toolset 6.1

The following enhancements have been added since the release of strace included in Red Hat Developer Toolset 6.1:

  • System call tampering and fault injection capability has been added. This function allows users to specify the system call to intercept, a return value or error code to return as a result of the call, a signal to send, and a condition for the call order. The -e fault=specification and -e inject=specification options allows specifying the details. Multiple fault injections can be specified. For more details, see the strace manual page.
  • Support for tracing 32-bit executable files with the 64-bit strace version has been improved.
  • Time stamp output has been changed to conform to the ISO 8601 specification.
  • A general netlink socket parser and improved decoding of socket addresses have been added.
  • The system call classes %stat, %lstat, %fstat, %%stat, %statfs, %fstatfs, and %%statfs have been added to allow filtering of system calls used to query file system information. For more details, see the strace manual page.
System Call Specification Changes

The way in which system calls are specified has been significantly changed and extended:

  • Specifying classes of system calls for tracing now uses a % prefix:

    strace -e trace=%class

    The old specification style without % is deprecated but still supported.

  • Specifying system calls for tracing has been extended to support regular expressions. To use a regular expression, prepend the system call specification with a forward slash:

    strace -e trace=/regexp
  • Error suppression for cases where no system calls match the provided specification has been added. To use the error suppression, prepend the system call specification with a question mark:

    strace -e trace=?function
Decoding Improvements

The following improvements to decoding of system calls, their parameters, and return values have been implemented:

  • Improvements have been made to decoding of several ioctl call classes:

    • Decoding of the DM_* and NS_* commands has been implemented.
    • Decoding of the SG_* and V4L2 commands has been improved.
    • Decoding of the sg_io_hdr and sg_io_v4 structures has been improved.
  • Decoding of the following system calls has been improved: futex, keyctl, quotactl, timerfd_settime, bpf, accept, accept4, bind, getpeername, getsockname, ipc, recvfrom, recvmsg, recvmmsg, sendto, sendmmsg, socketcall, sched_attr and the POSIX asynchronous I/O (aio) system call family.
  • Decoding of the following system calls has been implemented: statx, pkey_alloc, pkey_free, pkey_mprotect, and ustat.
  • Decoding of the perf_event_open call parameter attr has been implemented.
  • Decoding of the message structures cmsghdr, msghdr, and mmsghdr has been improved.
  • Display of mode_t, umode_t, and umask types has been fixed.

A.2.8.2. Changes Since Red Hat Enterprise Linux 7.4

The changes in strace since the version included in Red Hat Enterprise Linux 7.4 are equivalent to the above listed changes since the version included in Red Hat Developer Toolset 6.1.

A.2.9. Changes in SystemTap

Red Hat Developer Toolset 7.0 is distributed with SystemTap 3.1, which provides a number of bug fixes and feature enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.2.9.1. Changes Since Red Hat Developer Toolset 6.1

The following features have been added since the release of SystemTap included in Red Hat Developer Toolset 6.1:

  • The probes for system calls no longer default to being based on debuginfo information.
  • Support for probing Python functions has been added.
  • Access to Java function parameters has been made more uniform.
  • The performance of statistical aggregate variables has been improved.
  • A new statistics operator @variance has been added.
  • More options for fetching and setting user-space values have been added.
  • NFS monitoring has been improved with sample scripts and tapset compatibility fixes.

A.2.9.2. Changes Since Red Hat Enterprise Linux 7.4

The SystemTap version included in Red Hat Developer Toolset 7.0 is the same as the version included in Red Hat Enterprise Linux 7.4.

A.2.10. Changes in Valgrind

Red Hat Developer Toolset 7.0 is distributed with Valgrind 3.13.0, which provides numerous enhancements over the version included in the previous release of Red Hat Developer Toolset.

A.2.10.1. Changes Since Red Hat Developer Toolset 6.1

The following features have been added since the release of Valgrind included in Red Hat Developer Toolset 6.1:

  • Valgrind has been extended in several ways to run large programs:

    • The translation cache size has been increased. The maximum number of sectors has been increased from 24 to 48 and the default number of sectors from 16 to 32.
    • The amount of memory usable by Valgrind has been increased from 64 GB to 128 GB. As a consequence, the Memcheck tool supports running applications that allocate up to approximately 60 GB.
    • The default load address of Valgrind has been changed from 0x38000000 to 0x58000000. As a consequence, Valgrind can load executable files 1200 MB in size.
  • A new representation of stack traces called XTree has been added. An XTree is a tree of stack traces and data associated with these stack traces. The tools Memcheck, Helgrind, and Massif can use this representation to report heap consumption of the analyzed application. Reporting is controlled by the new options --xtree-memory and --xtree-memory-file. Additionally, Valgrind’s internal gdbserver has been extended for the XTrees:

    • A report can be produced on demand by issuing the command xtmemory filename in the external gdb monitor.
    • The Memcheck monitor command leak_check accepts a new option xtleak to produce the leak report in an XTree file.

      For more information consult the Valgrind manual installed on your system. See Section 12.3, “Additional Resources”.

  • The symbol demangler has been updated to support the C++11 standard as well as the Rust programming language.
  • File name template argument format has been extended with a new letter %n which is replaced by a sequentially increased number. This is useful for processes that produce several files from the same filename template and can be used as an alternative to the process id letter %p.
Architecture updates
  • Failures with long blocks of code using AVX2 instructions on the Intel and AMD 64-bit architecture have been fixed.
  • Recognition of Intel Control Flow Enforcement (CET) on the Intel and AMD 64-bit architecture has been added.
  • Support for the IBM Power Systems architecture has been extended to include the ISA 3.0B specification.
  • An alternative implementation of Load-Linked and Store-Conditional instructions for the 64-bit ARM architecture has been added. The alternative implementation is enabled automatically when required. To enable the alternative implementation manually, use the --sim-hints=fallback-llsc option.

A.2.10.2. Changes Since Red Hat Enterprise Linux 7.4

The changes in Valgrind since the version included in Red Hat Enterprise Linux 7.4 are equivalent to the above listed changes since the version included in Red Hat Developer Toolset 6.1.

A.2.11. Changes in devtoolset-7-perftools-rhel7

Red Hat Developer Toolset 7.0 is distributed with devtoolset-7-perftools-rhel7, a pre-built docker image that includes other Red Hat Developer Toolset components. The image is available as a package devtoolset-7-perftools-docker.

A.2.11.1. Changes Since Red Hat Developer Toolset 6.1

Since the release of devtoolset-6-perftools-rhel7 included in Red Hat Developer Toolset 6.1, the following tools have been added to the container image:

  • dwz
  • ltrace
  • make
  • memstomp
  • strace

For the changes in application features since the release of devtoolset-6-perftools-rhel7 included in Red Hat Developer Toolset 6.1, see the sections describing changes in the individual tools:

A.2.12. Changes in devtoolset-7-toolchain-rhel7

Red Hat Developer Toolset 7.0 is distributed with devtoolset-7-toolchain-rhel7, a pre-built docker image that includes other Red Hat Developer Toolset components. The image is available as a package devtoolset-7-toolchain-docker.

A.2.12.1. Changes Since Red Hat Developer Toolset 6.1

For the changes since the release of devtoolset-6-toolchain-rhel7 included in Red Hat Developer Toolset 6.1, see the sections describing changes to the individual tools: