diff --git a/Makefile b/Makefile index f6cc556c0..9bf63a280 100644 --- a/Makefile +++ b/Makefile @@ -1022,7 +1022,7 @@ help: IGNORE_OPTS=help install install-man install-doc install-bin \ uninstall clean tags cscope tar git-tar version update-version \ opts reg-tests reg-tests-help admin/halog/halog dev/flags/flags \ - dev/haring/haring dev/poll/poll dev/tcploop/tcploop + dev/haring/haring dev/ncpu/ncpu dev/poll/poll dev/tcploop/tcploop ifneq ($(TARGET),) ifeq ($(filter $(firstword $(MAKECMDGOALS)),$(IGNORE_OPTS)),) @@ -1059,6 +1059,9 @@ dev/haring/haring: dev/haring/haring.o dev/hpack/%: dev/hpack/%.o $(cmd_LD) $(ARCH_FLAGS) $(LDFLAGS) -o $@ $^ $(LDOPTS) +dev/ncpu/ncpu: + $(cmd_MAKE) -C dev/ncpu ncpu V='$(V)' + dev/poll/poll: $(cmd_MAKE) -C dev/poll poll CC='$(CC)' OPTIMIZE='$(COPTS)' V='$(V)' @@ -1072,7 +1075,7 @@ dev/udp/udp-perturb: dev/udp/udp-perturb.o $(cmd_LD) $(ARCH_FLAGS) $(LDFLAGS) -o $@ $^ $(LDOPTS) # rebuild it every time -.PHONY: src/version.c dev/poll/poll dev/tcploop/tcploop +.PHONY: src/version.c dev/ncpu/ncpu dev/poll/poll dev/tcploop/tcploop src/calltrace.o: src/calltrace.c $(DEP) $(cmd_CC) $(TRACE_COPTS) -c -o $@ $< @@ -1138,7 +1141,7 @@ clean: distclean: clean $(Q)rm -f admin/iprange/iprange admin/iprange/ip6range admin/halog/halog $(Q)rm -f admin/dyncookie/dyncookie - $(Q)rm -f dev/haring/haring dev/poll/poll dev/tcploop/tcploop + $(Q)rm -f dev/haring/haring dev/ncpu/ncpu{,.so} dev/poll/poll dev/tcploop/tcploop $(Q)rm -f dev/hpack/decode dev/hpack/gen-enc dev/hpack/gen-rht $(Q)rm -f dev/qpack/decode diff --git a/dev/ncpu/Makefile b/dev/ncpu/Makefile index 2c1c42feb..4307c99d4 100644 --- a/dev/ncpu/Makefile +++ b/dev/ncpu/Makefile @@ -4,12 +4,28 @@ CC = cc OPTIMIZE = -O2 -g DEFINE = INCLUDE = -OBJS = ncpu.so +OBJS = ncpu.so ncpu +OBJDUMP = objdump all: $(OBJS) -%.so: %.c - $(cmd_CC) $(OPTIMIZE) $(DEFINE) $(INCLUDE) -fPIC -shared -o $@ $^ +%.o: %.c + $(cmd_CC) $(OPTIMIZE) $(DEFINE) $(INCLUDE) -shared -fPIC -c -o $@ $^ + +%.so: %.o + $(cmd_CC) -pie -o $@ $^ + $(Q)rm -f $^ + +%: %.so + $(call qinfo, PATCHING)set -- $$($(OBJDUMP) -j .dynamic -h $^ | fgrep .dynamic); \ + ofs=$$6; size=$$3; \ + dd status=none bs=1 count=$$((0x$$ofs)) if=$^ of=$^-p1; \ + dd status=none bs=1 skip=$$((0x$$ofs)) count=$$((0x$$size)) if=$^ of=$^-p2; \ + dd status=none bs=1 skip=$$((0x$$ofs+0x$$size)) if=$^ of=$^-p3; \ + sed -e 's,\xfb\xff\xff\x6f\x00\x00\x00\x00\x00\x00\x00\x08,\xfb\xff\xff\x6f\x00\x00\x00\x00\x00\x00\x00\x00,g' < $^-p2 > $^-p2-patched; \ + cat $^-p1 $^-p2-patched $^-p3 > "$@" + $(Q)rm -f $^-p* + $(Q)chmod 755 "$@" clean: - rm -f $(OBJS) *.[oas] *~ + rm -f $(OBJS) *.[oas] *.so-* *~