1*9a0e4156SSadaf Ebrahimi /* Capstone testing regression */ 2*9a0e4156SSadaf Ebrahimi /* By Do Minh Tuan <[email protected]>, 02-2019 */ 3*9a0e4156SSadaf Ebrahimi 4*9a0e4156SSadaf Ebrahimi 5*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_TEST_H 6*9a0e4156SSadaf Ebrahimi #define CAPSTONE_TEST_H 7*9a0e4156SSadaf Ebrahimi 8*9a0e4156SSadaf Ebrahimi #include <stdarg.h> 9*9a0e4156SSadaf Ebrahimi #include <stddef.h> 10*9a0e4156SSadaf Ebrahimi #include <setjmp.h> 11*9a0e4156SSadaf Ebrahimi #include <cmocka.h> 12*9a0e4156SSadaf Ebrahimi #include <stdlib.h> 13*9a0e4156SSadaf Ebrahimi #include <string.h> 14*9a0e4156SSadaf Ebrahimi #include <capstone/capstone.h> 15*9a0e4156SSadaf Ebrahimi #include "helper.h" 16*9a0e4156SSadaf Ebrahimi #include "factory.h" 17*9a0e4156SSadaf Ebrahimi 18*9a0e4156SSadaf Ebrahimi #define cs_assert_err(expect, err) \ 19*9a0e4156SSadaf Ebrahimi do { \ 20*9a0e4156SSadaf Ebrahimi cs_err __err = err; \ 21*9a0e4156SSadaf Ebrahimi if (__err != expect) { \ 22*9a0e4156SSadaf Ebrahimi fail_msg("%s",cs_strerror(__err)); \ 23*9a0e4156SSadaf Ebrahimi } \ 24*9a0e4156SSadaf Ebrahimi } while (0) 25*9a0e4156SSadaf Ebrahimi 26*9a0e4156SSadaf Ebrahimi 27*9a0e4156SSadaf Ebrahimi #define cs_assert_success(err) cs_assert_err(CS_ERR_OK, err) 28*9a0e4156SSadaf Ebrahimi 29*9a0e4156SSadaf Ebrahimi 30*9a0e4156SSadaf Ebrahimi #define cs_assert_fail(err) \ 31*9a0e4156SSadaf Ebrahimi do { \ 32*9a0e4156SSadaf Ebrahimi cs_err __err = err; \ 33*9a0e4156SSadaf Ebrahimi if (__err == CS_ERR_OK) { \ 34*9a0e4156SSadaf Ebrahimi fail_msg("%s",cs_strerror(__err)); \ 35*9a0e4156SSadaf Ebrahimi } \ 36*9a0e4156SSadaf Ebrahimi } while (0) 37*9a0e4156SSadaf Ebrahimi 38*9a0e4156SSadaf Ebrahimi #define NUMARCH 9 39*9a0e4156SSadaf Ebrahimi #define NUMMODE 33 40*9a0e4156SSadaf Ebrahimi #define NUMOPTION 41 41*9a0e4156SSadaf Ebrahimi #define MAXMEM 1024 42*9a0e4156SSadaf Ebrahimi 43*9a0e4156SSadaf Ebrahimi typedef struct { 44*9a0e4156SSadaf Ebrahimi const char *str; 45*9a0e4156SSadaf Ebrahimi unsigned int value; 46*9a0e4156SSadaf Ebrahimi } single_dict; 47*9a0e4156SSadaf Ebrahimi 48*9a0e4156SSadaf Ebrahimi typedef struct { 49*9a0e4156SSadaf Ebrahimi const char *str; 50*9a0e4156SSadaf Ebrahimi unsigned int first_value; 51*9a0e4156SSadaf Ebrahimi unsigned int second_value; 52*9a0e4156SSadaf Ebrahimi } double_dict; 53*9a0e4156SSadaf Ebrahimi 54*9a0e4156SSadaf Ebrahimi extern single_dict arches[]; 55*9a0e4156SSadaf Ebrahimi extern single_dict modes[]; 56*9a0e4156SSadaf Ebrahimi extern double_dict options[]; 57*9a0e4156SSadaf Ebrahimi extern char *(*function)(csh *, cs_mode, cs_insn*); 58*9a0e4156SSadaf Ebrahimi 59*9a0e4156SSadaf Ebrahimi int get_index(double_dict d[], unsigned size, const char *str); 60*9a0e4156SSadaf Ebrahimi int get_value(single_dict d[], unsigned size, const char *str); 61*9a0e4156SSadaf Ebrahimi void test_single_MC(csh *handle, int mc_mode, char *line); 62*9a0e4156SSadaf Ebrahimi void test_single_issue(csh *handle, cs_mode mode, char *line, int detail); 63*9a0e4156SSadaf Ebrahimi int set_function(int arch); 64*9a0e4156SSadaf Ebrahimi 65*9a0e4156SSadaf Ebrahimi #endif /* CAPSTONE_TEST_H */ 66