1*9a0e4156SSadaf Ebrahimi /* Capstone Disassembly Engine */ 2*9a0e4156SSadaf Ebrahimi /* By Dang Hoang Vu <[email protected]> 2013 */ 3*9a0e4156SSadaf Ebrahimi 4*9a0e4156SSadaf Ebrahimi #ifdef CAPSTONE_HAS_ARM 5*9a0e4156SSadaf Ebrahimi 6*9a0e4156SSadaf Ebrahimi #include "../../cs_priv.h" 7*9a0e4156SSadaf Ebrahimi #include "../../MCRegisterInfo.h" 8*9a0e4156SSadaf Ebrahimi #include "ARMDisassembler.h" 9*9a0e4156SSadaf Ebrahimi #include "ARMInstPrinter.h" 10*9a0e4156SSadaf Ebrahimi #include "ARMMapping.h" 11*9a0e4156SSadaf Ebrahimi #include "ARMModule.h" 12*9a0e4156SSadaf Ebrahimi ARM_global_init(cs_struct * ud)13*9a0e4156SSadaf Ebrahimics_err ARM_global_init(cs_struct *ud) 14*9a0e4156SSadaf Ebrahimi { 15*9a0e4156SSadaf Ebrahimi MCRegisterInfo *mri; 16*9a0e4156SSadaf Ebrahimi mri = cs_mem_malloc(sizeof(*mri)); 17*9a0e4156SSadaf Ebrahimi 18*9a0e4156SSadaf Ebrahimi ARM_init(mri); 19*9a0e4156SSadaf Ebrahimi ARM_getRegName(ud, 0); // use default get_regname 20*9a0e4156SSadaf Ebrahimi 21*9a0e4156SSadaf Ebrahimi ud->printer = ARM_printInst; 22*9a0e4156SSadaf Ebrahimi ud->printer_info = mri; 23*9a0e4156SSadaf Ebrahimi ud->reg_name = ARM_reg_name; 24*9a0e4156SSadaf Ebrahimi ud->insn_id = ARM_get_insn_id; 25*9a0e4156SSadaf Ebrahimi ud->insn_name = ARM_insn_name; 26*9a0e4156SSadaf Ebrahimi ud->group_name = ARM_group_name; 27*9a0e4156SSadaf Ebrahimi ud->post_printer = ARM_post_printer; 28*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET 29*9a0e4156SSadaf Ebrahimi ud->reg_access = ARM_reg_access; 30*9a0e4156SSadaf Ebrahimi #endif 31*9a0e4156SSadaf Ebrahimi 32*9a0e4156SSadaf Ebrahimi if (ud->mode & CS_MODE_THUMB) 33*9a0e4156SSadaf Ebrahimi ud->disasm = Thumb_getInstruction; 34*9a0e4156SSadaf Ebrahimi else 35*9a0e4156SSadaf Ebrahimi ud->disasm = ARM_getInstruction; 36*9a0e4156SSadaf Ebrahimi 37*9a0e4156SSadaf Ebrahimi return CS_ERR_OK; 38*9a0e4156SSadaf Ebrahimi } 39*9a0e4156SSadaf Ebrahimi ARM_option(cs_struct * handle,cs_opt_type type,size_t value)40*9a0e4156SSadaf Ebrahimics_err ARM_option(cs_struct *handle, cs_opt_type type, size_t value) 41*9a0e4156SSadaf Ebrahimi { 42*9a0e4156SSadaf Ebrahimi switch(type) { 43*9a0e4156SSadaf Ebrahimi case CS_OPT_MODE: 44*9a0e4156SSadaf Ebrahimi if (value & CS_MODE_THUMB) 45*9a0e4156SSadaf Ebrahimi handle->disasm = Thumb_getInstruction; 46*9a0e4156SSadaf Ebrahimi else 47*9a0e4156SSadaf Ebrahimi handle->disasm = ARM_getInstruction; 48*9a0e4156SSadaf Ebrahimi 49*9a0e4156SSadaf Ebrahimi handle->mode = (cs_mode)value; 50*9a0e4156SSadaf Ebrahimi 51*9a0e4156SSadaf Ebrahimi break; 52*9a0e4156SSadaf Ebrahimi case CS_OPT_SYNTAX: 53*9a0e4156SSadaf Ebrahimi ARM_getRegName(handle, (int)value); 54*9a0e4156SSadaf Ebrahimi handle->syntax = (int)value; 55*9a0e4156SSadaf Ebrahimi break; 56*9a0e4156SSadaf Ebrahimi default: 57*9a0e4156SSadaf Ebrahimi break; 58*9a0e4156SSadaf Ebrahimi } 59*9a0e4156SSadaf Ebrahimi 60*9a0e4156SSadaf Ebrahimi return CS_ERR_OK; 61*9a0e4156SSadaf Ebrahimi } 62*9a0e4156SSadaf Ebrahimi 63*9a0e4156SSadaf Ebrahimi #endif 64