36#include "gdbsupport/byte-vector.h"
90#define E_MAX_RETTYPE_SIZE(regnum) ((E_LST_ARG_REGNUM - (regnum) + 1) \
105 static const char *register_names[] = {
106 "r0",
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
107 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
112 return register_names[
regnum];
131 return (t->
code () != TYPE_CODE_STRUCT
132 && t->
code () != TYPE_CODE_UNION
133 && t->
code () != TYPE_CODE_ARRAY);
171 const gdb_byte *valbuf)
178 memcpy (buf, valbuf, 1);
194 gdb_byte *readbuf,
const gdb_byte *writebuf)
220 struct value *function,
222 CORE_ADDR bp_addr,
int nargs,
226 CORE_ADDR struct_addr)
229 CORE_ADDR stack_dest = sp;
232 int typelen, slacklen;
250 typelen = args[i]->enclosing_type ()->length ();
255 const gdb_byte *val = args[i]->contents ().data ();
271 for (j = nargs - 1; j >= i; j--)
273 const gdb_byte *bytes = args[j]->contents ().data ();
275 typelen = args[j]->enclosing_type ()->length ();
276 slacklen = typelen & 1;
277 gdb::byte_vector val (typelen + slacklen);
278 memcpy (val.data (), bytes, typelen);
279 memset (val.data () + typelen, 0, slacklen);
282 write_memory (stack_dest, val.data (), typelen + slacklen);
283 stack_dest += typelen + slacklen;
307 CORE_ADDR start_addr, CORE_ADDR end_addr,
313 ULONGEST inst, inst2;
321 if (start_addr >= end_addr)
324 for (next_addr = start_addr;
332 if (inst >= 0x0082 && inst <= 0x008d)
340 else if (inst == 0x301f || inst == 0x303f)
342 cache->
framesize += ((inst & 0x0030) >> 4) + 1;
346 else if ((inst & 0xff0f) == 0x510f)
348 cache->
framesize += (inst & 0x00f0) >> 4;
352 else if (inst == 0x314f && inst2 >= 0x0010)
358 else if (inst == 0x46fd)
365 else if ((inst & 0xff00) == 0x4600
366 && (inst & 0x00f0) >= 0x0020 && (inst & 0x00f0) <= 0x0070
367 && (inst & 0x000f) >= 0x000a && (inst & 0x000f) <= 0x000d)
374 else if ((inst & 0xfed8) == 0x72d8 && (inst & 0x0007) >= 2)
379 offset = (LONGEST) (inst2 & 0x0fff);
407 CORE_ADDR func_addr = 0, func_end = 0;
408 const char *func_name;
417 memset (&cache, 0,
sizeof cache);
431 if (sal.
end && sal.
end < func_end)
443 return (CORE_ADDR)
pc;
456 CORE_ADDR func_addr = 0, func_end = 0;
460 ULONGEST inst, inst2;
479 if (inst >= 0x009a && inst <= 0x009d)
481 if (inst == 0x305f || inst == 0x307f)
486 if (inst2 == 0x314f && inst >= 0x8000)
506xstormy16_resolve_jmp_table_entry (
struct gdbarch *
gdbarch, CORE_ADDR faddr)
513 LONGEST inst, inst2,
addr;
526 addr = inst2 << 8 | (inst & 0xff);
550 if (!strcmp (osect->the_bfd_section->name,
".plt"))
554 addr = osect->addr ();
559 LONGEST inst, inst2, faddr2;
570 faddr2 = inst2 << 8 | (inst & 0xff);
586 CORE_ADDR tmp = xstormy16_resolve_jmp_table_entry (
gdbarch, pc);
588 if (tmp && tmp != pc)
602 struct type *
type,
const gdb_byte *buf)
609 if (target == TYPE_CODE_FUNC || target == TYPE_CODE_METHOD)
611 CORE_ADDR addr2 = xstormy16_resolve_jmp_table_entry (
gdbarch, addr);
621 struct type *
type, gdb_byte *buf, CORE_ADDR addr)
626 if (target == TYPE_CODE_FUNC || target == TYPE_CODE_METHOD)
659 CORE_ADDR current_pc;
669 if (cache->
base == 0)
692 void **this_cache,
int regnum)
716 if (cache->
base == 0)
731 "xstormy16 prologue",
810 xstormy16_breakpoint::kind_from_pc);
812 xstormy16_breakpoint::bp_from_kind);
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)
static std::vector< const char * > arches
int core_addr_greaterthan(CORE_ADDR lhs, CORE_ADDR rhs)
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
#define BP_MANIPULATION(BREAK_INSN)
bool find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr, const struct block **block)
enum register_status raw_read(int regnum, gdb_byte *buf)
void raw_write(int regnum, const gdb_byte *buf)
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)
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 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)
struct value * frame_unwind_got_memory(frame_info_ptr frame, int regnum, CORE_ADDR addr)
struct value * frame_unwind_got_register(frame_info_ptr frame, int regnum, int new_regnum)
enum unwind_stop_reason default_frame_unwind_stop_reason(frame_info_ptr this_frame, void **this_cache)
struct value * frame_unwind_got_constant(frame_info_ptr frame, int regnum, ULONGEST val)
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)
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)
#define FRAME_OBSTACK_ZALLOC(TYPE)
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
void set_gdbarch_addr_bit(struct gdbarch *gdbarch, int addr_bit)
void set_gdbarch_address_to_pointer(struct gdbarch *gdbarch, gdbarch_address_to_pointer_ftype *address_to_pointer)
void set_gdbarch_char_signed(struct gdbarch *gdbarch, int char_signed)
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_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_wchar_bit(struct gdbarch *gdbarch, int wchar_bit)
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype *register_name)
void set_gdbarch_int_bit(struct gdbarch *gdbarch, int int_bit)
void set_gdbarch_skip_trampoline_code(struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype *skip_trampoline_code)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype *return_value)
void set_gdbarch_wchar_signed(struct gdbarch *gdbarch, int wchar_signed)
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)
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_float_bit(struct gdbarch *gdbarch, int float_bit)
void set_gdbarch_stack_frame_destroyed_p(struct gdbarch *gdbarch, gdbarch_stack_frame_destroyed_p_ftype *stack_frame_destroyed_p)
void set_gdbarch_short_bit(struct gdbarch *gdbarch, int short_bit)
void set_gdbarch_num_pseudo_regs(struct gdbarch *gdbarch, int num_pseudo_regs)
void set_gdbarch_dwarf2_addr_size(struct gdbarch *gdbarch, int dwarf2_addr_size)
void set_gdbarch_long_bit(struct gdbarch *gdbarch, int long_bit)
void set_gdbarch_ptr_bit(struct gdbarch *gdbarch, int ptr_bit)
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_pointer_to_address(struct gdbarch *gdbarch, gdbarch_pointer_to_address_ftype *pointer_to_address)
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype *push_dummy_call)
struct gdbarch * gdbarch_alloc(const struct gdbarch_info *info, gdbarch_tdep_up tdep)
function_call_return_method
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
struct obj_section * find_pc_section(CORE_ADDR pc)
void gdbarch_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
struct type * builtin_uint16
struct type * builtin_uint32
enum language language() const
CORE_ADDR endaddr() const
struct bfd_section * the_bfd_section
iterator_range< section_iterator > sections()
struct type * target_type() const
CORE_ADDR saved_regs[E_NUM_REGS]
struct block_symbol lookup_symbol(const char *name, const struct block *block, domain_enum domain, struct field_of_this_result *is_a_field_of_this)
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static const struct frame_unwind xstormy16_frame_unwind
static CORE_ADDR xstormy16_analyze_prologue(struct gdbarch *gdbarch, CORE_ADDR start_addr, CORE_ADDR end_addr, struct xstormy16_frame_cache *cache, frame_info_ptr this_frame)
static CORE_ADDR xstormy16_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 const char * xstormy16_register_name(struct gdbarch *gdbarch, int regnum)
static int xstormy16_stack_frame_destroyed_p(struct gdbarch *gdbarch, CORE_ADDR pc)
static struct xstormy16_frame_cache * xstormy16_alloc_frame_cache(void)
constexpr gdb_byte xstormy16_break_insn[]
static void xstormy16_extract_return_value(struct type *type, struct regcache *regcache, gdb_byte *valbuf)
void _initialize_xstormy16_tdep()
static int xstormy16_use_struct_convention(struct type *type)
@ E_MAX_RETTYPE_SIZE_IN_REGS
static void xstormy16_store_return_value(struct type *type, struct regcache *regcache, const gdb_byte *valbuf)
static CORE_ADDR xstormy16_frame_align(struct gdbarch *gdbarch, CORE_ADDR addr)
static CORE_ADDR xstormy16_skip_trampoline_code(frame_info_ptr frame, CORE_ADDR pc)
static CORE_ADDR xstormy16_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
static void xstormy16_address_to_pointer(struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr)
static CORE_ADDR xstormy16_frame_base_address(frame_info_ptr this_frame, void **this_cache)
static CORE_ADDR xstormy16_find_jmp_table_entry(struct gdbarch *gdbarch, CORE_ADDR faddr)
static struct type * xstormy16_register_type(struct gdbarch *gdbarch, int regnum)
static int xstormy16_type_is_scalar(struct type *t)
static enum return_value_convention xstormy16_return_value(struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
static struct value * xstormy16_frame_prev_register(frame_info_ptr this_frame, void **this_cache, int regnum)
static CORE_ADDR xstormy16_pointer_to_address(struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
static struct gdbarch * xstormy16_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
static const struct frame_base xstormy16_frame_base
static void xstormy16_frame_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
static struct xstormy16_frame_cache * xstormy16_frame_cache(frame_info_ptr this_frame, void **this_cache)
#define E_MAX_RETTYPE_SIZE(regnum)