[CRIU] [PATCH] s390: Prevent GOT relocations

Michael Holzheu holzheu at linux.vnet.ibm.com
Fri Jul 14 12:23:26 MSK 2017


Use the "-fno-optimize-sibling-calls" gcc option to prevent GOT relocations
caused by gcc versions without the commit "S/390: Fix 64 bit sibcall":

 * https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=233169

Otherwise we get compile errors like:

 GEN      criu/pie/parasite-blob.h
 Error (compel/src/lib/handle-elf-host.c:572):
 Unsupported relocation of type 26

Those can be caused by the following relocation types:

 * R_390_GOTENT (e.g. RHEL7 based systems)
 * R_390_GOTPCDBL (e.g. Debian Jessie)
 * R_390_GOT12 (e.g. Debian Jessie)

Signed-off-by: Michael Holzheu <holzheu at linux.vnet.ibm.com>
---
 Makefile.compel | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/Makefile.compel b/Makefile.compel
index 9b40079..5c854e3 100644
--- a/Makefile.compel
+++ b/Makefile.compel
@@ -71,10 +71,12 @@ compel-install-targets	+= compel/$(LIBCOMPEL_SO)
 compel-install-targets	+= compel/compel
 compel-install-targets	+= $(compel-plugins)
 
-# We assume that compel code does not change floating point registers.
-# On s390 gcc uses fprs to cache gprs. Therefore disable floating point
-# with -msoft-float.
+#
+# Also ensure with -fno-optimize-sibling-calls that we don't create GOT
+# (Global Offset Table) relocations with gcc compilers that don't have
+# commit "S/390: Fix 64 bit sibcall".
+#
 ifeq ($(ARCH),s390)
-CFLAGS += -msoft-float
-HOSTCFLAGS += -msoft-float
+CFLAGS += -msoft-float -fno-optimize-sibling-calls
+HOSTCFLAGS += -msoft-float -fno-optimize-sibling-calls
 endif
-- 
2.7.4



More information about the CRIU mailing list