Skip site navigation (1)Skip section navigation (2)
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>