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 (c) 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 *); 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 */