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