On Fri, Jan 14, 2022 at 03:31:43PM +0100, Jakub Jelinek wrote:
gcc 12 snapshot has landed as the system compiler into rawhide
today.
GCC 12 is going to enter its stage4 development phase (only regression
and documentation bugfixes allowed) on Monday 17th, so there should be
just those bugfixes and not new features etc. anymore.
https://gcc.gnu.org/gcc-12/changes.html lists important changes,
most important is probably that vectorization is enabled at -O2 now
which is the option with most of the distribution is built with.
https://gcc.gnu.org/gcc-12/porting_to.html is so far incomplete and lists
some cases where people need to adjust their code. Other things
include the usual C++ header changes, where previously some standard
header included some other header as an implementation detail but it doesn't
any longer and so code that relied on such indirect include that isn't
required by the standard needs to include the header that provides whatever
it relies on. Or e.g. packages using -Werror where new warnings are
reported with the newer compiler and -Werror results in build failures.
If there are bugs on the compiler side, please let me know immediately,
so that those bugs can be fixed before the mass rebuild next week.
Not sure if it is a bug, CRIU no longer works with GCC 12.
CRIU creates something called 'parasite code' which is injected into
running processes for checkpointing and that part is built with
'-nostdlib'. Starting with GCC 12 we see 'strlen()' being pulled into
the parasite code which it wasn't with GCC 11.
https://kojipkgs.fedoraproject.org/work/tasks/6033/81406033/build.log
gcc -c -O2 -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security
-Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic
-fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -Wall
-Wformat-security -Wdeclaration-after-statement -Wstrict-prototypes -DCONFIG_X86_64
-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DCONFIG_HAS_LIBBSD -DCONFIG_HAS_SELINUX
-DCONFIG_GNUTLS -DCONFIG_HAS_NFTABLES_LIB_API_1 -DCONFIG_COMPAT -iquote include/
-DCONFIG_HAS_LIBBSD -DCONFIG_HAS_SELINUX -DCONFIG_GNUTLS -DCONFIG_HAS_NFTABLES_LIB_API_1
-DCONFIG_COMPAT -I ./compel/include/uapi -fno-strict-aliasing -iquote criu/include -iquote
include -iquote images -iquote criu/arch/x86/include -iquote . -I/usr/include/libnl3
-DSYSCONFDIR='"/etc"'
-DGLOBAL_CONFIG_DIR='"/etc/criu/"'
-DDEFAULT_CONFIG_FILENAME='"default.conf"'
-DUSER_CONFIG_DIR='".criu/"' -DCR_NOGLIBC -Wstrict-prototypes
-fno-stack-protector -nostdlib -fomit-frame-pointer -fpie -I ./compel/include/uapi
-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -Wp,-U_FORTIFY_SOURCE -Wp,-D_FORTIFY_SOURCE=0
criu/pie/restorer.c -o criu/pie/restorer.o
ld -r -z noexecstack -T ./compel/arch/x86/scripts/compel-pack.lds.S -o
criu/pie/restorer.built-in.o criu/pie/parasite-vdso.o ./criu/arch/x86/vdso-pie.o
./criu/arch/x86/restorer.o ./criu/arch/x86/restorer_unmap.o
./criu/arch/x86/sigaction_compat_pie.o criu/pie/restorer.o criu/pie/pie.lib.a
./compel/plugins/std.lib.a
./compel/compel-host hgen -f criu/pie/restorer.built-in.o -o criu/pie/restorer-blob.h
Error (compel/src/lib/handle-elf-host.c:337): Unexpected undefined symbol: `strlen'.
External symbol in PIE?
make[2]: *** [criu/pie/Makefile:58: criu/pie/restorer-blob.h] Error 255
make[1]: *** [criu/Makefile:59: pie] Error 2
make: *** [Makefile:250: criu] Error 2
Not sure why there is 'strlen()' pulled in with GCC 12. Any ideas?
Adrian