summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/disassembler/udis86
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-30 12:48:17 +0200
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-30 12:48:17 +0200
commit881da28418d380042aa95a97f0cbd42560a64f7c (patch)
treea794dff3274695e99c651902dde93d934ea7a5af /Source/JavaScriptCore/disassembler/udis86
parent7e104c57a70fdf551bb3d22a5d637cdcbc69dbea (diff)
parent0fcedcd17cc00d3dd44c718b3cb36c1033319671 (diff)
downloadqtwebkit-881da28418d380042aa95a97f0cbd42560a64f7c.tar.gz
Merge 'wip/next' into dev
Change-Id: Iff9ee5e23bb326c4371ec8ed81d56f2f05d680e9
Diffstat (limited to 'Source/JavaScriptCore/disassembler/udis86')
-rw-r--r--Source/JavaScriptCore/disassembler/udis86/itab.py2
-rw-r--r--Source/JavaScriptCore/disassembler/udis86/udis86_decode.c3
-rw-r--r--Source/JavaScriptCore/disassembler/udis86/udis86_syn-att.c55
-rw-r--r--Source/JavaScriptCore/disassembler/udis86/udis86_syn-intel.c10
-rw-r--r--Source/JavaScriptCore/disassembler/udis86/udis86_types.h6
5 files changed, 47 insertions, 29 deletions
diff --git a/Source/JavaScriptCore/disassembler/udis86/itab.py b/Source/JavaScriptCore/disassembler/udis86/itab.py
index 90bd3e02c..3d50ad061 100644
--- a/Source/JavaScriptCore/disassembler/udis86/itab.py
+++ b/Source/JavaScriptCore/disassembler/udis86/itab.py
@@ -314,7 +314,7 @@ class UdItabGenerator( ud_opcode.UdOpcodeTables ):
self.ItabH.write( "\n" )
self.ItabH.write("\n/* itab entry operand definitions */\n");
- operands = list( self.OperandDict.keys() )
+ operands = self.OperandDict.keys()
operands.sort()
for o in operands:
self.ItabH.write("#define O_%-7s { %-12s %-8s }\n" %
diff --git a/Source/JavaScriptCore/disassembler/udis86/udis86_decode.c b/Source/JavaScriptCore/disassembler/udis86/udis86_decode.c
index 3d567b6df..579903642 100644
--- a/Source/JavaScriptCore/disassembler/udis86/udis86_decode.c
+++ b/Source/JavaScriptCore/disassembler/udis86/udis86_decode.c
@@ -459,6 +459,8 @@ decode_modrm_rm(struct ud *u,
rm = (REX_B(u->pfx_rex) << 3) | MODRM_RM(modrm(u));
reg = (REX_R(u->pfx_rex) << 3) | MODRM_REG(modrm(u));
+ UNUSED_PARAM(reg);
+
op->size = resolve_operand_size(u, size);
/*
@@ -650,7 +652,6 @@ decode_operand(struct ud *u,
case OP_E:
decode_modrm_rm(u, operand, T_GPR, size);
break;
- break;
case OP_G:
decode_modrm_reg(u, operand, T_GPR, size);
break;
diff --git a/Source/JavaScriptCore/disassembler/udis86/udis86_syn-att.c b/Source/JavaScriptCore/disassembler/udis86/udis86_syn-att.c
index 0d1c57d48..c9c84880a 100644
--- a/Source/JavaScriptCore/disassembler/udis86/udis86_syn-att.c
+++ b/Source/JavaScriptCore/disassembler/udis86/udis86_syn-att.c
@@ -66,14 +66,25 @@ gen_operand(struct ud* u, struct ud_operand* op)
if (op->offset == 8) {
if (op->lval.sbyte < 0)
mkasm(u, "-0x%x", (-op->lval.sbyte) & 0xff);
- else mkasm(u, "0x%x", op->lval.sbyte);
+ else
+ mkasm(u, "0x%x", op->lval.sbyte);
}
- else if (op->offset == 16)
- mkasm(u, "0x%x", op->lval.uword);
- else if (op->offset == 32)
- mkasm(u, "0x%lx", (unsigned long)op->lval.udword);
- else if (op->offset == 64)
- mkasm(u, "0x" FMT64 "x", op->lval.uqword);
+ else if (op->offset == 16) {
+ if (op->lval.sword < 0)
+ mkasm(u, "-0x%x", (-op->lval.sword) & 0xffff);
+ else
+ mkasm(u, "0x%x", op->lval.sword);
+ } else if (op->offset == 32) {
+ if (op->lval.sdword < 0)
+ mkasm(u, "-0x%x", (-op->lval.sdword) & 0xffffffff);
+ else
+ mkasm(u, "0x%x", op->lval.sdword);
+ } else if (op->offset == 64) {
+ if (op->lval.sdword < 0)
+ mkasm(u, "-0x" FMT64 "x", (uint64_t)-op->lval.sqword);
+ else
+ mkasm(u, "0x" FMT64 "x", (uint64_t)op->lval.sqword);
+ }
if (op->base)
mkasm(u, "(%%%s", ud_reg_tab[op->base - UD_R_AL]);
@@ -108,7 +119,7 @@ gen_operand(struct ud* u, struct ud_operand* op)
}
if ( sext_size < 64 )
sext_mask = ( 1ull << sext_size ) - 1;
- mkasm( u, "$0x" FMT64 "x", imm & sext_mask );
+ mkasm( u, "$0x" FMT64 "x", (uint64_t)(imm & sext_mask) );
break;
}
@@ -116,16 +127,16 @@ gen_operand(struct ud* u, struct ud_operand* op)
case UD_OP_JIMM:
switch (op->size) {
case 8:
- mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte);
+ mkasm(u, "0x" FMT64 "x", (uint64_t)(u->pc + op->lval.sbyte));
break;
case 16:
- mkasm(u, "0x" FMT64 "x", (u->pc + op->lval.sword) & 0xffff );
+ mkasm(u, "0x" FMT64 "x", (uint64_t)((u->pc + op->lval.sword) & 0xffff) );
break;
case 32:
if (u->dis_mode == 32)
- mkasm(u, "0x" FMT64 "x", (u->pc + op->lval.sdword) & 0xffffffff);
+ mkasm(u, "0x" FMT64 "x", (uint64_t)((u->pc + op->lval.sdword) & 0xffffffff));
else
- mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sdword);
+ mkasm(u, "0x" FMT64 "x", (uint64_t)(u->pc + op->lval.sdword));
break;
default:break;
}
@@ -156,6 +167,7 @@ extern void
ud_translate_att(struct ud *u)
{
int size = 0;
+ unsigned i;
/* check if P_OSO prefix is used */
if (! P_OSO(u->itab_entry->prefix) && u->pfx_opr) {
@@ -218,19 +230,20 @@ ud_translate_att(struct ud *u)
mkasm(u, "%s", ud_lookup_mnemonic(u->mnemonic));
}
- if (u->c1)
- size = u->operand[0].size;
- else if (u->c2)
- size = u->operand[1].size;
- else if (u->c3)
- size = u->operand[2].size;
+ for (i = 3; i--;) {
+ if (u->operand[i].size > size
+ && u->operand[i].type != UD_OP_JIMM)
+ size = u->operand[i].size;
+ }
if (size == 8)
- mkasm(u, "b");
+ mkasm(u, "b");
else if (size == 16)
- mkasm(u, "w");
+ mkasm(u, "w");
+ else if (size == 32)
+ mkasm(u, "l");
else if (size == 64)
- mkasm(u, "q");
+ mkasm(u, "q");
mkasm(u, " ");
diff --git a/Source/JavaScriptCore/disassembler/udis86/udis86_syn-intel.c b/Source/JavaScriptCore/disassembler/udis86/udis86_syn-intel.c
index 38251db88..4ad42eb63 100644
--- a/Source/JavaScriptCore/disassembler/udis86/udis86_syn-intel.c
+++ b/Source/JavaScriptCore/disassembler/udis86/udis86_syn-intel.c
@@ -106,7 +106,7 @@ static void gen_operand(struct ud* u, struct ud_operand* op, int syn_cast)
else mkasm(u, "%s0x%lx", (op_f) ? "+" : "", (unsigned long)op->lval.udword);
}
else if (op->offset == 64)
- mkasm(u, "%s0x" FMT64 "x", (op_f) ? "+" : "", op->lval.uqword);
+ mkasm(u, "%s0x" FMT64 "x", (op_f) ? "+" : "", (uint64_t)op->lval.uqword);
mkasm(u, "]");
break;
@@ -133,7 +133,7 @@ static void gen_operand(struct ud* u, struct ud_operand* op, int syn_cast)
}
if ( sext_size < 64 )
sext_mask = ( 1ull << sext_size ) - 1;
- mkasm( u, "0x" FMT64 "x", imm & sext_mask );
+ mkasm( u, "0x" FMT64 "x", (uint64_t)(imm & sext_mask) );
break;
}
@@ -143,13 +143,13 @@ static void gen_operand(struct ud* u, struct ud_operand* op, int syn_cast)
if (syn_cast) opr_cast(u, op);
switch (op->size) {
case 8:
- mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte);
+ mkasm(u, "0x" FMT64 "x", (uint64_t)(u->pc + op->lval.sbyte));
break;
case 16:
- mkasm(u, "0x" FMT64 "x", ( u->pc + op->lval.sword ) & 0xffff );
+ mkasm(u, "0x" FMT64 "x", (uint64_t)(( u->pc + op->lval.sword ) & 0xffff) );
break;
case 32:
- mkasm(u, "0x" FMT64 "x", ( u->pc + op->lval.sdword ) & 0xfffffffful );
+ mkasm(u, "0x" FMT64 "x", (uint64_t)(( u->pc + op->lval.sdword ) & 0xfffffffful) );
break;
default:break;
}
diff --git a/Source/JavaScriptCore/disassembler/udis86/udis86_types.h b/Source/JavaScriptCore/disassembler/udis86/udis86_types.h
index 320d1ca49..176bf6d73 100644
--- a/Source/JavaScriptCore/disassembler/udis86/udis86_types.h
+++ b/Source/JavaScriptCore/disassembler/udis86/udis86_types.h
@@ -48,7 +48,11 @@
typedef __int32 int32_t;
typedef __int64 int64_t;
#else
-# define FMT64 "%ll"
+# if defined(__GNU_LIBRARY__) && defined(__WORDSIZE) && (__WORDSIZE == 64)
+# define FMT64 "%l"
+# else
+# define FMT64 "%ll"
+# endif
# ifndef __UD_STANDALONE__
# include <inttypes.h>
# endif /* __UD_STANDALONE__ */