tools/build-watch.d
changeset 10 e3fdbd3632b6
child 3770 ca450a806cc1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/build-watch.d	Mon May 17 13:15:30 2010 -0500
@@ -0,0 +1,74 @@
+#!/usr/sbin/dtrace -s -q
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ * Copyright (c) 2010, Oracle and/or it's affiliates.  All rights reserved.
+ *
+ *
+ * build-watch.d - a simple dtrace script to keep track of some key
+ *		   information to help determine build dependencies.
+ */
+
+/*
+ * record paths successfully opened
+ */
+syscall::open:entry, syscall::open64:entry
+/(pid == $target) || progenyof($target)/
+{
+	self->file = cleanpath(copyinstr(arg0));
+}
+syscall::openat:entry
+/(pid == $target) || progenyof($target)/
+{
+	self->file = cleanpath(copyinstr(arg1));
+}
+
+syscall::open*:return
+/((pid == $target) || progenyof($target)) && (arg0 != -1) && (self->file != "")/
+{
+	@opened[self->file] = count();
+	self->file = 0;
+}
+
+/*
+ * record the programs successfully execed (full path names)
+ */
+proc:::exec
+/(pid == $target) || progenyof($target)/
+{
+	self->execpath = stringof(arg0);
+}
+
+proc:::exec-success
+/(pid == $target) || progenyof($target)/
+{
+	@tools[execname, self->execpath] = count();
+	self->execpath = 0;
+}
+
+/*
+ * Summarize the results of watching the [sub]process tree
+ */
+END
+{
+	printf("\n");
+	printa("TOOL: %s = %s\n", @tools);
+	printa("FILE: %s\n", @opened);
+}