27 #include <asm/ptrace.h> 28 #include <xtensa-config.h> 29 #include "arch/xtensa.h" 46 elf_greg_t* rset = (elf_greg_t*)buf;
55 ptr = (
char*)&rset[
R_A0];
57 for (i = ar0_regnum; i < ar0_regnum + XCHAL_NUM_AREGS; i++)
63 if (XSHAL_ABI == XTHAL_ABI_CALL0)
66 ptr = (
char *) &rset[
R_A0 + 4 * rset[
R_WB]];
68 for (i = a0_regnum; i < a0_regnum + C0_NREGS; i++)
70 if ((4 * rset[
R_WB] + i - a0_regnum) == XCHAL_NUM_AREGS)
71 ptr = (
char *) &rset[
R_A0];
91 #if XCHAL_HAVE_THREADPTR 100 const elf_greg_t* rset = (
const elf_greg_t*)buf;
109 ptr = (
char *)&rset[
R_A0];
111 for (i = ar0_regnum; i < ar0_regnum + XCHAL_NUM_AREGS; i++)
117 if (XSHAL_ABI == XTHAL_ABI_CALL0)
120 ptr = (
char *) &rset[
R_A0 + (4 * rset[
R_WB]) % XCHAL_NUM_AREGS];
122 for (i = a0_regnum; i < a0_regnum + C0_NREGS; i++)
124 if ((4 * rset[
R_WB] + i - a0_regnum) == XCHAL_NUM_AREGS)
125 ptr = (
char *) &rset[
R_A0];
145 #if XCHAL_HAVE_THREADPTR 178 { PTRACE_GETREGS, PTRACE_SETREGS, 0,
sizeof (elf_gregset_t),
188 #define XTENSA_BREAKPOINT {0xd2,0x0f} 190 #define XTENSA_BREAKPOINT {0x2d,0xf0} 194 #define xtensa_breakpoint_len 2 212 return memcmp((
char *) &insn,
220 lwpid_t lwpid,
int idx,
void **base)
222 xtensa_elf_gregset_t regs;
224 if (
ptrace (PTRACE_GETREGS, lwpid, NULL, ®s) != 0)
230 *base = (
void *) ((
char *) regs.threadptr - idx);
const struct target_desc * tdesc
const xtensa_regtable_t xtensa_regmap_table[]
void collect_register(struct regcache *regcache, int n, void *buf)
struct linux_target_ops the_low_target
void supply_register_by_name(struct regcache *regcache, const char *name, const void *buf)
static struct regs_info regs_info
static struct regsets_info xtensa_regsets_info
#define XTENSA_ELF_XTREG_SIZE
static struct regset_info xtensa_regsets[]
static void xtensa_fill_xtregset(struct regcache *regcache, void *buf)
struct target_ops * the_target
const struct target_desc * tdesc
void initialize_low_arch(void)
CORE_ADDR linux_get_pc_32bit(struct regcache *regcache)
static void xtensa_fill_gregset(struct regcache *regcache, void *buf)
void collect_register_by_name(struct regcache *regcache, const char *name, void *buf)
static void xtensa_arch_setup(void)
static const struct regs_info * xtensa_regs_info(void)
void init_registers_xtensa(void)
static int xtensa_breakpoint_at(CORE_ADDR where)
static const gdb_byte xtensa_breakpoint[]
int register_size(const struct target_desc *tdesc, int n)
const struct target_desc * tdesc_xtensa
struct process_info * current_process(void)
static void xtensa_store_xtregset(struct regcache *regcache, const void *buf)
#define XTENSA_BREAKPOINT
void linux_set_pc_32bit(struct regcache *regcache, CORE_ADDR pc)
ps_err_e ps_get_thread_area(struct ps_prochandle *ph, lwpid_t lwpid, int idx, void **base)
int find_regno(const struct target_desc *tdesc, const char *name)
#define xtensa_breakpoint_len
static int xtensa_supports_hardware_single_step(void)
int(* read_memory)(CORE_ADDR memaddr, unsigned char *myaddr, int len)
static const gdb_byte * xtensa_sw_breakpoint_from_kind(int kind, int *size)
void supply_register(struct regcache *regcache, int n, const void *buf)
static void xtensa_store_gregset(struct regcache *regcache, const void *buf)