41 #include "gdb/sim-ft32.h"
43 #define RAM_BIAS 0x800000
80 static const unsigned char *
86 *lenptr =
sizeof (breakpoint);
95 "r0",
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
96 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15",
97 "r16",
"r17",
"r18",
"r19",
"r20",
"r21",
"r22",
"r23",
98 "r24",
"r25",
"r26",
"r27",
"r28",
"cc",
109 if (reg_nr >= FT32_NUM_REGS)
119 if (reg_nr == FT32_PC_REGNUM)
121 else if (reg_nr == FT32_SP_REGNUM || reg_nr == FT32_FP_REGNUM)
145 len - 4, byte_order);
156 #define IS_PUSH(inst) (((inst) & 0xfff00000) == 0x84000000)
157 #define PUSH_REG(inst) (FT32_R0_REGNUM + (((inst) >> 15) & 0x1f))
158 #define IS_LINK(inst) (((inst) & 0xffff0000) == 0x95d00000)
159 #define LINK_SIZE(inst) ((inst) & 0xffff)
164 struct gdbarch *gdbarch)
175 if (start_addr >= end_addr)
179 for (next_addr = start_addr; next_addr < end_addr; )
193 for (regnum = FT32_R0_REGNUM; regnum < FT32_PC_REGNUM; regnum++)
201 if (next_addr < end_addr)
207 for (regnum = FT32_R0_REGNUM; regnum < FT32_PC_REGNUM; regnum++)
228 const char *func_name;
237 if (post_prologue_pc != 0)
238 return max (pc, post_prologue_pc);
248 memset (&cache, 0,
sizeof cache);
251 func_end, &cache, gdbarch);
258 if (sal.
end && sal.
end < func_end)
309 bfd_byte *valbuf = dst;
340 if (writebuf != NULL)
356 for (i = 0; i < FT32_NUM_REGS; ++i)
378 if (cache->
base == 0)
394 for (i = 0; i < FT32_NUM_REGS; ++i)
414 void **this_prologue_cache,
struct frame_id *this_id)
417 this_prologue_cache);
420 if (cache->
base == 0)
428 static struct value *
430 void **this_prologue_cache,
int regnum)
433 this_prologue_cache);
437 if (regnum == FT32_SP_REGNUM && cache->
saved_sp)
473 ft32_frame_base_address
486 static struct gdbarch *
489 struct gdbarch *gdbarch;
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype frame_align)
ULONGEST extract_unsigned_integer(const gdb_byte *, int, enum bfd_endian)
void _initialize_ft32_tdep(void)
static void ft32_write_pc(struct regcache *regcache, CORE_ADDR val)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
static void ft32_frame_this_id(struct frame_info *this_frame, void **this_prologue_cache, struct frame_id *this_id)
struct type * builtin_func_ptr
CORE_ADDR get_frame_pc(struct frame_info *frame)
void gdbarch_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
struct gdbarch * get_regcache_arch(const struct regcache *regcache)
struct value * frame_unwind_got_memory(struct frame_info *frame, int regnum, CORE_ADDR addr)
static struct value * ft32_frame_prev_register(struct frame_info *this_frame, void **this_prologue_cache, int regnum)
void set_gdbarch_overlay_update(struct gdbarch *gdbarch, gdbarch_overlay_update_ftype overlay_update)
void set_gdbarch_write_pc(struct gdbarch *gdbarch, gdbarch_write_pc_ftype write_pc)
static CORE_ADDR ft32_frame_align(struct gdbarch *gdbarch, CORE_ADDR sp)
ULONGEST frame_unwind_register_unsigned(struct frame_info *frame, int regnum)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
static struct frame_id ft32_dummy_id(struct gdbarch *gdbarch, struct frame_info *this_frame)
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
CORE_ADDR skip_prologue_using_sal(struct gdbarch *gdbarch, CORE_ADDR func_addr)
static struct ft32_frame_cache * ft32_alloc_frame_cache(void)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
CORE_ADDR saved_regs[FT32_NUM_REGS]
struct type * builtin_int32
#define FRAME_OBSTACK_ZALLOC(TYPE)
void store_unsigned_integer(gdb_byte *, int, enum bfd_endian, ULONGEST)
struct value * frame_unwind_got_constant(struct frame_info *frame, int regnum, ULONGEST val)
static CORE_ADDR ft32_unwind_pc(struct gdbarch *gdbarch, struct frame_info *next_frame)
void frame_base_set_default(struct gdbarch *gdbarch, const struct frame_base *default_base)
void set_gdbarch_register_type(struct gdbarch *gdbarch, gdbarch_register_type_ftype register_type)
static CORE_ADDR ft32_unwind_sp(struct gdbarch *gdbarch, struct frame_info *next_frame)
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
static CORE_ADDR ft32_frame_base_address(struct frame_info *this_frame, void **this_cache)
void set_gdbarch_dummy_id(struct gdbarch *gdbarch, gdbarch_dummy_id_ftype dummy_id)
static enum return_value_convention ft32_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
static void ft32_extract_return_value(struct type *type, struct regcache *regcache, gdb_byte *dst)
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
static struct ft32_frame_cache * ft32_frame_cache(struct frame_info *this_frame, void **this_cache)
void set_gdbarch_unwind_pc(struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype unwind_pc)
void set_gdbarch_breakpoint_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_from_pc_ftype breakpoint_from_pc)
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
static struct gdbarch * ft32_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
static CORE_ADDR ft32_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
void set_gdbarch_read_pc(struct gdbarch *gdbarch, gdbarch_read_pc_ftype read_pc)
void simple_overlay_update(struct obj_section *osect)
void set_gdbarch_unwind_sp(struct gdbarch *gdbarch, gdbarch_unwind_sp_ftype unwind_sp)
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
static const unsigned char * ft32_breakpoint_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
struct value * frame_unwind_got_register(struct frame_info *frame, int regnum, int new_regnum)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
struct type * builtin_data_ptr
struct symbol * lookup_symbol(const char *name, const struct block *block, domain_enum domain, struct field_of_this_result *is_a_field_of_this)
static const char *const ft32_register_names[]
#define SYMBOL_LANGUAGE(symbol)
static CORE_ADDR ft32_analyze_prologue(CORE_ADDR start_addr, CORE_ADDR end_addr, struct ft32_frame_cache *cache, struct gdbarch *gdbarch)
static void ft32_store_return_value(struct type *type, struct regcache *regcache, const gdb_byte *valbuf)
unsigned long long ULONGEST
enum unwind_stop_reason default_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
static const char * ft32_register_name(struct gdbarch *gdbarch, int reg_nr)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype return_value)
#define TYPE_LENGTH(thistype)
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
void register_gdbarch_init(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init)
static struct type * ft32_register_type(struct gdbarch *gdbarch, int reg_nr)
static const struct frame_unwind ft32_frame_unwind
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype skip_prologue)
enum bfd_endian byte_order
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype register_name)
CORE_ADDR get_frame_func(struct frame_info *this_frame)
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 CORE_ADDR ft32_read_pc(struct regcache *regcache)
void set_gdbarch_print_insn(struct gdbarch *gdbarch, gdbarch_print_insn_ftype print_insn)
const ULONGEST const LONGEST len