From 61e6c01d0964d45c1e49aafb7ba369e7cd2f9180 Mon Sep 17 00:00:00 2001 From: Michael Holzheu Date: Fri, 21 Jul 2017 19:26:09 +0200 Subject: [PATCH] s390: Move -msoft-float/-fno-optimize-sibling-calls into compel Makefiles 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 Suggested-by: Dmitry Safonov Signed-off-by: Michael Holzheu Reviewed-by: Dmitry Safonov Tested-by: Adrian Reber Signed-off-by: Andrei Vagin --- 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 7f03b6e1f..ad052f158 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 5c854e3dc..1ef7f8cb2 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 43d27f55d..7ef01aa01 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 7127425af..82c35be6a 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 ccflags-y += -I compel/include/uapi asflags-y += -I compel/include/uapi diff --git a/criu/pie/Makefile b/criu/pie/Makefile index 76c35352c..de4d667a5 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 ceadc1d66..f268b5ded 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 +