xref: /aosp_15_r20/external/trace-cmd/tracecmd/trace-check-events.c (revision 58e6ee5f017f6a8912852c892d18457e4bafb554)
1*58e6ee5fSAndroid Build Coastguard Worker // SPDX-License-Identifier: GPL-2.0
2*58e6ee5fSAndroid Build Coastguard Worker /*
3*58e6ee5fSAndroid Build Coastguard Worker  * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <[email protected]>
4*58e6ee5fSAndroid Build Coastguard Worker  *
5*58e6ee5fSAndroid Build Coastguard Worker  */
6*58e6ee5fSAndroid Build Coastguard Worker #include <stdlib.h>
7*58e6ee5fSAndroid Build Coastguard Worker #include <getopt.h>
8*58e6ee5fSAndroid Build Coastguard Worker #include <errno.h>
9*58e6ee5fSAndroid Build Coastguard Worker 
10*58e6ee5fSAndroid Build Coastguard Worker #include "tracefs.h"
11*58e6ee5fSAndroid Build Coastguard Worker #include "trace-local.h"
12*58e6ee5fSAndroid Build Coastguard Worker 
13*58e6ee5fSAndroid Build Coastguard Worker enum {
14*58e6ee5fSAndroid Build Coastguard Worker 	OPT_verbose	= 255,
15*58e6ee5fSAndroid Build Coastguard Worker };
16*58e6ee5fSAndroid Build Coastguard Worker 
trace_check_events(int argc,char ** argv)17*58e6ee5fSAndroid Build Coastguard Worker void trace_check_events(int argc, char **argv)
18*58e6ee5fSAndroid Build Coastguard Worker {
19*58e6ee5fSAndroid Build Coastguard Worker 	const char *tracing;
20*58e6ee5fSAndroid Build Coastguard Worker 	int ret, c;
21*58e6ee5fSAndroid Build Coastguard Worker 	int parsing_failures = 0;
22*58e6ee5fSAndroid Build Coastguard Worker 	struct tep_handle *pevent = NULL;
23*58e6ee5fSAndroid Build Coastguard Worker 	struct tep_plugin_list *list = NULL;
24*58e6ee5fSAndroid Build Coastguard Worker 	int open_flags = 0;
25*58e6ee5fSAndroid Build Coastguard Worker 	int option_index = 0;
26*58e6ee5fSAndroid Build Coastguard Worker 	static struct option long_options[] = {
27*58e6ee5fSAndroid Build Coastguard Worker 		{"verbose", optional_argument, NULL, OPT_verbose},
28*58e6ee5fSAndroid Build Coastguard Worker 		{NULL, 0, NULL, 0}
29*58e6ee5fSAndroid Build Coastguard Worker 	};
30*58e6ee5fSAndroid Build Coastguard Worker 
31*58e6ee5fSAndroid Build Coastguard Worker 
32*58e6ee5fSAndroid Build Coastguard Worker 	while ((c = getopt_long(argc-1, argv+1, "+hN", long_options, &option_index)) >= 0) {
33*58e6ee5fSAndroid Build Coastguard Worker 		switch (c) {
34*58e6ee5fSAndroid Build Coastguard Worker 		case 'h':
35*58e6ee5fSAndroid Build Coastguard Worker 		default:
36*58e6ee5fSAndroid Build Coastguard Worker 			usage(argv);
37*58e6ee5fSAndroid Build Coastguard Worker 			break;
38*58e6ee5fSAndroid Build Coastguard Worker 		case 'N':
39*58e6ee5fSAndroid Build Coastguard Worker 			open_flags |= TRACECMD_FL_LOAD_NO_PLUGINS;
40*58e6ee5fSAndroid Build Coastguard Worker 			break;
41*58e6ee5fSAndroid Build Coastguard Worker 		case OPT_verbose:
42*58e6ee5fSAndroid Build Coastguard Worker 			if (trace_set_verbose(optarg) < 0)
43*58e6ee5fSAndroid Build Coastguard Worker 				die("invalid verbose level %s", optarg);
44*58e6ee5fSAndroid Build Coastguard Worker 			break;
45*58e6ee5fSAndroid Build Coastguard Worker 		}
46*58e6ee5fSAndroid Build Coastguard Worker 	}
47*58e6ee5fSAndroid Build Coastguard Worker 	tracing = tracefs_tracing_dir();
48*58e6ee5fSAndroid Build Coastguard Worker 
49*58e6ee5fSAndroid Build Coastguard Worker 	if (!tracing) {
50*58e6ee5fSAndroid Build Coastguard Worker 		printf("Can not find or mount tracing directory!\n"
51*58e6ee5fSAndroid Build Coastguard Worker 		       "Either tracing is not configured for this "
52*58e6ee5fSAndroid Build Coastguard Worker 		       "kernel\n"
53*58e6ee5fSAndroid Build Coastguard Worker 		       "or you do not have the proper permissions to "
54*58e6ee5fSAndroid Build Coastguard Worker 		       "mount the directory");
55*58e6ee5fSAndroid Build Coastguard Worker 		exit(EINVAL);
56*58e6ee5fSAndroid Build Coastguard Worker 	}
57*58e6ee5fSAndroid Build Coastguard Worker 
58*58e6ee5fSAndroid Build Coastguard Worker 	pevent = tep_alloc();
59*58e6ee5fSAndroid Build Coastguard Worker 	if (!pevent)
60*58e6ee5fSAndroid Build Coastguard Worker 		exit(EINVAL);
61*58e6ee5fSAndroid Build Coastguard Worker 
62*58e6ee5fSAndroid Build Coastguard Worker 	list = trace_load_plugins(pevent, open_flags);
63*58e6ee5fSAndroid Build Coastguard Worker 	ret = tracefs_fill_local_events(tracing, pevent, &parsing_failures);
64*58e6ee5fSAndroid Build Coastguard Worker 	if (ret || parsing_failures)
65*58e6ee5fSAndroid Build Coastguard Worker 		ret = EINVAL;
66*58e6ee5fSAndroid Build Coastguard Worker 	tep_unload_plugins(list, pevent);
67*58e6ee5fSAndroid Build Coastguard Worker 	tep_free(pevent);
68*58e6ee5fSAndroid Build Coastguard Worker 
69*58e6ee5fSAndroid Build Coastguard Worker 	return;
70*58e6ee5fSAndroid Build Coastguard Worker }
71