GDB (xrefs)
Classes | Macros | Enumerations | Functions | Variables
aarch64-insn.h File Reference

Go to the source code of this file.

Classes

struct  aarch64_register
 
struct  aarch64_memory_operand
 
struct  aarch64_insn_data
 
struct  aarch64_insn_visitor
 

Macros

#define ENCODE(val, size, offset)   ((uint32_t) ((val & ((1ULL << size) - 1)) << offset))
 
#define can_encode_int32(val, bits)   (((val) >> (bits)) == 0 || ((val) >> (bits)) == -1)
 
#define emit_b(buf, is_bl, offset)   aarch64_emit_insn (buf, ((is_bl) ? BL : B) | (ENCODE ((offset) >> 2, 26, 0)))
 
#define emit_bcond(buf, cond, offset)
 
#define emit_cb(buf, is_cbnz, rt, offset)
 
#define emit_ldr(buf, rt, rn, operand)   aarch64_emit_load_store (buf, rt.is64 ? 3 : 2, LDR, rt, rn, operand)
 
#define emit_ldrsw(buf, rt, rn, operand)   aarch64_emit_load_store (buf, 3, LDRSW, rt, rn, operand)
 
#define emit_tb(buf, is_tbnz, bit, rt, offset)
 
#define emit_nop(buf)   aarch64_emit_insn (buf, NOP)
 

Enumerations

enum  aarch64_opcodes {
  B = 0x14000000, BL = 0x80000000 | B, BCOND = 0x40000000 | B, CBZ = 0x20000000 | B,
  CBNZ = 0x21000000 | B, TBZ = 0x36000000 | B, TBNZ = 0x37000000 | B, BLR = 0xd63f0000,
  RET = 0xd65f0000, STP = 0x28000000, LDP = 0x28400000, STP_SIMD_VFP = 0x04000000 | STP,
  LDP_SIMD_VFP = 0x04000000 | LDP, STR = 0x38000000, LDR = 0x00400000 | STR, LDRSW = 0x80800000 | STR,
  LDAXR = 0x085ffc00, STXR = 0x08007c00, STLR = 0x089ffc00, MOV = 0x52800000,
  MOVK = 0x20000000 | MOV, ADD = 0x01000000, SUB = 0x40000000 | ADD, SUBS = 0x20000000 | SUB,
  AND = 0x0a000000, ORR = 0x20000000 | AND, ORN = 0x00200000 | ORR, EOR = 0x40000000 | AND,
  LSLV = 0x1ac02000, LSRV = 0x00000400 | LSLV, ASRV = 0x00000800 | LSLV, SBFM = 0x13000000,
  UBFM = 0x40000000 | SBFM, CSINC = 0x9a800400, MUL = 0x1b007c00, MSR = 0xd5100000,
  MRS = 0x00200000 | MSR, HINT = 0xd503201f, SEVL = (5 << 5) | HINT, WFE = (2 << 5) | HINT,
  NOP = (0 << 5) | HINT
}
 
enum  aarch64_memory_operand_type { MEMORY_OPERAND_OFFSET, MEMORY_OPERAND_PREINDEX, MEMORY_OPERAND_POSTINDEX }
 

Functions

int aarch64_decode_adr (CORE_ADDR addr, uint32_t insn, int *is_adrp, unsigned *rd, int32_t *offset)
 
int aarch64_decode_b (CORE_ADDR addr, uint32_t insn, int *is_bl, int32_t *offset)
 
int aarch64_decode_bcond (CORE_ADDR addr, uint32_t insn, unsigned *cond, int32_t *offset)
 
int aarch64_decode_cb (CORE_ADDR addr, uint32_t insn, int *is64, int *is_cbnz, unsigned *rn, int32_t *offset)
 
int aarch64_decode_tb (CORE_ADDR addr, uint32_t insn, int *is_tbnz, unsigned *bit, unsigned *rt, int32_t *imm)
 
int aarch64_decode_ldr_literal (CORE_ADDR addr, uint32_t insn, int *is_w, int *is64, unsigned *rt, int32_t *offset)
 
void aarch64_relocate_instruction (uint32_t insn, const struct aarch64_insn_visitor *visitor, struct aarch64_insn_data *data)
 
int aarch64_emit_insn (uint32_t *buf, uint32_t insn)
 
int aarch64_emit_load_store (uint32_t *buf, uint32_t size, enum aarch64_opcodes opcode, struct aarch64_register rt, struct aarch64_register rn, struct aarch64_memory_operand operand)
 

Variables

int aarch64_debug
 

Macro Definition Documentation

◆ can_encode_int32

#define can_encode_int32 (   val,
  bits 
)    (((val) >> (bits)) == 0 || ((val) >> (bits)) == -1)

Definition at line 215 of file aarch64-insn.h.

Referenced by aarch64_displaced_step_b().

◆ emit_b

#define emit_b (   buf,
  is_bl,
  offset 
)    aarch64_emit_insn (buf, ((is_bl) ? BL : B) | (ENCODE ((offset) >> 2, 26, 0)))

Definition at line 228 of file aarch64-insn.h.

Referenced by aarch64_displaced_step_b().

◆ emit_bcond

#define emit_bcond (   buf,
  cond,
  offset 
)
Value:
BCOND | ENCODE ((offset) >> 2, 19, 5) \
| ENCODE ((cond), 4, 0))
int aarch64_emit_insn(uint32_t *buf, uint32_t insn)
Definition: aarch64-insn.c:336
int offset
Definition: agent.c:65
#define ENCODE(val, size, offset)
Definition: aarch64-insn.h:147

Definition at line 240 of file aarch64-insn.h.

Referenced by aarch64_displaced_step_b_cond().

◆ emit_cb

#define emit_cb (   buf,
  is_cbnz,
  rt,
  offset 
)
Value:
((is_cbnz) ? CBNZ : CBZ) \
| ENCODE (rt.is64, 1, 31) /* sf */ \
| ENCODE (offset >> 2, 19, 5) /* imm19 */ \
| ENCODE (rt.num, 5, 0))
int aarch64_emit_insn(uint32_t *buf, uint32_t insn)
Definition: aarch64-insn.c:336
int offset
Definition: agent.c:65
#define ENCODE(val, size, offset)
Definition: aarch64-insn.h:147

Definition at line 256 of file aarch64-insn.h.

Referenced by aarch64_displaced_step_cb().

◆ emit_ldr

#define emit_ldr (   buf,
  rt,
  rn,
  operand 
)    aarch64_emit_load_store (buf, rt.is64 ? 3 : 2, LDR, rt, rn, operand)

Definition at line 274 of file aarch64-insn.h.

Referenced by aarch64_displaced_step_ldr_literal().

◆ emit_ldrsw

#define emit_ldrsw (   buf,
  rt,
  rn,
  operand 
)    aarch64_emit_load_store (buf, 3, LDRSW, rt, rn, operand)

Definition at line 288 of file aarch64-insn.h.

Referenced by aarch64_displaced_step_ldr_literal().

◆ emit_nop

#define emit_nop (   buf)    aarch64_emit_insn (buf, NOP)

Definition at line 314 of file aarch64-insn.h.

Referenced by aarch64_displaced_step_adr(), and aarch64_displaced_step_b().

◆ emit_tb

#define emit_tb (   buf,
  is_tbnz,
  bit,
  rt,
  offset 
)
Value:
((is_tbnz) ? TBNZ: TBZ) \
| ENCODE (bit >> 5, 1, 31) /* b5 */ \
| ENCODE (bit, 5, 19) /* b40 */ \
| ENCODE (offset >> 2, 14, 5) /* imm14 */ \
| ENCODE (rt.num, 5, 0))
int aarch64_emit_insn(uint32_t *buf, uint32_t insn)
Definition: aarch64-insn.c:336
#define bit(obj, st)
Definition: aarch64-tdep.c:63
int offset
Definition: agent.c:65
#define ENCODE(val, size, offset)
Definition: aarch64-insn.h:147

Definition at line 304 of file aarch64-insn.h.

Referenced by aarch64_displaced_step_tb().

◆ ENCODE

#define ENCODE (   val,
  size,
  offset 
)    ((uint32_t) ((val & ((1ULL << size) - 1)) << offset))

Definition at line 147 of file aarch64-insn.h.

Referenced by aarch64_emit_load_store().

Enumeration Type Documentation

◆ aarch64_memory_operand_type

Enumerator
MEMORY_OPERAND_OFFSET 
MEMORY_OPERAND_PREINDEX 
MEMORY_OPERAND_POSTINDEX 

Definition at line 120 of file aarch64-insn.h.

◆ aarch64_opcodes

Enumerator
BL 
BCOND 
CBZ 
CBNZ 
TBZ 
TBNZ 
BLR 
RET 
STP 
LDP 
STP_SIMD_VFP 
LDP_SIMD_VFP 
STR 
LDR 
LDRSW 
LDAXR 
STXR 
STLR 
MOV 
MOVK 
ADD 
SUB 
SUBS 
AND 
ORR 
ORN 
EOR 
LSLV 
LSRV 
ASRV 
SBFM 
UBFM 
CSINC 
MUL 
MSR 
MRS 
HINT 
SEVL 
WFE 
NOP 

Definition at line 27 of file aarch64-insn.h.

Function Documentation

◆ aarch64_decode_adr()

int aarch64_decode_adr ( CORE_ADDR  addr,
uint32_t  insn,
int *  is_adrp,
unsigned *  rd,
int32_t *  offset 
)

◆ aarch64_decode_b()

int aarch64_decode_b ( CORE_ADDR  addr,
uint32_t  insn,
int *  is_bl,
int32_t *  offset 
)

◆ aarch64_decode_bcond()

int aarch64_decode_bcond ( CORE_ADDR  addr,
uint32_t  insn,
unsigned *  cond,
int32_t *  offset 
)

◆ aarch64_decode_cb()

int aarch64_decode_cb ( CORE_ADDR  addr,
uint32_t  insn,
int *  is64,
int *  is_cbnz,
unsigned *  rn,
int32_t *  offset 
)

◆ aarch64_decode_ldr_literal()

int aarch64_decode_ldr_literal ( CORE_ADDR  addr,
uint32_t  insn,
int *  is_w,
int *  is64,
unsigned *  rt,
int32_t *  offset 
)

◆ aarch64_decode_tb()

int aarch64_decode_tb ( CORE_ADDR  addr,
uint32_t  insn,
int *  is_tbnz,
unsigned *  bit,
unsigned *  rt,
int32_t *  imm 
)

◆ aarch64_emit_insn()

int aarch64_emit_insn ( uint32_t *  buf,
uint32_t  insn 
)

Definition at line 336 of file aarch64-insn.c.

Referenced by aarch64_displaced_step_others(), and aarch64_emit_load_store().

◆ aarch64_emit_load_store()

int aarch64_emit_load_store ( uint32_t *  buf,
uint32_t  size,
enum aarch64_opcodes  opcode,
struct aarch64_register  rt,
struct aarch64_register  rn,
struct aarch64_memory_operand  operand 
)

◆ aarch64_relocate_instruction()

void aarch64_relocate_instruction ( uint32_t  insn,
const struct aarch64_insn_visitor visitor,
struct aarch64_insn_data data 
)

Variable Documentation

◆ aarch64_debug

int aarch64_debug