Commit c4055499 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

make: pie -- Switch to a new scheme

Because we need util-net.c for both PIE code and
a regular code, just move it to pie/ directory
and build with -fpie option, this way we can reuse
compiled file in main program without additional
compilation pass.
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent a210b5a1
...@@ -20,3 +20,4 @@ protobuf/*.h ...@@ -20,3 +20,4 @@ protobuf/*.h
include/version.h include/version.h
arch/x86/sys-exec-tbl.c arch/x86/sys-exec-tbl.c
arch/x86/syscalls.S arch/x86/syscalls.S
pie/pie.lds.S
...@@ -105,7 +105,6 @@ OBJS += cr-dump.o ...@@ -105,7 +105,6 @@ OBJS += cr-dump.o
OBJS += cr-show.o OBJS += cr-show.o
OBJS += cr-check.o OBJS += cr-check.o
OBJS += util.o OBJS += util.o
OBJS += util-net.o
OBJS += sysctl.o OBJS += sysctl.o
OBJS += ptrace.o OBJS += ptrace.o
OBJS += kcmp-ids.o OBJS += kcmp-ids.o
...@@ -162,8 +161,10 @@ arch/$(ARCH)/%:: protobuf ...@@ -162,8 +161,10 @@ arch/$(ARCH)/%:: protobuf
arch/$(ARCH): protobuf arch/$(ARCH): protobuf
$(Q) $(MAKE) $(build)=arch/$(ARCH) all $(Q) $(MAKE) $(build)=arch/$(ARCH) all
pie: arch/$(ARCH) protobuf pie/%:: arch/$(ARCH)
$(Q) $(MAKE) -C pie/ $(Q) $(MAKE) $(build)=pie $@
pie: arch/$(ARCH)
$(Q) $(MAKE) $(build)=pie all
%.o: %.c %.o: %.c
$(E) " CC " $@ $(E) " CC " $@
...@@ -181,7 +182,7 @@ pie: arch/$(ARCH) protobuf ...@@ -181,7 +182,7 @@ pie: arch/$(ARCH) protobuf
$(E) " DEP " $@ $(E) " DEP " $@
$(Q) $(CC) -M -MT $@ -MT $(patsubst %.d,%.o,$@) $(CFLAGS) $< -o $@ $(Q) $(CC) -M -MT $@ -MT $(patsubst %.d,%.o,$@) $(CFLAGS) $< -o $@
$(PROGRAM): $(SYSCALL-LIB) $(ARCH-LIB) protobuf/built-in.o $(OBJS) $(PROGRAM): $(SYSCALL-LIB) $(ARCH-LIB) pie/util-net.o protobuf/built-in.o $(OBJS)
$(E) " LINK " $@ $(E) " LINK " $@
$(Q) $(CC) $(CFLAGS) $^ $(LIBS) -o $@ $(Q) $(CC) $(CFLAGS) $^ $(LIBS) -o $@
...@@ -204,6 +205,7 @@ clean: ...@@ -204,6 +205,7 @@ clean:
$(Q) $(RM) $(VERSION_HEADER) $(Q) $(RM) $(VERSION_HEADER)
$(Q) $(MAKE) $(build)=arch/$(ARCH) clean $(Q) $(MAKE) $(build)=arch/$(ARCH) clean
$(Q) $(MAKE) $(build)=protobuf clean $(Q) $(MAKE) $(build)=protobuf clean
$(Q) $(MAKE) $(build)=pie clean
$(Q) $(RM) ./*.o $(Q) $(RM) ./*.o
$(Q) $(RM) ./*.d $(Q) $(RM) ./*.d
$(Q) $(RM) ./*.i $(Q) $(RM) ./*.i
...@@ -216,7 +218,6 @@ clean: ...@@ -216,7 +218,6 @@ clean:
$(Q) $(RM) -r ./gcov $(Q) $(RM) -r ./gcov
$(Q) $(RM) -r ./test/lib/ $(Q) $(RM) -r ./test/lib/
$(Q) $(RM) -r ./test/lib64/ $(Q) $(RM) -r ./test/lib64/
$(Q) $(MAKE) -C pie/ clean
$(Q) $(MAKE) -C test/zdtm cleandep $(Q) $(MAKE) -C test/zdtm cleandep
$(Q) $(MAKE) -C test/zdtm clean $(Q) $(MAKE) -C test/zdtm clean
$(Q) $(MAKE) -C test/zdtm cleanout $(Q) $(MAKE) -C test/zdtm cleanout
......
CFLAGS += -c -I$(SRC_DIR)/syscall/ targets += parasite
CFLAGS += -fpie -Wa,--noexecstack -fno-strict-aliasing targets += restorer
GEN-OFFSETS := gen-offsets.sh
PASM-OBJS += $(ARCH_DIR)/parasite-head.o
RESTORER-ARCH-OBJS := $(ARCH_DIR)/restorer.o
PARASITE += parasite.bin.o parasite.bin obj-y += log-simple.o
RESTORER := restorer.bin.o restorer.bin obj-y += util-net.o
BLOBS := parasite-blob.h restorer-blob.h
PIELDS := pie.lds.S
ASMFLAGS := -D__ASSEMBLY__
.DEFAULT_GOAL := pie
LIB-OBJS := log-simple.o blob-util-net.o parasite-obj-y += parasite.o
DEPS := $(RESTORER-ARCH-OBJS:.o=.d) $(LIB-OBJS:.o=.d) parasite-asm-e += $(ARCH_DIR)/parasite-head.o
parasite-libs-e += $(SYSCALL-LIB)
$(PARASITE): $(LIB-OBJS) $(PASM-OBJS) $(PIELDS) restorer-obj-y += restorer.o
$(RESTORER): $(LIB-OBJS) $(RESTORER-ARCH-OBJS) $(PIELDS) restorer-obj-e += $(ARCH_DIR)/restorer.o
restorer-libs-e += $(SYSCALL-LIB)
$(PIELDS): $(PIELDS).in CFLAGS += -fpie -Wa,--noexecstack -fno-strict-aliasing
$(E) " GEN " $@ ASMFLAGS += -D__ASSEMBLY__
$(Q) $(SH) -c "echo 'OUTPUT_ARCH($(LDARCH))' > $(PIELDS)"
$(Q) $(SH) -c "cat $(PIELDS).in >> $(PIELDS)"
blob-util-net.d: $(SRC_DIR)/util-net.c GEN-OFFSETS := gen-offsets.sh
%.d: %.c BLOBS := $(obj)/parasite-blob.h $(obj)/restorer-blob.h
$(E) " DEP " $@
$(Q) $(CC) -M -MT $@ -MT $(patsubst %.d,%.o,$@) $(CFLAGS) $< -o $@
blob-util-net.o: $(SRC_DIR)/util-net.c PIELDS := pie.lds.S
$(E) " CC " $@
$(Q) $(CC) $(CFLAGS) $< -o $@
%.o: %.S .SECONDARY:
$(E) " CC " $@
$(Q) $(CC) $(ASMFLAGS) $(CFLAGS) $< -o $@
%.o: %.c $(obj)/$(PIELDS): $(obj)/$(PIELDS).in
$(E) " CC " $@ $(E) " GEN " $@
$(Q) $(CC) $(CFLAGS) $< -o $@ $(Q) $(SH) -c "echo 'OUTPUT_ARCH($(LDARCH))' > $(obj)/$(PIELDS)"
$(Q) $(SH) -c "cat $(obj)/$(PIELDS).in >> $(obj)/$(PIELDS)"
%.bin.o: %.o $(obj)/%.built-in.bin.o: $(obj)/%.built-in.o $(obj)/$(PIELDS)
$(E) " GEN " $@ $(E) " GEN " $@
$(Q) $(LD) -T $(PIELDS) -o $@ $(^:$(PIELDS)=) ../$(SYSCALL-LIB) $(Q) $(LD) -T $(obj)/$(PIELDS) -o $@ $<
%.bin: %.bin.o $(obj)/%.built-in.bin: $(obj)/%.built-in.bin.o
$(E) " GEN " $@ $(E) " GEN " $@
$(Q) $(OBJCOPY) -O binary $< $@ $(Q) $(OBJCOPY) -O binary $^ $@
%-blob.h: %.bin %.bin.o $(GEN-OFFSETS) $(obj)/%-blob.h: $(obj)/%.built-in.bin $(obj)/$(GEN-OFFSETS)
$(E) " GEN " $@ $(E) " GEN " $@
$(Q) $(SH) $(GEN-OFFSETS) $(@:-blob.h=) > $@ || rm -f $@ $(Q) $(SH) $(obj)/$(GEN-OFFSETS) $(@:-blob.h=) $(notdir $(@:-blob.h=)) > $@
pie: $(BLOBS) $(BLOBS): $(obj)/$(PIELDS)
_all += $(BLOBS)
cleanup-y += $(obj)/$(PIELDS)
cleanup-y += $(obj)/*.bin
cleanup-y += $(BLOBS)
ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS) incdeps := y
endif endif
clean:
$(E) " CLEAN PIE"
$(Q) $(RM) -f ./*-blob.h
$(Q) $(RM) -f ./*.o
$(Q) $(RM) -f ./*.d
$(Q) $(RM) -f ./*.bin
$(Q) $(RM) -f ./*.bin.o
$(Q) $(RM) -f $(PIELDS)
.PHONY: clean pie
.SECONDARY:
...@@ -3,12 +3,13 @@ ...@@ -3,12 +3,13 @@
set -e set -e
set -u set -u
NAME=$1 FILE=$1
NAME=$2
INC_GUARD=__${NAME}_h__ INC_GUARD=__${NAME}_h__
PREFIX=${NAME}_blob_offset__ PREFIX=${NAME}_blob_offset__
BLOB=${NAME}_blob BLOB=${NAME}_blob
OBJNAME=${NAME}.bin.o OBJNAME=${FILE}.built-in.bin.o
BINARY=${NAME}.bin BINARY=${FILE}.built-in.bin
AWK_CMD='$2 ~ /^[tT]$/ { print "#define '$PREFIX'" $3 " 0x" $1; }' AWK_CMD='$2 ~ /^[tT]$/ { print "#define '$PREFIX'" $3 " 0x" $1; }'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment