GDB (xrefs)
Macros | Enumerations | Functions
arm.h File Reference

Go to the source code of this file.

Macros

#define INST_EQ   0x0
 
#define INST_NE   0x1
 
#define INST_CS   0x2
 
#define INST_CC   0x3
 
#define INST_MI   0x4
 
#define INST_PL   0x5
 
#define INST_VS   0x6
 
#define INST_VC   0x7
 
#define INST_HI   0x8
 
#define INST_LS   0x9
 
#define INST_GE   0xa
 
#define INST_LT   0xb
 
#define INST_GT   0xc
 
#define INST_LE   0xd
 
#define INST_AL   0xe
 
#define INST_NV   0xf
 
#define FLAG_N   0x80000000
 
#define FLAG_Z   0x40000000
 
#define FLAG_C   0x20000000
 
#define FLAG_V   0x10000000
 
#define CPSR_T   0x20
 
#define XPSR_T   0x01000000
 
#define INT_REGISTER_SIZE   4
 
#define IS_THUMB_ADDR(addr)   ((addr) & 1)
 
#define MAKE_THUMB_ADDR(addr)   ((addr) | 1)
 
#define UNMAKE_THUMB_ADDR(addr)   ((addr) & ~1)
 
#define submask(x)   ((1L << ((x) + 1)) - 1)
 
#define bits(obj, st, fn)   (((obj) >> (st)) & submask ((fn) - (st)))
 
#define bit(obj, st)   (((obj) >> (st)) & 1)
 
#define sbits(obj, st, fn)   ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
 
#define BranchDest(addr, instr)   ((CORE_ADDR) (((unsigned long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
 

Enumerations

enum  gdb_regnum {
  ARM_A1_REGNUM = 0, ARM_A4_REGNUM = 3, ARM_AP_REGNUM = 11, ARM_IP_REGNUM = 12,
  ARM_SP_REGNUM = 13, ARM_LR_REGNUM = 14, ARM_PC_REGNUM = 15, ARM_F0_REGNUM = 16,
  ARM_F3_REGNUM = 19, ARM_F7_REGNUM = 23, ARM_FPS_REGNUM = 24, ARM_PS_REGNUM = 25,
  ARM_WR0_REGNUM, ARM_WR15_REGNUM = ARM_WR0_REGNUM + 15, ARM_WC0_REGNUM, ARM_WCSSF_REGNUM = ARM_WC0_REGNUM + 2,
  ARM_WCASF_REGNUM = ARM_WC0_REGNUM + 3, ARM_WC7_REGNUM = ARM_WC0_REGNUM + 7, ARM_WCGR0_REGNUM, ARM_WCGR3_REGNUM = ARM_WCGR0_REGNUM + 3,
  ARM_WCGR7_REGNUM = ARM_WCGR0_REGNUM + 7, ARM_D0_REGNUM, ARM_D31_REGNUM = ARM_D0_REGNUM + 31, ARM_FPSCR_REGNUM,
  ARM_NUM_REGS, ARM_FP_REGNUM = 11, THUMB_FP_REGNUM = 7, ARM_NUM_ARG_REGS = 4,
  ARM_LAST_ARG_REGNUM = ARM_A4_REGNUM, ARM_NUM_FP_ARG_REGS = 4, ARM_LAST_FP_ARG_REGNUM = ARM_F3_REGNUM, BFIN_R0_REGNUM = 0,
  BFIN_R1_REGNUM, BFIN_R2_REGNUM, BFIN_R3_REGNUM, BFIN_R4_REGNUM,
  BFIN_R5_REGNUM, BFIN_R6_REGNUM, BFIN_R7_REGNUM, BFIN_P0_REGNUM,
  BFIN_P1_REGNUM, BFIN_P2_REGNUM, BFIN_P3_REGNUM, BFIN_P4_REGNUM,
  BFIN_P5_REGNUM, BFIN_SP_REGNUM, BFIN_FP_REGNUM, BFIN_I0_REGNUM,
  BFIN_I1_REGNUM, BFIN_I2_REGNUM, BFIN_I3_REGNUM, BFIN_M0_REGNUM,
  BFIN_M1_REGNUM, BFIN_M2_REGNUM, BFIN_M3_REGNUM, BFIN_B0_REGNUM,
  BFIN_B1_REGNUM, BFIN_B2_REGNUM, BFIN_B3_REGNUM, BFIN_L0_REGNUM,
  BFIN_L1_REGNUM, BFIN_L2_REGNUM, BFIN_L3_REGNUM, BFIN_A0_DOT_X_REGNUM,
  BFIN_A0_DOT_W_REGNUM, BFIN_A1_DOT_X_REGNUM, BFIN_A1_DOT_W_REGNUM, BFIN_ASTAT_REGNUM,
  BFIN_RETS_REGNUM, BFIN_LC0_REGNUM, BFIN_LT0_REGNUM, BFIN_LB0_REGNUM,
  BFIN_LC1_REGNUM, BFIN_LT1_REGNUM, BFIN_LB1_REGNUM, BFIN_CYCLES_REGNUM,
  BFIN_CYCLES2_REGNUM, BFIN_USP_REGNUM, BFIN_SEQSTAT_REGNUM, BFIN_SYSCFG_REGNUM,
  BFIN_RETI_REGNUM, BFIN_RETX_REGNUM, BFIN_RETN_REGNUM, BFIN_RETE_REGNUM,
  BFIN_PC_REGNUM, BFIN_CC_REGNUM, E_R0_REGNUM, E_ER0_REGNUM = E_R0_REGNUM,
  E_ARG0_REGNUM = E_R0_REGNUM, E_RET0_REGNUM = E_R0_REGNUM, E_R1_REGNUM, E_ER1_REGNUM = E_R1_REGNUM,
  E_RET1_REGNUM = E_R1_REGNUM, E_R2_REGNUM, E_ER2_REGNUM = E_R2_REGNUM, E_ARGLAST_REGNUM = E_R2_REGNUM,
  E_R3_REGNUM, E_ER3_REGNUM = E_R3_REGNUM, E_R4_REGNUM, E_ER4_REGNUM = E_R4_REGNUM,
  E_R5_REGNUM, E_ER5_REGNUM = E_R5_REGNUM, E_R6_REGNUM, E_ER6_REGNUM = E_R6_REGNUM,
  E_FP_REGNUM = E_R6_REGNUM, E_SP_REGNUM, E_CCR_REGNUM, E_PC_REGNUM,
  E_CYCLES_REGNUM, E_TICK_REGNUM, E_EXR_REGNUM = E_TICK_REGNUM, E_INST_REGNUM,
  E_TICKS_REGNUM = E_INST_REGNUM, E_INSTS_REGNUM, E_MACH_REGNUM, E_MACL_REGNUM,
  E_SBR_REGNUM, E_VBR_REGNUM, E_R0_REGNUM, E_R1_REGNUM,
  E_R2_REGNUM, E_R3_REGNUM, E_R4_REGNUM, E_R5_REGNUM,
  E_R6_REGNUM, E_R7_REGNUM, E_R8_REGNUM, E_R9_REGNUM,
  E_R10_REGNUM, E_R11_REGNUM, E_R12_REGNUM, E_R13_REGNUM,
  E_R14_REGNUM, E_R15_REGNUM, E_R16_REGNUM, E_R17_REGNUM,
  E_R18_REGNUM, E_R19_REGNUM, E_R20_REGNUM, E_R21_REGNUM,
  E_R22_REGNUM, E_R23_REGNUM, E_R24_REGNUM, E_R25_REGNUM,
  E_R26_REGNUM, E_R27_REGNUM, E_R28_REGNUM, E_R29_REGNUM,
  E_R30_REGNUM, E_R31_REGNUM, E_PC_REGNUM, E_LR_REGNUM = E_R31_REGNUM,
  E_SP_REGNUM = E_R29_REGNUM, E_FP_REGNUM = E_R27_REGNUM, E_FN_RETURN_REGNUM = E_R2_REGNUM, E_1ST_ARGREG = E_R4_REGNUM,
  E_LAST_ARGREG = E_R11_REGNUM, E_NUM_REGS = E_PC_REGNUM + 1, SCORE_SP_REGNUM = 0, SCORE_FP_REGNUM = 2,
  SCORE_RA_REGNUM = 3, SCORE_A0_REGNUM = 4, SCORE_AL_REGNUM = 7, SCORE_EPC_REGNUM = 37,
  SCORE_PC_REGNUM = 49, E_R0_REGNUM, E_R1_REGNUM, E_R2_REGNUM,
  E_1ST_ARG_REGNUM = E_R2_REGNUM, E_PTR_RET_REGNUM = E_R2_REGNUM, E_R3_REGNUM, E_R4_REGNUM,
  E_R5_REGNUM, E_R6_REGNUM, E_R7_REGNUM, E_LST_ARG_REGNUM = E_R7_REGNUM,
  E_R8_REGNUM, E_R9_REGNUM, E_R10_REGNUM, E_R11_REGNUM,
  E_R12_REGNUM, E_R13_REGNUM, E_FP_REGNUM = E_R13_REGNUM, E_R14_REGNUM,
  E_PSW_REGNUM = E_R14_REGNUM, E_R15_REGNUM, E_SP_REGNUM = E_R15_REGNUM, E_PC_REGNUM,
  E_NUM_REGS
}
 
enum  arm_breakpoint_kinds { ARM_BP_KIND_THUMB = 2, ARM_BP_KIND_THUMB2 = 3, ARM_BP_KIND_ARM = 4 }
 

Functions

int thumb_insn_size (unsigned short inst1)
 
int condition_true (unsigned long cond, unsigned long status_reg)
 
int bitcount (unsigned long val)
 
int arm_instruction_changes_pc (uint32_t this_instr)
 
int thumb_instruction_changes_pc (unsigned short inst)
 
int thumb2_instruction_changes_pc (unsigned short inst1, unsigned short inst2)
 
int thumb_advance_itstate (unsigned int itstate)
 
unsigned long shifted_reg_val (struct regcache *regcache, unsigned long inst, int carry, unsigned long pc_val, unsigned long status_reg)
 

Macro Definition Documentation

◆ bit

#define bit (   obj,
  st 
)    (((obj) >> (st)) & 1)

Definition at line 108 of file arm.h.

◆ bits

#define bits (   obj,
  st,
  fn 
)    (((obj) >> (st)) & submask ((fn) - (st)))

Definition at line 107 of file arm.h.

◆ BranchDest

#define BranchDest (   addr,
  instr 
)    ((CORE_ADDR) (((unsigned long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))

◆ CPSR_T

#define CPSR_T   0x20

Definition at line 92 of file arm.h.

Referenced by arm_psr_thumb_bit().

◆ FLAG_C

#define FLAG_C   0x20000000

Definition at line 89 of file arm.h.

Referenced by arm_get_next_pcs_raw(), and condition_true().

◆ FLAG_N

#define FLAG_N   0x80000000

Definition at line 87 of file arm.h.

Referenced by condition_true().

◆ FLAG_V

#define FLAG_V   0x10000000

Definition at line 90 of file arm.h.

Referenced by condition_true().

◆ FLAG_Z

#define FLAG_Z   0x40000000

Definition at line 88 of file arm.h.

Referenced by condition_true().

◆ INST_AL

#define INST_AL   0xe

◆ INST_CC

#define INST_CC   0x3

Definition at line 73 of file arm.h.

Referenced by condition_true().

◆ INST_CS

#define INST_CS   0x2

Definition at line 72 of file arm.h.

Referenced by condition_true().

◆ INST_EQ

#define INST_EQ   0x0

Definition at line 70 of file arm.h.

Referenced by condition_true().

◆ INST_GE

#define INST_GE   0xa

Definition at line 80 of file arm.h.

Referenced by condition_true().

◆ INST_GT

#define INST_GT   0xc

Definition at line 82 of file arm.h.

Referenced by condition_true().

◆ INST_HI

#define INST_HI   0x8

Definition at line 78 of file arm.h.

Referenced by condition_true().

◆ INST_LE

#define INST_LE   0xd

Definition at line 83 of file arm.h.

Referenced by condition_true().

◆ INST_LS

#define INST_LS   0x9

Definition at line 79 of file arm.h.

Referenced by condition_true().

◆ INST_LT

#define INST_LT   0xb

Definition at line 81 of file arm.h.

Referenced by condition_true().

◆ INST_MI

#define INST_MI   0x4

Definition at line 74 of file arm.h.

Referenced by condition_true().

◆ INST_NE

#define INST_NE   0x1

Definition at line 71 of file arm.h.

Referenced by condition_true().

◆ INST_NV

#define INST_NV   0xf

◆ INST_PL

#define INST_PL   0x5

Definition at line 75 of file arm.h.

Referenced by condition_true().

◆ INST_VC

#define INST_VC   0x7

Definition at line 77 of file arm.h.

Referenced by condition_true().

◆ INST_VS

#define INST_VS   0x6

Definition at line 76 of file arm.h.

Referenced by condition_true().

◆ INT_REGISTER_SIZE

#define INT_REGISTER_SIZE   4

◆ IS_THUMB_ADDR

#define IS_THUMB_ADDR (   addr)    ((addr) & 1)

◆ MAKE_THUMB_ADDR

#define MAKE_THUMB_ADDR (   addr)    ((addr) | 1)

◆ sbits

#define sbits (   obj,
  st,
  fn 
)    ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))

◆ submask

#define submask (   x)    ((1L << ((x) + 1)) - 1)

Definition at line 106 of file arm.h.

◆ UNMAKE_THUMB_ADDR

#define UNMAKE_THUMB_ADDR (   addr)    ((addr) & ~1)

◆ XPSR_T

#define XPSR_T   0x01000000

Definition at line 94 of file arm.h.

Referenced by arm_psr_thumb_bit().

Enumeration Type Documentation

◆ arm_breakpoint_kinds

Enumerator
ARM_BP_KIND_THUMB 
ARM_BP_KIND_THUMB2 
ARM_BP_KIND_ARM 

Definition at line 62 of file arm.h.

◆ gdb_regnum

enum gdb_regnum
Enumerator
ARM_A1_REGNUM 
ARM_A4_REGNUM 
ARM_AP_REGNUM 
ARM_IP_REGNUM 
ARM_SP_REGNUM 
ARM_LR_REGNUM 
ARM_PC_REGNUM 
ARM_F0_REGNUM 
ARM_F3_REGNUM 
ARM_F7_REGNUM 
ARM_FPS_REGNUM 
ARM_PS_REGNUM 
ARM_WR0_REGNUM 
ARM_WR15_REGNUM 
ARM_WC0_REGNUM 
ARM_WCSSF_REGNUM 
ARM_WCASF_REGNUM 
ARM_WC7_REGNUM 
ARM_WCGR0_REGNUM 
ARM_WCGR3_REGNUM 
ARM_WCGR7_REGNUM 
ARM_D0_REGNUM 
ARM_D31_REGNUM 
ARM_FPSCR_REGNUM 
ARM_NUM_REGS 
ARM_FP_REGNUM 
THUMB_FP_REGNUM 
ARM_NUM_ARG_REGS 
ARM_LAST_ARG_REGNUM 
ARM_NUM_FP_ARG_REGS 
ARM_LAST_FP_ARG_REGNUM 
BFIN_R0_REGNUM 
BFIN_R1_REGNUM 
BFIN_R2_REGNUM 
BFIN_R3_REGNUM 
BFIN_R4_REGNUM 
BFIN_R5_REGNUM 
BFIN_R6_REGNUM 
BFIN_R7_REGNUM 
BFIN_P0_REGNUM 
BFIN_P1_REGNUM 
BFIN_P2_REGNUM 
BFIN_P3_REGNUM 
BFIN_P4_REGNUM 
BFIN_P5_REGNUM 
BFIN_SP_REGNUM 
BFIN_FP_REGNUM 
BFIN_I0_REGNUM 
BFIN_I1_REGNUM 
BFIN_I2_REGNUM 
BFIN_I3_REGNUM 
BFIN_M0_REGNUM 
BFIN_M1_REGNUM 
BFIN_M2_REGNUM 
BFIN_M3_REGNUM 
BFIN_B0_REGNUM 
BFIN_B1_REGNUM 
BFIN_B2_REGNUM 
BFIN_B3_REGNUM 
BFIN_L0_REGNUM 
BFIN_L1_REGNUM 
BFIN_L2_REGNUM 
BFIN_L3_REGNUM 
BFIN_A0_DOT_X_REGNUM 
BFIN_A0_DOT_W_REGNUM 
BFIN_A1_DOT_X_REGNUM 
BFIN_A1_DOT_W_REGNUM 
BFIN_ASTAT_REGNUM 
BFIN_RETS_REGNUM 
BFIN_LC0_REGNUM 
BFIN_LT0_REGNUM 
BFIN_LB0_REGNUM 
BFIN_LC1_REGNUM 
BFIN_LT1_REGNUM 
BFIN_LB1_REGNUM 
BFIN_CYCLES_REGNUM 
BFIN_CYCLES2_REGNUM 
BFIN_USP_REGNUM 
BFIN_SEQSTAT_REGNUM 
BFIN_SYSCFG_REGNUM 
BFIN_RETI_REGNUM 
BFIN_RETX_REGNUM 
BFIN_RETN_REGNUM 
BFIN_RETE_REGNUM 
BFIN_PC_REGNUM 
BFIN_CC_REGNUM 
E_R0_REGNUM 
E_ER0_REGNUM 
E_ARG0_REGNUM 
E_RET0_REGNUM 
E_R1_REGNUM 
E_ER1_REGNUM 
E_RET1_REGNUM 
E_R2_REGNUM 
E_ER2_REGNUM 
E_ARGLAST_REGNUM 
E_R3_REGNUM 
E_ER3_REGNUM 
E_R4_REGNUM 
E_ER4_REGNUM 
E_R5_REGNUM 
E_ER5_REGNUM 
E_R6_REGNUM 
E_ER6_REGNUM 
E_FP_REGNUM 
E_SP_REGNUM 
E_CCR_REGNUM 
E_PC_REGNUM 
E_CYCLES_REGNUM 
E_TICK_REGNUM 
E_EXR_REGNUM 
E_INST_REGNUM 
E_TICKS_REGNUM 
E_INSTS_REGNUM 
E_MACH_REGNUM 
E_MACL_REGNUM 
E_SBR_REGNUM 
E_VBR_REGNUM 
E_R0_REGNUM 
E_R1_REGNUM 
E_R2_REGNUM 
E_R3_REGNUM 
E_R4_REGNUM 
E_R5_REGNUM 
E_R6_REGNUM 
E_R7_REGNUM 
E_R8_REGNUM 
E_R9_REGNUM 
E_R10_REGNUM 
E_R11_REGNUM 
E_R12_REGNUM 
E_R13_REGNUM 
E_R14_REGNUM 
E_R15_REGNUM 
E_R16_REGNUM 
E_R17_REGNUM 
E_R18_REGNUM 
E_R19_REGNUM 
E_R20_REGNUM 
E_R21_REGNUM 
E_R22_REGNUM 
E_R23_REGNUM 
E_R24_REGNUM 
E_R25_REGNUM 
E_R26_REGNUM 
E_R27_REGNUM 
E_R28_REGNUM 
E_R29_REGNUM 
E_R30_REGNUM 
E_R31_REGNUM 
E_PC_REGNUM 
E_LR_REGNUM 
E_SP_REGNUM 
E_FP_REGNUM 
E_FN_RETURN_REGNUM 
E_1ST_ARGREG 
E_LAST_ARGREG 
E_NUM_REGS 
SCORE_SP_REGNUM 
SCORE_FP_REGNUM 
SCORE_RA_REGNUM 
SCORE_A0_REGNUM 
SCORE_AL_REGNUM 
SCORE_EPC_REGNUM 
SCORE_PC_REGNUM 
E_R0_REGNUM 
E_R1_REGNUM 
E_R2_REGNUM 
E_1ST_ARG_REGNUM 
E_PTR_RET_REGNUM 
E_R3_REGNUM 
E_R4_REGNUM 
E_R5_REGNUM 
E_R6_REGNUM 
E_R7_REGNUM 
E_LST_ARG_REGNUM 
E_R8_REGNUM 
E_R9_REGNUM 
E_R10_REGNUM 
E_R11_REGNUM 
E_R12_REGNUM 
E_R13_REGNUM 
E_FP_REGNUM 
E_R14_REGNUM 
E_PSW_REGNUM 
E_R15_REGNUM 
E_SP_REGNUM 
E_PC_REGNUM 
E_NUM_REGS 

Definition at line 24 of file arm.h.

Function Documentation

◆ arm_instruction_changes_pc()

int arm_instruction_changes_pc ( uint32_t  this_instr)

Definition at line 112 of file arm.c.

References _, ARM_PC_REGNUM, bit, bits, error(), INST_NV, and internal_error().

Referenced by arm_analyze_prologue(), and arm_deal_with_atomic_sequence_raw().

◆ bitcount()

int bitcount ( unsigned long  val)

◆ condition_true()

int condition_true ( unsigned long  cond,
unsigned long  status_reg 
)

◆ shifted_reg_val()

unsigned long shifted_reg_val ( struct regcache regcache,
unsigned long  inst,
int  carry,
unsigned long  pc_val,
unsigned long  status_reg 
)

Definition at line 325 of file arm.c.

References ARM_PC_REGNUM, bit, bits, L, regcache_raw_get_unsigned(), and shifttype.

Referenced by arm_get_next_pcs_raw().

◆ thumb2_instruction_changes_pc()

int thumb2_instruction_changes_pc ( unsigned short  inst1,
unsigned short  inst2 
)

Definition at line 231 of file arm.c.

References bit, and bits.

Referenced by thumb_analyze_prologue(), and thumb_deal_with_atomic_sequence_raw().

◆ thumb_advance_itstate()

int thumb_advance_itstate ( unsigned int  itstate)

Definition at line 96 of file arm.c.

Referenced by thumb_get_next_pcs_raw().

◆ thumb_insn_size()

int thumb_insn_size ( unsigned short  inst1)

◆ thumb_instruction_changes_pc()

int thumb_instruction_changes_pc ( unsigned short  inst)

Definition at line 204 of file arm.c.

Referenced by thumb_analyze_prologue(), and thumb_deal_with_atomic_sequence_raw().