Module Name:    src
Committed By:   maxv
Date:           Fri Jul 13 12:04:50 UTC 2018

Modified Files:
        src/usr.sbin/tprof: tprof.8 tprof.c tprof_analyze.c

Log Message:
Ask for a file path with the "analyze" command, instead of reading stdin.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/tprof/tprof.8
cvs rdiff -u -r1.8 -r1.9 src/usr.sbin/tprof/tprof.c
cvs rdiff -u -r1.1 -r1.2 src/usr.sbin/tprof/tprof_analyze.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/tprof/tprof.8
diff -u src/usr.sbin/tprof/tprof.8:1.7 src/usr.sbin/tprof/tprof.8:1.8
--- src/usr.sbin/tprof/tprof.8:1.7	Fri Jul 13 11:14:14 2018
+++ src/usr.sbin/tprof/tprof.8	Fri Jul 13 12:04:50 2018
@@ -1,4 +1,4 @@
-.\"	$NetBSD: tprof.8,v 1.7 2018/07/13 11:14:14 maxv Exp $
+.\"	$NetBSD: tprof.8,v 1.8 2018/07/13 12:04:50 maxv Exp $
 .\"
 .\" Copyright (c)2011 YAMAMOTO Takashi,
 .\" All rights reserved.
@@ -90,11 +90,13 @@ The default is
 .Op Fl P
 .Op Fl p Ar pid
 .Op Fl s
+.Ar file
 .Xc
 Analyze the samples produced by a previous run of
 .Nm tprof ,
-and generate a plain text
-representation.
+stored in
+.Ar file ,
+and generate a plain text representation of them.
 .It Fl C
 Don't distinguish CPUs.
 All samples are treated as its CPU number is 0.
@@ -119,7 +121,7 @@ The following command profiles the syste
 samples into the file myfile.out.
 .Dl # tprof monitor -e llc-misses:k -o myfile.out sleep 20
 The following command displays the results of the sampling.
-.Dl # tprof analyze < myfile.out
+.Dl # tprof analyze myfile.out
 .Ed
 .Sh DIAGNOSTICS
 The

Index: src/usr.sbin/tprof/tprof.c
diff -u src/usr.sbin/tprof/tprof.c:1.8 src/usr.sbin/tprof/tprof.c:1.9
--- src/usr.sbin/tprof/tprof.c:1.8	Fri Jul 13 11:03:36 2018
+++ src/usr.sbin/tprof/tprof.c	Fri Jul 13 12:04:50 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: tprof.c,v 1.8 2018/07/13 11:03:36 maxv Exp $	*/
+/*	$NetBSD: tprof.c,v 1.9 2018/07/13 12:04:50 maxv Exp $	*/
 
 /*
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: tprof.c,v 1.8 2018/07/13 11:03:36 maxv Exp $");
+__RCSID("$NetBSD: tprof.c,v 1.9 2018/07/13 12:04:50 maxv Exp $");
 #endif /* not lint */
 
 #include <sys/ioctl.h>
@@ -109,8 +109,8 @@ usage(void)
 	fprintf(stderr, "\tmonitor -e name:option [-o outfile] command\n");
 	fprintf(stderr, "\t\tMonitor the event 'name' with option 'option'\n"
 	    "\t\tcounted during the execution of 'command'.\n");
-	fprintf(stderr, "\tanalyze [-C] [-k] [-L] [-P] [-p pid] [-s]\n");
-	fprintf(stderr, "\t\tAnalyze the samples from stdin.\n");
+	fprintf(stderr, "\tanalyze [-C] [-k] [-L] [-P] [-p pid] [-s] file\n");
+	fprintf(stderr, "\t\tAnalyze the samples of the file 'file'.\n");
 
 	exit(EXIT_FAILURE);
 }
@@ -298,4 +298,7 @@ main(int argc, char *argv[])
 			break;
 		}
 	}
+	if (ct->label == NULL) {
+		usage();
+	}
 }

Index: src/usr.sbin/tprof/tprof_analyze.c
diff -u src/usr.sbin/tprof/tprof_analyze.c:1.1 src/usr.sbin/tprof/tprof_analyze.c:1.2
--- src/usr.sbin/tprof/tprof_analyze.c:1.1	Fri Jul 13 11:03:36 2018
+++ src/usr.sbin/tprof/tprof_analyze.c	Fri Jul 13 12:04:50 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: tprof_analyze.c,v 1.1 2018/07/13 11:03:36 maxv Exp $	*/
+/*	$NetBSD: tprof_analyze.c,v 1.2 2018/07/13 12:04:50 maxv Exp $	*/
 
 /*
  * Copyright (c) 2010,2011,2012 YAMAMOTO Takashi,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: tprof_analyze.c,v 1.1 2018/07/13 11:03:36 maxv Exp $");
+__RCSID("$NetBSD: tprof_analyze.c,v 1.2 2018/07/13 12:04:50 maxv Exp $");
 #endif /* not lint */
 
 #include <assert.h>
@@ -283,6 +283,7 @@ tprof_analyze(int argc, char **argv)
 	bool kernel_only = false;
 	extern char *optarg;
 	extern int optind;
+	FILE *f;
 
 	while ((ch = getopt(argc, argv, "CkLPp:s")) != -1) {
 		uintmax_t val;
@@ -321,6 +322,15 @@ tprof_analyze(int argc, char **argv)
 	argc -= optind;
 	argv += optind;
 
+	if (argc == 0) {
+		errx(EXIT_FAILURE, "missing file name");
+	}
+
+	f = fopen(argv[0], "rb");
+	if (f == NULL) {
+		errx(EXIT_FAILURE, "fopen");
+	}
+
 	ksymload();
 	rb_tree_init(&addrtree, &addrtree_ops);
 
@@ -332,14 +342,14 @@ tprof_analyze(int argc, char **argv)
 	while (/*CONSTCOND*/true) {
 		struct addr *o;
 		tprof_sample_t sample;
-		size_t n = fread(&sample, sizeof(sample), 1, stdin);
+		size_t n = fread(&sample, sizeof(sample), 1, f);
 		bool in_kernel;
 
 		if (n == 0) {
-			if (feof(stdin)) {
+			if (feof(f)) {
 				break;
 			}
-			if (ferror(stdin)) {
+			if (ferror(f)) {
 				err(EXIT_FAILURE, "fread");
 			}
 		}
@@ -434,4 +444,6 @@ tprof_analyze(int argc, char **argv)
 		    a->nsamples, a->pid, a->lwpid, a->cpuid, a->in_kernel,
 		    a->addr, name);
 	}
+
+	fclose(f);
 }

Reply via email to