Appendix A. Changes in Version 9.0

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

A.1. Changes in GCC

Red Hat Developer Toolset 9.0 is distributed with GCC 9.3.1.

The following features have been added or modified since the previous release of Red Hat Developer Toolset:

General Improvements

  • All command-line options that accept byte-size arguments now accept 64-bit integers and standard SI and IEC suffixes.
  • A new option is added: -flive-patching=[inline-only-static|inline-clone]. It provides safe compilation for live patching.
  • GCC diagnostics are improved:

    • The left margin now shows line numbers. To configure this feature, use the -fno-diagnostics-show-line-numbers option.
    • Regions of the source code can now be labeled to show relevant information, for example types within an expression. To disable labels, use the -fno-diagnostics-show-labels option.
  • The alignment-related options -falign-functions, -falign-labels, -falign-loops, and -falign-jumps are now supported for a secondary alignment, for example -falign-loops=n:m:n2:m2.
  • A new pair of profiling options is added: -fprofile-filter-files and -fprofile-exclude-files. These options help to filter which source files are instrumented.
  • The following built-in functions are added:

    • The __builtin_expect_with_probability function provides the branch prediction probability hints to the optimizer.
    • The __builtin_has_attribute function determines whether a function, type, or variable is declared with an attribute.
    • The __builtin_speculation_safe_value function helps mitigate against unsafe speculative execution.
  • The new copy function attribute is added. Use it with functions, variables, or types.
  • Numerous code generation improvements are added including inter-procedural, profile-driven, and link-time optimization improvements, for example:

    • Switch expansion is improved by using a different strategy for a subset of switch cases. Strategies include a jump table, a bit test, and a decision tree.
  • The GCOV command-line utility is improved. For example, the intermediate format of the GCOV tool is now a new JSON format.

Language Features

Notable changes related to languages include:

C family

  • C and C++ compilers now partially support version 5.0 of the OpenMP specification.
  • A new extension __builtin_convervector is added for vector conversions.
  • A new warning -Waddress-of-packed-member is added. It is enabled by default and warns about an unaligned pointer value from the address of a packed member of a struct or union.
  • Some existing warnings are enhanced.

C

  • Experimental support for -std=c2x is added.
  • A new warning -Wabsolute-value is added. It warns for calls to standard functions that compute the absolute value of an argument when a more appropriate standard function is available.

C++

  • New warnings are added:

    • The -Wredundant-move option is implied by -Wextra and warns about redundant calls to std::move.
    • The -Wpessimizing-move option is implied by -Wall and warns when a call to std::move prevents copy elision.
    • The -Winit-list-lifetime option is on by default. It warns when using std::initializer_list may result in a dangling pointer.
  • The C++ front end now has experimental support for some C++2a draft features with the -std=c++2a or -std=gnu++2a flags.
  • Error-reporting diagnostics are improved.

Architecture and Processor Support

Changes to architecture and processor support include:

The 64-bit ARM architecture

The following processors are now supported (the GCC identifiers are provided in parentheses):

  • ARM Cortex-A76 (cortex-a76)
  • ARM Cortex-A55/Cortex-A76 DynamIQ big.LITTLE (cortex-a76.cortex-a55)
  • ARM Neoverse N1 (neoverse-n1)
  • ARM Neoverse E1 processor (-mcpu=neoverse-e1)

AMD64 and Intel 64

  • Intel MPX (Memory Protection Extensions) are no longer supported.
  • New ISA extension support for Intel PTWRITE is added.
  • Intel CPU named Cascade Lake with AVX512 extensions are now supported.

IBM Z

  • The ARCH(13) architecture is now supported.
  • Built-in features for the new vector instructions are added. Use the -mzvector option to enable them.
  • Support for ESA architecture machines G5 and G6 is deprecated.

A.2. Changes in GDB

Red Hat Developer Toolset 9.0 is distributed with GDB 8.3.

The following features have been added or modified since the previous release of Red Hat Developer Toolset:

General Improvements

  • GDB and GDBserver now allow accessing additional registers on the IBM POWER systems (PPR, DSCR, TAR, EBB/PMU, and HTM registers).
  • GDB and GDBserver now support the IPv6 connections. Pass the IPv6 addresses using the [ADDRESS]:PORT notation or the regular ADDRESS:PORT method.
  • GDB in batch mode now exits with status 1 if the last command to be executed fails.
  • Terminal styling is now available for the CLI and the TUI. For a list of styling commands, see Output Styling section of the GDB User Manual. The GNU Source Highlight program can also be used for source code styling.

New Commands

  • frame apply [all | COUNT | -COUNT | level LEVEL…​] [FLAG]…​ COMMAND

    • Apply to some frames only.
    • Use the FLAG arguments to choose the required output and to set a method to handle errors that you may get when applying COMMAND to a frame.
  • The taas COMMAND syntax is a shorter version of thread apply all -s COMMAND.

    • Apply to all the threads including threads with errors and empty output.
  • The faas COMMAND syntax is a shorter version of frame apply all -s COMMAND.

    • Apply to all the frames including frames with errors and empty output.
  • The tfaas COMMAND syntax is a shorter version of thread apply all -s frame apply all -s COMMAND.

    • Apply to all the frames of all the threads including frames and threads with errors and empty output.

Changed Commands

  • Changes to the frame, select-frame, and info frame CLI commands:

    • These commands now accept the frame specification. It can be a frame level or one of the keywords level, address, function, or view followed by a parameter.
    • A keyword is required to select a frame by address or to view a frame outside of the current backtrace.
    • Selecting a frame by level is unchanged.
    • The MI comment -stack-select-frame is unchanged.
  • target remote FILENAME and target extended-remote FILENAME

    • If FILENAME is a Unix domain socket, GDB attempts to connect to this socket and will not open FILENAME as a character device.
  • info args [-q] [-t TYPEREGEXP] [NAMEREGEXP]
    info functions [-q] [-t TYPEREGEXP] [NAMEREGEXP]
    info locals [-q] [-t TYPEREGEXP] [NAMEREGEXP]
    info variables [-q] [-t TYPEREGEXP] [NAMEREGEXP]

    The preceding four commands now have a new [-t TYPEREGEXP] flag. It returns matching entities to types matching TYPEREGEXP. The [-q] flag disables printing headers or information messages.

  • info functions
    info types
    info variables
    rbreak

    The preceding four commands now determine entities' syntax based on the language chosen in the set language option. The set language auto option automatically chooses the language of the shown entities.

  • thread apply [all | COUNT | -COUNT] [FLAG]…​ COMMAND

    • New [FLAG] arguments are added. Use the [FLAG] arguments to choose the required output and to set a method to handle errors that you can get when applying COMMAND to a frame.

Python API

  • A new progspace property is added for the gdb.Inferior type. It is the program space associated with that inferior.
  • A new objfiles method is added to the gdb.Progspace type. It returns the list of objfiles associated with that program space.
  • A new constructor is added to the gdb.Value type. It is used to construct a gdb.Value from a Python buffer object and a gdb.Type.
  • The following new domains are added to reflect changes to the GDB core: gdb.SYMBOL_LOC_COMMON_BLOCK, gdb.SYMBOL_MODULE_DOMAIN, and gdb.SYMBOL_COMMON_BLOCK_DOMAIN.

A.3. Changes in binutils

Red Hat Developer Toolset 9.0 is distributed with binutils 2.32.

The following features have been added or modified since the previous release of Red Hat Developer Toolset:

The Assembler

  • A new command-line option is added: --generate-missing-build-notes=yes. It creates GNU Build Attribute notes if the input sources do not contain such notes.
  • Specific to the AMD64 and Intel 64 architecture:

    • The assembler now has a -mvexwig=[0|1] option to control encoding of VEX.W-ignored (WIG) VEX instructions.
    • A new -mx86-used-note=[yes|no] option allows to choose if GNU property notes are generated. These notes are based on the input assembler.
    • The new -O[2|s] command line options enable alternate, shorter instruction encoding.

The BFD Linker

  • The default behavior of the linker is now to create separate code and data segments. This makes binaries bigger, but safer, because the loader can turn off write permission to the code segment.

    • Use a command-line option -z noseparate-code to disable this behavior. The linker will create one segment as before.
  • A linker map file, created with the -Map command-line option, now includes details of property changes that happen when merging GNU property notes.
  • The --trace option does not report members within an archive anymore. This makes the option more useful when generating a list of files that should be packaged for a linker bug report.

    • To report members within an archive give the option twice.

The GOLD Linker

  • Warning messages for relocations that refer to discarded sections are improved.
  • The new --debug=plugin option allows for easier debugging of plug-in-related problems.
  • The new -z keep_text_section_prefix option provides compatibility with the BFD linker.
  • Support for the 64-bit ARM architecture is improved.
  • The .note.gnu.property sections from Linux ABI extensions are now supported.
  • Intel Indirect Branch Tracking (IBT) and Shadow Stack (AMD64 and Intel 64 only) are now supported.

Other Binary Utilities

  • The addr2line, c++filt, nm, and objdump tools now have a limit on the maximum amount of recursion that is allowed while demangling strings. The value for this limit is defined by the DEMANGLE_RECURSE_LIMIT constant. This constant has the value of 2048 in binutils shipped as part of Red Hat Developer Toolset 9.0.
  • The --no-recurse-limit option can be used to remove the limit mentioned above. It restores the behavior of earlier versions of these tools. This option allows demangling of very complicated names, but it also leaves the tools vulnerable to stack exhaustion from maliciously constructed mangled names.
  • The ar archive manager now supports an O modifier to display member offsets inside an archive.
  • Objdump: the --disassemble option now takes 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 disassembler for the 64-bit ARM processors can now show notes that are created when a system finds inconsistencies with instructions that may result in invalid instructions. These notes can be turned on with the -M notes option to objdump. The disassembler also creates warnings when a combination of an instruction and a named register is invalid.

A.4. Changes in strace

Red Hat Developer Toolset 9.0 is distributed with strace 5.1.

The following features have been added or modified since the previous release of Red Hat Developer Toolset:

License

  • The test suite is now provided under the terms of the GNU General Public License version 2 or later.
  • The rest of strace is now provided under the terms of the GNU Lesser General Public License version 2.1 or later.

Changes in Behavior

  • If strace is interrupted by a signal that it handles (currently one of SIGHUP, SIGINT, SIGQUIT, SIGPIPE, or SIGTERM), strace terminates itself with this signal.
  • The -D option now implies -I4: by default strace ignores SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGTERM, SIGTTIN, SIGTTOU, and SIGTSTP when the -D option is used.
  • A diagnostic message is no longer printed if an attempt to restart a process has failed with ESRCH. This feature addresses BZ#1662936.
  • The ASCII dump no longer tries to read the whole buffer at once. As a result, it can fail with a diagnostic message after dumping only a part. The amount of preceding zeros printed for offset is now chosen in a way to accommodate all the digits of all the offsets being printed.

Improvements

  • Stack trace printing on receiving signals is implemented.
  • Named constant printing styles support configured by -X option is enhanced.
  • Decoding of the following system calls has been added: clock_gettime64, clock_settime64, clock_adjtime64, clock_getres_time64, clock_nanosleep_time64, timer_gettime64, timer_settime64, timerfd_gettime64, timerfd_settime64, utimensat_time64, pselect6_time64, ppoll_time64, io_pgetevents_time64, recvmmsg_time64, mq_timedsend_time64, mq_timedreceive_time64, semtimedop_time64, rt_sigtimedwait_time64, futex_time64, sched_rr_get_interval_time64, pidfd_send_signal, io_uring_setup, io_uring_enter, and io_uring_register.
  • Decoding of the bpf system call is enhanced.
  • Decoding of the following ioctl commands is implemented: BLKGETZONESZ, BLKGETNRZONES, KVM_CHECK_EXTENSION, NBD_*, and RND*.
  • Decoding of the AF_PACKET protocols in the s socket system call is implemented.
  • Decoding of the SOL_XDP socket option names is implemented.
  • Decoding of the getsockopt SO_ERROR and SO_TIMESTAMP*_NEW options is enhanced.
  • Decoding of the IFLA_*, NETCONFA_*, and SMC_DIAG_* netlink attributes is enhanced.
  • Decoding of the pkey_mprotect, pkey_alloc, and pkey_free system calls is now available on IBM Z architecture.
  • Decoding of the direct IPC system calls is now available on IBM POWER and IBM Z architecture.
  • Decoding of the kexec_file_load and rseq system calls is now available on the 64-bit ARM architecture.

A.5. Changes in SystemTap

Red Hat Developer Toolset 9.0 is distributed with SystemTap 4.1.

The following features have been added or modified since the previous release of Red Hat Developer Toolset:

  • The eBPF runtime backend can handle more features of the scripting language such as string variables and rich formatted printing.
  • Performance of the translator is significantly improved.
  • The DWARF4 debuginfo constructs can now extract more types of data in optimized C code.

A.6. Changes in Valgrind

Red Hat Developer Toolset 9.0 is distributed with Valgrind 3.15.0.

The following features have been added or modified since the previous release of Red Hat Developer Toolset:

  • AMD64: the RDRAND and F16C instruction set extensions are now supported.
  • Cachegrind: the cg_annotate tool has a new option --show-percs. It prints percentages next to all event counts.
  • Callgrind: callgrind_annotate has a new option --show-percs. It prints percentages next to all event counts.
  • Massif: the default value for --read-inline-info is now yes.
  • Memcheck: the --xtree-leak=yes option now activates the --show-leak-kinds=all option.
  • A new option is added: --show-error-list=no|yes.

    • It lists detected errors and used suppressions after the run is ended.
    • In the previous version of Valgrind this information was only shown in -v verbose mode.
    • The short option -s is equivalent to --show-error-list=yes.

The DHAT tool is non-experimental now. It is improved and has received a GUI. Changes and new features include:

  • To use DHAT, run a new command --tool=dhat. The old command --tool=exp-dhat is not supported.
  • The --show-top-n and --sort-by options are removed. When the program ends, DHAT prints only minimal data and writes all profiling data to a file.
  • A new viewer is added: dh_view.html.

    • It is a JavaScript program that should be run in a browser.
    • It is shipped as /usr/libexec/valgrind/dh_view.html.
    • To see profile results with the viewer, follow the instructions from a message that is printed after a run finishes.
  • DHAT manual is shipped as /usr/share/doc/valgrind/html/dh-manual.html.

A.7. Changes in OProfile

Red Hat Developer Toolset 9.0 is distributed with OProfile 1.3.0.

The following features have been modified since the previous release of Red Hat Developer Toolset:

  • OProfile now correctly maps samples from binaries generated by the GCC compiler back to the source code. It applies to the GCC compiler shipped as part of Red Hat Developer Toolset 9.0.
  • OProfile ocount now correctly terminates any child processes created as a result of errors in performance monitoring hardware setup. OProfile ocount no longer creates orphan processes when an error occurs during performance monitoring hardware setup.

A.8. Changes in Dyninst

Red Hat Developer Toolset 9.0 is distributed with Dyninst 10.1.0.

The following feature has been improved since the previous release of Red Hat Developer Toolset:

  • Start-up time has been improved by using parallel code analysis.
Note

Dyninst 10.1.0 is only available for AMD64 and Intel 64 and does not run on IBM POWER and the 64-bit ARM architecture.