Date: Wed, 17 Jul 2013 02:00:46 GMT From: Brooks Davis <brooks@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 231209 for review Message-ID: <201307170200.r6H20kU2019496@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307170200.r6H20kU2019496>