Blob Blame History Raw
From 04f8368eaee2b29bb92ff0ba4f5c43501408d15e Mon Sep 17 00:00:00 2001
From: Adrian Reber <areber@redhat.com>
Date: Tue, 18 Jan 2022 17:22:46 +0000
Subject: [PATCH 116/120] 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 <areber@redhat.com>
---
 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.34.1