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 +