Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Unified Diff: src/third_party/libdisasm/x86_insn.c

Issue 1821293002: Replace libdisasm with capstone Base URL: https://chromium.googlesource.com/breakpad/breakpad.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/third_party/libdisasm/x86_insn.c
diff --git a/src/third_party/libdisasm/x86_insn.c b/src/third_party/libdisasm/x86_insn.c
deleted file mode 100644
index 5649b89fb8eb9fed2f72d3c3ffd200c7faf6749a..0000000000000000000000000000000000000000
--- a/src/third_party/libdisasm/x86_insn.c
+++ /dev/null
@@ -1,182 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "libdis.h"
-
-#ifdef _MSC_VER
- #define snprintf _snprintf
- #define inline __inline
-#endif
-
-int x86_insn_is_valid( x86_insn_t *insn ) {
- if ( insn && insn->type != insn_invalid && insn->size > 0 ) {
- return 1;
- }
-
- return 0;
-}
-
-uint32_t x86_get_address( x86_insn_t *insn ) {
- x86_oplist_t *op_lst;
- if (! insn || ! insn->operands ) {
- return 0;
- }
-
- for (op_lst = insn->operands; op_lst; op_lst = op_lst->next ) {
- if ( op_lst->op.type == op_offset ) {
- return op_lst->op.data.offset;
- } else if ( op_lst->op.type == op_absolute ) {
- if ( op_lst->op.datatype == op_descr16 ) {
- return (uint32_t)
- op_lst->op.data.absolute.offset.off16;
- }
- return op_lst->op.data.absolute.offset.off32;
- }
- }
-
- return 0;
-}
-
-int32_t x86_get_rel_offset( x86_insn_t *insn ) {
- x86_oplist_t *op_lst;
- if (! insn || ! insn->operands ) {
- return 0;
- }
-
- for (op_lst = insn->operands; op_lst; op_lst = op_lst->next ) {
- if ( op_lst->op.type == op_relative_near ) {
- return (int32_t) op_lst->op.data.relative_near;
- } else if ( op_lst->op.type == op_relative_far ) {
- return op_lst->op.data.relative_far;
- }
- }
-
- return 0;
-}
-
-x86_op_t * x86_get_branch_target( x86_insn_t *insn ) {
- x86_oplist_t *op_lst;
- if (! insn || ! insn->operands ) {
- return NULL;
- }
-
- for (op_lst = insn->operands; op_lst; op_lst = op_lst->next ) {
- if ( op_lst->op.access & op_execute ) {
- return &(op_lst->op);
- }
- }
-
- return NULL;
-}
-x86_op_t * x86_get_imm( x86_insn_t *insn ) {
- x86_oplist_t *op_lst;
- if (! insn || ! insn->operands ) {
- return NULL;
- }
-
- for (op_lst = insn->operands; op_lst; op_lst = op_lst->next ) {
- if ( op_lst->op.type == op_immediate ) {
- return &(op_lst->op);
- }
- }
-
- return NULL;
-}
-
-#define IS_PROPER_IMM( x ) \
- x->op.type == op_immediate && ! (x->op.flags & op_hardcode)
-
-
-/* if there is an immediate value in the instruction, return a pointer to
- * it */
-unsigned char * x86_get_raw_imm( x86_insn_t *insn ) {
- int size, offset;
- x86_op_t *op = NULL;
-
- if (! insn || ! insn->operands ) {
- return(NULL);
- }
-
- /* a bit inelegant, but oh well... */
- if ( IS_PROPER_IMM( insn->operands ) ) {
- op = &insn->operands->op;
- } else if ( insn->operands->next ) {
- if ( IS_PROPER_IMM( insn->operands->next ) ) {
- op = &insn->operands->next->op;
- } else if ( insn->operands->next->next &&
- IS_PROPER_IMM( insn->operands->next->next ) ) {
- op = &insn->operands->next->next->op;
- }
- }
-
- if (! op ) {
- return( NULL );
- }
-
- /* immediate data is at the end of the insn */
- size = x86_operand_size( op );
- offset = insn->size - size;
- return( &insn->bytes[offset] );
-}
-
-
-unsigned int x86_operand_size( x86_op_t *op ) {
- switch (op->datatype ) {
- case op_byte: return 1;
- case op_word: return 2;
- case op_dword: return 4;
- case op_qword: return 8;
- case op_dqword: return 16;
- case op_sreal: return 4;
- case op_dreal: return 8;
- case op_extreal: return 10;
- case op_bcd: return 10;
- case op_ssimd: return 16;
- case op_dsimd: return 16;
- case op_sssimd: return 4;
- case op_sdsimd: return 8;
- case op_descr32: return 6;
- case op_descr16: return 4;
- case op_pdescr32: return 6;
- case op_pdescr16: return 6;
- case op_bounds16: return 4;
- case op_bounds32: return 8;
- case op_fpuenv16: return 14;
- case op_fpuenv32: return 28;
- case op_fpustate16: return 94;
- case op_fpustate32: return 108;
- case op_fpregset: return 512;
- case op_fpreg: return 10;
- case op_none: return 0;
- }
- return(4); /* default size */
-}
-
-void x86_set_insn_addr( x86_insn_t *insn, uint32_t addr ) {
- if ( insn ) insn->addr = addr;
-}
-
-void x86_set_insn_offset( x86_insn_t *insn, unsigned int offset ){
- if ( insn ) insn->offset = offset;
-}
-
-void x86_set_insn_function( x86_insn_t *insn, void * func ){
- if ( insn ) insn->function = func;
-}
-
-void x86_set_insn_block( x86_insn_t *insn, void * block ){
- if ( insn ) insn->block = block;
-}
-
-void x86_tag_insn( x86_insn_t *insn ){
- if ( insn ) insn->tag = 1;
-}
-
-void x86_untag_insn( x86_insn_t *insn ){
- if ( insn ) insn->tag = 0;
-}
-
-int x86_insn_is_tagged( x86_insn_t *insn ){
- return insn->tag;
-}
-

Powered by Google App Engine
This is Rietveld 408576698