mirror of
https://github.com/capstone-engine/capstone.git
synced 2025-02-24 00:22:00 +00:00
Change AArch64 GRP_JUMP to use a static table implementation
Added support for GRP_CALL and GRP_RETURN to AArch64
This commit is contained in:
parent
197fe1c14c
commit
9092e5295f
@ -332,12 +332,6 @@ void AArch64_get_insn_id(cs_struct *h, cs_insn *insn, unsigned int id)
|
||||
insn->detail->groups_count = (uint8_t)count_positive(insns[i].groups);
|
||||
|
||||
insn->detail->arm64.update_flags = cs_reg_write((csh)&handle, insn, ARM64_REG_NZCV);
|
||||
|
||||
if (insns[i].branch || insns[i].indirect_branch) {
|
||||
// this insn also belongs to JUMP group. add JUMP group
|
||||
insn->detail->groups[insn->detail->groups_count] = ARM64_GRP_JUMP;
|
||||
insn->detail->groups_count++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -844,6 +838,8 @@ static name_map group_name_maps[] = {
|
||||
// generic groups
|
||||
{ ARM64_GRP_INVALID, NULL },
|
||||
{ ARM64_GRP_JUMP, "jump" },
|
||||
{ ARM64_GRP_CALL, "call" },
|
||||
{ ARM64_GRP_RET, "return" },
|
||||
|
||||
// architecture-specific groups
|
||||
{ ARM64_GRP_CRYPTO, "crypto" },
|
||||
@ -858,12 +854,12 @@ const char *AArch64_group_name(csh handle, unsigned int id)
|
||||
{
|
||||
#ifndef CAPSTONE_DIET
|
||||
// verify group id
|
||||
if (id >= ARM64_GRP_ENDING || (id > ARM64_GRP_JUMP && id < ARM64_GRP_CRYPTO))
|
||||
if (id >= ARM64_GRP_ENDING || (id > ARM64_GRP_RET && id < ARM64_GRP_CRYPTO))
|
||||
return NULL;
|
||||
|
||||
// NOTE: when new generic groups are added, 2 must be changed accordingly
|
||||
if (id >= 128)
|
||||
return group_name_maps[id - 128 + 2].name;
|
||||
return group_name_maps[id - 128 + 4].name;
|
||||
else
|
||||
return group_name_maps[id].name;
|
||||
#else
|
||||
|
@ -430,7 +430,7 @@
|
||||
{
|
||||
AArch64_B, ARM64_INS_B,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
@ -532,19 +532,19 @@
|
||||
{
|
||||
AArch64_BL, ARM64_INS_BL,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { ARM64_REG_LR, 0 }, { 0 }, 0, 0
|
||||
{ 0 }, { ARM64_REG_LR, 0 }, { ARM64_GRP_CALL, 0 }, 0, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
AArch64_BLR, ARM64_INS_BLR,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { ARM64_REG_LR, 0 }, { 0 }, 0, 0
|
||||
{ 0 }, { ARM64_REG_LR, 0 }, { ARM64_GRP_CALL, 0 }, 0, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
AArch64_BR, ARM64_INS_BR,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 1
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 1
|
||||
#endif
|
||||
},
|
||||
{
|
||||
@ -568,31 +568,31 @@
|
||||
{
|
||||
AArch64_Bcc, ARM64_INS_B,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ ARM64_REG_NZCV, 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ ARM64_REG_NZCV, 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
AArch64_CBNZW, ARM64_INS_CBNZ,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
AArch64_CBNZX, ARM64_INS_CBNZ,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
AArch64_CBZW, ARM64_INS_CBZ,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
AArch64_CBZX, ARM64_INS_CBZ,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
@ -6832,7 +6832,7 @@
|
||||
{
|
||||
AArch64_RET, ARM64_INS_RET,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 0, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_RET, 0 }, 0, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
@ -11632,13 +11632,13 @@
|
||||
{
|
||||
AArch64_TBNZW, ARM64_INS_TBNZ,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
AArch64_TBNZX, ARM64_INS_TBNZ,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
@ -11692,13 +11692,13 @@
|
||||
{
|
||||
AArch64_TBZW, ARM64_INS_TBZ,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
AArch64_TBZX, ARM64_INS_TBZ,
|
||||
#ifndef CAPSTONE_DIET
|
||||
{ 0 }, { 0 }, { 0 }, 1, 0
|
||||
{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
|
||||
#endif
|
||||
},
|
||||
{
|
||||
|
@ -1134,6 +1134,8 @@ typedef enum arm64_insn_group {
|
||||
//> Generic groups
|
||||
// all jump instructions (conditional+direct+indirect jumps)
|
||||
ARM64_GRP_JUMP, // = CS_GRP_JUMP
|
||||
ARM64_GRP_CALL,
|
||||
ARM64_GRP_RET,
|
||||
ARM64_GRP_PRIVILEGE = 6, // = CS_GRP_PRIVILEGE
|
||||
|
||||
//> Architecture-specific groups
|
||||
|
Loading…
x
Reference in New Issue
Block a user