[CRIU] [PATCH v3] s390: Move -msoft-float/-fno-optimize-sibling-calls into compel Makefiles
Adrian Reber
areber at redhat.com
Mon Jul 24 12:53:17 MSK 2017
That works, thanks.
Tested-by: Adrian Reber <areber at redhat.com>
On Fri, Jul 21, 2017 at 07:26:09PM +0200, Michael Holzheu wrote:
> 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