aboutsummaryrefslogtreecommitdiff
path: root/Documentation/libtraceevent-parse-files.txt
blob: bb2facb44a40e6f4b07a9838b72a7193c4180998 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
libtraceevent(3)
================

NAME
----
tep_parse_saved_cmdlines, tep_parse_printk_formats, tep_parse_kallsyms
- Parsing functions to load mappings

SYNOPSIS
--------
[verse]
--
*#include <event-parse.h>*

int *tep_parse_saved_cmdlines*(struct tep_handle pass:[*]_tep_, const char pass:[*]_buf_);
int *tep_parse_printk_formats*(struct tep_handle pass:[*]_tep_, const char pass:[*]_buf_);
int *tep_parse_kallsyms*(struct tep_handle pass:[*]_tep_, const char pass:[*]_buf_);
--

DESCRIPTION
-----------
*tep_parse_saved_cmdlines()* is a helper function to parse content in the tracefs
file system of the "saved_cmdlines" file (stored in a string buffer passed in by _buf_)
and loads the mapping of the process IDs (pid) to the comm names in the
_tep_ handler. The events store the pid and this is used to be able to show the
process names associated to those process ids. It parses the string _buf_ that
holds the content of saved_cmdlines and ends with a nul character ('\0').

*tep_parse_printk_formats()* is a helper function to parse content in the tracefs
file system of the "printk_formats" file (stored in a string buffer passed in by _buf_)
and loads the mapping of addresses of strings that may be referenced by events.
Events only store the address of constant strings in the kernel, and the mapping
of their address to the string is exported to user space in the printk_formats
file. It parses the string _buf_ that holds the content of printk_formats and
ends with a nul character ('\0').

*tep_parse_kallsyms()* is a helper function to parse the Linux kernel /proc/kallsyms format
(stored in a string buffer passed in by _buf_) and load the functions into the
_tep_ handler such that function IP addresses can be mapped to their name when
parsing events with %pS in the print format field. It parses the string _buf_ that
holds the content of /proc/kallsyms and ends with a nul character ('\0').

RETURN VALUE
------------
The *tep_parse_saved_cmdlines*() function returns 0 in case of success, or -1
in case of an error.

The *tep_parse_printk_formats*() function returns 0 in case of success, or -1
in case of an error.

The *tep_parse_kallsyms*() function returns 0 in case of success, or -1
in case of an error.

EXAMPLE
-------
[source,c]
--
...
#include <event-parse.h>
#include <tracefs.h>
#include <stdlib.h>

int load_cmdlines(struct tep_handle *tep)
{
        char *buf = NULL;
        int r;

        buf = tracefs_instance_file_read(NULL, "saved_cmdlines", NULL);
        if (!buf)
                return -1;
        r = tep_parse_saved_cmdlines(tep, buf);
        free(buf);
        return r;
}

int load_print_strings(struct tep_handle *tep)
{
        char *buf = NULL;
        int r;

        buf = tracefs_instance_file_read(NULL, "printk_formats", NULL);
        if (!buf)
                return -1;
        r = tep_parse_printk_formats(tep, buf);
        free(buf);
        return r;
}

int load_kallsyms(struct tep_handle *tep)
{
        char *line = NULL;
        char *buf = NULL;
        size_t sz = 0;
        FILE *fp;
        int len = 0;
        int r;

        fp = fopen("/proc/kallsyms", "r");
        while ((r = getline(&line, &sz, fp)) >= 0) {
                buf = realloc(buf, len + r + 1);
                memcpy(buf + len, line, r);
                len += r;
        }
        free(line);
        fclose(fp);
        if (!buf)
                return -1;
        buf[len] = 0;

        r = tep_parse_kallsyms(tep, buf);
        free(buf);
        return r;
}
...
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*-ltraceevent*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
*libtraceevent*(3), *trace-cmd*(1), *tep_register_comm*(3), *tep_register_function*(3),
*tep_register_print_string*(3)

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, coauthor of *libtraceevent*.
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtraceevent is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/