xref: /aosp_15_r20/external/capstone/arch/ARM/ARMModule.c (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
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 Ebrahimi cs_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 Ebrahimi cs_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