xref: /aosp_15_r20/external/libtracefs/Documentation/libtracefs-error.txt (revision 287e80b3a36113050663245e7f2c00d274188f18)
1*287e80b3SSadaf Ebrahimilibtracefs(3)
2*287e80b3SSadaf Ebrahimi=============
3*287e80b3SSadaf Ebrahimi
4*287e80b3SSadaf EbrahimiNAME
5*287e80b3SSadaf Ebrahimi----
6*287e80b3SSadaf Ebrahimitracefs_error_last, tracefs_error_all, tracefs_error_clear -
7*287e80b3SSadaf Ebrahimifunctions to read and clear the tracefs error log.
8*287e80b3SSadaf Ebrahimi
9*287e80b3SSadaf EbrahimiSYNOPSIS
10*287e80b3SSadaf Ebrahimi--------
11*287e80b3SSadaf Ebrahimi[verse]
12*287e80b3SSadaf Ebrahimi--
13*287e80b3SSadaf Ebrahimi*#include <tracefs.h>*
14*287e80b3SSadaf Ebrahimi
15*287e80b3SSadaf Ebrahimichar pass:[*]*tracefs_error_last*(struct tracefs_instance pass:[*]_instance_);
16*287e80b3SSadaf Ebrahimichar pass:[*]*tracefs_error_all*(struct tracefs_instance pass:[*]_instance_);
17*287e80b3SSadaf Ebrahimiint *tracefs_error_clear*(struct tracefs_instance pass:[*]_instance_);
18*287e80b3SSadaf Ebrahimi--
19*287e80b3SSadaf Ebrahimi
20*287e80b3SSadaf EbrahimiDESCRIPTION
21*287e80b3SSadaf Ebrahimi-----------
22*287e80b3SSadaf EbrahimiThe *tracefs_error_last*() returns the last error message in the tracefs
23*287e80b3SSadaf Ebrahimierror log. Several actions that require proper syntax written into the
24*287e80b3SSadaf Ebrahimitracefs file system may produce error messages in the error log. This
25*287e80b3SSadaf Ebrahimifunction will show the most recent error in the error log.
26*287e80b3SSadaf Ebrahimi
27*287e80b3SSadaf EbrahimiThe *tracefs_error_all*() returns all messages saved in the error log.
28*287e80b3SSadaf EbrahimiNote, this may not be all messages that were ever produced, as the kernel
29*287e80b3SSadaf Ebrahimionly keeps a limited amount of messages, and older ones may be discarded
30*287e80b3SSadaf Ebrahimiby the kernel.
31*287e80b3SSadaf Ebrahimi
32*287e80b3SSadaf EbrahimiThe *tracefs_error_clear*() will clear the error log.
33*287e80b3SSadaf Ebrahimi
34*287e80b3SSadaf EbrahimiRETURN VALUE
35*287e80b3SSadaf Ebrahimi------------
36*287e80b3SSadaf EbrahimiBoth *tracefs_error_last*() and *tracefs_error_all*() will return an allocated
37*287e80b3SSadaf Ebrahimistring an error exists in the log, otherwise NULL is returned. If an error
38*287e80b3SSadaf Ebrahimioccurs, errno will be set, otherwise if there is no error messages to display
39*287e80b3SSadaf Ebrahimithen errno is not touched.
40*287e80b3SSadaf Ebrahimi
41*287e80b3SSadaf Ebrahimi*tracefs_error_clear*() returns 0 on success or -1 on error.
42*287e80b3SSadaf Ebrahimi
43*287e80b3SSadaf EbrahimiEXAMPLE
44*287e80b3SSadaf Ebrahimi-------
45*287e80b3SSadaf Ebrahimi[source,c]
46*287e80b3SSadaf Ebrahimi--
47*287e80b3SSadaf Ebrahimi#include <stdlib.h>
48*287e80b3SSadaf Ebrahimi#include <unistd.h>
49*287e80b3SSadaf Ebrahimi#include <errno.h>
50*287e80b3SSadaf Ebrahimi
51*287e80b3SSadaf Ebrahimi#include <tracefs.h>
52*287e80b3SSadaf Ebrahimi
53*287e80b3SSadaf Ebrahimiint main (int argc, char **argv, char **env)
54*287e80b3SSadaf Ebrahimi{
55*287e80b3SSadaf Ebrahimi	struct tracefs_dynevent *kevent;
56*287e80b3SSadaf Ebrahimi	char *system = NULL;
57*287e80b3SSadaf Ebrahimi	char *kprobe;
58*287e80b3SSadaf Ebrahimi	char *format;
59*287e80b3SSadaf Ebrahimi	char *addr;
60*287e80b3SSadaf Ebrahimi	int arg = 1;
61*287e80b3SSadaf Ebrahimi	int ret;
62*287e80b3SSadaf Ebrahimi
63*287e80b3SSadaf Ebrahimi	if (argc < 4) {
64*287e80b3SSadaf Ebrahimi		printf("usage: %s [system] kprobe addr fmt\n", argv[0]);
65*287e80b3SSadaf Ebrahimi		exit(-1);
66*287e80b3SSadaf Ebrahimi	}
67*287e80b3SSadaf Ebrahimi
68*287e80b3SSadaf Ebrahimi	if (argc > 5)
69*287e80b3SSadaf Ebrahimi		system = argv[arg++];
70*287e80b3SSadaf Ebrahimi
71*287e80b3SSadaf Ebrahimi	kprobe = argv[arg++];
72*287e80b3SSadaf Ebrahimi	addr = argv[arg++];
73*287e80b3SSadaf Ebrahimi	format = argv[arg++];
74*287e80b3SSadaf Ebrahimi
75*287e80b3SSadaf Ebrahimi	tracefs_error_clear(NULL);
76*287e80b3SSadaf Ebrahimi	kevent = tracefs_dynevent_get(TRACEFS_DYNEVENT_KPROBE, system, kprobe);
77*287e80b3SSadaf Ebrahimi	if (kevent) {
78*287e80b3SSadaf Ebrahimi		tracefs_dynevent_destroy(kevent, true);
79*287e80b3SSadaf Ebrahimi		tracefs_dynevent_free(kevent);
80*287e80b3SSadaf Ebrahimi	}
81*287e80b3SSadaf Ebrahimi
82*287e80b3SSadaf Ebrahimi	ret = tracefs_kprobe_raw(system, kprobe, addr, format);
83*287e80b3SSadaf Ebrahimi	if (ret < 0) {
84*287e80b3SSadaf Ebrahimi		char *err;
85*287e80b3SSadaf Ebrahimi
86*287e80b3SSadaf Ebrahimi		perror("Failed creating kprobe");
87*287e80b3SSadaf Ebrahimi		errno = 0;
88*287e80b3SSadaf Ebrahimi		err = tracefs_error_last(NULL);
89*287e80b3SSadaf Ebrahimi		if (err)
90*287e80b3SSadaf Ebrahimi			fprintf(stderr, "%s\n", err);
91*287e80b3SSadaf Ebrahimi		else if (errno)
92*287e80b3SSadaf Ebrahimi			perror("Failed reading error log");
93*287e80b3SSadaf Ebrahimi		free(err);
94*287e80b3SSadaf Ebrahimi	}
95*287e80b3SSadaf Ebrahimi
96*287e80b3SSadaf Ebrahimi	exit(ret);
97*287e80b3SSadaf Ebrahimi}
98*287e80b3SSadaf Ebrahimi--
99*287e80b3SSadaf EbrahimiFILES
100*287e80b3SSadaf Ebrahimi-----
101*287e80b3SSadaf Ebrahimi[verse]
102*287e80b3SSadaf Ebrahimi--
103*287e80b3SSadaf Ebrahimi*tracefs.h*
104*287e80b3SSadaf Ebrahimi	Header file to include in order to have access to the library APIs.
105*287e80b3SSadaf Ebrahimi*-ltracefs*
106*287e80b3SSadaf Ebrahimi	Linker switch to add when building a program that uses the library.
107*287e80b3SSadaf Ebrahimi--
108*287e80b3SSadaf Ebrahimi
109*287e80b3SSadaf EbrahimiSEE ALSO
110*287e80b3SSadaf Ebrahimi--------
111*287e80b3SSadaf Ebrahimi*libtracefs*(3),
112*287e80b3SSadaf Ebrahimi*libtraceevent*(3),
113*287e80b3SSadaf Ebrahimi*trace-cmd*(1)
114*287e80b3SSadaf Ebrahimi
115*287e80b3SSadaf EbrahimiAUTHOR
116*287e80b3SSadaf Ebrahimi------
117*287e80b3SSadaf Ebrahimi[verse]
118*287e80b3SSadaf Ebrahimi--
119*287e80b3SSadaf Ebrahimi*Steven Rostedt* <[email protected]>
120*287e80b3SSadaf Ebrahimi*Tzvetomir Stoyanov* <[email protected]>
121*287e80b3SSadaf Ebrahimi--
122*287e80b3SSadaf EbrahimiREPORTING BUGS
123*287e80b3SSadaf Ebrahimi--------------
124*287e80b3SSadaf EbrahimiReport bugs to  <[email protected]>
125*287e80b3SSadaf Ebrahimi
126*287e80b3SSadaf EbrahimiLICENSE
127*287e80b3SSadaf Ebrahimi-------
128*287e80b3SSadaf Ebrahimilibtracefs is Free Software licensed under the GNU LGPL 2.1
129*287e80b3SSadaf Ebrahimi
130*287e80b3SSadaf EbrahimiRESOURCES
131*287e80b3SSadaf Ebrahimi---------
132*287e80b3SSadaf Ebrahimihttps://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/
133*287e80b3SSadaf Ebrahimi
134*287e80b3SSadaf EbrahimiCOPYING
135*287e80b3SSadaf Ebrahimi-------
136*287e80b3SSadaf EbrahimiCopyright \(C) 2020 VMware, Inc. Free use of this software is granted under
137*287e80b3SSadaf Ebrahimithe terms of the GNU Public License (GPL).
138