Red Hat Training

A Red Hat training course is available for Red Hat Developer Toolset

Appendix A. Changes in Version 8.0

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

A.1. Changes in GCC

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

Changes Since Red Hat Developer Toolset 7.1

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

  • The source code coverage analysis tool GCOV has been extended with various improvements.
  • New code generation options to increase program security such as -fstack-clash-protection have been added. Notably, the new -fcf-protection= option adds code instrumentation for checking target addresses of control-flow instructions. The possible values are full, branch, return, none.
  • Various new warnings to detect potentially buggy code with security implications have been added.
  • Front-end warnings have been improved to detect more bugs, and various warnings have been added.
  • Diagnostic messages have been improved.
  • The GCC sanitizers have been extended to detect more invalid cases. For instance, Address Sanitizer has gained two new options: -fsanitize=pointer-compare and -fsanitize=pointer-subtract, which warn about wrong code involving operations with pointers.

Language Features and Standards

  • Passing an empty class as an argument now takes up no space on the Intel64 and AMD 64 architectures, as required by the platform ABI. Passing or returning a class with only deleted copy and move constructors now uses the same calling convention as a class with a non-trivial copy or move constructor.
  • The value returned by the C++11 alignof operator has been corrected to match the C _Alignof operator and return minimum alignment, rather than the previously returned preferred alignment. To find the preferred alignment, use the GNU extension __alignof__ operator.
  • The default standard used when compiling code in the C language has changed to C17 with GNU extensions. This has the same effect as using the --std=gnu17 option.
  • The experimental capability for compiling C++ code using the C++17 standard has been improved, but it remains experimental and unstable. Compiling C++17 code is not forward or backward compatible with other versions of GCC, and is not supported.
  • Initial experimental capability for compiling C++ code using the future C++2A standard has been added.

Optimization Improvements

Improvements in optimization include these areas:

  • Interprocedural optimization
  • Profile-driven optimization
  • Link-time optimization
  • Optimization for loop nesting

Architecture support

  • Support for the Intel Cannonlake architecture has been added.
  • Tuning for the AMD Zen microarchitecture znver1 was improved.
  • Support for the Qualcomm Saphira CPU has been added.
  • Handling of the -march=native option on the ARM and 64-bit ARM architectures has been fixed.

Removed and Deprecated Features

  • Support for the Intel Cilk Plus extensions was removed.
  • Intel Memory Protection Extensions (MPX) are now deprecated.

A.2. Changes in GDB

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

Changes Since Red Hat Developer Toolset 7.1

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

  • The --readnever option has been added to speed up startup in situations where symbolic debugging is not used. With this option, GDB does not read symbolic debug information from symbol files at startup.
  • GDB can now use the GNU MPFR library for correct evaluation of floating-point expressions when the architectures of debugging host and target systems are different. The library must be present in version 3.1 or higher.
  • GDB has been extended to access the guarded-storage-control registers and software based guarded-storage broadcast control registers on IBM z14 machines.
  • A new -a option has been added to the gcore command to dump all memory mappings.
  • Breakpoints on C++ functions are now set in all scopes by default. This means that the inputs are interpreted as potentially missing leading name space or class. To treat the inputs literally, use the new -q flag.

    As an example, running the break func() command will set a breakpoint on A::B::func() and B::func(). To match explicitly only the latter, run break -q B::func.

  • The ptype command now accepts a /o flag to print the offsets and sizes of data structure fields in a format similar the pahole tool output.
  • Breakpoints on functions with C++ ABI tags can now be specified without explicitly listing the tag.
  • GDB no longer considers int the type of variables and return type of functions, when debugging information is not available. As a consequence, you need to specify the types explicitly to call and print these.

New Commands

  • Set the current working directory for the debugging target with the new set cwd command. To display it, show cwd.
  • To start the debugging target and stop at the first instruction, use the new starti command.

Completion Improvements

  • Completion has been extended to understand context of the intended operation and provide more relevant results.
  • It is no longer necessary to use quotes for correct completion of function parameters in most situations.
  • Completion of identifiers under C++ anonymous namespaces has been improved.
  • Completion of label names has been added.

gdbserver Improvements

  • New set environment and unset environment commands have been added. With these commands, users can modify environment variables on the remote system before the debugging target is started. The remote system must be Unix-based.
  • gdbserver can now substitute variables and expand glob patterns in the debugging target command line options. This functionality is based on starting the target using a shell, which is the default behavior.
  • gdbserver has been extended to set the working directory of the debugging target process with the set cwd command.

A.3. Changes in binutils

Red Hat Developer Toolset 8 is distributed with binutils 2.30, which provides a number of enhancements over the version included in the previous release of Red Hat Developer Toolset.

Changes Since Red Hat Developer Toolset 7.1

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

Assembler
  • A --generate-missing-build-notes [on|off] option has been added to control creation of GNU Build Attribute notes if none are present in the input sources.
  • Location views in DWARF debug line information are now supported.
  • Support for the WebAssembly file format, and conversion of WebAssembly to the wasm32 ELF file format have been added.
  • Support for building code for the Texas Instruments PRU processor has been added.
  • Support for the ARMv8-R architecture and Cortex-R52 processor has been added.
Linker
  • The -z separate-code and -z undefs options to generate a separate code PT_LOAD segment have been added. This improves security, but also increases the size of resulting executables. Note that by default, -z separate-code is enabled.
  • A -z globalaudit option has been addeed to force audit libraries to be run for every dynamic object loaded by an executable. In situations where the loader does not support this functionality, this has no effect.
  • Support for GNU Property notes which provide hints to the dynamic loader about the binary file has been added.
Other binary tools
  • The --debug-dump=links option has been added to the readelf tool to display the contents of any .gnu_debuglink or .gnu_debugaltlink sections present in the binary file. The same functionality has been added to the objdump tool with the new --dwarf=links option.
  • The readelf tool has been extended with the --debug-dump=follow-links option to follow indirect links into separate debug info files when dumping other DWARF sections. The same functionality has been added to the objdump tool with the new --dwarf=follow-links option.
  • The new --inlines option extends the existing --line-numbers option of the objdump tool to display nesting information for inlined functions.
  • The --merge-notes option has been added to the objcopy tool to reduce the size of notes in a binary file by merging and deleting redundant notes.
  • Support for locating separate debug info files using the build-id method has been added, where the separate file has a name based upon the build-id of the original file.

Changes Since Red Hat Enterprise Linux 7

The following features have been added since the release of binutils included in Red Hat Enterprise Linux 7, in addition to the changes listed above:

Assembler
  • Support for the RISC-V architecture has been added.
  • Support for the ARM Cortex-M23 and Cortex-M33 processors has been added.
Linker
  • The command line option --no-eh-frame-hdr can now be used in ELF-based linkers to disable the automatic generation of .eh_frame_hdr sections.
  • The --in-implib=<infile> option has been added to the ARM linker to enable specifying a set of Secure Gateway veneers that must exist in the output import library specified by the --out-implib=<outfile> option, and the address they must have. Note that --in-implib is only usable in combination with the --cmse-implib option.
  • The --out-implib=<file> option instructs the linker to generate an import library for an ELF executable, which can be used by another application to link against the executable. Previously, it was restricted to x86 PE targets. This option has been extended to work for any ELF based targets.
Other binary tools
  • The nm tool gained a new option --with-version-strings to display a symbol’s version information after the symbol’s name, if present.
  • The version of the objdump tool for ARC now accepts a -M option to specify multiple additional instruction classes to disassemble.
  • The --remove-section option of the objcopy and strip tools now accepts section patterns starting with an exclamation point (!) to indicate a non-matching section. Such non-matching section is removed from the set of sections matched by an earlier pattern indicated with the --remove-section option.
  • The --only-section option for the objcopy tool now accepts section patterns starting with an exclamation point (!) to indicate a non-matching section. Such non-matching section is removed from the set of sections matched by an earlier pattern indicated with the --only-section option.
  • A new --remove-relocations=SECTIONPATTERN option for the objcopy and strip tools. 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.

A.4. Changes in elfutils

Red Hat Developer Toolset 8 is distributed with elfutils 0.174, which provides a number of enhancements over the version included in the previous release of Red Hat Developer Toolset.

Changes Since Red Hat Developer Toolset 7.1

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

  • Support for DWARF5 and split dwarf, including GNU DebugFission has been added:

    • The eu-readelf tools now accepts an --debug-dump=info+ option to show split unit DIEs/files.
    • The eu-readelf tools now accepts an --dwarf-skeleton=file option to associate an object file with the respective .dwo file.
    • The libdw library has been extended with the functions dwarf_die_addr_die(), dwarf_get_units(), dwarf_getabbrevattr_data(), and dwarf_cu_info().
  • When the debug alt file is not explicitly set with a call to dwarf_set_alt() in the libdw library, the library now will try to resolve it on first use.
  • Previously, the eu-readelf tool could show a variable with a negative value as if it had a large unsigned value, or show a large unsigned value as a negative value. This has been corrected and eu-readelf now looks up the size and signedness of constant value types to display them correctly.
  • A new function dwarf_next_lines() for reading .debug_line data lacking CU has been added to the libdw library. This function can be used as alternative to the dwarf_getsrclines() and dwarf_getsrcfiles() functions.
  • Previously, files with more than 65280 sections could cause errors in the the libelf and libdw libraries and all tools using them. This bug has been fixed. As a result, extended shnum and shstrndx values in ELF file headers are handled correctly.

A.5. Changes in OProfile

Red Hat Developer Toolset 8 is distributed with OProfile 1.3.0, which provides a number of enhancements over the version included in the previous release of Red Hat Developer Toolset.

Changes Since Red Hat Developer Toolset 7.1

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

  • Support for processors based on the Intel Goldmont Plus microarchitecture has been added.
  • OProfile recognition code has been fixed to properly recognize some models of IBM POWER9 processors
  • OProfile now works with Linux kernel version 4.14.

A.6. Changes in strace

Red Hat Developer Toolset 8 is distributed with strace 4.24, which provides a number of enhancements over the version included in the previous release of Red Hat Developer Toolset.

Changes Since Red Hat Developer Toolset 7.1

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

  • Several improvements to tracing of programs with a different personality (architecture) have been added.
  • Optional symbol demangling with the libiberty or libdw libraries has been added. To use this feature, add the -k option. To determine if this functionality is available, see output of the strace -V command.
  • Handling of multiple signal= specifications in an injection expression has changed and multiple specification now results in error.
  • A new -e trace=%pure option for tracing system calls with no arguments that never fail has been added.
  • Data are now always displayed for write system calls, regardless of success of these calls.
  • Delay injection has been added with the -e inject=SET:delay_enter= and -e inject=SET:delay_exit= options.
  • Injection of system calls with no side effects has been added as an alternative to injection of an invalid system calls. To do so, use the new -e inject=SET:system call= option.
  • The range of values allowed in the -e inject=…​:retval= option expression has been extended.
Decoding improvements and updates

Decoding of the following items has been added, improved or updated:

  • netlink protocols, messages and attributes
  • arch_prctl, bpf, getsockopt, io_pgetevent, kern_features, keyctl, prctl, ptrace, rseq, setsockopt, socket, statx and other system calls
  • Constants of various types
  • Path tracing for execveat, inotify_add_watch, inotify_init, select, symlink, symlinkat system calls and mmap system calls with indirect arguments
  • System calls specific to the ARM architectures __ARM_NR_*
  • Lists of signal codes

Additionally, commands for the ioctl system call have been updated to match Linux kernel version 4.17.

A.7. Changes in SystemTap

Red Hat Developer Toolset 8 is distributed with SystemTap 3.3, which provides a number of enhancements over the version included in the previous release of Red Hat Developer Toolset.

Changes Since Red Hat Developer Toolset 7.1

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

  • The --sysroot option has been optimized for cross-compiled environments.
  • A new --example option allows you to search the example scripts distributed with SystemTap without providing the whole path of the file.
  • Usage of SystemTap on systems with real time kernel or machines with a high number of CPUs has been improved.
  • Handling of code used for Spectre and Meltdown attack mitigation has been improved.

A.8. Changes in Valgrind

Red Hat Developer Toolset 8 is distributed with Valgrind 3.14.0 (pre-release), which provides a number of enhancements over the version included in the previous release of Red Hat Developer Toolset.

Changes Since Red Hat Developer Toolset 7.1

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

  • A new --keep-debuginfo option has been added to enable retention of debug info for unloaded code. As a result, saved stack traces can include file and line information for code that is no longer present in memory.
  • Suppressions based on source file name and line number have been added.
  • The Helgrind tool has been extended with an option --delta-stacktrace to specify computation of full history stack traces. Notably, using this option together with --history-level=full can improve Helgrind performance by up to 25%.
  • False positive rate in the Memcheck tool for optimised code on the Intel and AMD 64-bit arcitectures and the ARM 64-bit architecture has been reduced. Note that you can use the --expensive-definedness-checks to control handling of definedness checks and improve the rate at the expense of performance.
  • Previously, the valgrind-devel package contained additional static libraries for building Valgrind tools. Because these tools are not supported, the package now only contains the header files needed for creating Valgrind-aware programs and libraries.

For more information about the new options and their known limitations, see the Valgrind(1) manual page.