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.
-
A new IPA-modref pass, controlled by the
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.
-
The new
New warnings:
-
-Wsizeof-array-div
, enabled by the-Wall
option, warns about divisions of twosizeof
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 takeconst
-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.
-
The
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 theR
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 isshare-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 globalifunc
symbols. The second character, if present, is used when displaying localifunc
symbols. -
ar
: the previously unusedl
modifier can be used for specifying dependencies of a static library. The arguments of thisl
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
andeu-readelf
tools now recognize and show theSHF_GNU_RETAIN
andSHT_X86_64_UNWIND
flags on ELF sections. -
The
DEBUGINFOD_SONAME
macro has been added todebuginfod.h
. This macro can be used with thedlopen
function to load thelibdebuginfod.so
library dynamically from an application. -
A new function
debuginfod_set_verbose_fd
has been added to thedebuginfod-client
library. This function enhances thedebuginfod_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 thedebuginfod
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 thedebuginfod
server. -
The
libdw
library transparently handles theDW_FORM_indirect
location value so that thedwarf_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
andshow exec-file-mismatch
commands set and show a newexec-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 attributedynamic
and thegdb.Type.sizeof
attribute can have valueNone
for dynamic types. IfType.fields()
returns a field of a dynamic type, the value of itsbitpos
attribute can beNone
. -
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 agdb.RegisterDescriptorIterator
object, an iterator that returnsgdb.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 agdb.RegisterGroupIterator
object, an iterator that returnsgdb.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
, andrt_sigqueueinfo
-
Removed calls:
arch_prctl
andunshare
-
New calls:
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
, andprocess_madvise
. -
Decoding of the following system calls is enhanced:
io_uring_setup
,membarrier
,perf_event_open
, andpidfd_open
. -
Decoding of the
GPIO_*
andTEE_*
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
, andVIDIOC_QUERY_EXT_CTRL
. -
Decoding of the
NT_PRSTATUS
andNT_FPREGSET
regsets of thePTRACE_GETREGSET
andPTRACE_SETREGSET
ptrace
requests is implemented. -
Decoding of the
regs
argument of the followingptrace
requests is implemented:PTRACE_GETREGS
,PTRACE_GETREGS64
,PTRACE_SETREGS
,PTRACE_SETREGS64
,PTRACE_GETFPREGS
, andPTRACE_SETFPREGS
. -
Decoding of the
struct msginfo
argument of theIPC_INFO
andMSG_INFO
msgctl
system calls commands is implemented. -
Decoding of the
struct msqid_ds
argument of theMSG_STAT
andMSG_STAT_ANY
msgctl
system calls commands is implemented. -
Decoding of the
struct seminfo
argument of theIPC_INFO
andSEM_INFO
semctl
system calls commands is implemented. -
Decoding of the
struct semid_ds
argument of theIPC_SET
,IPC_STAT
,SEM_STAT
, andSEM_STAT_ANY
semctl system calls commands is implemented. -
Decoding of the
struct shminfo
argument of theIPC_INFO
shmctl
system calls command is implemented. -
Decoding of the
struct shm_info
argument of theSHM_INFO
shmctl
system calls command is implemented. -
Decoding of the
struct shmid_ds
argument of theSHM_STAT
andSHM_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_*
, andV4L2_*
. -
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 themismatch
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, thefull,mismatch
parameters print the expected full context along with the actual one because the user part of the contexts mismatches. However, when using a solitarymismatch
, 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
, andSIOCBRDELIF
ioctl
commands is fixed. -
The
clock_gettime64
,clock_settime64
,clock_adjtime64
, andlock_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 descriptorsstdin
,stdout
, andstderr
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 separatedebuginfo
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.