X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdbserver%2Flinux-crisv32-low.cc;h=4d5edc570e55fed02925c6eabc51323a2cad08c9;hb=9db9aa232ac37e4dca92733678748adc1bfc7ef0;hp=828ac111d1067c9874731c8ecded348211d9795a;hpb=bd70b1f240b24d8c9b08868ca777f5a81d13c0c2;p=deliverable%2Fbinutils-gdb.git diff --git a/gdbserver/linux-crisv32-low.cc b/gdbserver/linux-crisv32-low.cc index 828ac111d1..4d5edc570e 100644 --- a/gdbserver/linux-crisv32-low.cc +++ b/gdbserver/linux-crisv32-low.cc @@ -28,6 +28,10 @@ public: const regs_info *get_regs_info () override; + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + bool supports_z_point_type (char z_type) override; + protected: void low_arch_setup () override; @@ -35,6 +39,20 @@ protected: bool low_cannot_fetch_register (int regno) override; bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; + + int low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; }; /* The singleton target ops object. */ @@ -55,6 +73,24 @@ crisv32_target::low_cannot_store_register (int regno) "is not implemented by the target"); } +bool +crisv32_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +crisv32_target::low_get_pc (regcache *regcache) +{ + return linux_get_pc_32bit (regcache); +} + +void +crisv32_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + linux_set_pc_32bit (regcache, pc); +} + /* Defined in auto-generated file reg-crisv32.c. */ void init_registers_crisv32 (void); extern const struct target_desc *tdesc_crisv32; @@ -93,28 +129,27 @@ static int cris_regmap[] = { static const unsigned short cris_breakpoint = 0xe938; #define cris_breakpoint_len 2 -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ +/* Implementation of target ops method "sw_breakpoint_from_kind". */ -static const gdb_byte * -cris_sw_breakpoint_from_kind (int kind, int *size) +const gdb_byte * +crisv32_target::sw_breakpoint_from_kind (int kind, int *size) { *size = cris_breakpoint_len; return (const gdb_byte *) &cris_breakpoint; } -static int -cris_breakpoint_at (CORE_ADDR where) +bool +crisv32_target::low_breakpoint_at (CORE_ADDR where) { unsigned short insn; - the_target->read_memory (where, (unsigned char *) &insn, - cris_breakpoint_len); + read_memory (where, (unsigned char *) &insn, cris_breakpoint_len); if (insn == cris_breakpoint) - return 1; + return true; /* If necessary, recognize more trap instructions here. GDB only uses the one. */ - return 0; + return false; } static void @@ -150,23 +185,23 @@ cris_write_data_breakpoint (struct regcache *regcache, } } -static int -cris_supports_z_point_type (char z_type) +bool +crisv32_target::supports_z_point_type (char z_type) { switch (z_type) { case Z_PACKET_WRITE_WP: case Z_PACKET_READ_WP: case Z_PACKET_ACCESS_WP: - return 1; + return true; default: - return 0; + return false; } } -static int -cris_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int len, struct raw_breakpoint *bp) +int +crisv32_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int len, raw_breakpoint *bp) { int bp; unsigned long bp_ctrl; @@ -237,9 +272,9 @@ cris_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, return 0; } -static int -cris_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, int len, - struct raw_breakpoint *bp) +int +crisv32_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int len, raw_breakpoint *bp) { int bp; unsigned long bp_ctrl; @@ -429,16 +464,6 @@ crisv32_target::get_regs_info () } struct linux_target_ops the_low_target = { - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_kind_from_pc */ - cris_sw_breakpoint_from_kind, - NULL, /* get_next_pcs */ - 0, - cris_breakpoint_at, - cris_supports_z_point_type, - cris_insert_point, - cris_remove_point, cris_stopped_by_watchpoint, cris_stopped_data_address, NULL, /* collect_ptrace_register */ @@ -457,7 +482,6 @@ struct linux_target_ops the_low_target = { NULL, /* emit_ops */ NULL, /* get_min_fast_tracepoint_insn_len */ NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ cris_supports_hardware_single_step, };