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