From owner-p4-projects@FreeBSD.ORG Wed Jul 17 02:00:47 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 42E13DDF; Wed, 17 Jul 2013 02:00:47 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 0535EDDD for ; Wed, 17 Jul 2013 02:00:47 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) by mx1.freebsd.org (Postfix) with ESMTP id E9664C2E for ; Wed, 17 Jul 2013 02:00:46 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6H20kYN019501 for ; Wed, 17 Jul 2013 02:00:46 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6H20kU2019496 for perforce@freebsd.org; Wed, 17 Jul 2013 02:00:46 GMT (envelope-from brooks@freebsd.org) Date: Wed, 17 Jul 2013 02:00:46 GMT Message-Id: <201307170200.r6H20kU2019496@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231209 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Jul 2013 02:00:47 -0000 http://p4web.freebsd.org/@@231209?ac=10 Change 231209 by brooks@brooks_zenith on 2013/07/17 02:00:18 Rather than building a kernel.instrumented that everyone forgets to install as kernel, add a WITH_TESLA option that builds an instrumented kernel. If WITH_TESLA is set it now implies CONFIGARGS=-t. This change includes partial support for building a nominally instrumentable kernel without tesla, but it currently includes a horriable hack that tesla.manifest must always be created. At this point this should (assuming it works) be good enough for benchmarking the impact of tesla on compliation, but we're probably generalizing from too few examples to nail down the right solution. Affected files ... .. //depot/projects/ctsrd/tesla/src/Makefile.inc1#15 edit .. //depot/projects/ctsrd/tesla/src/share/mk/bsd.own.mk#7 edit .. //depot/projects/ctsrd/tesla/src/share/mk/sys.mk#11 edit .. //depot/projects/ctsrd/tesla/src/sys/conf/kern.post.mk#4 edit .. //depot/projects/ctsrd/tesla/src/sys/conf/kern.pre.mk#5 edit .. //depot/projects/ctsrd/tesla/src/usr.sbin/config/mkmakefile.c#3 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/Makefile.inc1#15 (text+ko) ==== @@ -895,6 +895,10 @@ .endif INSTKERNNAME?= kernel +.if ${MK_LLVM_INSTRUMENTED} != "no" +CONFIGARGS+= -t +.endif + KERNSRCDIR?= ${.CURDIR}/sys KRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf KRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} ==== //depot/projects/ctsrd/tesla/src/share/mk/bsd.own.mk#7 (text+ko) ==== @@ -374,7 +374,8 @@ NAND \ OFED \ OPENSSH_NONE_CIPHER \ - SHARED_TOOLCHAIN + SHARED_TOOLCHAIN \ + TESLA # # Default behaviour of some options depends on the architecture. Unfortunately @@ -621,6 +622,39 @@ .endif .endfor + +# +# Some targets require a different build process in order to allow LLVM +# instrumentation passes to be applied. +# +# XXX: The current construction allow an empty insturmentation path or +# a tesla one. +# +.if defined(WITH_LLVM_INSTRUMENTED) && defined(WITHOUT_LLVM_INSTRUMENTED) +.error WITH_LLVM_INSTRUMENTED and WITHOUT_LLVM_INSTRUMENTED can't both be set. +.endif +.if defined(MK_LLVM_INSTRUMENTED) +.error MK_LLVM_INSTRUMENTED can't be set by a user. +.endif +.if ${MK_TESLA} == "no" +LLVM_INSTR_DEP?= +LLVM_INSTR_COMMAND?= cp ${.IMPSRC} ${.TARGET} +.if defined(WITH_LLVM_INSTRUMENTED) +MK_LLVM_INSTRUMENTED:= yes +.else +MK_LLVM_INSTRUMENTED:= no +.endif +.else +LLVM_INSTR_DEP= tesla.manifest +LLVM_INSTR_COMMAND= ${TESLA} instrument -S -verify-each -tesla-manifest \ + tesla.manifest ${.IMPSRC} -o ${.TARGET} +.if defined(WITHOUT_LLVM_INSTRUMENTED) +.error WITHOUT_LLVM_INSTRUMENTED and WITH_TESLA can't both be set. +.else +MK_LLVM_INSTRUMENTED:= yes +.endif +.endif + .if ${MK_CTF} != "no" CTFCONVERT_CMD= ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} .elif defined(.PARSEDIR) || (defined(MAKE_VERSION) && ${MAKE_VERSION} >= 5201111300) ==== //depot/projects/ctsrd/tesla/src/share/mk/sys.mk#11 (text+ko) ==== @@ -279,7 +279,7 @@ .e.o .r.o .F.o .f.o: ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC} -.instrll.instro: tesla.manifest +.instrll.instro: ${LLC} -filetype=obj ${LLCFLAGS} ${.IMPSRC} -o ${.TARGET} ${CTFCONVERT_CMD} @@ -287,8 +287,7 @@ ${TESLA} graph ${.IMPSRC} -o ${.TARGET} .oll.instrll: tesla.manifest - ${TESLA} instrument -S -verify-each -tesla-manifest tesla.manifest \ - ${.IMPSRC} -o ${.TARGET} + ${LLVM_INSTR_COMMAND} .S.o: ${CC} ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC} ==== //depot/projects/ctsrd/tesla/src/sys/conf/kern.post.mk#4 (text+ko) ==== @@ -83,10 +83,6 @@ kernel-all: ${KERNEL_KO} ${KERNEL_EXTRA} -.if defined(DO_TESLA) -kernel-all: ${KERNEL_KO}.instrumented -.endif - kernel-cleandir: kernel-clean kernel-cleandepend kernel-clobber: @@ -162,30 +158,19 @@ vnode_if.c vnode_if.h vnode_if_newproto.h vnode_if_typedef.h \ ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ ${TESLA_FILES} ${OLLS} ${INSTRLLS} ${INSTROBJS} \ - tesla.manifest ${KERNEL_KO}.instrumented \ + tesla.manifest \ ${CLEAN} lint: ${LNFILES} ${LINT} ${LINTKERNFLAGS} ${CFLAGS:M-[DILU]*} ${.ALLSRC} 2>&1 | \ tee -a linterrs -TESLA_CFILES= ${CFILES} ${SYSTEM_CFILES} -TESLA_FILES= ${TESLA_CFILES:T:.c=.tesla} -OLLS= ${TESLA_CFILES:T:.c=.oll} -INSTRLLS= ${TESLA_CFILES:T:.c=.instrll} -INSTROBJS= ${TESLA_CFILES:T:.c=.instro} - +.if ${MK_TESLA} != "no" tesla.manifest: ${TESLA_FILES} cat ${TESLA_FILES} > ${.TARGET} - -tesla: ${KERNEL_KO}.instrumented - -${KERNEL_KO}.instrumented: ${INSTROBJS} - ${LD} -Bdynamic -T ${LDSCRIPT} ${LDFLAGS} --no-warn-mismatch \ - -warn-common -export-dynamic -dynamic-linker /red/herring \ - -o ${.TARGET} -X ${INSTROBJS} ${NOT_C_OBJS} vers.o hack.So -.if ${MK_CTF} != "no" - ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${INSTROBJS} ${NOT_C_OBJS} vers.o +.else +tesla.manifest: + touch ${.TARGET} .endif # This is a hack. BFD "optimizes" away dynamic mode if there are no ==== //depot/projects/ctsrd/tesla/src/sys/conf/kern.pre.mk#5 (text+ko) ==== @@ -169,10 +169,20 @@ GEN_CFILES= $S/$M/$M/genassym.c ${MFILES:T:S/.m$/.c/} SYSTEM_CFILES= config.c env.c hints.c vnode_if.c SYSTEM_DEP= Makefile ${SYSTEM_OBJS} -SYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS} -SYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o} +SYSTEM_OBJS= locore.o ${MDOBJS} +.if ${MK_LLVM_INSTRUMENTED} == "no" +SYSTEM_OBJS+= ${OBJS} ${SYSTEM_CFILES:.c=.o} +.else +# XXX: should probably include GEN_CFILES, but may be tricky +LLVM_CFILES= ${CFILES} ${SYSTEM_CFILES} +TESLA_FILES= ${LLVM_CFILES:T:.c=.tesla} +OLLS= ${LLVM_CFILES:T:.c=.oll} +INSTRLLS= ${LLVM_CFILES:T:.c=.instrll} +INSTROBJS= ${LLVM_CFILES:T:.c=.instro} +SYSTEM_OBJS+= ${LLVM_CFILES:T:.c=.instro} ${NOT_C_OBJS} +.endif SYSTEM_OBJS+= hack.So -SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} ${LDFLAGS} --no-warn-mismatch \ +SYSTEM_LD= ${LD} -Bdynamic -T ${LDSCRIPT} ${LDFLAGS} --no-warn-mismatch \ -warn-common -export-dynamic -dynamic-linker /red/herring \ -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ ==== //depot/projects/ctsrd/tesla/src/usr.sbin/config/mkmakefile.c#3 (text+ko) ==== @@ -670,11 +670,12 @@ suff); if (tesla) { if (strcmp(suff, "c") == 0) - fprintf(fp, "C_OBJS+=${%sFILES:T:.%s=.o}\n", - SUFF, suff); + fprintf(fp, "C_OBJS+=${%sFILES:T:Nlocore.%s:.%s=.o}\n", + SUFF, suff, suff); else - fprintf(fp, "NOT_C_OBJS+=${%sFILES:T:.%s=.o}\n", - SUFF, suff); + fprintf(fp, + "NOT_C_OBJS+=${%sFILES:T:Nlocore.%s:.%s=.o}\n", + SUFF, suff, suff); } }