xref: /illumos-gate/usr/src/man/man1/ctfdiff.1 (revision 11994f6f)
1.\"
2.\" This file and its contents are supplied under the terms of the
3.\" Common Development and Distribution License ("CDDL"), version 1.0.
4.\" You may only use this file in accordance with the terms of version
5.\" 1.0 of the CDDL.
6.\"
7.\" A full copy of the text of the CDDL should have accompanied this
8.\" source.  A copy of the CDDL is also available via the Internet at
9.\" http://www.illumos.org/license/CDDL.
10.\"
11.\"
12.\" Copyright (c) 2015, Joyent, Inc.
13.\"
14.Dd December 2, 2023
15.Dt CTFDIFF 1
16.Os
17.Sh NAME
18.Nm ctfdiff
19.Nd compare two CTF containers
20.Sh SYNOPSIS
21.Nm ctfdiff
22.Op Fl afIloqt
23.Op Fl F Ar function
24.Op Fl O Ar object
25.Op Fl p Ar parent1
26.Op Fl p Ar parent2
27.Op Fl T Ar type
28.Ar file1 file2
29.Sh DESCRIPTION
30The
31.Nm
32utility identifies differences between the contents of the
33.Sy CTF
34containers found in
35.Em file1
36and
37.Em file2 .
38.Lp
39.Nm
40can find differences between two
41.Sy CTF
42container's
43.Sy labels ,
44.Sy functions ,
45.Sy objects ,
46and
47.Sy types .
48When no options are specified,
49.Nm
50will only consider
51.Sy functions ,
52.Sy objects,
53and
54.Sy types .
55.Lp
56Two
57.Sy labels
58are the same if they have the same name.
59Two
60.Sy objects
61are the same if they have the same name and the type of the
62object is the same.
63Two
64.Sy functions
65are considered the same if they have the same name, the same return
66type, the same number of arguments, and the types of their arguments are
67the same.
68.Lp
69Two
70.Sy types
71are considered the same if they have the same name, they represent the same
72kind of thing, and the contents of the type are the same.
73This varies for each specific kind, for example, two structs are the
74same if they have the same members whose types, offsets, and names are
75all the same.
76For more information on the specifics for what we look at
77for each kind of type, and the kinds themselves, see the information we
78use to encode them in
79.Xr ctf 5 .
80If the option
81.Fl I
82is specified, then the names of basic integer types are ignored.
83For an example of where this makes sense, see
84.Sy Example 4 .
85.Lp
86If the
87.Sy CTF
88container found inside of either
89.Em file1
90or
91.Em file2
92has been uniquified (see
93.Xr ctf 5
94for more on uniquification), then the parent
95.Sy CTF
96container is also required for the diff to complete.
97.Sh OPTIONS
98The following options are supported:
99.Bl -hang -width Ds
100.It Fl a
101.Bd -filled -compact
102Diff
103.Sy labels ,
104.Sy types ,
105.Sy objects ,
106and
107.Sy functions .
108.Ed
109.It Fl f
110.Bd -filled -compact
111Diff
112.Sy function
113type argument information.
114.Ed
115.It Fl F Ar function
116.Bd -filled -compact
117When diffing
118.Sy functions ,
119only consider the function
120.Em function .
121This option requires that the option
122.Fl f
123be specified and can be repeated multiple times.
124.Ed
125.It Fl I
126.Bd -filled -compact
127Ignore the names of integral types.
128This option is useful when comparing types between two
129.Sy CTF
130containers that have different programming models.
131In this case, when comparing integers, the name of the type is not
132considered.
133This means that the ILP32 type long which is a 32-bit wide signed
134integer is the same as the LP64 type int which is a 32-bit wide signed
135integer, even though they have different names.
136.Ed
137.It Fl l
138.Bd -filled -compact
139Diff the
140.Sy labels
141contained inside the
142.Sy CTF
143containers.
144.Ed
145.It Fl o
146.Bd -filled -compact
147Diff type information for
148.Sy objects .
149.Ed
150.It Fl O Ar object
151.Bd -filled -compact
152When diffing type information for
153.Sy objects ,
154only compare if the object is name
155.Em object .
156This option requires
157.Fl o
158to be specified and can be repeated multiple times.
159.Ed
160.It Fl p Ar parent1
161.Bd -filled -compact
162Specifies the path of file that is the parent of the
163.Sy CTF
164container inside of
165.Em file1
166is
167.Em parent1 .
168This option is required if
169.Em file1
170has been uniquified.
171For more information on uniquification, see
172.Xr ctf 5 .
173.Ed
174.It Fl P Ar parent2
175.Bd -filled -compact
176Specifies the path of file that is the parent of the
177.Sy CTF
178container inside of
179.Em file2 is
180.Em parent2 .
181This option is required if
182.Em file1
183has been uniquified.
184For more information on uniquification, see
185.Xr ctf 5 .
186.Ed
187.It Fl q
188.Bd -filled -compact
189Enables quiet mode.
190Standard output from the diff will not be emitted.
191However, diagnostics messages will still be emitted to standard error.
192.Ed
193.It Fl t
194.Bd -filled -compact
195Diff the
196.Sy type
197information sections in the
198.Sy CTF
199containers.
200.Ed
201.It Fl T Ar type
202.Bd -filled -compact
203When diffing the
204.Sy types
205section, only consider it if the type is name
206.Em type .
207Types specified here do not impact the diffing of
208.Sy objects
209or
210.Sy functions .
211Even with
212.Fl T
213specified, other types will be diffed as necessary for the evaluation of
214the named types; however, the results of those intermediate differences
215will not impact the results of
216.Nm ,
217only named types are considered when evaluating the exit status of
218.Nm .
219.Ed
220.El
221.Sh EXIT STATUS
222.Bl -inset
223.It Sy 0
224.Bd -filled -offset indent -compact
225Execution completed successfully, no differences were detected
226between
227.Em file1
228and
229.Em file2 .
230.Ed
231.It Sy 1
232.Bd -filled -offset indent -compact
233Execution completed successfully, but differences were detected
234between
235.Em file1
236and
237.Em file2 .
238.Ed
239.It Sy 2
240.D1 Invalid command line options were specified.
241.It Sy 3
242.D1 A fatal error occurred.
243.El
244.Sh EXAMPLES
245.Sy Example 1
246Diffing Two
247.Sy CTF
248Containers
249.Lp
250The following example compares two
251.Sy CTF
252containers using the default set
253of comparisons:
254.Sy objects ,
255.Sy functions ,
256and
257.Sy types .
258.Bd -literal -offset 6n
259$ ctfdiff /usr/lib/libc.so.1 /usr/lib/libdtrace.so.1
260ctf container /usr/lib/libc.so.1 type 37 is different
261ctf container /usr/lib/libc.so.1 type 38 is different
262ctf container /usr/lib/libc.so.1 type 39 is different
263ctf container /usr/lib/libc.so.1 type 40 is different
264ctf container /usr/lib/libc.so.1 type 41 is different
265ctf container /usr/lib/libc.so.1 type 42 is different
266ctf container /usr/lib/libc.so.1 type 43 is different
267ctf container /usr/lib/libc.so.1 type 47 is different
268ctf container /usr/lib/libc.so.1 type 48 is different
269ctf container /usr/lib/libc.so.1 type 49 is different
270\&...
271.Ed
272.Sy Example 2
273Diffing Types Between Two
274.Sy CTF
275Containers with Parents
276.Lp
277The following example compares two
278.Sy CTF
279containers
280.Sy /ws/rm/zlan/proto/kernel/drv/amd64/vnd
281and
282.Sy /ws/rm/zlan/proto/kernel/drv/amd64/overlay
283that have been uniquified against the same container
284.Sy /ws/rm/zlan/proto/kernel/amd64/genunix .
285.Bd -literal -offset 6n
286$ ctfdiff -t -p /ws/rm/zlan/proto/kernel/amd64/genunix \e
287    -P /ws/rm/zlan/proto/kernel/amd64/genunix \e
288    /ws/rm/zlan/proto/kernel/drv/amd64/vnd  \e
289    /ws/rm/zlan/proto/kernel/drv/amd64/overlay
290ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32769 is different
291ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32770 is different
292ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32771 is different
293ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32772 is different
294ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32774 is different
295ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32775 is different
296ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32776 is different
297ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32777 is different
298ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32778 is different
299ctf container /ws/rm/zlan/proto/kernel/drv/amd64/vnd type 32779 is different
300\&...
301.Ed
302.Lp
303.Sy Example 3
304Diffing a Specific Function in Two
305.Sy CTF
306Containers
307.Lp
308This example shows us looking for differences in the function
309.Sy libzfs_core_init
310in two different version of the library
311.Sy libzfs_core.so.1 .
312.Bd -literal -offset 6n
313$ ctfdiff -f -F libzfs_core_init /usr/lib/libzfs_core.so.1 \e
314    /ws/rm/ctf/proto/usr/lib/libzfs_core.so.1
315$ echo $?
316.Ed
317.Lp
318.Sy Example 4
319Diffing Types to Find Differences Between Different Data Models.
320.Lp
321This example looks for differences between structures used in an ioctl
322that the kernel wants to be bitness neutral by comparing a 32-bit and
32364-bit library that consumes it.
324In this example, we'll use the library
325.Sy libvnd.so.1
326and the types
327.Sy vnd_ioc_attach_t ,
328.Sy vnd_ioc_link_t ,
329.Sy vnd_ioc_unlink_t ,
330.Sy vnd_ioc_buf_t ,
331and
332.Sy vnd_ioc_info_t .
333.Bd -literal -offset 6n
334$ ctfdiff -t -I -T vnd_ioc_attach_t  -T vnd_ioc_link_t  \e
335    -T vnd_ioc_unlink_t -T vnd_ioc_buf_t  -T vnd_ioc_info_t \e
336    i386/libvnd.so.1 amd64/libvnd.so.1
337$ echo $?
3380
339.Ed
340.Sh INTERFACE STABILITY
341The command syntax is
342.Sy Committed .
343The output format is
344.Sy Uncommitted .
345.Sh SEE ALSO
346.Xr ctfdump 1 ,
347.Xr diff 1 ,
348.Xr ctf 5
349