Appendix A. Changes in Version 12.0

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

A.1. Changes in GCC

Red Hat Developer Toolset 12.1 is distributed with GCC 12.2.1.

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

General Improvements

  • Vectorization is enabled at -O2, which is now equivalent to the original -O2 -ftree-vectorize -fvect-cost-model=very-cheap.

Language-specific Improvements

OpenMP

  • OpenMP 5.0 support has been extended. The close map modifier and the affinity clause are now supported.
  • Several newly implemented OpenMP 5.1 features have been added. For example, support for expressing OpenMP directives as C++ 11 attributes, the masked and scope construct, the nothing and error directives, using primary with the proc_bind clause and OMP_PROC_BIND environment variable, the reproducible and unconstrained modifiers to the order clause, and, for C and C++ only, the align and allocator modifiers to the allocate clause, and the atomic extensions.

C family

  • New features and attributes:

    • Support for the __builtin_shufflevector built-in compatible with the clang language extension.
    • Support for the unavailable attribute.
    • A new built-in function, __builtin_assoc_barrier, used to inhibit re-association of floating-point expressions.
    • Support for the __builtin_dynamic_object_size built-in compatible with the clang language extension.
  • New warnings:

    • -Wbidi-chars warns about potentially misleading UTF-8 bidirectional control characters. The default is -Wbidi-chars=unpaired.
    • -Warray-compare warns about comparisons between two operands of array type.
  • Enhanced warnings:

    • -Wattributes has been extended, so it is now possible to use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to suppress warnings about unknown scoped attributes in C++11 and C2X. Similarly, the #pragma GCC diagnostic ignored_attributes "vendor::attr" can be used to do the same thing.

C

  • Digit separators, like in C++, are supported for C2X.
  • The #elifdef and #elifndef preprocessing directives are now supported.
  • The printf and scanf formats checking with -Wformat now support the %b format specified by C2X for binary integers, and the %B format recommended by C2X for printf.

C++

  • The following C++23 features have been implemented:

    • P1938R3: Implement if consteval
    • P0849R8: auto(x): decay-copy in the language
    • P2242R3: Non-literal variables (and labels and gotos) in constexpr functions
    • P2334R1: Support for preprocessing directives elifdef and elifndef
    • P2360R0: Extend init-statement to allow alias-declaration
    • P2128R6: Multidimensional subscript operator
    • DR 2397: auto specifier for pointers and references to arrays
  • A new command-line option, -fimplicit-constexpr, used to make inline functions implicitly constexpr.
  • A new command-line option, -ffold-simple-inlines, used to fold calls to certain trivial inline functions such as std::move, std::forward, std::addressof, and std::as_const.
  • Deduction guides can be declared at class scope
  • -Wuninitialized now warns about using uninitialized variables in member initializer lists.
  • New warnings:

    • New warning options for the following C++ language mismatches: -Wc11-extensions`, `-Wc14-extensions, -Wc17-extensions`, `-Wc20-extensions, and -Wc++23-extensions. They are enabled by default and are used to control existing pedwarns about occurrences of new C++ constructs in code using an old C++ standard dialect.
    • A new warning, -Wmissing-requires, warns about missing requires.
    • The existing std::is_constant_evaluated warning is extended to warn in more cases.

For more information about new C++ features in Red Hat Developer Toolset 12.1, see the following Red Hat Developers article.

Runtime library libstdC++

  • The following experimental C++20 support features have been improved:

    • std::vector, std::basic_string, std::optional, and std::variant can now be used in constexpr functions.
    • std::make_shared for arrays with default initialization, and std::atomic<std::shared_ptr<T>>.
    • Layout-compatibility and pointer-interconvertibility traits.
  • The following experimental C++23 support features have been improved:

    • Monadic operations for std::optional.
    • std::move_only_function
    • <spanstream>
    • std::basic_string::resize_and_overwrite
    • std::unique_ptr can now be used in constexpr functions.
    • <stacktrace> (not built by default, requires linking to an extra library).
    • <stdatomic.h>
    • std::invoke_r
    • constexpr std::type_info::operator==

Architecture-specific Improvements

The 64-bit ARM architecture

  • A number of new CPUs are supported through the -mcpu and -mtune options.
  • The 64-byte atomic load/store intrinsics to accelerator memory from the 2020 Arm Architecture extensions are supported through the +ls64 option extension.
  • Initial code generation support is supported for hardware instructions that accelerate the memcpy, memmove, and memset standard functions. Generate these instructions when compiling with the +mopsoption extension.
  • The Arm C Language Extensions (ACLE) Advanced Single Instruction Multiple Data (SIMD) intrinsics accessible through the arm_neon.h header are significantly reimplemented and generate higher-performing code than previous GCC versions.

AMD and Intel 64-bit architectures

  • New ISA extension support for Intel AVX512-FP16 was added. AVX512FP16 intrinsics are available via the -mavx512fp16 compiler switch.
  • For both C and C++, the _Float16 type is supported on systems with SSE2 enabled.
  • Mitigation against straight line speculation (SLS) for function return and indirect jump is supported via -mharden-sls=[none|all|return|indirect-jmp].

A.2. Changes in elfutils

Red Hat Developer Toolset 12.1 is distributed with elfutils 0.187.

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

  • Support for the NVIDIA Cuda line map extensions in the libdw library.
  • The eu-addr2line executable now defaults to the -A, --absolute option, which shows file names including the full compilation directory. Use the new --relative option to revert to the old behavior.
  • The eu-readelf and eu-elflint executables now recognize FDO Packaging Metadata ELF notes.
  • The debuginfod executable now supports:

    • A new -d :memory: option for in-memory databases.
    • A new -r option to use -I or -X regexes for grooming stale files.
    • A new -C option for connection thread pooling.
    • A new --passive mode for serving from read-only databases.
  • The debuginfod-client directory now supports setting the DEBUGINFOD_MAXSIZE, DEBUGINFOD_MAXTIME, and DEBUGINFOD_RETRY environment variables. Negative cache files are now zero-sized, which work better than no-permission files when scanning files or making backups.

A.3. Changes in GDB

Red Hat Developer Toolset 12.1 is distributed with GDB 11.2.

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

New features

  • New support for Aarch64 MTE. See new commands with the "memory-tag" prefix.
  • --qualified option for -break-insert and -dprintf-insert. This option looks for an exact match of the user’s event location instead of searching in all scopes.

    For example, break --qualified foo will look for a symbol named foo in the global scope. Without --qualified, GDB will search all scopes for a symbol with that name.

  • --force-condition: Any supplied condition is defined even if it is currently invalid.
  • -break-condition --force: Likewise for the MI command.
  • -file-list-exec-source-files accepts optional REGEXP to limit output.
  • .gdbinit search path includes the config directory. The order is:

    1. $XDG_CONFIG_HOME/gdb/gdbinit
    2. $HOME/.config/gdb/gdbinit
    3. $HOME/.gdbinit.
  • Support for ~/.config/gdb/gdbearlyinit or ~/.gdbearlyinit.
  • -eix and -eiex early initialization file options.

Terminal user interface (TUI)

  • Support for mouse actions inside terminal user interface (TUI) windows.
  • Key combinations that do not act on the focused window are now passed to GDB.

New and improved commands

  • A new show print memory-tag-violations command.
  • A new set print memory-tag-violations command.
  • A new memory-tag show-logical-tag command.
  • A new memory-tag with-logical-tag command.
  • A new memory-tag show-allocation-tag command.
  • A new memory-tag check command.
  • New show startup-quietly and set startup-quietly commands: A way to specify -q or -quiet in GDB scripts. Only valid in early initialization files.
  • New show print type hex and set print type hex commands: Tells GDB to print sizes or offsets for structure members in hexidecimal instead of decimal.
  • New show python ignore-environment and set python ignore-environment commands: If enabled, GDB’s Python interpreter ignores Python environment variables, much like passing -E to the Python executable. Only valid in early initialization files.
  • New show python dont-write-bytecode and set python dont-write-bytecode commands: If 'off', these commands suppress GDB’s Python interpreter from writing bytecode compiled objects of imported modules, much like passing -B to the Python executable. Only valid in early initialization files.
  • break LOCATION if CONDITION: If CONDITION is invalid, GDB refuses to set a breakpoint. The -force-condition option overrides this.
  • CONDITION -force N COND: Same as the previous command.
  • inferior [ID]: When ID is omitted, this command prints information about the current inferior. Otherwise, unchanged.
  • ptype[/FLAGS] TYPE | EXPRESSION: Use the '/x' flag to use hexidecimal notation when printing sizes and offsets of struct members. Use the '/d' flag to do the same but using decimal.
  • info sources: Output has been restructured.

Python API

  • Inferior objects contain a read-only connection_num attribute.
  • New gdb.Frame.level() method.
  • New gdb.PendingFrame.level() method.
  • gdb.BreakpoiontEvent emitted instead of gdb.Stop.

A.4. Changes in strace

Red Hat Developer Toolset 12.1 is distributed with strace 5.18.

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 --secontext=mismatch option finds mismatches in SELinux contexts.
  • A new --strings-in-hex=non-ascii-chars option for using hexadecimal numbers instead of octal characters in escape sequences in the output strings.
  • A new --decode-pids=comm option, and its alias -Y, print command names for PIDs.
  • A new --decode-pids=pidns alias to the --pidns-translation option.
  • Printing the current working directory when the AT_FDCWD constant is used with the --decode-fds=path option enabled is implemented.
  • A new --tips option prints strace tips, tricks, and tweaks at the end of a tracing session.
  • Extended personality designation syntax of system call specification expressions to support all@pers and %class@pers.
  • Enhanced rejection of invalid system call numbers in syscall specification expressions.
  • Decoding of the following system calls is implemented: futex_waitv, memfd_secret, process_mrelease, quotactl_fd, and set_mempolicy_home_node.
  • Decoding of the following system calls is enhanced: bpf, io_uring_register, prctl, seccomp, and times.
  • Decoding of the following ioctl commands is implemented: COUNTER_*, HDIO_, KD*, LIRC*, RTC_PARAM_GET, RTC_PARAM_SET, and SECCOMP_*.
  • Decoding of the BTRFS_IOC_FS_INFO ioctl command is enhanced.
  • Decoding of the following netlink messages is implemented: RTM_NEWCACHEREPORT, RTM_{NEW,DEL,GET}NEXTHOP, and RTM_{NEW,GET}STATS NETLINK_ROUTE.
  • Decoding of the following netlink attributes is enhanced: IFLA_*, MDBA_ROUTER_PATTR_*, TCA_ACT_IN_HW_COUNT, *_INTVL, and *_TIMER.
  • Decoding of the siginfo_t.si_pkey field is implemented.
  • Printing system call names in places where the associated AUDIT_ARCH_* value is present (the ptrace PTRACE_GET_SYSCALL_INFO request, SIGSYS siginfo_t) is improved.
  • Decoding of the following socket addresses is implemented: AF_ALG, AF_IEEE802154, AF_MCTP, AF_NFC, AF_QIPCRTR, AF_RRPC, AF_VSOCK, and AF_XDP.
  • Decoding of the AF_IPX and AF_NETLINK socket addresses is enhanced.
  • Lists of the following constants are updated: AF_*, ARPHRD_*, AUDIT_*, BPF_*, BR_*, BTRFS_*, DEVCONF_*, DM_*, ETH_P_*, FAN_*, FAN_REPORT_*, IFA_*, IFLA_*, IORING_*, IOSQE_*, IPV4_DEVCONF_*, KEY_*, KVM_*, MADV_*, MODULE_INIT_*, MOUNT_ATTR_*, MOVE_MOUNT_*, MPOL_*, NDA_*, PACKET_*, RTM_*, SCTP_*, SO_*, TCA_ACT_*, UFFD_*, V4L2_*, XFRM_MSG_*, and *_MAGIC.
  • Lists of ioctl commands are updated to match the Linux 5.18 kernel.

Bug Fixes

  • Printing of the updated value of union bpf_attr.next_id on the exiting of bpf(BPF_*_GET_NEXT_ID) calls is fixed.
  • Printing of the struct bpf_prog_info.map_ids array is fixed.
  • The dev, pidfd, and socket arguments of the --print-fds option no longer imply the path argument.

A.5. Changes in SystemTap

Red Hat Developer Toolset 12.1 is distributed with SystemTap 4.7.

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

  • A new --sign-module option to manually sign modules with a MOK key, for use on SecureBoot systems.
  • A new stap-profile-annotate tool to produce system-wide profiles of annotated source code.
  • A new general Python tapset for probing function entry and return.
  • Extended $foo$ processing for kernel-space probes for strings that may be in user-space.
  • Extended the regular-expression language for non-capturing groups.
  • Added tapset support for several recently added kernel system calls.

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

A.6. Changes in Dyninst

Red Hat Developer Toolset 12.1 is distributed with Dyninst 12.1.0.

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

  • Initial support for glibc-2.35 multiple namespaces
  • Concurrency fixes for DWARF parallel parsing
  • Better support for the CUDA and CDNA2 GPU binaries
  • Better support for IBM POWER Systems (little endian) register access
  • Better support for PIE binaries
  • Corrected parsing for catch blocks
  • Corrected access to 64-bit Arm (aarch64) floating point registers

A.7. Changes in Annobin

Red Hat Developer Toolset 12.1 is distributed with Annobin 11.08.

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

  • A new command line option for annocheck tells it to avoid using the debuginfod service, if it is unable to find debug information in another way. Using debuginfod provides annocheck with more information, but it can also cause significant slow downs in annocheck’s performance if the debuginfod server is unavailable.
  • The Annobin sources can now be built using meson and ninja rather than configure and make if desired.
  • Annocheck now supports binaries built by the Rust 1.18 compiler.