xref: /illumos-gate/usr/src/test/util-tests/tests/ctf/check-common.h (revision 8a2b682e57a046b828f37bcde1776f131ef4629f)
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 2019, 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 /*
91  * Looks up each type and verifies that it matches the expected type.
92  */
93 extern boolean_t ctftest_check_numbers(ctf_file_t *, const check_number_t *);
94 
95 /*
96  * Looks at each symbol specified and verifies that it matches the expected
97  * type.
98  */
99 extern boolean_t ctftest_check_symbols(ctf_file_t *, const check_symbol_t *);
100 
101 /*
102  * Given a symbol name which refers to a type, walks all the references of that
103  * type and checks against it with each subsequent entry.
104  */
105 extern boolean_t ctftest_check_descent(const char *, ctf_file_t *,
106     const check_descent_t *, boolean_t);
107 
108 /*
109  * Checks that all of the listed members of an enum are present and have the
110  * right values.
111  */
112 extern boolean_t ctftest_check_enum(const char *, ctf_file_t *,
113     const check_enum_t *);
114 
115 /*
116  * Checks that all of the members of a structure or union are present and have
117  * the right types and byte offsets. This can be used for either structures or
118  * unions.
119  */
120 extern boolean_t ctftest_check_members(const char *, ctf_file_t *, int, size_t,
121     const check_member_t *);
122 
123 /*
124  * Check that the named function or function pointer has the correct return
125  * type, arguments, and function flags.
126  */
127 extern boolean_t ctftest_check_function(const char *, ctf_file_t *,
128     const char *, uint_t, uint_t, const char **);
129 extern boolean_t ctftest_check_fptr(const char *, ctf_file_t *,
130     const char *, uint_t, uint_t, const char **);
131 
132 /*
133  * Determine whether or not we have a duplicate type or not based on its name.
134  */
135 extern boolean_t ctftest_duplicates(ctf_file_t *);
136 
137 #ifdef __cplusplus
138 }
139 #endif
140 
141 #endif /* _CHECK_COMMON_H */
142