[CRIU] [PATCH v3] s390: Move -msoft-float/-fno-optimize-sibling-calls into compel Makefiles
Michael Holzheu
holzheu at linux.vnet.ibm.com
Fri Jul 21 20:26:09 MSK 2017
We currently define "CFLAGS += -msoft-float -fno-optimize-sibling-calls"
in Makefile.compel.
Makefile.compel is included into the toplevel Makefile and so changes
CFLAGS which are exported to all criu and zdtm Makefiles.
We must not use -msoft-float outside the compel files. E.g. otherwise for
zdtm we get the following build error:
uptime_grow.o: In function `main':
/tmp/2/criu/test/zdtm/static/uptime_grow.c:36: undefined reference to `__floatdidf'
/tmp/2/criu/test/zdtm/static/uptime_grow.c:36: undefined reference to `__muldf3'
/tmp/2/criu/test/zdtm/static/uptime_grow.c:36: undefined reference to `__floatdidf'
/tmp/2/criu/test/zdtm/static/uptime_grow.c:36: undefined reference to `__adddf3
Fix this and move the CFLAGS definition to the compel Makefiles.
We do this by defining a new flag CFLAGS_PIE that is only used for pie code.
Reported-by: Adrian Reber <areber at redhat.com>
Suggested-by: Dmitry Safonov <dsafonov at virtuozzo.com>
Signed-off-by: Michael Holzheu <holzheu at linux.vnet.ibm.com>
---
Makefile | 12 ++++++++++++
Makefile.compel | 10 ----------
compel/Makefile | 1 +
compel/plugins/Makefile | 4 +++-
criu/pie/Makefile | 8 +-------
criu/pie/Makefile.library | 8 ++------
6 files changed, 19 insertions(+), 24 deletions(-)
diff --git a/Makefile b/Makefile
index 848cf0f..f236813 100644
--- a/Makefile
+++ b/Makefile
@@ -65,12 +65,24 @@ ifeq ($(ARCH),x86)
DEFINES := -DCONFIG_X86_64
endif
+#
+# CFLAGS_PIE:
+#
+# 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)
ARCH := s390
SRCARCH := s390
VDSO := y
DEFINES := -DCONFIG_S390
+ CFLAGS_PIE := -msoft-float -fno-optimize-sibling-calls
endif
+export CFLAGS_PIE
LDARCH ?= $(SRCARCH)
export LDARCH VDSO
diff --git a/Makefile.compel b/Makefile.compel
index 5c854e3..1ef7f8c 100644
--- a/Makefile.compel
+++ b/Makefile.compel
@@ -70,13 +70,3 @@ compel/$(LIBCOMPEL_SO): compel/$(LIBCOMPEL_A)
compel-install-targets += compel/$(LIBCOMPEL_SO)
compel-install-targets += compel/compel
compel-install-targets += $(compel-plugins)
-
-#
-# 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 -fno-optimize-sibling-calls
-HOSTCFLAGS += -msoft-float -fno-optimize-sibling-calls
-endif
diff --git a/compel/Makefile b/compel/Makefile
index 43d27f5..7ef01aa 100644
--- a/compel/Makefile
+++ b/compel/Makefile
@@ -11,6 +11,7 @@ ccflags-y += -iquote compel/arch/$(ARCH)/src/lib/include
ccflags-y += -iquote compel/include
ccflags-y += -fno-strict-aliasing
ccflags-y += -fPIC
+ccflags-y += $(CFLAGS_PIE)
ldflags-y += -r
#
diff --git a/compel/plugins/Makefile b/compel/plugins/Makefile
index 7127425..82c35be 100644
--- a/compel/plugins/Makefile
+++ b/compel/plugins/Makefile
@@ -7,7 +7,9 @@ PLUGIN_ARCH_DIR := compel/arch/$(ARCH)/plugins
#
# CFLAGS, ASFLAGS, LDFLAGS
-#
+# Required for pie code
+ccflags-y += $(CFLAGS_PIE)
+
# UAPI inclusion, referred as <compel/...>
ccflags-y += -I compel/include/uapi
asflags-y += -I compel/include/uapi
diff --git a/criu/pie/Makefile b/criu/pie/Makefile
index 76c3535..de4d667 100644
--- a/criu/pie/Makefile
+++ b/criu/pie/Makefile
@@ -2,6 +2,7 @@ target := parasite restorer
CFLAGS := $(filter-out -pg $(CFLAGS-GCOV) $(CFLAGS-ASAN),$(CFLAGS))
ccflags-y += $(COMPEL_UAPI_INCLUDES)
+ccflags-y += $(CFLAGS_PIE)
ccflags-y += -DCR_NOGLIBC
ccflags-y += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
ccflags-y += -Wp,-U_FORTIFY_SOURCE -Wp,-D_FORTIFY_SOURCE=0
@@ -16,13 +17,6 @@ ifeq ($(SRCARCH),arm)
ccflags-y += -marm
endif
-# 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.
-ifeq ($(SRCARCH),s390)
- ccflags-y += -msoft-float
-endif
-
asflags-y += -D__ASSEMBLY__
LDS := compel/arch/$(SRCARCH)/scripts/compel-pack.lds.S
diff --git a/criu/pie/Makefile.library b/criu/pie/Makefile.library
index ceadc1d..f268b5d 100644
--- a/criu/pie/Makefile.library
+++ b/criu/pie/Makefile.library
@@ -37,13 +37,9 @@ CFLAGS := $(filter-out -pg $(CFLAGS-GCOV) $(CFLAGS-ASAN),$(CFLAGS))
asflags-y := -D__ASSEMBLY__
ccflags-y += $(COMPEL_UAPI_INCLUDES)
+ccflags-y += $(CFLAGS_PIE)
ifeq ($(SRCARCH),arm)
ccflags-y += -marm
endif
-# 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.
-ifeq ($(SRCARCH),s390)
- ccflags-y += -msoft-float
-endif
+
--
2.7.4
More information about the CRIU
mailing list