GDB (xrefs)
Defines | Functions | Variables
/home/stan/gdb/src/gdb/arm-linux-tdep.c File Reference
#include "defs.h"
#include "target.h"
#include "value.h"
#include "gdbtypes.h"
#include "floatformat.h"
#include "gdbcore.h"
#include "frame.h"
#include "regcache.h"
#include "doublest.h"
#include "solib-svr4.h"
#include "osabi.h"
#include "regset.h"
#include "trad-frame.h"
#include "tramp-frame.h"
#include "breakpoint.h"
#include "auxv.h"
#include "xml-syscall.h"
#include "arm-tdep.h"
#include "arm-linux-tdep.h"
#include "linux-tdep.h"
#include "glibc-tdep.h"
#include "arch-utils.h"
#include "inferior.h"
#include "gdbthread.h"
#include "symfile.h"
#include "cli/cli-utils.h"
#include "stap-probe.h"
#include "parser-defs.h"
#include "user-regs.h"
#include <ctype.h>
#include "elf/common.h"
#include "gdb_string.h"

Go to the source code of this file.

Defines

#define ARM_LINUX_JB_ELEMENT_SIZE   INT_REGISTER_SIZE
#define ARM_LINUX_JB_PC_FPA   21
#define ARM_LINUX_JB_PC_EABI   9
#define ARM_LINUX_SIGRETURN_INSTR   0xef900077
#define ARM_LINUX_RT_SIGRETURN_INSTR   0xef9000ad
#define ARM_SET_R7_SIGRETURN   0xe3a07077
#define ARM_SET_R7_RT_SIGRETURN   0xe3a070ad
#define ARM_EABI_SYSCALL   0xef000000
#define ARM_OABI_SYSCALL_RESTART_SYSCALL   0xef900000
#define ARM_LDR_PC_SP_12   0xe49df00c
#define ARM_LDR_PC_SP_4   0xe49df004
#define ARM_SIGCONTEXT_R0   0xc
#define ARM_UCONTEXT_SIGCONTEXT   0x14
#define ARM_OLD_RT_SIGFRAME_SIGINFO   0x8
#define ARM_OLD_RT_SIGFRAME_UCONTEXT   0x88
#define ARM_NEW_RT_SIGFRAME_UCONTEXT   0x80
#define ARM_NEW_SIGFRAME_MAGIC   0x5ac3c35a
#define ARM_LINUX_SIZEOF_GREGSET   (18 * INT_REGISTER_SIZE)
#define typeNone   0x00
#define typeSingle   0x01
#define typeDouble   0x02
#define typeExtended   0x03
#define ARM_LINUX_SIZEOF_VFP   (32 * 8 + 4)

Functions

static void arm_linux_sigtramp_cache (struct frame_info *this_frame, struct trad_frame_cache *this_cache, CORE_ADDR func, int regs_offset)
static void arm_linux_sigreturn_init (const struct tramp_frame *self, struct frame_info *this_frame, struct trad_frame_cache *this_cache, CORE_ADDR func)
static void arm_linux_rt_sigreturn_init (const struct tramp_frame *self, struct frame_info *this_frame, struct trad_frame_cache *this_cache, CORE_ADDR func)
static void arm_linux_restart_syscall_init (const struct tramp_frame *self, struct frame_info *this_frame, struct trad_frame_cache *this_cache, CORE_ADDR func)
void arm_linux_supply_gregset (const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs_buf, size_t len)
void arm_linux_collect_gregset (const struct regset *regset, const struct regcache *regcache, int regnum, void *gregs_buf, size_t len)
void supply_nwfpe_register (struct regcache *regcache, int regno, const gdb_byte *regs)
void collect_nwfpe_register (const struct regcache *regcache, int regno, gdb_byte *regs)
void arm_linux_supply_nwfpe (const struct regset *regset, struct regcache *regcache, int regnum, const void *regs_buf, size_t len)
void arm_linux_collect_nwfpe (const struct regset *regset, const struct regcache *regcache, int regnum, void *regs_buf, size_t len)
static void arm_linux_supply_vfp (const struct regset *regset, struct regcache *regcache, int regnum, const void *regs_buf, size_t len)
static void arm_linux_collect_vfp (const struct regset *regset, const struct regcache *regcache, int regnum, void *regs_buf, size_t len)
static struct regsetarm_linux_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name, size_t sect_size)
static struct target_descarm_linux_core_read_description (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd)
static int arm_linux_sigreturn_return_addr (struct frame_info *frame, unsigned long svc_number, CORE_ADDR *pc, int *is_thumb)
static LONGEST arm_linux_get_syscall_number (struct gdbarch *gdbarch, ptid_t ptid)
static CORE_ADDR arm_linux_syscall_next_pc (struct frame_info *frame)
static int arm_linux_software_single_step (struct frame_info *frame)
static void arm_linux_cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs, struct displaced_step_closure *dsc)
static int arm_linux_copy_svc (struct gdbarch *gdbarch, struct regcache *regs, struct displaced_step_closure *dsc)
static void cleanup_kernel_helper_return (struct gdbarch *gdbarch, struct regcache *regs, struct displaced_step_closure *dsc)
static void arm_catch_kernel_helper_return (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs, struct displaced_step_closure *dsc)
static struct
displaced_step_closure
arm_linux_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
static int arm_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
static int arm_stap_parse_special_token (struct gdbarch *gdbarch, struct stap_parse_info *p)
static void arm_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
void _initialize_arm_linux_tdep (void)

Variables

int arm_apcs_32
static const gdb_byte arm_linux_arm_le_breakpoint [] = { 0x01, 0x00, 0x9f, 0xef }
static const gdb_byte arm_linux_arm_be_breakpoint [] = { 0xef, 0x9f, 0x00, 0x01 }
static const gdb_byte eabi_linux_arm_le_breakpoint [] = { 0xf0, 0x01, 0xf0, 0xe7 }
static const gdb_byte eabi_linux_arm_be_breakpoint [] = { 0xe7, 0xf0, 0x01, 0xf0 }
static const gdb_byte arm_linux_thumb_be_breakpoint [] = {0xde, 0x01}
static const gdb_byte arm_linux_thumb_le_breakpoint [] = {0x01, 0xde}
static const gdb_byte arm_linux_thumb2_be_breakpoint [] = { 0xf7, 0xf0, 0xa0, 0x00 }
static const gdb_byte arm_linux_thumb2_le_breakpoint [] = { 0xf0, 0xf7, 0x00, 0xa0 }
static struct tramp_frame arm_linux_sigreturn_tramp_frame
static struct tramp_frame arm_linux_rt_sigreturn_tramp_frame
static struct tramp_frame arm_eabi_linux_sigreturn_tramp_frame
static struct tramp_frame arm_eabi_linux_rt_sigreturn_tramp_frame
static struct tramp_frame arm_linux_restart_syscall_tramp_frame
static struct tramp_frame arm_kernel_linux_restart_syscall_tramp_frame
static struct core_regset_section arm_linux_fpa_regset_sections []
static struct core_regset_section arm_linux_vfp_regset_sections []
initialize_file_ftype _initialize_arm_linux_tdep

Define Documentation

#define ARM_EABI_SYSCALL   0xef000000

Definition at line 243 of file arm-linux-tdep.c.

#define ARM_LDR_PC_SP_12   0xe49df00c

Definition at line 248 of file arm-linux-tdep.c.

#define ARM_LDR_PC_SP_4   0xe49df004

Definition at line 249 of file arm-linux-tdep.c.

Referenced by arm_linux_restart_syscall_init().

Definition at line 103 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

#define ARM_LINUX_JB_PC_EABI   9

Definition at line 105 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

#define ARM_LINUX_JB_PC_FPA   21

Definition at line 104 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

#define ARM_LINUX_RT_SIGRETURN_INSTR   0xef9000ad

Definition at line 235 of file arm-linux-tdep.c.

#define ARM_LINUX_SIGRETURN_INSTR   0xef900077

Definition at line 234 of file arm-linux-tdep.c.

Definition at line 467 of file arm-linux-tdep.c.

Referenced by arm_linux_regset_from_core_section().

#define ARM_LINUX_SIZEOF_VFP   (32 * 8 + 4)

Definition at line 650 of file arm-linux-tdep.c.

Referenced by arm_linux_regset_from_core_section().

#define ARM_NEW_RT_SIGFRAME_UCONTEXT   0x80

Definition at line 313 of file arm-linux-tdep.c.

Referenced by arm_linux_rt_sigreturn_init().

#define ARM_NEW_SIGFRAME_MAGIC   0x5ac3c35a

Definition at line 315 of file arm-linux-tdep.c.

Referenced by arm_linux_sigreturn_init().

#define ARM_OABI_SYSCALL_RESTART_SYSCALL   0xef900000

Definition at line 247 of file arm-linux-tdep.c.

#define ARM_OLD_RT_SIGFRAME_SIGINFO   0x8

Definition at line 310 of file arm-linux-tdep.c.

Referenced by arm_linux_rt_sigreturn_init().

#define ARM_OLD_RT_SIGFRAME_UCONTEXT   0x88

Definition at line 311 of file arm-linux-tdep.c.

Referenced by arm_linux_rt_sigreturn_init().

#define ARM_SET_R7_RT_SIGRETURN   0xe3a070ad

Definition at line 242 of file arm-linux-tdep.c.

#define ARM_SET_R7_SIGRETURN   0xe3a07077

Definition at line 241 of file arm-linux-tdep.c.

#define ARM_SIGCONTEXT_R0   0xc

Definition at line 300 of file arm-linux-tdep.c.

Referenced by arm_linux_rt_sigreturn_init(), and arm_linux_sigreturn_init().

#define ARM_UCONTEXT_SIGCONTEXT   0x14

Definition at line 304 of file arm-linux-tdep.c.

Referenced by arm_linux_rt_sigreturn_init(), and arm_linux_sigreturn_init().

#define typeDouble   0x02

Definition at line 539 of file arm-linux-tdep.c.

Referenced by collect_nwfpe_register(), and supply_nwfpe_register().

#define typeExtended   0x03

Definition at line 540 of file arm-linux-tdep.c.

Referenced by collect_nwfpe_register(), and supply_nwfpe_register().

#define typeNone   0x00

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

#define typeSingle   0x01

Definition at line 538 of file arm-linux-tdep.c.

Referenced by collect_nwfpe_register(), and supply_nwfpe_register().


Function Documentation

void _initialize_arm_linux_tdep ( void  )
static void arm_catch_kernel_helper_return ( struct gdbarch gdbarch,
CORE_ADDR  from,
CORE_ADDR  to,
struct regcache regs,
struct displaced_step_closure dsc 
) [static]
static void arm_linux_cleanup_svc ( struct gdbarch gdbarch,
struct regcache regs,
struct displaced_step_closure dsc 
) [static]
void arm_linux_collect_gregset ( const struct regset regset,
const struct regcache regcache,
int  regnum,
void *  gregs_buf,
size_t  len 
)
void arm_linux_collect_nwfpe ( const struct regset regset,
const struct regcache regcache,
int  regnum,
void *  regs_buf,
size_t  len 
)
static void arm_linux_collect_vfp ( const struct regset regset,
const struct regcache regcache,
int  regnum,
void *  regs_buf,
size_t  len 
) [static]
static int arm_linux_copy_svc ( struct gdbarch gdbarch,
struct regcache regs,
struct displaced_step_closure dsc 
) [static]
static struct target_desc* arm_linux_core_read_description ( struct gdbarch gdbarch,
struct target_ops target,
bfd *  abfd 
) [static, read]
static struct displaced_step_closure* arm_linux_displaced_step_copy_insn ( struct gdbarch gdbarch,
CORE_ADDR  from,
CORE_ADDR  to,
struct regcache regs 
) [static, read]
static LONGEST arm_linux_get_syscall_number ( struct gdbarch gdbarch,
ptid_t  ptid 
) [static]
static void arm_linux_init_abi ( struct gdbarch_info  info,
struct gdbarch gdbarch 
) [static]

Definition at line 1235 of file arm-linux-tdep.c.

References _, gdbarch_tdep::arm_abi, ARM_ABI_AAPCS, gdbarch_tdep::arm_breakpoint, gdbarch_tdep::arm_breakpoint_size, arm_displaced_step_fixup(), ARM_FLOAT_AUTO, ARM_FLOAT_FPA, ARM_FLOAT_SOFT_FPA, ARM_FLOAT_SOFT_VFP, ARM_FLOAT_VFP, arm_linux_arm_be_breakpoint, arm_linux_arm_le_breakpoint, arm_linux_core_read_description(), arm_linux_displaced_step_copy_insn(), arm_linux_get_syscall_number(), ARM_LINUX_JB_ELEMENT_SIZE, ARM_LINUX_JB_PC_EABI, ARM_LINUX_JB_PC_FPA, arm_linux_regset_from_core_section(), arm_linux_software_single_step(), arm_linux_syscall_next_pc(), arm_linux_thumb2_be_breakpoint, arm_linux_thumb2_le_breakpoint, arm_linux_thumb_be_breakpoint, arm_linux_thumb_le_breakpoint, arm_process_record(), arm_stap_is_single_operand(), arm_stap_parse_special_token(), gdbarch_tdep::arm_swi_record, gdbarch_info::byte_order, displaced_step_at_entry_point(), eabi_linux_arm_be_breakpoint, eabi_linux_arm_le_breakpoint, find_solib_trampoline_target(), gdbarch_tdep::fp_model, gdbarch_tdep(), glibc_skip_solib_resolver(), gdbarch_tdep::have_fpa_registers, gdbarch_tdep::have_vfp_registers, internal_error(), gdbarch_tdep::jb_elt_size, gdbarch_tdep::jb_pc, linux_get_siginfo_type(), linux_init_abi(), gdbarch_tdep::lowest_pc, set_gdbarch_core_read_description(), set_gdbarch_core_regset_sections(), set_gdbarch_displaced_step_copy_insn(), set_gdbarch_displaced_step_fixup(), set_gdbarch_displaced_step_free_closure(), set_gdbarch_displaced_step_location(), set_gdbarch_fetch_tls_load_module_address(), set_gdbarch_get_siginfo_type(), set_gdbarch_get_syscall_number(), set_gdbarch_process_record(), set_gdbarch_regset_from_core_section(), set_gdbarch_skip_solib_resolver(), set_gdbarch_skip_trampoline_code(), set_gdbarch_software_single_step(), set_gdbarch_stap_gdb_register_prefix(), set_gdbarch_stap_integer_prefix(), set_gdbarch_stap_is_single_operand(), set_gdbarch_stap_parse_special_token(), set_gdbarch_stap_register_indirection_prefix(), set_gdbarch_stap_register_indirection_suffix(), set_gdbarch_stap_register_prefix(), set_solib_svr4_fetch_link_map_offsets(), set_xml_syscall_file_name(), simple_displaced_step_free_closure(), svr4_fetch_objfile_link_map(), svr4_ilp32_fetch_link_map_offsets(), gdbarch_tdep::syscall_next_pc, gdbarch_tdep::thumb2_breakpoint, gdbarch_tdep::thumb2_breakpoint_size, gdbarch_tdep::thumb_breakpoint, gdbarch_tdep::thumb_breakpoint_size, and tramp_frame_prepend_unwinder().

Referenced by _initialize_arm_linux_tdep().

static struct regset* arm_linux_regset_from_core_section ( struct gdbarch gdbarch,
const char *  sect_name,
size_t  sect_size 
) [static, read]
static void arm_linux_restart_syscall_init ( const struct tramp_frame self,
struct frame_info this_frame,
struct trad_frame_cache this_cache,
CORE_ADDR  func 
) [static]
static void arm_linux_rt_sigreturn_init ( const struct tramp_frame self,
struct frame_info this_frame,
struct trad_frame_cache this_cache,
CORE_ADDR  func 
) [static]
static void arm_linux_sigreturn_init ( const struct tramp_frame self,
struct frame_info this_frame,
struct trad_frame_cache this_cache,
CORE_ADDR  func 
) [static]
static int arm_linux_sigreturn_return_addr ( struct frame_info frame,
unsigned long  svc_number,
CORE_ADDR pc,
int is_thumb 
) [static]
static void arm_linux_sigtramp_cache ( struct frame_info this_frame,
struct trad_frame_cache this_cache,
CORE_ADDR  func,
int  regs_offset 
) [static]
static int arm_linux_software_single_step ( struct frame_info frame) [static]
void arm_linux_supply_gregset ( const struct regset regset,
struct regcache regcache,
int  regnum,
const void *  gregs_buf,
size_t  len 
)
void arm_linux_supply_nwfpe ( const struct regset regset,
struct regcache regcache,
int  regnum,
const void *  regs_buf,
size_t  len 
)
static void arm_linux_supply_vfp ( const struct regset regset,
struct regcache regcache,
int  regnum,
const void *  regs_buf,
size_t  len 
) [static]
static CORE_ADDR arm_linux_syscall_next_pc ( struct frame_info frame) [static]
static int arm_stap_is_single_operand ( struct gdbarch gdbarch,
const char *  s 
) [static]

Definition at line 1117 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

static int arm_stap_parse_special_token ( struct gdbarch gdbarch,
struct stap_parse_info p 
) [static]
static void cleanup_kernel_helper_return ( struct gdbarch gdbarch,
struct regcache regs,
struct displaced_step_closure dsc 
) [static]
void collect_nwfpe_register ( const struct regcache regcache,
int  regno,
gdb_byte regs 
)
void supply_nwfpe_register ( struct regcache regcache,
int  regno,
const gdb_byte regs 
)

Variable Documentation

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

Initial value:

Definition at line 432 of file arm-linux-tdep.c.

Initial value:

Definition at line 421 of file arm-linux-tdep.c.

Initial value:

Definition at line 454 of file arm-linux-tdep.c.

const gdb_byte arm_linux_arm_be_breakpoint[] = { 0xef, 0x9f, 0x00, 0x01 } [static]

Definition at line 65 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

const gdb_byte arm_linux_arm_le_breakpoint[] = { 0x01, 0x00, 0x9f, 0xef } [static]

Definition at line 63 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

Initial value:
{
  { ".reg", ARM_LINUX_SIZEOF_GREGSET, "general-purpose" },
  { ".reg2", ARM_LINUX_SIZEOF_NWFPE, "FPA floating-point" },
  { NULL, 0}
}

Definition at line 727 of file arm-linux-tdep.c.

Initial value:

Definition at line 443 of file arm-linux-tdep.c.

Initial value:

Definition at line 411 of file arm-linux-tdep.c.

Initial value:

Definition at line 401 of file arm-linux-tdep.c.

const gdb_byte arm_linux_thumb2_be_breakpoint[] = { 0xf7, 0xf0, 0xa0, 0x00 } [static]

Definition at line 88 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

const gdb_byte arm_linux_thumb2_le_breakpoint[] = { 0xf0, 0xf7, 0x00, 0xa0 } [static]

Definition at line 90 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

const gdb_byte arm_linux_thumb_be_breakpoint[] = {0xde, 0x01} [static]

Definition at line 80 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

const gdb_byte arm_linux_thumb_le_breakpoint[] = {0x01, 0xde} [static]

Definition at line 82 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

Initial value:
{
  { ".reg", ARM_LINUX_SIZEOF_GREGSET, "general-purpose" },
  { ".reg-arm-vfp", ARM_LINUX_SIZEOF_VFP, "VFP floating-point" },
  { NULL, 0}
}

Definition at line 734 of file arm-linux-tdep.c.

const gdb_byte eabi_linux_arm_be_breakpoint[] = { 0xe7, 0xf0, 0x01, 0xf0 } [static]

Definition at line 75 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

const gdb_byte eabi_linux_arm_le_breakpoint[] = { 0xf0, 0x01, 0xf0, 0xe7 } [static]

Definition at line 73 of file arm-linux-tdep.c.

Referenced by arm_linux_init_abi().

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines