mirror of
https://github.com/capstone-engine/capstone.git
synced 2025-02-14 19:17:40 +00:00
mips: fix NEGU alias instruction. bug reported by Pancake
This commit is contained in:
parent
d051328a20
commit
66f6c2283e
@ -169,7 +169,9 @@ void Mips_printInst(MCInst *MI, SStream *O, void *info)
|
||||
*tab = '\0';
|
||||
|
||||
// reflect the new insn name (alias) in the opcode
|
||||
MCInst_setOpcode(MI, Mips_get_insn_id2(Mips_map_insn(mnem)));
|
||||
unsigned id = Mips_map_insn(mnem);
|
||||
MCInst_setOpcode(MI, Mips_get_insn_id2(id));
|
||||
MCInst_setOpcodePub(MI, id);
|
||||
free(mnem);
|
||||
}
|
||||
|
||||
|
@ -1383,6 +1383,7 @@ static insn_map insns[] = {
|
||||
|
||||
static insn_map alias_insns[] = {
|
||||
{ -2, MIPS_INS_NOP, { 0 }, { 0 }, { 0 }, 0, 0 },
|
||||
{ Mips_SUBu, MIPS_INS_NEGU, { 0 }, { 0 }, { MIPS_GRP_STDENC, 0 }, 0, 0 },
|
||||
};
|
||||
|
||||
// given internal insn id, return public instruction info
|
||||
@ -1395,16 +1396,16 @@ void Mips_get_insn_id(cs_insn *insn, unsigned int id)
|
||||
if (alias_insns[i].id == id) {
|
||||
insn->id = alias_insns[i].mapid;
|
||||
|
||||
memcpy(insn->regs_read, insns[i].regs_use, sizeof(insns[i].regs_use));
|
||||
insn->regs_read_count = count_positive(insns[i].regs_use);
|
||||
memcpy(insn->regs_read, alias_insns[i].regs_use, sizeof(alias_insns[i].regs_use));
|
||||
insn->regs_read_count = count_positive(alias_insns[i].regs_use);
|
||||
|
||||
memcpy(insn->regs_write, insns[i].regs_mod, sizeof(insns[i].regs_mod));
|
||||
insn->regs_write_count = count_positive(insns[i].regs_mod);
|
||||
memcpy(insn->regs_write, alias_insns[i].regs_mod, sizeof(alias_insns[i].regs_mod));
|
||||
insn->regs_write_count = count_positive(alias_insns[i].regs_mod);
|
||||
|
||||
memcpy(insn->groups, insns[i].groups, sizeof(insns[i].groups));
|
||||
insn->groups_count = count_positive(insns[i].groups);
|
||||
memcpy(insn->groups, alias_insns[i].groups, sizeof(alias_insns[i].groups));
|
||||
insn->groups_count = count_positive(alias_insns[i].groups);
|
||||
|
||||
if (insns[i].branch || insns[i].indirect_branch) {
|
||||
if (alias_insns[i].branch || alias_insns[i].indirect_branch) {
|
||||
// this insn also belongs to JUMP group. add JUMP group
|
||||
insn->groups[insn->groups_count] = MIPS_GRP_JUMP;
|
||||
insn->groups_count++;
|
||||
@ -1913,6 +1914,7 @@ static name_map alias_insn_names[] = {
|
||||
{ MIPS_INS_BGEZAL, "bal" },
|
||||
{ MIPS_INS_BC1T, "bc1t" },
|
||||
{ MIPS_INS_BC1F, "bc1f" },
|
||||
{ MIPS_INS_NEGU, "negu" },
|
||||
};
|
||||
|
||||
char *Mips_insn_name(csh handle, unsigned int id)
|
||||
|
@ -630,7 +630,8 @@ public class Mips_const {
|
||||
public static final int MIPS_INS_XOR = 453;
|
||||
public static final int MIPS_INS_XORI = 454;
|
||||
public static final int MIPS_INS_NOP = 455;
|
||||
public static final int MIPS_INS_MAX = 456;
|
||||
public static final int MIPS_INS_NEGU = 456;
|
||||
public static final int MIPS_INS_MAX = 457;
|
||||
|
||||
// Group of MIPS instructions
|
||||
public static final int MIPS_GRP_INVALID = 0;
|
||||
|
@ -627,7 +627,8 @@ MIPS_INS_WSBH = 452
|
||||
MIPS_INS_XOR = 453
|
||||
MIPS_INS_XORI = 454
|
||||
MIPS_INS_NOP = 455
|
||||
MIPS_INS_MAX = 456
|
||||
MIPS_INS_NEGU = 456
|
||||
MIPS_INS_MAX = 457
|
||||
|
||||
# Group of MIPS instructions
|
||||
MIPS_GRP_INVALID = 0
|
||||
|
@ -685,6 +685,7 @@ typedef enum mips_insn {
|
||||
|
||||
// some alias instructions
|
||||
MIPS_INS_NOP,
|
||||
MIPS_INS_NEGU,
|
||||
|
||||
MIPS_INS_MAX,
|
||||
} mips_insn;
|
||||
|
Loading…
x
Reference in New Issue
Block a user