PERFORCE change 231209 for review
Brooks Davis
brooks at FreeBSD.org
Wed Jul 17 02:00:47 UTC 2013
http://p4web.freebsd.org/@@231209?ac=10
Change 231209 by brooks at 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);
}
}
More information about the p4-projects
mailing list