michael@0: #include michael@0: #include michael@0: #include michael@0: michael@0: #include "libdis.h" michael@0: #include "ia32_insn.h" michael@0: #include "ia32_reg.h" /* for ia32_reg wrapper */ michael@0: #include "ia32_settings.h" michael@0: extern ia32_settings_t ia32_settings; michael@0: michael@0: #ifdef _MSC_VER michael@0: #define snprintf _snprintf michael@0: #define inline __inline michael@0: #endif michael@0: michael@0: michael@0: /* =========================================================== INIT/TERM */ michael@0: static DISASM_REPORTER __x86_reporter_func = NULL; michael@0: static void * __x86_reporter_arg = NULL; michael@0: michael@0: int x86_init( enum x86_options options, DISASM_REPORTER reporter, void * arg ) michael@0: { michael@0: ia32_settings.options = options; michael@0: __x86_reporter_func = reporter; michael@0: __x86_reporter_arg = arg; michael@0: michael@0: return 1; michael@0: } michael@0: michael@0: void x86_set_reporter( DISASM_REPORTER reporter, void * arg ) { michael@0: __x86_reporter_func = reporter; michael@0: __x86_reporter_arg = arg; michael@0: } michael@0: michael@0: void x86_set_options( enum x86_options options ){ michael@0: ia32_settings.options = options; michael@0: } michael@0: michael@0: enum x86_options x86_get_options( void ) { michael@0: return ia32_settings.options; michael@0: } michael@0: michael@0: int x86_cleanup( void ) michael@0: { michael@0: return 1; michael@0: } michael@0: michael@0: /* =========================================================== ERRORS */ michael@0: void x86_report_error( enum x86_report_codes code, void *data ) { michael@0: if ( __x86_reporter_func ) { michael@0: (*__x86_reporter_func)(code, data, __x86_reporter_arg); michael@0: } michael@0: } michael@0: michael@0: michael@0: /* =========================================================== MISC */ michael@0: unsigned int x86_endian(void) { return ia32_settings.endian; } michael@0: unsigned int x86_addr_size(void) { return ia32_settings.sz_addr; } michael@0: unsigned int x86_op_size(void) { return ia32_settings.sz_oper; } michael@0: unsigned int x86_word_size(void) { return ia32_settings.sz_word; } michael@0: unsigned int x86_max_insn_size(void) { return ia32_settings.max_insn; } michael@0: unsigned int x86_sp_reg(void) { return ia32_settings.id_sp_reg; } michael@0: unsigned int x86_fp_reg(void) { return ia32_settings.id_fp_reg; } michael@0: unsigned int x86_ip_reg(void) { return ia32_settings.id_ip_reg; } michael@0: unsigned int x86_flag_reg(void) { return ia32_settings.id_flag_reg; } michael@0: michael@0: /* wrapper function to hide the IA32 register fn */ michael@0: void x86_reg_from_id( unsigned int id, x86_reg_t * reg ) { michael@0: ia32_handle_register( reg, id ); michael@0: return; michael@0: }