X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbserver%2Flinux-bfin-low.c;h=1de2f78a624bd80ddce118b81f83af6c9dbaf332;hb=68ce205943e0821eacd8028881ced3607cc83c0d;hp=b6fe58a4c959f86d358b9b6921e12a51f38e982a;hpb=1faeff088bbbd037d7769d214378b4faf805fa2e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbserver/linux-bfin-low.c b/gdb/gdbserver/linux-bfin-low.c index b6fe58a4c9..1de2f78a62 100644 --- a/gdb/gdbserver/linux-bfin-low.c +++ b/gdb/gdbserver/linux-bfin-low.c @@ -1,6 +1,6 @@ /* GNU/Linux/BFIN specific low level interface, for the remote server for GDB. - Copyright (C) 2005-2012 Free Software Foundation, Inc. + Copyright (C) 2005-2015 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. @@ -21,11 +21,11 @@ #include "server.h" #include "linux-low.h" -#include "libiberty.h" #include /* Defined in auto-generated file reg-bfin.c. */ void init_registers_bfin (void); +extern const struct target_desc *tdesc_bfin; static int bfin_regmap[] = { @@ -73,7 +73,16 @@ bfin_set_pc (struct regcache *regcache, CORE_ADDR pc) } #define bfin_breakpoint_len 2 -static const unsigned char bfin_breakpoint[bfin_breakpoint_len] = {0xa1, 0x00}; +static const gdb_byte bfin_breakpoint[bfin_breakpoint_len] = {0xa1, 0x00}; + +/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ + +static const gdb_byte * +bfin_sw_breakpoint_from_kind (int kind, int *size) +{ + *size = bfin_breakpoint_len; + return bfin_breakpoint; +} static int bfin_breakpoint_at (CORE_ADDR where) @@ -90,18 +99,77 @@ bfin_breakpoint_at (CORE_ADDR where) return 0; } +static void +bfin_arch_setup (void) +{ + current_process ()->tdesc = tdesc_bfin; +} + +/* Support for hardware single step. */ + +static int +bfin_supports_hardware_single_step (void) +{ + return 1; +} + +static struct usrregs_info bfin_usrregs_info = + { + bfin_num_regs, + bfin_regmap, + }; + +static struct regs_info regs_info = + { + NULL, /* regset_bitmap */ + &bfin_usrregs_info, + }; + +static const struct regs_info * +bfin_regs_info (void) +{ + return ®s_info; +} + struct linux_target_ops the_low_target = { - init_registers_bfin, - bfin_num_regs, - bfin_regmap, - NULL, + bfin_arch_setup, + bfin_regs_info, bfin_cannot_fetch_register, bfin_cannot_store_register, + NULL, /* fetch_register */ bfin_get_pc, bfin_set_pc, - bfin_breakpoint, - bfin_breakpoint_len, - 0, + NULL, /* breakpoint_kind_from_pc */ + bfin_sw_breakpoint_from_kind, + NULL, /* get_next_pcs */ 2, bfin_breakpoint_at, + NULL, /* supports_z_point_type */ + NULL, /* insert_point */ + NULL, /* remove_point */ + NULL, /* stopped_by_watchpoint */ + NULL, /* stopped_data_address */ + NULL, /* collect_ptrace_register */ + NULL, /* supply_ptrace_register */ + NULL, /* siginfo_fixup */ + NULL, /* new_process */ + NULL, /* new_thread */ + NULL, /* new_fork */ + NULL, /* prepare_to_resume */ + NULL, /* process_qsupported */ + NULL, /* supports_tracepoints */ + NULL, /* get_thread_area */ + NULL, /* install_fast_tracepoint_jump_pad */ + NULL, /* emit_ops */ + NULL, /* get_min_fast_tracepoint_insn_len */ + NULL, /* supports_range_stepping */ + NULL, /* breakpoint_kind_from_current_state */ + bfin_supports_hardware_single_step, }; + + +void +initialize_low_arch (void) +{ + init_registers_bfin (); +}