From 0568889ee368c2bc2682aae5c69d67ac16eac675 Mon Sep 17 00:00:00 2001 From: Adrian Reber Date: Tue, 18 Jan 2022 17:22:46 +0000 Subject: [PATCH] compel: fix parasite with GCC 12 Parasite creation started to fail with GCC 12: On x86_64 with: ./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? On aarch64 with: ld: criu/pie/restorer.o: in function `lsm_set_label': /drone/src/criu/pie/restorer.c:174: undefined reference to `strlen' Line 174 is: "for (len = 0; label[len]; len++)" Adding '-ffreestanding' to parasite compilation fixes these errors because, according to GCC developers: "strlen is a standard C function, so I don't see any bug in that being used unless you do a freestanding compilation (-nostdlib isn't that)." Signed-off-by: Adrian Reber --- compel/src/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/compel/src/main.c b/compel/src/main.c index a9a50959f..f461ff04d 100644 --- a/compel/src/main.c +++ b/compel/src/main.c @@ -19,6 +19,7 @@ #define CFLAGS_DEFAULT_SET \ "-Wstrict-prototypes " \ + "-ffreestanding " \ "-fno-stack-protector -nostdlib -fomit-frame-pointer " #define COMPEL_CFLAGS_PIE CFLAGS_DEFAULT_SET "-fpie" -- 2.33.0