mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-01-23 18:25:14 +00:00
This patch change the build chain to not use pie objects in the crtools executable. This done by building the shared source files twice: 1. for parasite/restorer as '<file>-pie-build.o' 2. for crtools as '<file>.o' Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com> Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
132 lines
3.5 KiB
Makefile
132 lines
3.5 KiB
Makefile
targets += parasite
|
|
targets += restorer
|
|
|
|
# used by obj-x to identify shared files built for parasite/restorer binaries
|
|
xsuffix := -pie-build
|
|
|
|
obj-y += log-simple.o
|
|
obj-x += util.o
|
|
obj-x += util-fd.o
|
|
|
|
ifeq ($(VDSO),y)
|
|
obj-x += util-vdso.o
|
|
obj-y += parasite-vdso.o
|
|
obj-e += $(ARCH_DIR)/vdso-pie.o
|
|
ifeq ($(SRCARCH),aarch64)
|
|
asm-e += $(ARCH_DIR)/intraprocedure.o
|
|
endif
|
|
ifeq ($(SRCARCH), ppc64)
|
|
asm-e += $(ARCH_DIR)/vdso-trampoline.o
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(SRCARCH), ppc64)
|
|
asm-e += $(ARCH_DIR)/memcpy_power7.o
|
|
asm-e += $(ARCH_DIR)/memcmp_64.o
|
|
asm-e += $(ARCH_DIR)/misc.o
|
|
endif
|
|
|
|
parasite-obj-y += parasite.o
|
|
parasite-asm-e += $(ARCH_DIR)/parasite-head.o
|
|
parasite-libs-e += $(SYSCALL-LIB)
|
|
|
|
restorer-obj-y += restorer.o
|
|
restorer-obj-e += $(ARCH_DIR)/restorer.o
|
|
restorer-libs-e += $(SYSCALL-LIB)
|
|
|
|
#
|
|
# We can't provide proper mount implementation
|
|
# in parasite code -- it requires run-time rellocation
|
|
# applications, which is not the target of the
|
|
# project.
|
|
#
|
|
CFLAGS := $(filter-out -pg,$(CFLAGS)) -iquote pie/piegen
|
|
|
|
ifneq ($(filter-out i386 ia32, $(ARCH)),)
|
|
cflags-y += -DCR_NOGLIBC -fpie -Wa,--noexecstack -fno-stack-protector
|
|
else
|
|
cflags-y += -DCR_NOGLIBC -fno-pic -Wa,--noexecstack -fno-stack-protector
|
|
endif
|
|
|
|
ifeq ($(SRCARCH), arm)
|
|
cflags-y += -marm
|
|
endif
|
|
ASMFLAGS += -D__ASSEMBLY__
|
|
|
|
GEN-OFFSETS := ../scripts/gen-offsets.sh
|
|
BLOBS := $(obj)/parasite-blob.h $(obj)/restorer-blob.h
|
|
|
|
PIELDS := pie.lds.S
|
|
|
|
.SECONDARY:
|
|
|
|
ifeq ($(piegen-y),y)
|
|
ldflags-y += -r
|
|
target-name = $(patsubst pie/%-blob.h,%,$(1))
|
|
|
|
ifeq ($(SRCARCH),ppc64)
|
|
$(obj)/$(PIELDS): $(obj)/pie-reloc.lds.S.in
|
|
$(E) " GEN " $@
|
|
$(Q) echo "OUTPUT_ARCH($(LDARCH))" > $(obj)/$(PIELDS)
|
|
$(Q) cat $< >> $(obj)/$(PIELDS)
|
|
else
|
|
ifeq ($(ARCH),x86_64)
|
|
$(obj)/$(PIELDS): $(obj)/pie-reloc.lds.S.in
|
|
$(E) " GEN " $@
|
|
$(Q) echo "OUTPUT_ARCH(i386:x86-64)" > $(obj)/$(PIELDS)
|
|
$(Q) echo "TARGET(elf64-x86-64)" >> $(obj)/$(PIELDS)
|
|
$(Q) cat $< >> $(obj)/$(PIELDS)
|
|
else # i386 ia32
|
|
$(obj)/$(PIELDS): $(obj)/pie-reloc.lds.S.in
|
|
$(E) " GEN " $@
|
|
$(Q) echo "OUTPUT_ARCH(i386)" > $(obj)/$(PIELDS)
|
|
$(Q) echo "TARGET(elf32-i386)" >> $(obj)/$(PIELDS)
|
|
$(Q) cat $< >> $(obj)/$(PIELDS)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(strip $(V)),)
|
|
piegen_stdout = >/dev/null
|
|
endif
|
|
|
|
$(obj)/%.built-in.bin.o: $(obj)/%.built-in.o $(obj)/$(PIELDS)
|
|
$(E) " GEN " $@
|
|
$(Q) $(LD) $(ldflags-y) -T $(obj)/$(PIELDS) -o $@ $<
|
|
|
|
$(obj)/%-blob.h: $(obj)/%.built-in.bin.o $(obj)/$(PIELDS) pie/piegen
|
|
$(E) " GEN " $@
|
|
$(Q) pie/piegen/piegen -f $< -v $(call target-name,$@)_relocs -p $(call target-name,$@)_blob_offset__ -s $(call target-name,$@)_blob -o $@ $(piegen_stdout)
|
|
|
|
else
|
|
|
|
$(obj)/$(PIELDS): $(obj)/$(PIELDS).in
|
|
$(E) " GEN " $@
|
|
$(Q) $(SH) -c "echo 'OUTPUT_ARCH($(LDARCH))' > $(obj)/$(PIELDS)"
|
|
$(Q) $(SH) -c "cat $(obj)/$(PIELDS).in >> $(obj)/$(PIELDS)"
|
|
|
|
$(obj)/%.built-in.bin.o: $(obj)/%.built-in.o $(obj)/$(PIELDS)
|
|
$(E) " GEN " $@
|
|
$(Q) $(LD) $(ldflags-y) -T $(obj)/$(PIELDS) -o $@ $<
|
|
|
|
$(obj)/%.built-in.bin: $(obj)/%.built-in.bin.o
|
|
$(E) " GEN " $@
|
|
$(Q) $(OBJCOPY) -O binary $^ $@
|
|
|
|
$(obj)/%-blob.h: $(obj)/%.built-in.bin $(obj)/$(GEN-OFFSETS)
|
|
$(E) " GEN " $@
|
|
$(Q) $(SH) $(obj)/$(GEN-OFFSETS) $(@:-blob.h=) $(notdir $(@:-blob.h=)) $(CROSS_COMPILE) > $@
|
|
|
|
endif
|
|
|
|
$(BLOBS): $(obj)/$(PIELDS)
|
|
_all += $(BLOBS)
|
|
|
|
cleanup-y += $(obj)/$(PIELDS)
|
|
cleanup-y += $(obj)/*.bin
|
|
cleanup-y += $(BLOBS)
|
|
cleanup-y += $(obj)/*.built-in.bin.o
|
|
cleanup-y += $(obj)/*.built-in.bin
|
|
|
|
ifneq ($(MAKECMDGOALS),clean)
|
|
incdeps := y
|
|
endif
|