36#include "opcode/cris.h"
171#define SIGTRAMP_INSN0 0x9c5f
172#define SIGTRAMP_OFFSET0 0
173#define SIGTRAMP_INSN1 0xe93d
174#define SIGTRAMP_OFFSET1 4
182#define SIGTRAMP_LEN (sizeof sigtramp_code)
284 error (_(
"Couldn't recognize signal trampoline."));
327 (*this_cache) = info;
336 info->uses_frame = 0;
338 info->leaf_function = 0;
356 for (i = 0; i <= 13; i++)
357 info->saved_regs[i].set_addr (addr + ((15 - i) * 4));
359 info->saved_regs[
MOF_REGNUM].set_addr (addr + (16 * 4));
360 info->saved_regs[
DCCR_REGNUM].set_addr (addr + (17 * 4));
361 info->saved_regs[
SRP_REGNUM].set_addr (addr + (18 * 4));
365 info->saved_regs[
IRP_REGNUM].set_addr (addr + (19 * 4));
375 for (i = 0; i <= 13; i++)
376 info->saved_regs[i].set_addr (addr + ((i + 1) * 4));
378 info->saved_regs[
ACR_REGNUM].set_addr (addr + (15 * 4));
379 info->saved_regs[
SRS_REGNUM].set_addr (addr + (16 * 4));
380 info->saved_regs[
MOF_REGNUM].set_addr (addr + (17 * 4));
381 info->saved_regs[
SPC_REGNUM].set_addr (addr + (18 * 4));
382 info->saved_regs[
CCS_REGNUM].set_addr (addr + (19 * 4));
383 info->saved_regs[
SRP_REGNUM].set_addr (addr + (20 * 4));
384 info->saved_regs[
ERP_REGNUM].set_addr (addr + (21 * 4));
385 info->saved_regs[
EXS_REGNUM].set_addr (addr + (22 * 4));
386 info->saved_regs[
EDA_REGNUM].set_addr (addr + (23 * 4));
416 void **this_cache,
int regnum);
419 void **this_cache,
int regnum)
544 return ((insn & 0xF000) >> 12);
550 return ((insn & 0x0C00) >> 10);
556 return ((insn & 0x03C0) >> 6);
562 return ((insn & 0x0030) >> 4);
568 return (insn & 0x000F);
576 return (insn & 0x003F);
582 return (insn & 0x00FF);
588 return (insn & 0x00FF);
594 return (
value & 0x3F);
600 return ((insn) & 0xC000);
606 return (((insn) & 0x20) == 0x20);
612 return (((insn) & 0x1000) == 0x1000);
625 return ((
signed char) (insn & 0x00FF));
641static void set_cris_mode (
const char *ignore_args,
int from_tty,
674 memcpy (si->
data, contents,
len);
696 void **this_prologue_cache)
702 if ((*this_prologue_cache))
706 (*this_prologue_cache) = info;
715 info->uses_frame = 0;
717 info->leaf_function = 0;
733 void **this_prologue_cache,
748 base = info->prev_sp;
759 void **this_prologue_cache,
int regnum)
776 CORE_ADDR sp, CORE_ADDR funaddr,
777 struct value **args,
int nargs,
778 struct type *value_type,
779 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
794 int nargs,
struct value **args, CORE_ADDR sp,
796 CORE_ADDR struct_addr)
817 for (argnum = 0; argnum < nargs; argnum++)
824 len = args[argnum]->type ()->length ();
825 val = args[argnum]->contents ().data ();
828 reg_demand = (
len / 4) + (
len % 4 != 0 ? 1 : 0);
833 for (i = 0; i < reg_demand; i++)
844 for (i = 0; i < reg_demand; i++)
861 else if (
len > (2 * 4))
865 sp = (sp -
len) & ~3;
892 sp = (sp - si->
len) & ~3;
1014 unsigned short insn;
1017 unsigned short insn_next;
1027 short source_register;
1035 info->leaf_function = 1;
1046 limit = this_frame ?
get_frame_pc (this_frame) : pc + 64;
1049 while (pc > 0 && pc < limit)
1061 info->sp_offset += 4;
1065 if (insn_next == 0xBE7E)
1069 info->leaf_function = 0;
1072 else if (insn_next == 0x8FEE)
1081 else if (insn == 0x866E)
1086 info->uses_frame = 1;
1109 && ((insn & 0x0F00) >> 8) == 0x0001
1151 if (source_register < ARG1_REGNUM || source_register >
ARG4_REGNUM)
1160 && ((insn & 0x0F00) >> 8) == 0x0001
1184 && ((insn & 0x0F00) >> 8) == 0x0001
1217 if (this_frame == NULL &&
info == NULL)
1226 if (
info->uses_frame)
1233 info->base = this_base;
1247 info->base = this_base;
1255 val =
info->sp_offset;
1257 for (regno = regsave; regno >= 0; regno--)
1259 info->saved_regs[regno].set_addr (
info->base +
info->r8_offset - val);
1267 if (!
info->leaf_function)
1270 if (
info->r8_offset == 0)
1310 if (this_frame == NULL &&
info == NULL)
1318 info->base = this_base;
1319 info->prev_sp = this_base;
1338 CORE_ADDR func_addr, func_end;
1340 CORE_ADDR pc_after_prologue;
1347 if (sal.
end > 0 && sal.
end < func_end)
1356 return pc_after_prologue;
1369static const gdb_byte *
1373 static unsigned char break8_insn[] = {0x38, 0xe9};
1374 static unsigned char break15_insn[] = {0x3f, 0xe9};
1379 return break15_insn;
1389 struct cris_spec_reg spec_reg)
1394 switch (spec_reg.applicable_version)
1396 case cris_ver_version_all:
1398 case cris_ver_warning:
1402 return in_inclusive_range (
version, 0U, 3U);
1406 return in_inclusive_range (
version, 8U, 9U);
1409 case cris_ver_v0_10:
1410 return in_inclusive_range (
version, 0U, 10U);
1411 case cris_ver_v3_10:
1412 return in_inclusive_range (
version, 3U, 10U);
1413 case cris_ver_v8_10:
1414 return in_inclusive_range (
version, 8U, 10U);
1597 warning (_(
"crisv32_register_type: unknown regno %d"), regno);
1609 const gdb_byte *valbuf)
1631 error (_(
"cris_store_return_value: type length too large."));
1663 static const char *cris_genreg_names[] =
1664 {
"r0",
"r1",
"r2",
"r3", \
1665 "r4",
"r5",
"r6",
"r7", \
1666 "r8",
"r9",
"r10",
"r11", \
1667 "r12",
"r13",
"sp",
"pc" };
1673 return cris_genreg_names[regno];
1689 static const char *crisv32_genreg_names[] =
1690 {
"r0",
"r1",
"r2",
"r3", \
1691 "r4",
"r5",
"r6",
"r7", \
1692 "r8",
"r9",
"r10",
"r11", \
1693 "r12",
"r13",
"sp",
"acr"
1696 static const char *crisv32_sreg_names[] =
1697 {
"s0",
"s1",
"s2",
"s3", \
1698 "s4",
"s5",
"s6",
"s7", \
1699 "s8",
"s9",
"s10",
"s11", \
1700 "s12",
"s13",
"s14",
"s15"
1706 return crisv32_genreg_names[regno];
1718 return crisv32_sreg_names[regno -
S0_REGNUM];
1736 static int cris_dwarf_regmap[] = {
1748 if (reg >= 0 && reg < ARRAY_SIZE (cris_dwarf_regmap))
1749 regnum = cris_dwarf_regmap[reg];
1800 error (_(
"cris_extract_return_value: type length too large"));
1808 gdb_byte *readbuf,
const gdb_byte *writebuf)
1810 if (
type->
code () == TYPE_CODE_STRUCT
1811 ||
type->
code () == TYPE_CODE_UNION
1835 const gdb_byte *s = (
const gdb_byte *) inst_args;
1841 if ((insn & 0x30) == 0x30)
1861 retval = (((insn >> 0xC) & 0xF) == (insn & 0xF));
1869 tmp = (insn >> 0xC) & 0xF;
1922 int max_level_of_match = -1;
1923 int max_matched = -1;
1926 for (i = 0; cris_opcodes[i].name != NULL; i++)
1928 if (((cris_opcodes[i].match & insn) == cris_opcodes[i].match)
1929 && ((cris_opcodes[i].lose & insn) == 0)
1931 && (cris_opcodes[i].applicable_version != cris_ver_v32p))
1933 level_of_match =
constraint (insn, cris_opcodes[i].args, inst_env);
1934 if (level_of_match >= 0)
1938 if (level_of_match > max_level_of_match)
1941 max_level_of_match = level_of_match;
1942 if (level_of_match == 16)
1962 unsigned short insn;
1970 (
unsigned long) regcache_raw_get_unsigned (
regcache, i);
1976 (
unsigned long) regcache_raw_get_unsigned (
regcache, offset + i);
2029static std::vector<CORE_ADDR>
2034 std::vector<CORE_ADDR> next_pcs;
2043 warning (_(
"CRIS software single step could not find a step target."));
2052 next_pcs.push_back (next_pc);
2056 CORE_ADDR branch_target_address
2059 next_pcs.push_back (branch_target_address);
2103 inst_env->
reg[REG_PC] += 1;
2125 enum bfd_endian byte_order);
2257 offset &= ~BRANCH_SIGNED_SHORT_OFFSET_MASK;
2288 inst_env->
reg[REG_PC] += 2;
2326 value = (long) inst_env->
reg[REG_PC];
2332 inst_env->
reg[REG_PC] = (long)
value;
2367 unsigned long value;
2368 unsigned long signed_extend_mask = 0;
2396 signed_extend_mask = 0xFF;
2397 signed_extend_mask = signed_extend_mask >> shift_steps;
2398 signed_extend_mask = ~signed_extend_mask;
2401 value |= signed_extend_mask;
2403 inst_env->
reg[REG_PC] &= 0xFFFFFF00;
2410 signed_extend_mask = 0xFFFF;
2411 signed_extend_mask = signed_extend_mask >> shift_steps;
2412 signed_extend_mask = ~signed_extend_mask;
2415 value |= signed_extend_mask;
2417 inst_env->
reg[REG_PC] &= 0xFFFF0000;
2424 signed_extend_mask = 0xFFFFFFFF;
2425 signed_extend_mask = signed_extend_mask >> shift_steps;
2426 signed_extend_mask = ~signed_extend_mask;
2429 value |= signed_extend_mask;
2446 unsigned long value;
2447 unsigned long signed_extend_mask = 0;
2472 signed_extend_mask = 0xFFFFFFFF;
2473 signed_extend_mask = signed_extend_mask >> shift_steps;
2474 signed_extend_mask = ~signed_extend_mask;
2477 value |= signed_extend_mask;
2776 unsigned long newpc;
2809 inst_env->
reg[REG_PC] = newpc;
2975 inst_env->
reg[REG_PC] =
2999 inst_env->
reg[REG_PC] =
3153 unsigned long source1,
unsigned long source2)
3155 unsigned long pc_mask;
3156 unsigned long operation_mask;
3161 pc_mask = 0xFFFFFF00;
3162 operation_mask = 0xFF;
3166 pc_mask = 0xFFFF0000;
3167 operation_mask = 0xFFFF;
3172 operation_mask = 0xFFFFFFFF;
3182 source2 &= operation_mask;
3183 source1 &= operation_mask;
3221 source2 &= operation_mask;
3224 inst_env->
reg[REG_PC] &= pc_mask;
3225 inst_env->
reg[REG_PC] |= source1;
3275 unsigned long operand1;
3276 unsigned long operand2;
3295 operand2 = inst_env->
reg[REG_PC];
3318 enum bfd_endian byte_order)
3321 unsigned long value;
3327 size &= ~SIGNED_EXTEND_BIT_MASK;
3349 unsigned long operand2;
3350 unsigned long operand3;
3355 operand2 = inst_env->
reg[REG_PC];
3379 unsigned long operand2;
3380 unsigned long operand3;
3436 unsigned long operand1;
3437 unsigned long operand2;
3438 unsigned long operand3;
3448 operand2 = inst_env->
reg[REG_PC];
3470 size &= ~SIGNED_EXTEND_BIT_MASK;
3515 unsigned long operand1;
3516 unsigned long operand2;
3535 operand2 = inst_env->
reg[REG_PC];
3555 unsigned long operand1;
3556 unsigned long operand2;
3575 operand2 = inst_env->
reg[REG_PC];
3604 case cris_not_implemented_op:
3624 case cris_ax_ei_setf_op:
3628 case cris_bdap_prefix:
3632 case cris_biap_prefix:
3640 case cris_btst_nop_op:
3644 case cris_clearf_di_op:
3648 case cris_dip_prefix:
3652 case cris_dstep_logshift_mstep_neg_not_op:
3656 case cris_eight_bit_offset_branch_op:
3660 case cris_move_mem_to_reg_movem_op:
3664 case cris_move_reg_to_mem_movem_op:
3668 case cris_move_to_preg_op:
3680 case cris_none_reg_mode_add_sub_cmp_and_or_move_op:
3684 case cris_none_reg_mode_clear_test_op:
3688 case cris_none_reg_mode_jump_op:
3692 case cris_none_reg_mode_move_from_preg_op:
3696 case cris_quick_mode_add_sub_op:
3700 case cris_quick_mode_and_cmp_move_or_op:
3704 case cris_quick_mode_bdap_prefix:
3708 case cris_reg_mode_add_sub_cmp_and_or_move_op:
3712 case cris_reg_mode_clear_op:
3716 case cris_reg_mode_jump_op:
3720 case cris_reg_mode_move_from_preg_op:
3724 case cris_reg_mode_test_op:
3732 case cris_sixteen_bit_offset_branch_op:
3736 case cris_three_operand_add_sub_cmp_and_or_op:
3740 case cris_three_operand_bound_op:
3744 case cris_two_operand_bound_op:
3758#define CRISV10_ELF_NGREG 35
3761#define CRISV32_ELF_NGREG 32
3768 int regnum,
const void *gregs,
size_t len)
3777 warning (_(
"wrong size gregset struct in core file"));
3828 _(
"Set the current CRIS version."),
3829 _(
"Show the current CRIS version."),
3831Set to 10 for CRISv10 or 32 for CRISv32 if autodetection fails.\n\
3840 _(
"Set the current CRIS mode."),
3841 _(
"Show the current CRIS mode."),
3843Set to CRIS_MODE_GURU when debugging in guru mode.\n\
3844Makes GDB use the NRP register instead of the ERP register in certain cases."),
3851 _(
"Set the usage of Dwarf-2 CFI for CRIS."),
3852 _(
"Show the usage of Dwarf-2 CFI for CRIS."),
3853 _(
"Set this to \"off\" if using gcc-cris < R59."),
3868 gdb_printf (file,
"cris_dump_tdep: tdep->cris_version = %i\n",
3870 gdb_printf (file,
"cris_dump_tdep: tdep->cris_mode = %s\n",
3872 gdb_printf (file,
"cris_dump_tdep: tdep->cris_dwarf2_cfi = %i\n",
3887 internal_error (_(
"cris_gdbarch_update: failed to update architecture."));
3898 internal_error (
"cris_gdbarch_update: failed to update architecture.");
3909 internal_error (_(
"cris_gdbarch_update: failed to update architecture."));
3915 unsigned int cris_version;
3922 else if (
info.abfd && bfd_get_mach (
info.abfd) == bfd_mach_cris_v32)
3941 = gdbarch_tdep<cris_gdbarch_tdep> (
arches->gdbarch);
3950 info.byte_order = BFD_ENDIAN_LITTLE;
gdb_static_assert(sizeof(splay_tree_key) >=sizeof(CORE_ADDR *))
void gdbarch_register(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init, gdbarch_dump_tdep_ftype *dump_tdep, gdbarch_supports_arch_info_ftype *supports_arch_info)
int gdbarch_update_p(struct gdbarch_info info)
static std::vector< const char * > arches
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
bool find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr, const struct block **block)
enum breakpoint_here breakpoint_here_p(const address_space *aspace, CORE_ADDR pc)
void raw_supply(int regnum, const void *buf) override
void cooked_write(int regnum, const gdb_byte *buf)
struct cmd_list_element * showlist
struct cmd_list_element * setlist
set_show_commands add_setshow_enum_cmd(const char *name, enum command_class theclass, const char *const *enumlist, const char **var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_boolean_cmd(const char *name, enum command_class theclass, bool *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_zuinteger_cmd(const char *name, enum command_class theclass, unsigned int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
LONGEST read_memory_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
static void check_assign(unsigned short inst, inst_env_type *inst_env)
static void cris_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
static enum return_value_convention cris_return_value(struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
static int cris_breakpoint_kind_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr)
static void cris_sigtramp_frame_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
static int cris_register_size(struct gdbarch *gdbarch, int regno)
static CORE_ADDR cris_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, function_call_return_method return_method, CORE_ADDR struct_addr)
static void asr_op(unsigned short inst, inst_env_type *inst_env)
static void reg_mode_test_op(unsigned short inst, inst_env_type *inst_env)
static int find_cris_op(unsigned short insn, inst_env_type *inst_env)
static void not_implemented_op(unsigned short inst, inst_env_type *inst_env)
static void cris_store_return_value(struct type *type, struct regcache *regcache, const gdb_byte *valbuf)
static void btst_nop_op(unsigned short inst, inst_env_type *inst_env)
static struct type * cris_register_type(struct gdbarch *gdbarch, int regno)
#define CRISV32_ELF_NGREG
static void set_cris_dwarf2_cfi(const char *ignore_args, int from_tty, struct cmd_list_element *c)
static void cris_dwarf2_frame_init_reg(struct gdbarch *gdbarch, int regnum, struct dwarf2_frame_state_reg *reg, frame_info_ptr this_frame)
static const struct frame_unwind cris_sigtramp_frame_unwind
cris_elf_greg_t cris_elf_gregset_t[CRISV10_ELF_NGREG]
static void add_sub_cmp_and_or_move_action(unsigned short inst, inst_env_type *inst_env, unsigned long source1, unsigned long source2)
static int cris_is_signed_extend_bit_on(unsigned short insn)
static void reg_mode_add_sub_cmp_and_or_move_op(unsigned short inst, inst_env_type *inst_env)
static void move_reg_to_mem_movem_op(unsigned short inst, inst_env_type *inst_env)
static void addi_op(unsigned short inst, inst_env_type *inst_env)
static void process_autoincrement(int size, unsigned short inst, inst_env_type *inst_env)
static int cris_cannot_store_register(struct gdbarch *gdbarch, int regno)
static const char *const cris_modes[]
static void dip_prefix(unsigned short inst, inst_env_type *inst_env)
static CORE_ADDR cris_sigcontext_addr(frame_info_ptr this_frame)
static int crisv32_single_step_through_delay(struct gdbarch *gdbarch, frame_info_ptr this_frame)
static void reg_mode_move_from_preg_op(unsigned short inst, inst_env_type *inst_env)
static void asrq_op(unsigned short inst, inst_env_type *inst_env)
static int cris_sigtramp_frame_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_cache)
static CORE_ADDR cris_scan_prologue(CORE_ADDR pc, frame_info_ptr this_frame, struct cris_unwind_cache *info)
static int cris_get_clear_size(unsigned short insn)
static void clearf_di_op(unsigned short inst, inst_env_type *inst_env)
static void cris_extract_return_value(struct type *type, struct regcache *regcache, gdb_byte *valbuf)
static const char * cris_register_name(struct gdbarch *gdbarch, int regno)
cris_prefix_addressing_modes
static const char * usr_cmd_cris_mode
void _initialize_cris_tdep()
static int cris_get_opcode(unsigned short insn)
static const unsigned short sigtramp_code[]
static int cris_get_bdap_quick_offset(unsigned short insn)
static int cris_cannot_fetch_register(struct gdbarch *gdbarch, int regno)
static CORE_ADDR cris_sigtramp_start(frame_info_ptr this_frame)
static void quick_mode_and_cmp_move_or_op(unsigned short inst, inst_env_type *inst_env)
static void cris_frame_this_id(frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
static int cris_spec_reg_applicable(struct gdbarch *gdbarch, struct cris_spec_reg spec_reg)
static void move_to_preg_op(struct gdbarch *gdbarch, unsigned short inst, inst_env_type *inst_env)
static void muls_op(unsigned short inst, inst_env_type *inst_env)
static const char cris_mode_normal[]
static const struct frame_unwind cris_frame_unwind
static std::vector< CORE_ADDR > cris_software_single_step(struct regcache *regcache)
static void handle_inc_and_index_mode_for_aritm_op(unsigned short inst, inst_env_type *inst_env)
static bool usr_cmd_cris_dwarf2_cfi
static void cris_supply_gregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len)
static void set_cris_version(const char *ignore_args, int from_tty, struct cmd_list_element *c)
static void break_op(unsigned short inst, inst_env_type *inst_env)
static CORE_ADDR cris_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
static int crisv32_cannot_store_register(struct gdbarch *gdbarch, int regno)
static void handle_prefix_index_mode_for_aritm_op(unsigned short inst, inst_env_type *inst_env)
static void eight_bit_offset_branch_op(unsigned short inst, inst_env_type *inst_env)
static void cris_set_size_to_dword(unsigned short *insn)
static struct value * cris_sigtramp_frame_prev_register(frame_info_ptr this_frame, void **this_cache, int regnum)
static void none_reg_mode_add_sub_cmp_and_or_move_op(unsigned short inst, inst_env_type *inst_env)
static void reg_mode_clear_op(unsigned short inst, inst_env_type *inst_env)
static struct type * crisv32_register_type(struct gdbarch *gdbarch, int regno)
static void xor_op(unsigned short inst, inst_env_type *inst_env)
static int cris_get_operand1(unsigned short insn)
static unsigned long do_sign_or_zero_extend(unsigned long value, unsigned short *inst)
static void none_reg_mode_jump_op(unsigned short inst, inst_env_type *inst_env)
static int cris_get_branch_short_offset(unsigned short insn)
static int constraint(unsigned int insn, const char *inst_args, inst_env_type *inst_env)
@ SIGNED_QUICK_VALUE_MASK
@ SIGNED_WORD_EXTEND_MASK
@ BRANCH_SIGNED_SHORT_OFFSET_MASK
@ SIGNED_QUICK_VALUE_EXTEND_MASK
@ SIGNED_BYTE_EXTEND_MASK
static int number_of_bits(unsigned int value)
static struct cris_unwind_cache * cris_frame_unwind_cache(frame_info_ptr this_frame, void **this_prologue_cache)
static const gdb_byte * cris_sw_breakpoint_from_kind(struct gdbarch *gdbarch, int kind, int *size)
static bool usr_cmd_cris_version_valid
static void set_cris_mode(const char *ignore_args, int from_tty, struct cmd_list_element *c)
static void cris_gdb_func(struct gdbarch *, enum cris_op_type, unsigned short, inst_env_type *)
static const struct regset cris_regset
static void quick_mode_add_sub_op(unsigned short inst, inst_env_type *inst_env)
static struct cris_unwind_cache * cris_sigtramp_frame_unwind_cache(frame_info_ptr this_frame, void **this_cache)
static int cris_get_operand2(unsigned short insn)
static const char * crisv32_register_name(struct gdbarch *gdbarch, int regno)
static int crisv32_cannot_fetch_register(struct gdbarch *gdbarch, int regno)
static CORE_ADDR cris_rt_sigtramp_start(frame_info_ptr this_frame)
static int cris_get_quick_value(unsigned short insn)
static void cris_dump_tdep(struct gdbarch *, struct ui_file *)
static signed char cris_get_signed_offset(unsigned short insn)
static void dstep_logshift_mstep_neg_not_op(unsigned short inst, inst_env_type *inst_env)
static unsigned int usr_cmd_cris_version
static int cris_get_mode(unsigned short insn)
static void abs_op(unsigned short inst, inst_env_type *inst_env)
const struct cris_spec_reg cris_spec_regs[]
static void reg_mode_jump_op(unsigned short inst, inst_env_type *inst_env)
static void two_operand_bound_op(unsigned short inst, inst_env_type *inst_env)
static void move_mem_to_reg_movem_op(unsigned short inst, inst_env_type *inst_env)
static void scc_op(unsigned short inst, inst_env_type *inst_env)
static void none_reg_mode_move_from_preg_op(struct gdbarch *gdbarch, unsigned short inst, inst_env_type *inst_env)
static struct gdbarch * cris_gdbarch_init(struct gdbarch_info, struct gdbarch_list *)
#define CRISV10_ELF_NGREG
static CORE_ADDR cris_frame_align(struct gdbarch *gdbarch, CORE_ADDR sp)
static int cris_is_xflag_bit_on(unsigned short insn)
static struct value * cris_frame_prev_register(frame_info_ptr this_frame, void **this_cache, int regnum)
static struct cris_stack_item * push_stack_item(struct cris_stack_item *prev, const gdb_byte *contents, int len)
static void bdap_prefix(unsigned short inst, inst_env_type *inst_env)
unsigned char cris_elf_greg_t[4]
static void ax_ei_setf_op(unsigned short inst, inst_env_type *inst_env)
static struct cris_stack_item * pop_stack_item(struct cris_stack_item *si)
static const unsigned short rt_sigtramp_code[]
static int cris_get_asr_shift_steps(unsigned long value)
static int find_step_target(struct regcache *regcache, inst_env_type *inst_env)
static void none_reg_mode_clear_test_op(unsigned short inst, inst_env_type *inst_env)
struct instruction_environment inst_env_type
static CORE_ADDR cris_frame_base_address(frame_info_ptr this_frame, void **this_cache)
static const char * cris_special_register_name(struct gdbarch *gdbarch, int regno)
static int cris_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, int reg)
static void biap_prefix(unsigned short inst, inst_env_type *inst_env)
static void mulu_op(unsigned short inst, inst_env_type *inst_env)
static unsigned long get_data_from_address(unsigned short *inst, CORE_ADDR address, enum bfd_endian byte_order)
static CORE_ADDR cris_push_dummy_code(struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache)
static void quick_mode_bdap_prefix(unsigned short inst, inst_env_type *inst_env)
cris_elf_greg_t crisv32_elf_gregset_t[CRISV32_ELF_NGREG]
static void handle_prefix_assign_mode_for_aritm_op(unsigned short inst, inst_env_type *inst_env)
static void three_operand_add_sub_cmp_and_or_op(unsigned short inst, inst_env_type *inst_env)
static void sixteen_bit_offset_branch_op(unsigned short inst, inst_env_type *inst_env)
static CORE_ADDR crisv32_scan_prologue(CORE_ADDR pc, frame_info_ptr this_frame, struct cris_unwind_cache *info)
static const struct frame_base cris_frame_base
static void three_operand_bound_op(unsigned short inst, inst_env_type *inst_env)
static int cris_get_size(unsigned short insn)
static const char cris_mode_guru[]
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
static ULONGEST extract_unsigned_integer(gdb::array_view< const gdb_byte > buf, enum bfd_endian byte_order)
@ RETURN_VALUE_REGISTER_CONVENTION
@ RETURN_VALUE_STRUCT_CONVENTION
void dwarf2_append_unwinders(struct gdbarch *gdbarch)
void dwarf2_frame_set_init_reg(struct gdbarch *gdbarch, void(*init_reg)(struct gdbarch *, int, struct dwarf2_frame_state_reg *, frame_info_ptr))
void frame_base_set_default(struct gdbarch *gdbarch, const struct frame_base *default_base)
int default_frame_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
enum unwind_stop_reason default_frame_unwind_stop_reason(frame_info_ptr this_frame, void **this_cache)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
ULONGEST get_frame_register_unsigned(frame_info_ptr frame, int regnum)
CORE_ADDR get_frame_pc(frame_info_ptr frame)
const address_space * get_frame_address_space(frame_info_ptr frame)
void get_frame_register(frame_info_ptr frame, int regnum, gdb_byte *buf)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
CORE_ADDR get_frame_func(frame_info_ptr this_frame)
bool safe_frame_unwind_memory(frame_info_ptr this_frame, CORE_ADDR addr, gdb::array_view< gdb_byte > buffer)
#define FRAME_OBSTACK_ZALLOC(TYPE)
int gdbarch_pc_regnum(struct gdbarch *gdbarch)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype *breakpoint_kind_from_pc)
void set_gdbarch_software_single_step(struct gdbarch *gdbarch, gdbarch_software_single_step_ftype *software_single_step)
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype *frame_align)
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue)
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype *register_name)
void set_gdbarch_push_dummy_code(struct gdbarch *gdbarch, gdbarch_push_dummy_code_ftype *push_dummy_code)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype *return_value)
void set_gdbarch_single_step_through_delay(struct gdbarch *gdbarch, gdbarch_single_step_through_delay_ftype *single_step_through_delay)
void set_gdbarch_have_nonsteppable_watchpoint(struct gdbarch *gdbarch, int have_nonsteppable_watchpoint)
int gdbarch_num_regs(struct gdbarch *gdbarch)
void set_gdbarch_double_bit(struct gdbarch *gdbarch, int double_bit)
void set_gdbarch_inner_than(struct gdbarch *gdbarch, gdbarch_inner_than_ftype *inner_than)
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
int gdbarch_sp_regnum(struct gdbarch *gdbarch)
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
void set_gdbarch_register_type(struct gdbarch *gdbarch, gdbarch_register_type_ftype *register_type)
void set_gdbarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum)
void set_gdbarch_cannot_store_register(struct gdbarch *gdbarch, gdbarch_cannot_store_register_ftype *cannot_store_register)
void set_gdbarch_cannot_fetch_register(struct gdbarch *gdbarch, gdbarch_cannot_fetch_register_ftype *cannot_fetch_register)
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
void set_gdbarch_long_double_bit(struct gdbarch *gdbarch, int long_double_bit)
void set_gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, gdbarch_sw_breakpoint_from_kind_ftype *sw_breakpoint_from_kind)
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype *push_dummy_call)
void set_gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, gdbarch_iterate_over_regset_sections_ftype *iterate_over_regset_sections)
struct gdbarch * gdbarch_alloc(const struct gdbarch_info *info, gdbarch_tdep_up tdep)
std::unique_ptr< gdbarch_tdep_base > gdbarch_tdep_up
void iterate_over_regset_sections_cb(const char *sect_name, int supply_size, int collect_size, const struct regset *regset, const char *human_name, void *cb_data)
function_call_return_method
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
void gdbarch_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
#define REGSET_VARIABLE_SIZE
void(* func)(remote_target *remote, char *)
struct type * builtin_int0
struct type * builtin_uint16
struct type * builtin_func_ptr
struct type * builtin_data_ptr
struct type * builtin_uint32
struct type * builtin_uint8
unsigned int cris_version
struct cris_stack_item * prev
trad_frame_saved_reg * saved_regs
enum dwarf2_frame_reg_rule how
unsigned long branch_break_address
unsigned long prefix_value
unsigned long reg[NUM_GENREGS]
unsigned long preg[NUM_SPECREGS]
enum bfd_endian byte_order
unsigned long delay_slot_pc
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
trad_frame_saved_reg * trad_frame_alloc_saved_regs(struct gdbarch *gdbarch)
struct value * trad_frame_get_prev_register(frame_info_ptr this_frame, trad_frame_saved_reg this_saved_regs[], int regnum)
void gdb_printf(struct ui_file *stream, const char *format,...)