xref: /illumos-gate/usr/src/test/util-tests/tests/ctf/check-common.h (revision 13b136d3061155363c62c9f6568d25b8b27da8f6)
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 /*
13  * Copyright 2020 Joyent, Inc.
14  */
15 
16 #ifndef _CHECK_COMMON_H
17 #define	_CHECK_COMMON_H
18 
19 /*
20  * Common definitions for the CTF tests
21  */
22 
23 #include <stdlib.h>
24 #include <unistd.h>
25 #include <libctf.h>
26 #include <err.h>
27 #include <strings.h>
28 #include <sys/param.h>
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 typedef struct check_number {
35 	const char *cn_tname;
36 	uint_t cn_kind;
37 	uint_t cn_flags;
38 	uint_t cn_offset;
39 	uint_t cn_size;
40 } check_number_t;
41 
42 typedef struct check_symbol {
43 	const char *cs_symbol;
44 	const char *cs_type;
45 } check_symbol_t;
46 
47 typedef struct check_descent {
48 	const char *cd_tname;
49 	uint_t cd_kind;
50 	const char *cd_contents;
51 	uint_t cd_nents;
52 } check_descent_t;
53 
54 typedef struct check_descent_test {
55 	const char *cdt_sym;
56 	const check_descent_t *cdt_tests;
57 } check_descent_test_t;
58 
59 typedef struct check_enum {
60 	const char *ce_name;
61 	int64_t ce_value;
62 } check_enum_t;
63 
64 typedef struct check_enum_test {
65 	const char *cet_type;
66 	const check_enum_t *cet_tests;
67 } check_enum_test_t;
68 
69 typedef struct check_member {
70 	const char *cm_name;
71 	const char *cm_type;
72 	ulong_t cm_offset;
73 } check_member_t;
74 
75 typedef struct check_member_test {
76 	const char *cmt_type;
77 	int cmt_kind;
78 	size_t cmt_size;
79 	const check_member_t *cmt_members;
80 } check_member_test_t;
81 
82 typedef struct check_function_test {
83 	const char *cft_name;
84 	const char *cft_rtype;
85 	uint_t cft_nargs;
86 	uint_t cft_flags;
87 	const char **cft_args;
88 } check_function_test_t;
89 
90 typedef struct check_size_test {
91 	const char *cst_name;
92 	size_t cst_size;
93 } check_size_test_t;
94 
95 /*
96  * Looks up each type and verifies that it matches the expected type.
97  */
98 extern boolean_t ctftest_check_numbers(ctf_file_t *, const check_number_t *);
99 
100 /*
101  * Looks at each symbol specified and verifies that it matches the expected
102  * type.
103  */
104 extern boolean_t ctftest_check_symbols(ctf_file_t *, const check_symbol_t *);
105 
106 /*
107  * Given a symbol name which refers to a type, walks all the references of that
108  * type and checks against it with each subsequent entry.
109  */
110 extern boolean_t ctftest_check_descent(const char *, ctf_file_t *,
111     const check_descent_t *, boolean_t);
112 
113 /*
114  * Checks that all of the listed members of an enum are present and have the
115  * right values.
116  */
117 extern boolean_t ctftest_check_enum(const char *, ctf_file_t *,
118     const check_enum_t *);
119 
120 /*
121  * Checks that all of the members of a structure or union are present and have
122  * the right types and byte offsets. This can be used for either structures or
123  * unions.
124  */
125 extern boolean_t ctftest_check_members(const char *, ctf_file_t *, int, size_t,
126     const check_member_t *);
127 
128 /*
129  * Check that the named function or function pointer has the correct return
130  * type, arguments, and function flags.
131  */
132 extern boolean_t ctftest_check_function(const char *, ctf_file_t *,
133     const char *, uint_t, uint_t, const char **);
134 extern boolean_t ctftest_check_fptr(const char *, ctf_file_t *,
135     const char *, uint_t, uint_t, const char **);
136 
137 /*
138  * Check size of types.
139  */
140 extern boolean_t ctftest_check_size(const char *, ctf_file_t *, size_t);
141 
142 /*
143  * Determine whether or not we have a duplicate type or not based on its name.
144  */
145 extern boolean_t ctftest_duplicates(ctf_file_t *);
146 
147 #ifdef __cplusplus
148 }
149 #endif
150 
151 #endif /* _CHECK_COMMON_H */
152