From cbdea7ce19f6820bec32465172263ce99d398af6 Mon Sep 17 00:00:00 2001 From: Nguyen Anh Quynh Date: Wed, 27 Dec 2017 14:24:18 +0800 Subject: [PATCH] sparc: fix relative branch target for Sparc64 --- arch/Sparc/SparcInstPrinter.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/arch/Sparc/SparcInstPrinter.c b/arch/Sparc/SparcInstPrinter.c index ff92c04f..b080408e 100644 --- a/arch/Sparc/SparcInstPrinter.c +++ b/arch/Sparc/SparcInstPrinter.c @@ -164,7 +164,7 @@ static bool printSparcAliasInstr(MCInst *MI, SStream *O) static void printOperand(MCInst *MI, int opNum, SStream *O) { - int Imm; + int64_t Imm; unsigned reg; MCOperand *MO = MCInst_getOperand(MI, opNum); @@ -200,7 +200,7 @@ static void printOperand(MCInst *MI, int opNum, SStream *O) switch (MI->Opcode) { case SP_CALL: // Imm = SignExtend32(Imm, 30); - Imm += (uint32_t)MI->address; + Imm += MI->address; break; // Branch on integer condition with prediction (BPcc) @@ -218,7 +218,7 @@ static void printOperand(MCInst *MI, int opNum, SStream *O) case SP_BPFCCANT: case SP_BPFCCNT: Imm = SignExtend32(Imm, 19); - Imm = (uint32_t)MI->address + Imm * 4; + Imm = MI->address + Imm * 4; break; // Branch on integer condition (Bicc) @@ -229,7 +229,7 @@ static void printOperand(MCInst *MI, int opNum, SStream *O) case SP_FBCOND: case SP_FBCONDA: Imm = SignExtend32(Imm, 22); - Imm = (uint32_t)MI->address + Imm * 4; + Imm = MI->address + Imm * 4; break; // Branch on integer register with prediction (BPr) @@ -258,21 +258,11 @@ static void printOperand(MCInst *MI, int opNum, SStream *O) case SP_BPZnapn: case SP_BPZnapt: Imm = SignExtend32(Imm, 16); - Imm = (uint32_t)MI->address + Imm * 4; + Imm = MI->address + Imm * 4; break; } - if (Imm >= 0) { - if (Imm > HEX_THRESHOLD) - SStream_concat(O, "0x%x", Imm); - else - SStream_concat(O, "%u", Imm); - } else { - if (Imm < -HEX_THRESHOLD) - SStream_concat(O, "-0x%x", -Imm); - else - SStream_concat(O, "-%u", -Imm); - } + printInt64(O, Imm); if (MI->csh->detail) { if (MI->csh->doing_mem) {