GDBserver
linux-bfin-low.c
Go to the documentation of this file.
1 /* GNU/Linux/BFIN specific low level interface, for the remote server for GDB.
2 
3  Copyright (C) 2005-2018 Free Software Foundation, Inc.
4 
5  Contributed by Analog Devices, Inc.
6 
7  This file is part of GDB.
8 
9  This program is free software; you can redistribute it and/or modify
10  it under the terms of the GNU General Public License as published by
11  the Free Software Foundation; either version 3 of the License, or
12  (at your option) any later version.
13 
14  This program is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU General Public License for more details.
18 
19  You should have received a copy of the GNU General Public License
20  along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 
22 #include "server.h"
23 #include "linux-low.h"
24 #include <asm/ptrace.h>
25 
26 /* Defined in auto-generated file reg-bfin.c. */
27 void init_registers_bfin (void);
28 extern const struct target_desc *tdesc_bfin;
29 
30 static int bfin_regmap[] =
31 {
32  PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5, PT_R6, PT_R7,
33  PT_P0, PT_P1, PT_P2, PT_P3, PT_P4, PT_P5, PT_USP, PT_FP,
34  PT_I0, PT_I1, PT_I2, PT_I3, PT_M0, PT_M1, PT_M2, PT_M3,
35  PT_B0, PT_B1, PT_B2, PT_B3, PT_L0, PT_L1, PT_L2, PT_L3,
36  PT_A0X, PT_A0W, PT_A1X, PT_A1W, PT_ASTAT, PT_RETS,
37  PT_LC0, PT_LT0, PT_LB0, PT_LC1, PT_LT1, PT_LB1,
38  -1 /* PT_CYCLES */, -1 /* PT_CYCLES2 */,
39  -1 /* PT_USP */, PT_SEQSTAT, PT_SYSCFG, PT_PC, PT_RETX, PT_RETN, PT_RETE,
40  PT_PC,
41 };
42 
43 #define bfin_num_regs ARRAY_SIZE (bfin_regmap)
44 
45 static int
47 {
48  return (regno >= bfin_num_regs);
49 }
50 
51 static int
53 {
54  return (regno >= bfin_num_regs);
55 }
56 
57 #define bfin_breakpoint_len 2
58 static const gdb_byte bfin_breakpoint[bfin_breakpoint_len] = {0xa1, 0x00};
59 
60 /* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */
61 
62 static const gdb_byte *
63 bfin_sw_breakpoint_from_kind (int kind, int *size)
64 {
65  *size = bfin_breakpoint_len;
66  return bfin_breakpoint;
67 }
68 
69 static int
71 {
72  unsigned char insn[bfin_breakpoint_len];
73 
75  if (insn[0] == bfin_breakpoint[0]
76  && insn[1] == bfin_breakpoint[1])
77  return 1;
78 
79  /* If necessary, recognize more trap instructions here. GDB only uses the
80  one. */
81  return 0;
82 }
83 
84 static void
86 {
88 }
89 
90 /* Support for hardware single step. */
91 
92 static int
94 {
95  return 1;
96 }
97 
99  {
101  bfin_regmap,
102  };
103 
104 static struct regs_info regs_info =
105  {
106  NULL, /* regset_bitmap */
108  };
109 
110 static const struct regs_info *
112 {
113  return &regs_info;
114 }
115 
121  NULL, /* fetch_register */
124  NULL, /* breakpoint_kind_from_pc */
126  NULL, /* get_next_pcs */
127  2,
129  NULL, /* supports_z_point_type */
130  NULL, /* insert_point */
131  NULL, /* remove_point */
132  NULL, /* stopped_by_watchpoint */
133  NULL, /* stopped_data_address */
134  NULL, /* collect_ptrace_register */
135  NULL, /* supply_ptrace_register */
136  NULL, /* siginfo_fixup */
137  NULL, /* new_process */
138  NULL, /* delete_process */
139  NULL, /* new_thread */
140  NULL, /* delete_thread */
141  NULL, /* new_fork */
142  NULL, /* prepare_to_resume */
143  NULL, /* process_qsupported */
144  NULL, /* supports_tracepoints */
145  NULL, /* get_thread_area */
146  NULL, /* install_fast_tracepoint_jump_pad */
147  NULL, /* emit_ops */
148  NULL, /* get_min_fast_tracepoint_insn_len */
149  NULL, /* supports_range_stepping */
150  NULL, /* breakpoint_kind_from_current_state */
152 };
153 
154 
155 void
157 {
159 }
bfd_vma CORE_ADDR
Definition: common-types.h:41
struct linux_target_ops the_low_target
#define bfin_num_regs
static void bfin_arch_setup(void)
static const gdb_byte bfin_breakpoint[bfin_breakpoint_len]
const struct target_desc * tdesc
Definition: inferiors.h:67
static struct usrregs_info bfin_usrregs_info
CORE_ADDR linux_get_pc_32bit(struct regcache *regcache)
Definition: linux-low.c:7411
static int bfin_supports_hardware_single_step(void)
int read_inferior_memory(CORE_ADDR memaddr, unsigned char *myaddr, int len)
Definition: target.c:120
static int bfin_cannot_fetch_register(int regno)
struct process_info * current_process(void)
Definition: inferiors.c:210
const struct target_desc * tdesc_bfin
static const gdb_byte * bfin_sw_breakpoint_from_kind(int kind, int *size)
void linux_set_pc_32bit(struct regcache *regcache, CORE_ADDR pc)
Definition: linux-low.c:7400
bfd_byte gdb_byte
Definition: common-types.h:38
static int bfin_regmap[]
static const struct regs_info * bfin_regs_info(void)
static int bfin_breakpoint_at(CORE_ADDR where)
void init_registers_bfin(void)
void initialize_low_arch(void)
static int bfin_cannot_store_register(int regno)
static struct regs_info regs_info
#define bfin_breakpoint_len