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 */