xref: /freebsd/contrib/processor-trace/include/pt_version.h (revision 85f87cf491bec6f90948a85b10f5523ea24db9e3)
1*85f87cf4SRuslan Bukin /*
2*85f87cf4SRuslan Bukin  * Copyright (c) 2018-2019, Intel Corporation
3*85f87cf4SRuslan Bukin  *
4*85f87cf4SRuslan Bukin  * Redistribution and use in source and binary forms, with or without
5*85f87cf4SRuslan Bukin  * modification, are permitted provided that the following conditions are met:
6*85f87cf4SRuslan Bukin  *
7*85f87cf4SRuslan Bukin  *  * Redistributions of source code must retain the above copyright notice,
8*85f87cf4SRuslan Bukin  *    this list of conditions and the following disclaimer.
9*85f87cf4SRuslan Bukin  *  * Redistributions in binary form must reproduce the above copyright notice,
10*85f87cf4SRuslan Bukin  *    this list of conditions and the following disclaimer in the documentation
11*85f87cf4SRuslan Bukin  *    and/or other materials provided with the distribution.
12*85f87cf4SRuslan Bukin  *  * Neither the name of Intel Corporation nor the names of its contributors
13*85f87cf4SRuslan Bukin  *    may be used to endorse or promote products derived from this software
14*85f87cf4SRuslan Bukin  *    without specific prior written permission.
15*85f87cf4SRuslan Bukin  *
16*85f87cf4SRuslan Bukin  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17*85f87cf4SRuslan Bukin  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*85f87cf4SRuslan Bukin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*85f87cf4SRuslan Bukin  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20*85f87cf4SRuslan Bukin  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*85f87cf4SRuslan Bukin  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*85f87cf4SRuslan Bukin  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*85f87cf4SRuslan Bukin  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*85f87cf4SRuslan Bukin  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*85f87cf4SRuslan Bukin  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*85f87cf4SRuslan Bukin  * POSSIBILITY OF SUCH DAMAGE.
27*85f87cf4SRuslan Bukin  */
28*85f87cf4SRuslan Bukin 
29*85f87cf4SRuslan Bukin #ifndef PT_VERSION_H
30*85f87cf4SRuslan Bukin #define PT_VERSION_H
31*85f87cf4SRuslan Bukin 
32*85f87cf4SRuslan Bukin #include "intel-pt.h"
33*85f87cf4SRuslan Bukin 
34*85f87cf4SRuslan Bukin #include <stdio.h>
35*85f87cf4SRuslan Bukin #include <inttypes.h>
36*85f87cf4SRuslan Bukin 
37*85f87cf4SRuslan Bukin 
pt_fprint_version(FILE * file,struct pt_version version)38*85f87cf4SRuslan Bukin static inline int pt_fprint_version(FILE *file, struct pt_version version)
39*85f87cf4SRuslan Bukin {
40*85f87cf4SRuslan Bukin 	if (version.build) {
41*85f87cf4SRuslan Bukin 		if (version.ext && version.ext[0])
42*85f87cf4SRuslan Bukin 			return fprintf(file, "%" PRIu8 ".%" PRIu8 ".%" PRIu16
43*85f87cf4SRuslan Bukin 				       "-%" PRIu32 "-%s", version.major,
44*85f87cf4SRuslan Bukin 				       version.minor, version.patch,
45*85f87cf4SRuslan Bukin 				       version.build, version.ext);
46*85f87cf4SRuslan Bukin 		else
47*85f87cf4SRuslan Bukin 			return fprintf(file, "%" PRIu8 ".%" PRIu8 ".%" PRIu16
48*85f87cf4SRuslan Bukin 				       "-%" PRIu32 "", version.major,
49*85f87cf4SRuslan Bukin 				       version.minor, version.patch,
50*85f87cf4SRuslan Bukin 				       version.build);
51*85f87cf4SRuslan Bukin 	} else {
52*85f87cf4SRuslan Bukin 		if (version.ext && version.ext[0])
53*85f87cf4SRuslan Bukin 			return fprintf(file, "%" PRIu8 ".%" PRIu8 ".%" PRIu16
54*85f87cf4SRuslan Bukin 				       "-%s", version.major, version.minor,
55*85f87cf4SRuslan Bukin 				       version.patch, version.ext);
56*85f87cf4SRuslan Bukin 		else
57*85f87cf4SRuslan Bukin 			return fprintf(file, "%" PRIu8 ".%" PRIu8 ".%" PRIu16,
58*85f87cf4SRuslan Bukin 				       version.major, version.minor,
59*85f87cf4SRuslan Bukin 				       version.patch);
60*85f87cf4SRuslan Bukin 	}
61*85f87cf4SRuslan Bukin }
62*85f87cf4SRuslan Bukin 
pt_print_version(struct pt_version version)63*85f87cf4SRuslan Bukin static inline int pt_print_version(struct pt_version version)
64*85f87cf4SRuslan Bukin {
65*85f87cf4SRuslan Bukin 	return pt_fprint_version(stdout, version);
66*85f87cf4SRuslan Bukin }
67*85f87cf4SRuslan Bukin 
pt_print_tool_version(const char * name)68*85f87cf4SRuslan Bukin static inline void pt_print_tool_version(const char *name)
69*85f87cf4SRuslan Bukin {
70*85f87cf4SRuslan Bukin 	struct pt_version v = {
71*85f87cf4SRuslan Bukin 		/* .major = */ PT_VERSION_MAJOR,
72*85f87cf4SRuslan Bukin 		/* .minor = */ PT_VERSION_MINOR,
73*85f87cf4SRuslan Bukin 		/* .patch = */ PT_VERSION_PATCH,
74*85f87cf4SRuslan Bukin 		/* .build = */ PT_VERSION_BUILD,
75*85f87cf4SRuslan Bukin 		/* .ext = */ PT_VERSION_EXT
76*85f87cf4SRuslan Bukin 	};
77*85f87cf4SRuslan Bukin 
78*85f87cf4SRuslan Bukin 	if (!name)
79*85f87cf4SRuslan Bukin 		name = "<unknown>";
80*85f87cf4SRuslan Bukin 
81*85f87cf4SRuslan Bukin 	printf("%s-", name);
82*85f87cf4SRuslan Bukin 	pt_print_version(v);
83*85f87cf4SRuslan Bukin 	printf(" / libipt-");
84*85f87cf4SRuslan Bukin 	pt_print_version(pt_library_version());
85*85f87cf4SRuslan Bukin 	printf("\n");
86*85f87cf4SRuslan Bukin }
87*85f87cf4SRuslan Bukin 
88*85f87cf4SRuslan Bukin #endif /* PT_VERSION_H */
89