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