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