GDB (API)
Defines | Typedefs | Enumerations | Functions | Variables
/home/stan/gdb/src/gdb/arm-tdep.c File Reference
#include "defs.h"
#include <ctype.h>
#include "frame.h"
#include "inferior.h"
#include "gdbcmd.h"
#include "gdbcore.h"
#include "gdb_string.h"
#include "dis-asm.h"
#include "regcache.h"
#include "reggroups.h"
#include "doublest.h"
#include "value.h"
#include "arch-utils.h"
#include "osabi.h"
#include "frame-unwind.h"
#include "frame-base.h"
#include "trad-frame.h"
#include "objfiles.h"
#include "dwarf2-frame.h"
#include "gdbtypes.h"
#include "prologue-value.h"
#include "remote.h"
#include "target-descriptions.h"
#include "user-regs.h"
#include "observer.h"
#include "arm-tdep.h"
#include "gdb/sim-arm.h"
#include "elf-bfd.h"
#include "coff/internal.h"
#include "elf/arm.h"
#include "gdb_assert.h"
#include "vec.h"
#include "record.h"
#include "record-full.h"
#include "features/arm-with-m.c"
#include "features/arm-with-m-fpa-layout.c"
#include "features/arm-with-m-vfp-d16.c"
#include "features/arm-with-iwmmxt.c"
#include "features/arm-with-vfpv2.c"
#include "features/arm-with-vfpv3.c"
#include "features/arm-with-neon.c"
#include "bfd-in2.h"
#include "libcoff.h"

Go to the source code of this file.

Defines

#define MSYMBOL_SET_SPECIAL(msym)   MSYMBOL_TARGET_FLAG_1 (msym) = 1
#define MSYMBOL_IS_SPECIAL(msym)   MSYMBOL_TARGET_FLAG_1 (msym)
#define DISPLACED_STEPPING_ARCH_VERSION   5
#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 bit(obj, st)   (((obj) >> (st)) & 1)
#define bits(obj, st, fn)   (((obj) >> (st)) & submask ((fn) - (st)))
#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)))
#define EXTRACT_MOVW_MOVT_IMM_T(insn1, insn2)
#define EXTRACT_MOVW_MOVT_IMM_A(insn)
#define MAX_IT_BLOCK_PREFIX   14
#define IT_SCAN_THRESHOLD   32
#define ARM_NOP   0xe1a00000
#define THUMB_NOP   0x4600
#define ARM_LE_BREAKPOINT   {0xFE,0xDE,0xFF,0xE7}
#define ARM_BE_BREAKPOINT   {0xE7,0xFF,0xDE,0xFE}
#define THUMB_LE_BREAKPOINT   {0xbe,0xbe}
#define THUMB_BE_BREAKPOINT   {0xbe,0xbe}
#define ARM_INSN_SIZE_BYTES   4
#define THUMB_INSN_SIZE_BYTES   2
#define THUMB2_INSN_SIZE_BYTES   4
#define INSN_S_L_BIT_NUM   20
#define REG_ALLOC(REGS, LENGTH, RECORD_BUF)
#define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF)
#define INSN_RECORDED(ARM_RECORD)   (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)

Typedefs

typedef struct arm_mapping_symbol arm_mapping_symbol_s
typedef struct arm_exidx_entry arm_exidx_entry_s
typedef struct insn_decode_record_t insn_decode_record
typedef int(* sti_arm_hdl_fp_t )(insn_decode_record *)

Enumerations

enum  arm_vfp_cprc_base_type {
  VFP_CPRC_UNKNOWN, VFP_CPRC_SINGLE, VFP_CPRC_DOUBLE, VFP_CPRC_VEC64,
  VFP_CPRC_VEC128
}
enum  arm_record_strx_t { ARM_RECORD_STRH = 1, ARM_RECORD_STRD }
enum  record_type_t { ARM_RECORD = 1, THUMB_RECORD, THUMB2_RECORD }

Functions

 DEF_VEC_O (arm_mapping_symbol_s)
int arm_psr_thumb_bit (struct gdbarch *gdbarch)
int arm_frame_is_thumb (struct frame_info *frame)
int arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
 DEF_VEC_O (arm_exidx_entry_s)
CORE_ADDR arm_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
void arm_insert_single_step_breakpoint (struct gdbarch *gdbarch, struct address_space *aspace, CORE_ADDR pc)
int arm_deal_with_atomic_sequence (struct frame_info *frame)
int arm_software_single_step (struct frame_info *frame)
ULONGEST displaced_read_reg (struct regcache *regs, struct displaced_step_closure *dsc, int regno)
void displaced_write_reg (struct regcache *regs, struct displaced_step_closure *dsc, int regno, ULONGEST val, enum pc_write_style write_pc)
void arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs, struct displaced_step_closure *dsc)
void arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct displaced_step_closure *dsc)
struct displaced_step_closure * arm_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
void arm_displaced_step_fixup (struct gdbarch *gdbarch, struct displaced_step_closure *dsc, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
CORE_ADDR arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
void _initialize_arm_tdep (void)
int arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR insn_addr)

Variables

int arm_apcs_32 = 1
struct frame_unwind arm_prologue_unwind
struct frame_unwind arm_exidx_unwind
struct frame_unwind arm_stub_unwind
struct frame_unwind arm_m_exception_unwind
struct frame_base arm_normal_base
initialize_file_ftype _initialize_arm_tdep

Define Documentation

#define ARM_BE_BREAKPOINT   {0xE7,0xFF,0xDE,0xFE}

Definition at line 8774 of file arm-tdep.c.

#define ARM_INSN_SIZE_BYTES   4

Definition at line 10581 of file arm-tdep.c.

#define ARM_LE_BREAKPOINT   {0xFE,0xDE,0xFF,0xE7}

Definition at line 8773 of file arm-tdep.c.

#define ARM_NOP   0xe1a00000

Definition at line 5459 of file arm-tdep.c.

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

Definition at line 519 of file arm-tdep.c.

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

Definition at line 520 of file arm-tdep.c.

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

Definition at line 523 of file arm-tdep.c.

Definition at line 269 of file arm-tdep.c.

#define EXTRACT_MOVW_MOVT_IMM_A (   insn)
Value:
((bits ((insn), 16, 19) << 12) \
   | bits ((insn), 0, 11))

Definition at line 537 of file arm-tdep.c.

#define EXTRACT_MOVW_MOVT_IMM_T (   insn1,
  insn2 
)
Value:
((bits ((insn1), 0, 3) << 12)               \
   | (bits ((insn1), 10, 10) << 11)           \
   | (bits ((insn2), 12, 14) << 8)            \
   | bits ((insn2), 0, 7))

Definition at line 529 of file arm-tdep.c.

#define INSN_RECORDED (   ARM_RECORD)    (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)

Definition at line 10614 of file arm-tdep.c.

#define INSN_S_L_BIT_NUM   20

Definition at line 10586 of file arm-tdep.c.

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

Definition at line 273 of file arm-tdep.c.

#define IT_SCAN_THRESHOLD   32

Definition at line 5279 of file arm-tdep.c.

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

Definition at line 274 of file arm-tdep.c.

#define MAX_IT_BLOCK_PREFIX   14

Definition at line 5275 of file arm-tdep.c.

#define MEM_ALLOC (   MEMS,
  LENGTH,
  RECORD_BUF 
)
Value:
do  \
          { \
            unsigned int mem_len = LENGTH; \
            if (mem_len) \
            { \
              MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
              memcpy(&MEMS->len, &RECORD_BUF[0], \
                     sizeof(struct arm_mem_r) * LENGTH); \
            } \
          } \
          while (0)

Definition at line 10600 of file arm-tdep.c.

#define MSYMBOL_IS_SPECIAL (   msym)    MSYMBOL_TARGET_FLAG_1 (msym)

Definition at line 81 of file arm-tdep.c.

#define MSYMBOL_SET_SPECIAL (   msym)    MSYMBOL_TARGET_FLAG_1 (msym) = 1

Definition at line 78 of file arm-tdep.c.

#define REG_ALLOC (   REGS,
  LENGTH,
  RECORD_BUF 
)
Value:
do  \
          { \
            unsigned int reg_len = LENGTH; \
            if (reg_len) \
              { \
                REGS = XNEWVEC (uint32_t, reg_len); \
                memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
              } \
          } \
        while (0)

Definition at line 10588 of file arm-tdep.c.

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

Definition at line 521 of file arm-tdep.c.

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

Definition at line 518 of file arm-tdep.c.

#define THUMB2_INSN_SIZE_BYTES   4

Definition at line 10583 of file arm-tdep.c.

#define THUMB_BE_BREAKPOINT   {0xbe,0xbe}

Definition at line 8776 of file arm-tdep.c.

#define THUMB_INSN_SIZE_BYTES   2

Definition at line 10582 of file arm-tdep.c.

#define THUMB_LE_BREAKPOINT   {0xbe,0xbe}

Definition at line 8775 of file arm-tdep.c.

#define THUMB_NOP   0x4600

Definition at line 5460 of file arm-tdep.c.

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

Definition at line 275 of file arm-tdep.c.


Typedef Documentation

typedef struct arm_exidx_entry arm_exidx_entry_s

Definition at line 2144 of file arm-tdep.c.

typedef struct arm_mapping_symbol arm_mapping_symbol_s

Definition at line 92 of file arm-tdep.c.

typedef struct insn_decode_record_t insn_decode_record

Definition at line 12436 of file arm-tdep.c.


Enumeration Type Documentation

Enumerator:
ARM_RECORD_STRH 
ARM_RECORD_STRD 

Definition at line 10669 of file arm-tdep.c.

Enumerator:
VFP_CPRC_UNKNOWN 
VFP_CPRC_SINGLE 
VFP_CPRC_DOUBLE 
VFP_CPRC_VEC64 
VFP_CPRC_VEC128 

Definition at line 3436 of file arm-tdep.c.

Enumerator:
ARM_RECORD 
THUMB_RECORD 
THUMB2_RECORD 

Definition at line 10675 of file arm-tdep.c.


Function Documentation

void _initialize_arm_tdep ( void  )

Definition at line 10433 of file arm-tdep.c.

int arm_deal_with_atomic_sequence ( struct frame_info *  frame)

Definition at line 5220 of file arm-tdep.c.

void arm_displaced_init_closure ( struct gdbarch *  gdbarch,
CORE_ADDR  from,
CORE_ADDR  to,
struct displaced_step_closure *  dsc 
)

Definition at line 8612 of file arm-tdep.c.

struct displaced_step_closure* arm_displaced_step_copy_insn ( struct gdbarch *  gdbarch,
CORE_ADDR  from,
CORE_ADDR  to,
struct regcache *  regs 
) [read]

Definition at line 8669 of file arm-tdep.c.

void arm_displaced_step_fixup ( struct gdbarch *  gdbarch,
struct displaced_step_closure *  dsc,
CORE_ADDR  from,
CORE_ADDR  to,
struct regcache *  regs 
)

Definition at line 8685 of file arm-tdep.c.

int arm_frame_is_thumb ( struct frame_info *  frame)

Definition at line 295 of file arm-tdep.c.

CORE_ADDR arm_get_next_pc ( struct frame_info *  frame,
CORE_ADDR  pc 
)

Definition at line 4968 of file arm-tdep.c.

void arm_insert_single_step_breakpoint ( struct gdbarch *  gdbarch,
struct address_space *  aspace,
CORE_ADDR  pc 
)

Definition at line 4993 of file arm-tdep.c.

int arm_pc_is_thumb ( struct gdbarch *  gdbarch,
CORE_ADDR  memaddr 
)

Definition at line 382 of file arm-tdep.c.

void arm_process_displaced_insn ( struct gdbarch *  gdbarch,
CORE_ADDR  from,
CORE_ADDR  to,
struct regcache *  regs,
struct displaced_step_closure *  dsc 
)

Definition at line 8552 of file arm-tdep.c.

int arm_process_record ( struct gdbarch *  gdbarch,
struct regcache *  regcache,
CORE_ADDR  insn_addr 
)

Definition at line 12537 of file arm-tdep.c.

int arm_psr_thumb_bit ( struct gdbarch *  gdbarch)

Definition at line 284 of file arm-tdep.c.

CORE_ADDR arm_skip_stub ( struct frame_info *  frame,
CORE_ADDR  pc 
)

Definition at line 9228 of file arm-tdep.c.

int arm_software_single_step ( struct frame_info *  frame)

Definition at line 5234 of file arm-tdep.c.

ULONGEST displaced_read_reg ( struct regcache *  regs,
struct displaced_step_closure *  dsc,
int  regno 
)

Definition at line 5467 of file arm-tdep.c.

void displaced_write_reg ( struct regcache *  regs,
struct displaced_step_closure *  dsc,
int  regno,
ULONGEST  val,
enum pc_write_style  write_pc 
)

Definition at line 5587 of file arm-tdep.c.


Variable Documentation

Definition at line 279 of file arm-tdep.c.

Initial value:
 {
  NORMAL_FRAME,
  default_frame_unwind_stop_reason,
  arm_prologue_this_id,
  arm_prologue_prev_register,
  NULL,
  arm_exidx_unwind_sniffer
}

Definition at line 2863 of file arm-tdep.c.

Initial value:
{
  SIGTRAMP_FRAME,
  default_frame_unwind_stop_reason,
  arm_m_exception_this_id,
  arm_m_exception_prev_register,
  NULL,
  arm_m_exception_unwind_sniffer
}

Definition at line 3039 of file arm-tdep.c.

Initial value:
 {
  &arm_prologue_unwind,
  arm_normal_frame_base,
  arm_normal_frame_base,
  arm_normal_frame_base
}

Definition at line 3061 of file arm-tdep.c.

Initial value:
 {
  NORMAL_FRAME,
  default_frame_unwind_stop_reason,
  arm_prologue_this_id,
  arm_prologue_prev_register,
  NULL,
  default_frame_sniffer
}

Definition at line 2123 of file arm-tdep.c.

Initial value:
 {
  NORMAL_FRAME,
  default_frame_unwind_stop_reason,
  arm_stub_this_id,
  arm_prologue_prev_register,
  NULL,
  arm_stub_unwind_sniffer
}

Definition at line 2919 of file arm-tdep.c.

const char* name

Definition at line 161 of file arm-tdep.c.

Definition at line 162 of file arm-tdep.c.

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines