mirror of
https://github.com/capstone-engine/capstone.git
synced 2025-02-20 06:21:49 +00:00
arm64: set absolute (rather than relative) address B/BL. issue reported by Pancake
This commit is contained in:
parent
c2925e9034
commit
03a1836454
@ -61,6 +61,14 @@ void printInt64Bang(SStream *O, int64_t val)
|
||||
}
|
||||
}
|
||||
|
||||
void printUInt64Bang(SStream *O, uint64_t val)
|
||||
{
|
||||
if (val > HEX_THRESHOLD)
|
||||
SStream_concat(O, "#0x%"PRIx64, val);
|
||||
else
|
||||
SStream_concat(O, "#%"PRIu64, val);
|
||||
}
|
||||
|
||||
// print number
|
||||
void printInt64(SStream *O, int64_t val)
|
||||
{
|
||||
|
@ -17,6 +17,8 @@ void SStream_concat0(SStream *ss, char *s);
|
||||
|
||||
void printInt64Bang(SStream *O, int64_t val);
|
||||
|
||||
void printUInt64Bang(SStream *O, uint64_t val);
|
||||
|
||||
void printInt64(SStream *O, int64_t val);
|
||||
|
||||
void printInt32Bang(SStream *O, int32_t val);
|
||||
|
@ -1238,10 +1238,11 @@ static void printAlignedLabel(MCInst *MI, unsigned OpNum, SStream *O)
|
||||
// If the label has already been resolved to an immediate offset (say, when
|
||||
// we're running the disassembler), just print the immediate.
|
||||
if (MCOperand_isImm(Op)) {
|
||||
printInt64Bang(O, MCOperand_getImm(Op) << 2);
|
||||
uint64_t imm = (MCOperand_getImm(Op) << 2) + MI->address;
|
||||
printUInt64Bang(O, imm);
|
||||
if (MI->csh->detail) {
|
||||
MI->flat_insn->detail->arm64.operands[MI->flat_insn->detail->arm64.op_count].type = ARM64_OP_IMM;
|
||||
MI->flat_insn->detail->arm64.operands[MI->flat_insn->detail->arm64.op_count].imm = (int)MCOperand_getImm(Op) << 2;
|
||||
MI->flat_insn->detail->arm64.operands[MI->flat_insn->detail->arm64.op_count].imm = imm;
|
||||
MI->flat_insn->detail->arm64.op_count++;
|
||||
}
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user