32 #include "safe-ctype.h" 100 va_start (ap, format);
102 for (i = 0; 0 != format[i];)
104 const char *start_ptr;
121 if ((format[i] -
'0') !=
bits)
130 start_ptr = &(format[i]);
131 width = strtoul (start_ptr, &end_ptr, 10);
134 if (start_ptr == end_ptr)
135 error (
_(
"bitstring \"%s\" at offset %d has no length field."),
138 i += end_ptr - start_ptr;
143 if (
'b' != format[i++])
144 error (
_(
"bitstring \"%s\" at offset %d has no terminating 'b'."),
155 arg_ptr = va_arg (ap, uint32_t *);
161 error (
_(
"invalid character in bitstring \"%s\" at offset %d."),
185 unsigned int *ra_ptr,
int *simm_ptr)
193 *rd_ptr = (
unsigned int) rd;
194 *ra_ptr = (
unsigned int) ra;
195 *simm_ptr = (int) (((i & 0x8000) == 0x8000) ? 0xffff0000 | i : i);
216 unsigned int *rb_ptr)
219 uint32_t ihi, ilo, ra, rb;
226 *simm_ptr = (int) ((ihi << 11) | ilo);
227 *simm_ptr |= ((ihi & 0x10) == 0x10) ? 0xffff0000 : 0;
229 *ra_ptr = (
unsigned int) ra;
230 *rb_ptr = (
unsigned int) rb;
259 || (rv_size > 2 * bpw))
268 if (writebuf != NULL)
290 if (writebuf != NULL)
294 if (BFD_ENDIAN_BIG == byte_order)
295 memcpy (buf + (
sizeof (
gdb_byte) * bpw) - rv_size, writebuf,
298 memcpy (buf, writebuf, rv_size);
318 tmp = (tmp_hi << (bpw * 8)) | tmp_lo;
322 if (writebuf != NULL)
330 memcpy (buf_hi, writebuf, rv_size - bpw);
331 memcpy (buf_lo, writebuf + bpw, bpw);
359 CGEN_FIELDS tmp_fields;
360 const CGEN_INSN *insn;
371 if (0x4 != (npc - ppc))
377 NULL, 32, &tmp_fields, 0);
386 return ((CGEN_INSN_NUM (insn) == OR1K_INSN_L_J)
387 || (CGEN_INSN_NUM (insn) == OR1K_INSN_L_JAL)
388 || (CGEN_INSN_NUM (insn) == OR1K_INSN_L_JR)
389 || (CGEN_INSN_NUM (insn) == OR1K_INSN_L_JALR)
390 || (CGEN_INSN_NUM (insn) == OR1K_INSN_L_BNF)
391 || (CGEN_INSN_NUM (insn) == OR1K_INSN_L_BF));
398 "r0",
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
399 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15",
400 "r16",
"r17",
"r18",
"r19",
"r20",
"r21",
"r22",
"r23",
401 "r24",
"r25",
"r26",
"r27",
"r28",
"r29",
"r30",
"r31",
429 unsigned int ra, rb, rd;
441 if (0 != prologue_end)
448 if ((NULL != debug_format)
449 && (strlen (
"dwarf") <= strlen (debug_format))
450 && (0 == strncasecmp (
"dwarf", debug_format, strlen (
"dwarf"))))
451 return (prologue_end > pc) ? prologue_end : pc;
465 && (simm < 0) && (0 == (simm % 4)))
475 && (simm >= 0) && (0 == (simm % 4)))
482 && (simm == frame_size));
491 && (simm >= 0) && (0 == (simm % 4)))
507 && (0 == (simm % 4)))
604 int stack_offset = 0;
628 for (argnum = 0; argnum < nargs; argnum++)
633 struct value *arg = args[argnum];
656 valaddr = heap_sp + heap_offset;
683 unsigned int bits_per_word = bpw * 8;
686 ULONGEST hi = regval >> bits_per_word;
713 first_stack_arg = argnum;
721 for (argnum = first_stack_arg; argnum < nargs; argnum++)
723 struct value *arg = args[argnum];
743 gdb_assert (heap_offset == 0 || ((heap_sp + heap_offset) < sp));
750 for (argnum = first_stack_arg; argnum < nargs; argnum++)
755 struct value *arg = args[argnum];
774 int partial_len = (len < bpw ? len : bpw);
777 stack_offset +=
align_up (partial_len, bpw);
885 "or1k_frame_cache, prologue_cache = %s\n",
889 if (NULL != *prologue_cache)
894 *prologue_cache = info;
927 this_sp_for_id = this_sp;
944 if (end_addr < start_addr)
945 error (
_(
"end addr %s is less than start addr %s"),
948 if (end_addr == start_addr)
956 unsigned int ra, rb, rd;
962 && (simm < 0) && (0 == (simm % 4)))
978 this_sp_for_id = this_sp + frame_size;
988 this_sp + frame_size);
994 end_addr = (this_pc < end_addr) ? this_pc : end_addr;
997 if ((addr < end_addr)
1000 && (simm >= 0) && (0 == (simm % 4)))
1010 if ((addr < end_addr)
1013 && (simm == frame_size))
1026 if ((addr < end_addr)
1029 && (simm >= 0) && (0 == (simm % 4)))
1046 while (addr < end_addr)
1052 && (0 == (simm % 4)))
1094 static struct value *
1096 void **prologue_cache,
int regnum)
1123 const struct bfd_arch_info *binfo;
1138 tdep->
bytes_per_word = binfo->bits_per_word / binfo->bits_per_byte;
1160 or1k_breakpoint::kind_from_pc);
1162 or1k_breakpoint::bp_from_kind);
1197 const char *mach_name = binfo->printable_name;
1198 enum cgen_endian endian = (info.
byte_order == BFD_ENDIAN_BIG
1199 ? CGEN_ENDIAN_BIG : CGEN_ENDIAN_LITTLE);
1202 or1k_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
1203 CGEN_CPU_OPEN_ENDIAN, endian, CGEN_CPU_OPEN_END);
1209 if (binfo->mach == bfd_mach_or1k)
1211 or1k_single_step_through_delay);
1225 if (feature == NULL)
1288 _(
"Set OpenRISC debugging."),
1289 _(
"Show OpenRISC debugging."),
1290 _(
"When on, OpenRISC specific debugging is enabled."),
void reggroup_add(struct gdbarch *gdbarch, struct reggroup *group)
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
void set_gdbarch_double_bit(struct gdbarch *gdbarch, int double_bit)
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype frame_align)
void set_gdbarch_have_nonsteppable_watchpoint(struct gdbarch *gdbarch, int have_nonsteppable_watchpoint)
static struct value * or1k_frame_prev_register(struct frame_info *this_frame, void **prologue_cache, int regnum)
void set_gdbarch_float_format(struct gdbarch *gdbarch, const struct floatformat **float_format)
#define SYMTAB_COMPUNIT(symtab)
void set_gdbarch_ps_regnum(struct gdbarch *gdbarch, int ps_regnum)
void trad_frame_set_reg_addr(struct trad_frame_cache *this_trad_cache, int regnum, CORE_ADDR addr)
static int or1k_is_callee_saved_reg(unsigned int regnum)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
static const struct frame_unwind or1k_frame_unwind
void set_gdbarch_float_bit(struct gdbarch *gdbarch, int float_bit)
#define COMPUNIT_DEBUGFORMAT(cust)
CORE_ADDR get_frame_pc(struct frame_info *frame)
CORE_ADDR gdbarch_frame_align(struct gdbarch *gdbarch, CORE_ADDR address)
const struct floatformat * floatformats_ieee_double[BFD_ENDIAN_UNKNOWN]
struct target_desc * tdesc_or1k
void trad_frame_set_reg_realreg(struct trad_frame_cache *this_trad_cache, int regnum, int realreg)
void trad_frame_set_id(struct trad_frame_cache *this_trad_cache, struct frame_id this_id)
ULONGEST align_down(ULONGEST v, int n)
typedef BP_MANIPULATION(or1k_break_insn)
ULONGEST frame_unwind_register_unsigned(struct frame_info *frame, int regnum)
void set_gdbarch_short_bit(struct gdbarch *gdbarch, int short_bit)
CGEN_CPU_DESC gdb_cgen_cpu_desc
CORE_ADDR get_frame_sp(struct frame_info *this_frame)
void set_gdbarch_frame_red_zone_size(struct gdbarch *gdbarch, int frame_red_zone_size)
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
void set_gdbarch_deprecated_fp_regnum(struct gdbarch *gdbarch, int deprecated_fp_regnum)
CORE_ADDR skip_prologue_using_sal(struct gdbarch *gdbarch, CORE_ADDR func_addr)
struct reggroup *const restore_reggroup
struct reggroup *const all_reggroup
const struct bfd_arch_info * bfd_arch_info
void set_gdbarch_single_step_through_delay(struct gdbarch *gdbarch, gdbarch_single_step_through_delay_ftype single_step_through_delay)
#define bits(obj, st, fn)
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
static struct gdbarch * or1k_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
void tdesc_data_cleanup(void *data_untyped)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
struct regcache * get_current_regcache(void)
static struct frame_id or1k_dummy_id(struct gdbarch *gdbarch, struct frame_info *this_frame)
static bool or1k_analyse_inst(uint32_t inst, const char *format,...)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
#define host_address_to_string(ADDR)
int target_read_code(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
void gdbarch_register(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init, gdbarch_dump_tdep_ftype *dump_tdep)
static enum return_value_convention or1k_return_value(struct gdbarch *gdbarch, struct value *functype, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
void set_gdbarch_addr_bit(struct gdbarch *gdbarch, int addr_bit)
void memory_error(enum target_xfer_status err, CORE_ADDR memaddr)
void trad_frame_get_id(struct trad_frame_cache *this_trad_cache, struct frame_id *this_id)
struct reggroup *const float_reggroup
int tdesc_numbered_register(const struct tdesc_feature *feature, struct tdesc_arch_data *data, int regno, const char *name)
static CORE_ADDR or1k_unwind_pc(struct gdbarch *gdbarch, struct frame_info *next_frame)
#define OR1K_NUM_PSEUDO_REGS
static int or1k_is_arg_reg(unsigned int regnum)
struct type * check_typedef(struct type *type)
const gdb_byte * value_contents(struct value *value)
struct reggroup *const general_reggroup
#define OR1K_LAST_ARG_REGNUM
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
void fprintf_filtered(struct ui_file *stream, const char *format,...)
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
struct reggroup *const system_reggroup
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
void set_gdbarch_dummy_id(struct gdbarch *gdbarch, gdbarch_dummy_id_ftype dummy_id)
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
static CORE_ADDR or1k_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void _initialize_or1k_tdep(void)
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
void set_gdbarch_unwind_pc(struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype unwind_pc)
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
#define OR1K_FRAME_RED_ZONE_SIZE
struct trad_frame_cache * trad_frame_cache_zalloc(struct frame_info *this_frame)
void set_gdbarch_unwind_sp(struct gdbarch *gdbarch, gdbarch_unwind_sp_ftype unwind_sp)
void trad_frame_set_reg_value(struct trad_frame_cache *this_trad_cache, int regnum, LONGEST val)
static CORE_ADDR or1k_push_dummy_code(struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR function, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache)
static CORE_ADDR or1k_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
struct cmd_list_element * setdebuglist
void read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
struct reggroup *const vector_reggroup
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype breakpoint_kind_from_pc)
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
static void show_or1k_debug(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
struct frame_info * this_frame
static const char *const or1k_reg_names[OR1K_NUM_REGS]
static void initialize_tdesc_or1k(void)
const struct target_desc * target_desc
constexpr gdb_byte or1k_break_insn[]
const struct floatformat * floatformats_ieee_single[BFD_ENDIAN_UNKNOWN]
void set_gdbarch_push_dummy_code(struct gdbarch *gdbarch, gdbarch_push_dummy_code_ftype push_dummy_code)
void tdesc_use_registers(struct gdbarch *gdbarch, const struct target_desc *target_desc, struct tdesc_arch_data *early_data)
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
ULONGEST align_up(ULONGEST v, int n)
void set_gdbarch_char_signed(struct gdbarch *gdbarch, int char_signed)
static CORE_ADDR or1k_unwind_sp(struct gdbarch *gdbarch, struct frame_info *next_frame)
#define OR1K_FIRST_SAVED_REGNUM
static void or1k_dump_tdep(struct gdbarch *gdbarch, struct ui_file *file)
int frame_relative_level(struct frame_info *fi)
#define TYPE_CODE(thistype)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
void set_gdbarch_int_bit(struct gdbarch *gdbarch, int int_bit)
void add_setshow_boolean_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
#define TYPE_NFIELDS(thistype)
void set_gdbarch_num_pseudo_regs(struct gdbarch *gdbarch, int num_pseudo_regs)
static bool or1k_analyse_l_addi(uint32_t inst, unsigned int *rd_ptr, unsigned int *ra_ptr, int *simm_ptr)
void dwarf2_append_unwinders(struct gdbarch *gdbarch)
void trad_frame_set_this_base(struct trad_frame_cache *this_trad_cache, CORE_ADDR this_base)
void set_gdbarch_double_format(struct gdbarch *gdbarch, const struct floatformat **double_format)
struct tdesc_arch_data * tdesc_data_alloc(void)
static CORE_ADDR or1k_frame_align(struct gdbarch *gdbarch, CORE_ADDR sp)
void set_gdbarch_call_dummy_location(struct gdbarch *gdbarch, int call_dummy_location)
static ULONGEST or1k_fetch_instruction(struct gdbarch *gdbarch, CORE_ADDR addr)
#define OR1K_FIRST_ARG_REGNUM
unsigned long long ULONGEST
enum unwind_stop_reason default_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
static bool or1k_analyse_l_sw(uint32_t inst, int *simm_ptr, unsigned int *ra_ptr, unsigned int *rb_ptr)
const struct tdesc_feature * tdesc_find_feature(const struct target_desc *target_desc, const char *name)
void set_gdbarch_long_double_bit(struct gdbarch *gdbarch, int long_double_bit)
struct type * value_type(const struct value *value)
void set_gdbarch_long_bit(struct gdbarch *gdbarch, int long_bit)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype return_value)
struct cmd_list_element * showdebuglist
static struct trad_frame_cache * or1k_frame_cache(struct frame_info *this_frame, void **prologue_cache)
void set_gdbarch_long_double_format(struct gdbarch *gdbarch, const struct floatformat **long_double_format)
struct reggroup *const save_reggroup
#define TYPE_LENGTH(thistype)
void set_gdbarch_ptr_bit(struct gdbarch *gdbarch, int ptr_bit)
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype push_dummy_call)
void set_gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, gdbarch_sw_breakpoint_from_kind_ftype sw_breakpoint_from_kind)
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype skip_prologue)
static struct gdbarch_data * tdesc_data
CORE_ADDR value_address(const struct value *value)
enum bfd_endian byte_order
struct value * trad_frame_get_register(struct trad_frame_cache *this_trad_cache, struct frame_info *this_frame, int regnum)
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
int tdesc_has_registers(const struct target_desc *target_desc)
void error(const char *fmt,...)
struct gdbarch * gdbarch_alloc(const struct gdbarch_info *info, struct gdbarch_tdep *tdep)
void set_gdbarch_inner_than(struct gdbarch *gdbarch, gdbarch_inner_than_ftype inner_than)
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
static void or1k_frame_this_id(struct frame_info *this_frame, void **prologue_cache, struct frame_id *this_id)
void regcache_cooked_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)