summaryrefslogtreecommitdiff
path: root/usr/src/man/man1/ctfdump.1
blob: eb0fd101653fc297d362502fb7b73aaa19b0905f (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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
.\"
.\" This file and its contents are supplied under the terms of the
.\" Common Development and Distribution License ("CDDL"), version 1.0.
.\" You may only use this file in accordance with the terms of version
.\" 1.0 of the CDDL.
.\"
.\" A full copy of the text of the CDDL should have accompanied this
.\" source.  A copy of the CDDL is also available via the Internet at
.\" http://www.illumos.org/license/CDDL.
.\"
.\"
.\" Copyright (c) 2015, Joyent, Inc.
.\"
.Dd Oct 4, 2014
.Dt CTFDUMP 1
.Os
.Sh NAME
.Nm ctfdump
.Nd dump parts of ctf data from files
.Sh SYNOPSIS
.Nm ctfdump
.Op Fl dfhlsSt
.Op Fl p Ar parent
.Op Fl u Ar outfile
.Ar file
.Sh DESCRIPTION
The
.Nm
utility dumps and decodes the
.Sy CTF
data contained inside of
.Sy ELF
objects and raw
.Sy CTF
files.
.Lp
.Nm
can dump information about the
.Sy CTF header ,
the
.Sy labels
encoded in the
.Sy CTF
container,
the types of
.Sy data objects ,
the internal
.Sy string
table,
the types of the return function and the arguments for
.Sy functions ,
and of course, it displays information about the
.Sy types
defined in the
.Sy CTF
container.
.Lp
.Nm
can also be used to dump out the raw
.Sy CTF
data and send it to another file.
When writing out data, it always ensures that the
.Sy CTF
data is decompressed.
In this form, the
.Sy CTF
data can be inspected using
.Nm
and other tools such as
.Xr mdb 1 .
.Lp
When no options are specified,
.Nm
displays all information.
However, when the
.Fl u
option is used, then no information is displayed by default, unless
requested through the appropriate option.
.Sh OPTIONS
The following options are supported:
.Bl -hang -width Ds
.It Fl d
.Bd -filled -compact
Dump the types of symbols that correspond to objects.
.Ed
.It Fl f
.Bd -filled -compact
Dump the types of the return values and arguments of the functions.
.Ed
.It Fl h
.Bd -filled -compact
Dump the
.Sy CTF
header
.Ed
.It Fl l
.Bd -filled -compact
Dump all
.Sy CTF
labels associated with the file.
.Ed
.It Fl p Ar parent
.Bd -filled -compact
Use the type information in
.Em parent
to supplement output.
This is useful when a
.Nm CTF
container has been
.Sy uniquified
against
.Em parent .
This allows
.Nm
to use the names of types when used with
.Fl t .
.Ed
.It Fl s
.Bd -filled -compact
Dump the internal
.Sy CTF
string table
.Ed
.It Fl S
.Bd -filled -compact
Displays statistics about the
.Sy CTF
container.
.Ed
.It Fl t
.Bd -filled -compact
Dump the type information contained in the
.Sy CTF
conatiner.
.Ed
.It Fl u Ar outfile
.Bd -filled -compact
Copies the uncompressed
.Sy CTF
data to the file specified by
.Em outfile .
This can be used to make it easier to inspect the raw
.Sy CTF
data.
.Ed
.El
.Sh OUTPUT
When the
.Nm
utility is executed with its default options, it prints out a textual
representation of the
.Sy CTF
information.
Note, the output format of
.Nm
is subject to change at any time and should not be relied upon as a
stable format to be used for parsing.
.Ss CTF Header
This section describes the values in the
.Sy CTF
header.
Each line in the section describes the value of one of the
members of the header.
For more information on the meaning and interpretation of these members,
see
.Xr ctf 4 .
.Ss Label Table
This section describes information about the labels present in the
.Sy CTF
information.
Each entry in this section, if present, starts with a
number and is followed by a string.
An example entry in the label section might look like:
.Bd -literal
\&...
   2270 joyent_20151001T070028Z
\&...
.Ed
.Pp
The number,
.Em 2270 ,
represents the last type that the label applies to.
The string,
.Em joyent_20151001T070028Z ,
is the name of the label.
In this case, if there were no other labels,
it would indicate that the label applied to all types up to, and
including, the type number 2270.
For more information on how labels are used with
.Sy CTF
information, see the section
.Em The Label Section
in
.Xr ctf 4 .
.Ss Data Objects
This section describes the type information relating to data objects
from the symbol table.
An entry for a data object consists of four columns.
The first column is just a monotonic ID.
The second number is the type id of the object.
The third column is the name of the symbol and the fourth column is the
corresponding index from the symbol table.
.Pp
Take for example, the following couple of entries:
.Bd -literal
\&...
  [0] 13        hz (48)
  [1] 78        _nd (49)
  [2] 1656      __pfmt_label (56)
  [3] 926       _aio_hash (68)
  [4] 13        _lio_free (70)
  [5] 1321      u8_number_of_bytes (73)
\&...
.Ed
.Pp
Let's take the first entry in the list above.
The symbol is named
.Sy hz .
It is the first data object, as indicated by the number zero in
brackets.
It has a type id of 13 and in this case, it has a symbol table index of
48.
.Ss Functions
This section describes the type information for functions.
For each function present in the symbol table with type information, the
function's entry into the function section, the function's name, the
function's symbol table index, the function's return type, and the types
of the function's arguments are printed.
If a function is a variadic function, then the variadic argument is
printed as the string
.Sy '...' .
.Pp
Take for example, the following couple of entries:
.Bd -literal
\&...
  [687] pfprint_stack (3110) returns: 11 args: (385, 115, 29, 1704, 223, 116, 2)
  [688] pfprint_stddev (3111) returns: 11 args: (385, 115, 29, 1704, 223, 116, 2)
  [689] pfprint_quantize (3112) returns: 11 args: (385, 115, 29, 1704, 223, 116, 2)
  [690] pfprint_lquantize (3113) returns: 11 args: (385, 115, 29, 1704, 223, 116, 2)
  [691] pfprint_llquantize (3114) returns: 11 args: (385, 115, 29, 1704, 223, 116, 2)
\&...
.Ed
.Pp
The first column is the function's entry number in the function type
information section.
It is enclosed in brackets.
The next column is the function's name and it is followed in parenthesis
by the its index in the
symbol table.
The following portions of this entry describe the return
type and then all of the arguments, in positional order.
.Ss Types
The types section gives information about each type in the
.Sy CTF
container.
Each entry begins with its type identifier.
The type identifier may either be in square brackets or in angle
brackets.
If the type identifier is enclosed in angle brackets, then that
represents that it is a root type or top-level type.
If it is square brackets, then it is not.
For more information on root types, see
.Xr ctf 4 .
.Pp
Next, the type will have its name and kind.
If it is an array, it will be followed with a subscript that describes
the number of entries in the array.
If it is a pointer, it will followed by the
.Sy *
symbol to indicate that it is a pointer.
If the type has the
.Sy const ,
.Sy volatile ,
.Sy typedef ,
or
.Sy restrict
keyword applied to it, that will precede the name.
All of these reference types, including pointer, will then be followed
with an example of the type that they refer to.
.Pp
Types which are an integral or floating point value will be followed by
information about their encoding and the number of bits represented in
the type.
.Pp
Arrays will be followed by two different entries, the contents and
index.
The contents member contains the type id of the array's contents
and the index member describes a type which can represent the array's
index.
.Pp
Structures and unions will be preceded with the corresponding C keyword,
.Sy struct
or
.Sy union .
After that, the size in bytes of the structure will be indicated.
ON each subsequent line, a single member will be listed.
That line will contain the member's name, it's type identifier, and the
offset into the structure that it can be found in, in bits.
.Pp
The following show examples of type information for all of these
different types:
.Bd -literal
\&...
  [5] char [12] contents: 1, index: 2
  [6] short encoding=SIGNED offset=0 bits=16
  <7> struct exit_status (4 bytes)
        e_termination type=6 off=0
        e_exit type=6 off=16

  <8> typedef time_t refers to 2
  <9> struct utmp (36 bytes)
        ut_user type=3 off=0
        ut_id type=4 off=64
        ut_line type=5 off=96
        ut_pid type=6 off=192
        ut_type type=6 off=208
        ut_exit type=7 off=224
        ut_time type=8 off=256

  <10> struct utmp * refers to 9
  [11] const struct utmp refers to 9
  [12] const struct utmp * refers to 11
  <13> int encoding=SIGNED offset=0 bits=32
  <14> typedef int32_t refers to 13
\&...
.Ed
.Ss String Table
This section describes all of the strings that are present in the
.Sy CTF
container.
Each line represents an entry in the string table.
First the byte offset into the string table is shown in brackets and
then the
string's value is displayed.
Note the following examples:
.Bd -literal
  [0] \0
  [1] joyent_20151001T070028Z
  [25] char
  [30] long
  [35] short
.Ed
.Ss Statistics
This section contains miscellaneous statistics about the
.Sy CTF
data present.
Each line contains a single statistic.
A brief explanation of the statistic is placed first, followed by an
equals sign, and then finally the value.
.Sh EXIT STATUS
.Bl -inset
.It Sy 0
.Dl Execution completed successfully.
.It Sy 1
.Dl A fatal error occurred.
.It Sy 2
.Dl Invalid command line options were specified.
.El
.Sh EXAMPLES
.Sy Example 1
Displaying the Type Section of a Single File
.Lp
The following example dumps the type section of the file
.Sy /usr/lib/libc.so.1 .
.Bd -literal -offset 6n
$ ctfdump -t /usr/lib/libc.so.1
- Types ----------------------------------------------------

  <1> int encoding=SIGNED offset=0 bits=32
  <2> long encoding=SIGNED offset=0 bits=32
  <3> typedef pid_t refers to 2
  <4> unsigned int encoding=0x0 offset=0 bits=32
  <5> typedef uid_t refers to 4
  <6> typedef gid_t refers to 5
  <7> typedef uintptr_t refers to 4
\&...
.Ed
.Lp
.Sy Example 2
Dumping the CTF data to Another File
.Lp
The following example dumps the entire CTF data from the file
.Sy /usr/lib/libc.so.1
and places it into the file
.Sy ctf.out .
This then shows how you can use the
.Xr mdb 1
to inspect its contents.
.Bd -literal -offset 6n
$ ctfdump -u ctf.out /usr/lib/libc.so.1
$ mdb ./ctf.out
> ::typedef -r /usr/lib/libctf.so.1
> 0::print ctf_header_t
{
    cth_preamble = {
        ctp_magic = 0xcff1
        ctp_version = 0x2
        ctp_flags = 0
    }
    cth_parlabel = 0
    cth_parname = 0
    cth_lbloff = 0
    cth_objtoff = 0x8
    cth_funcoff = 0x5e0
    cth_typeoff = 0x7178
    cth_stroff = 0x12964
    cth_strlen = 0x7c9c
}
.Ed
.Sh INTERFACE STABILITY
The command syntax is
.Sy Committed .
The output format is
.Sy Uncommitted .
.Sh SEE ALSO
.Xr ctfdiff 1 ,
.Xr dump 1 ,
.Xr elfdump 1 ,
.Xr mdb 1 ,
.Xr ctf 4