Appendix A. Changes in Version 11.0

The following sections document features and compatibility changes introduced with Red Hat Developer Toolset 11.0. The list is not full and will be updated.

A.1. Changes in GCC

Red Hat Developer Toolset 11.0 is distributed with GCC 11.2.

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

General Improvements

  • GCC now defaults to the DWARF Version 5 debugging format.
  • Column numbers shown in diagnostics represent real column numbers by default and respect multicolumn characters.
  • The straight-line code vectorizer considers the whole function when vectorizing.
  • A series of conditional expressions that compare the same variable can be transformed into a switch statement if each of them contains a comparison expression.
  • Interprocedural optimization improvements:

    • A new IPA-modref pass, controlled by the -fipa-modref option, tracks side effects of function calls and improves the precision of points-to analysis.
    • The identical code folding pass, controlled by the -fipa-icf option, was significantly improved to increase the number of unified functions and reduce compile-time memory use.
  • Link-time optimization improvements:

    • Memory allocation during linking was improved to reduce peak memory use.
  • Using a new GCC_EXTRA_DIAGNOSTIC_OUTPUT environment variable in IDEs, you can request machine-readable “fix-it hints” without adjusting build flags.
  • The static analyzer, run by the -fanalyzer option, is improved significantly with numerous bug fixes and enhancements provided.
  • To mitigate CVE-2021-42574, a new warning was added to GCC with the release of the RHSA-2021:4669 advisory. This new -Wbidirectional=[none|unpaired|any] warning warns about possibly dangerous bidirectional (BiDi) Unicode characters and has three levels:

    • -Wbidirectional=unpaired (default) warns about improperly terminated BiDi contexts.
    • -Wbidirectional=none turns the warning off.
    • -Wbidirectional=any warns about any use of BiDi characters.

Language-specific Improvements

C family

  • C and C++ compilers support non-rectangular loop nests in OpenMP constructs and the allocator routines of the OpenMP 5.0 specification.
  • Attributes:

    • The new no_stack_protector attribute marks functions that should not be instrumented with stack protection (-fstack-protector).
    • The improved malloc attribute can be used to identify allocator and deallocator API pairs.
  • New warnings:

    • -Wsizeof-array-div, enabled by the -Wall option, warns about divisions of two sizeof operators when the first one is applied to an array and the divisor does not equal the size of the array element.
    • -Wstringop-overread, enabled by default, warns about calls to string functions that try to read past the end of the arrays passed to them as arguments.
  • Enhanced warnings:

    • -Wfree-nonheap-object detects more instances of calls to deallocation functions with pointers not returned from a dynamic memory allocation function.
    • -Wmaybe-uninitialized diagnoses the passing of pointers and references to uninitialized memory to functions that take const-qualified arguments.
    • -Wuninitialized detects reads from uninitialized dynamically allocated memory.

C

  • Several new features from the upcoming C2X revision of the ISO C standard are supported with the -std=c2x and -std=gnu2x options. For example:

    • The standard attribute is supported.
    • The __has_c_attribute preprocessor operator is supported.
    • Labels may appear before declarations and at the end of a compound statement.

C++

  • The default mode is changed to -std=gnu++17.
  • The C++ library libstdc++ has improved C++17 support now.
  • Several new C++20 features are implemented. Note that C++20 support is experimental.

    For more information about the features, see C++20 Language Features.

  • The C++ front end has experimental support for some of the upcoming C++23 draft features.
  • New warnings:

    • -Wctad-maybe-unsupported, disabled by default, warns about performing class template argument deduction on a type with no deduction guides.
    • -Wrange-loop-construct, enabled by -Wall, warns when a range-based for loop is creating unnecessary and resource inefficient copies.
    • -Wmismatched-new-delete, enabled by -Wall, warns about calls to operator delete with pointers returned from mismatched forms of operator new or from other mismatched allocation functions.
    • -Wvexing-parse, enabled by default, warns about the most vexing parse rule: the cases when a declaration looks like a variable definition, but the C++ language requires it to be interpreted as a function declaration.

Architecture-specific Improvements

The 64-bit ARM architecture

  • The Armv8-R architecture is supported through the -march=armv8-r option.
  • GCC can autovectorize operations performing addition, subtraction, multiplication, and the accumulate and subtract variants on complex numbers.

AMD and Intel 64-bit architectures

  • The following Intel CPUs are supported: Sapphire Rapids, Alder Lake, and Rocket Lake.
  • New ISA extension support for Intel AVX-VNNI is added. The -mavxvnni compiler switch controls the AVX-VNNI intrinsics.
  • AMD CPUs based on the znver3 core are supported with the new -march=znver3 option.
  • Three microarchitecture levels defined in the x86-64 psABI supplement are supported with the new -march=x86-64-v2, -march=x86-64-v3, and -march=x86-64-v4 options.

A.2. Changes in binutils

Red Hat Developer Toolset 11.0 is distributed with binutils 2.36.

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

The assembler

  • On Intel architectures, the AMX, AVX VNNI, HRESET, Key Locker, TDX, and UINTR instructions are supported.
  • When setting the link order attribute of ELF sections, you can use a numeric section index instead of a symbol name.
  • The following ARM cores are supported: Cortex-A78, Cortex-A78AE, Cortex-A78C, Cortex-X1, Cortex-R82, Neoverse V1, and Neoverse N2.
  • On 64-bit ARM architectures, the Armv8-R and Armv8.7-A ISA extensions are supported.
  • A .nop directive has been added that generates a single no-operation instruction that will work on any target.
  • The SHF_GNU_RETAIN flag is supported. It specifies that the section should not be garbage collected by the linker. This flag can be applied to sections using the R flag in the .section directive.

The linker

  • A new libdep plugin has been added. It records linking dependencies in static libraries and uses them when a final link is performed.
  • A new --error-handling-script=<NAME> command-line option has been added. It runs a helper script when an undefined symbol or a missing library is encountered.
  • The linker now deduplicates the types in the .ctf sections. You can specify how the linker does this by using the new --ctf-share-types command-line option. The default value of this option, which is share-unconflicted, produces the most compact output.
  • The linker omits the variable section from the .ctf sections by default, saving space. This behavior can be unsuitable for projects that have their own analog of symbol tables, which are not reflected in ELF symbol tables.
  • The SHF_GNU_RETAIN ELF section flag is supported. This flag specifies that the section should not be garbage collected by the linker.

Other binary utilities

  • nm: a new command-line option --ifunc-chars=CHARS has been added that 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.
  • ar: the previously unused l modifier can be used for specifying dependencies of a static library. The arguments of this l option (or its longer form --record-libdeps) are stored verbatim in the __.LIBDEP member of the archive, which the linker may read at link time.
  • readelf: using the --lto-syms command-line option you can display the contents of the LTO symbol table sections.
  • readelf accepts the -C command-line option that enables demangling of symbol names. In addition, the --demangle=<style>, --no-demangle, --recurse-limit, and --no-recurse-limit options are have been added.
  • To mitigate CVE-2021-42574, a new command-line option was added to binutils with the release of the RHSA-2021:4730 advisory.

    Tools which display names or strings (readelf, strings, nm, and objdump) now have a new --unicode (-U) command-line option, which controls how Unicode characters are handled. The following values can be set for the option:

    • --unicode=default treats BiDi characters as normal for the tool. This is the default behaviour when the --unicode option is not used.
    • --unicode=locale displays BiDi characters according to the current locale.
    • --unicode=hex displays BiDi characters as hex byte values.
    • --unicode=escape displays BiDi characters as Unicode escape sequences.
    • --unicode=highlight displays BiDi characters as Unicode escape sequences highlighted in red if it’s supported by the output device.

A.3. Changes in elfutils

Red Hat Developer Toolset 11.0 is distributed with elfutils 0.185.

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

  • The eu-elflint and eu-readelf tools now recognize and show the SHF_GNU_RETAIN and SHT_X86_64_UNWIND flags on ELF sections.
  • The DEBUGINFOD_SONAME macro has been added to debuginfod.h. This macro can be used with the dlopen function to load the libdebuginfod.so library dynamically from an application.
  • A new function debuginfod_set_verbose_fd has been added to the debuginfod-client library. This function enhances the debuginfod_find_* queries functionality by redirecting the verbose output to a separate file.
  • Setting the DEBUGINFOD_VERBOSE environment variable now shows more information about which servers the debuginfod client connects to and the HTTP responses of those servers.
  • The debuginfod server provides a new thread-busy metric and more detailed error metrics to make it easier to inspect processes that run on the debuginfod server.
  • The libdw library transparently handles the DW_FORM_indirect location value so that the dwarf_whatform function returns the actual FORM of an attribute.
  • To reduce network traffic, the debuginfod-client library stores negative results in a cache, and client objects can reuse an existing connection.

A.4. Changes in dwz

Red Hat Developer Toolset 11.0 is distributed with dwz 0.14.

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

  • The DWARF Version 5 debugging format is supported.
  • The DWARF supplementary object files can be produced using the .debug_sup section.
  • A new experimental optimization has been added that exploits the One Definition Rule of C++.
  • The DW_OP_GNU_variable_value expression opcode is supported.
  • Numerous bugs have been fixed and performance improvements have been added.

A.5. Changes in GDB

Red Hat Developer Toolset 11.0 is distributed with GDB 10.2.

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

New features

  • Multithreaded symbol loading is enabled by default on architectures that support this feature. This change provides better performance for programs with many symbols.
  • Text User Interface (TUI) windows can be arranged horizontally.
  • GDB supports debugging multiple target connections simultaneously but this support is experimental and limited. For example, you can connect each inferior to a different remote server that runs on a different machine, or you can use one inferior to debug a local native process or a core dump or some other process.

New and improved commands

  • A new tui new-layout name window weight [window weight…] command creates a new text user interface (TUI) layout, you can also specify a layout name and displayed windows.
  • The improved alias [-a] [--] alias = command [default-args] command can specify default arguments when creating a new alias.
  • The set exec-file-mismatch and show exec-file-mismatch commands set and show a new exec-file-mismatch option. When GDB attaches to a running process, this option controls how GDB reacts when it detects a mismatch between the current executable file loaded by GDB and the executable file used to start the process.

Python API

  • The gdb.register_window_type function implements new TUI windows in Python.
  • You can now query dynamic types. Instances of the gdb.Type class can have a new boolean attribute dynamic and the gdb.Type.sizeof attribute can have value None for dynamic types. If Type.fields() returns a field of a dynamic type, the value of its bitpos attribute can be None.
  • A new gdb.COMMAND_TUI constant registers Python commands as members of the TUI help class of commands.
  • A new gdb.PendingFrame.architecture() method retrieves the architecture of the pending frame.
  • A new gdb.Architecture.registers method returns a gdb.RegisterDescriptorIterator object, an iterator that returns gdb.RegisterDescriptor objects. Such objects do not provide the value of a register but help understand which registers are available for an architecture.
  • A new gdb.Architecture.register_groups method returns a gdb.RegisterGroupIterator object, an iterator that returns gdb.RegisterGroup objects. Such objects help understand which register groups are available for an architecture.

A.6. Changes in ltrace

Red Hat Developer Toolset 11.0 is distributed with ltrace 0.7.91.

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

  • If a path is specified in the $XDG_CONFIG_DIRS patch file but does not exist, no diagnostic is given.

A.7. Changes in strace

Red Hat Developer Toolset 11.0 is distributed with strace 5.13.

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

Changes in Behavior

  • Modified %process class contains system calls associated with process lifecycle (creation, execution, and termination):

    • New calls: kill, tkill, tgkill, pidfd_send_signal, and rt_sigqueueinfo
    • Removed calls: arch_prctl and unshare

Improvements

  • A new -n (--syscall-number) option prints system call numbers.
  • A new --secontext[=full] option displays SELinux contexts.
  • Poke injection is implemented and two new options are added: --inject=SET:poke_enter= and --inject=SET:poke_exit=.
  • On IBM POWER architecture, System Call Vectored (SCV) ABI support is added.
  • libdw-based stack tracing is enabled for non-native personalities.
  • Netlink data is printed in a more structured way.
  • Decoding of the following system calls is implemented: close_range, epoll_pwait2, faccessat2, landlock_add_rule, landlock_create_ruleset, landlock_restrict_self, mount_setattr, and process_madvise.
  • Decoding of the following system calls is enhanced: io_uring_setup, membarrier, perf_event_open, and pidfd_open.
  • Decoding of the GPIO_* and TEE_* ioctl commands is implemented.
  • Decoding of the following ioctl commands is implemented: FS_IOC_FS[GS]ETXATTR, FS_IOC_[GS]ETFLAGS, FS_IOC32_[GS]ETFLAGS, LOOP_CONFIGURE, SIOCADDMULTI, SIOCDELMULTI, SIOCGIFENCAP, SIOCOUTQNSD, SIOCSIFENCAP, SIOCSIFHWBROADCAST, UBI_IOCRPEB and UBI_IOCSPEB, V4L2_BUF_TYPE_META_CAPTURE, V4L2_BUF_TYPE_META_OUTPUT, and VIDIOC_QUERY_EXT_CTRL.
  • Decoding of the NT_PRSTATUS and NT_FPREGSET regsets of the PTRACE_GETREGSET and PTRACE_SETREGSET ptrace requests is implemented.
  • Decoding of the regs argument of the following ptrace requests is implemented: PTRACE_GETREGS, PTRACE_GETREGS64, PTRACE_SETREGS, PTRACE_SETREGS64, PTRACE_GETFPREGS, and PTRACE_SETFPREGS.
  • Decoding of the struct msginfo argument of the IPC_INFO and MSG_INFO msgctl system calls commands is implemented.
  • Decoding of the struct msqid_ds argument of the MSG_STAT and MSG_STAT_ANY msgctl system calls commands is implemented.
  • Decoding of the struct seminfo argument of the IPC_INFO and SEM_INFO semctl system calls commands is implemented.
  • Decoding of the struct semid_ds argument of the IPC_SET, IPC_STAT, SEM_STAT, and SEM_STAT_ANY semctl system calls commands is implemented.
  • Decoding of the struct shminfo argument of the IPC_INFO shmctl system calls command is implemented.
  • Decoding of the struct shm_info argument of the SHM_INFO shmctl system calls command is implemented.
  • Decoding of the struct shmid_ds argument of the SHM_STAT and SHM_STAT_ANY shmctl system calls commands is implemented.
  • Decoding of the IFLA_BRPORT_* netlink attributes is updated to match the Linux 5.12 kernel.
  • Lists of the following constants are updated: *_MAGIC, ALG_*, AUDIT_*, BPF_*, BTRFS_*, CAP_*, CLOSE_RANGE_*, DEVCONF_*, ETH_*, FAN_*, IFLA_*, INET_DIAG_*, IORING_*, IPV6_*, IP_*, KEXEC_*, KEYCTL_*, KEY_*, KVM_*, LOOP_*, MDBA_*, MEMBARRIER_CMD_*, MPOL_*, MS_*, MTD_*, NDA_*, NFT_MSG_*, NLMSGERR_*, NT_*, PR_*, PTP_PEROUT_*, PTRACE_*, RESOLVE_*, RTAX_*, RTA_*, RTC_*, RTM_*, RTNH_*, RTPROT_*, SCTP_*, SEGV_*, SO_*, STATX_*, ST_*, SYS_*, TCA_*, TRAP_*, UFFDIO_*, UFFD_*, and V4L2_*.
  • Lists of ioctl commands are updated to match such lists from the Linux 5.13 kernel update.
  • With the release of the RHEA-2022:4635 advisory, strace can now display mismatches between the actual SELinux contexts and the definitions extracted from the SELinux context database.

    An existing --secontext option of strace has been extended with the mismatch parameter. This parameter enables to print the expected context along with the actual one upon mismatch only. The output is separated by double exclamation marks (!!), first the actual context, then the expected one. In the examples below, the full,mismatch parameters print the expected full context along with the actual one because the user part of the contexts mismatches. However, when using a solitary mismatch, it only checks the type part of the context. The expected context is not printed because the type part of the contexts matches.

    [...]
    $ strace --secontext=full,mismatch -e statx stat /home/user/file
    statx(AT_FDCWD, "/home/user/file" [system_u:object_r:user_home_t:s0!!unconfined_u:object_r:user_home_t:s0], ...
    
    $ strace --secontext=mismatch -e statx stat /home/user/file
    statx(AT_FDCWD, "/home/user/file" [user_home_t:s0], ...

    SELinux context mismatches often cause access control issues associated with SELinux. The mismatches printed in the system call traces can significantly expedite the checks of SELinux context correctness. The system call traces can also explain specific kernel behavior with respect to access control checks.

Bug Fixes

  • Decoding of the SIOCGIFINDEX, SIOCBRADDIF, and SIOCBRDELIF ioctl commands is fixed.
  • The clock_gettime64, clock_settime64, clock_adjtime64, and lock_getres_time64 system calls are added to the %clock trace class.
  • The statx system call is added to the %fstat trace class.
  • Previously, strace used insufficient buffer sizes for network interface name printing. This led to assertions on attempts of printing interface names that require quoting, for example, names longer than 4 characters in -xx mode. With the release of the RHEA-2022:4635 advisory, this bug has been fixed.

A.8. Changes in SystemTap

Red Hat Developer Toolset 11.0 is distributed with SystemTap 4.5.

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

  • 32-bit floating-point variables are automatically widened to double variables and, as a result, can be accessed directly as $context variables.
  • enum values can be accessed as $context variables.
  • The BPF uconversions tapset has been extended and includes more tapset functions to access values in user space, for example user_long_error().
  • Concurrency control has been significantly improved to provide stable operation on large servers.

For further information about notable changes, see the upstream SystemTap 4.5 release notes.

A.9. Changes in Valgrind

Red Hat Developer Toolset 11.0 is distributed with Valgrind 3.17.0.

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

  • Valgrind can read the DWARF Version 5 debugging format.
  • Valgrind supports debugging queries to the debuginfod server.
  • The ARMv8.2 processor instructions are partially supported.
  • The Power ISA v.3.1 instructions on POWER10 processors are partially supported.
  • The IBM z14 processor instructions are supported.
  • Most IBM z15 instructions are supported. The Valgrind tool suite supports the miscellaneous-instruction-extensions facility 3 and the vector-enhancements facility 2 for the IBM z15 processor. As a result, Valgrind runs programs compiled with GCC -march=z15 correctly and provides improved performance and debugging experience.
  • The --track-fds=yes option respects -q (--quiet) and ignores the standard file descriptors stdin, stdout, and stderr by default. To track the standard file descriptors, use the --track-fds=all option.
  • The DHAT tool has two new modes of operation: --mode=copy and --mode=ad-hoc.

A.10. Changes in Dyninst

Red Hat Developer Toolset 11.0 is distributed with Dyninst 11.0.0.

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

  • Support for the debuginfod server and for fetching separate debuginfo files.
  • Improved detection of indirect calls to procedure linkage table (PLT) stubs.
  • Improved C++ name demangling.
  • Fixed memory leaks during code emitting.

A.11. Changes in Annobin

Red Hat Developer Toolset 11.0 is distributed with Annobin 9.82.

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

GCC plugin

  • ARM and RISCV targets are supported.
  • The LTO compiler is supported.

Annocheck

  • In verbose mode, the reason for skipping specific tests is reported.
  • Some messages are highlighted with color.
  • Some GO tests have been added.
  • On 64-bit ARM architectures, tests for BTI and PAC security features have been added.
  • To mitigate CVE-2021-42574, a new test is added to detect the presence of multibyte characters in symbol names. This change has been implemented in Annobin with the release of the RHSA-2021:4729 advisory.