After a year of development GCC 12.1 build package released, the first significant release on the new GCC 12.x branch.
Under the new version numbering scheme, version 12.0 was used during development, and shortly before the release of GCC 12.1, the GCC 13.0 branch was already forked, from which the next major version of GCC 13.1 will be formed.
GCC 12.1 Main New Features
In this new version that is presented, it is highlighted that se added support for the CTF debugging format, which provides compact storage of information about C types, relationships between functions, and debugging symbols. When embedded in ELF objects, the format allows the use of EFL symbol tables to avoid data duplication.
In addition to this, it is noted that work continues to expand support for future C2X and C++23 standards for C and C++ and that also the compatibility with the experimental sections of the standards C++20 and C++23 has been improved in the C++ Standard Library.
For architecture x86, added additional protection against processor vulnerabilities caused by speculative execution of instructions after unconditional jump-forward operations. The problem arises from the preemptive processing of instructions immediately following the jump instruction in memory (SLS, Straight Line Speculation). The "-mharden-sls" option is suggested to enable protection.
It is also highlighted that added a definition for the use of uninitialized variables to the experimental static analyzer. Added initial support for parsing assembly code on inline inserts. Improved memory tracking. Rewritten code to handle change expressions.
Were added 30 new calls to libgccjit, a shared library for embedding a code generator into other processes and using it for JIT bytecode to native code compilation.
On the other hand, it is highlighted that the support for the CO-RE mechanism (Compile Once - Run Everywhere) to the backend to generate BPF bytecode, which allows to compile the code of the eBPF programs for the kernel Linux just once and use a special universal loader that adapts the loaded program to the current kernel and BTF types (BPF type format). CO-RE solves the problem with the portability of compiled eBPF programs that previously could only be used in the kernel version for which they were built, since the position of elements in the data structures varies from version to version.
has been added to RISC-V backend support for new architecture extensions of instruction sets zba, zbb, zbc, and zbs, as well as ISA extensions for vector and scalar cryptographic operations. Support for the RISC-V ISA 20191213 specification is provided by default. Added -mtune=thead-c906 flag to enable optimizations for T-HEAD c906 kernels.
Added support for type __int128_t/integer(kind=16) to the code generation backend for AMD GPUs based on the GCN microarchitecture. It is possible to use up to 40 workgroups per compute unit (CU) and up to 16 instruction fronts (wavefront, a set of threads executed in parallel by the SIMD Engine) per group. Previously, only one instruction edge per CU was allowed.
The indicators "-march", "-mptx" and "-march-map" were added to the NVPTX backend, designed for code generation using the NVIDIA PTX (Parallel Thread Execution) instruction set architecture. Implemented support for PTX ISA sm_53, sm_70, sm_75 and sm_80. The default architecture is sm_30.
In addition to this, it is highlighted that fixed an issue where the compiler would perform an unqualified search of a dependent operator expression at template definition time rather than at instantiation time. This solution matches the existing behavior for dependent calling expressions.
It is worth mentioning that on May 23, the project will celebrate 35 years since the formation of the first GCC release. Finally if you are interested in knowing more about it, you can check the details In the following link.