Don't check assertions until symbols are finalized. Create an output
[deliverable/binutils-gdb.git] / gdb / gdbserver / linux-cris-low.c
CommitLineData
45b134e5 1/* GNU/Linux/CRIS specific low level interface, for the remote server for GDB.
6aba47ca 2 Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
9b254dd1 3 2007, 2008 Free Software Foundation, Inc.
45b134e5
OF
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
45b134e5
OF
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
45b134e5
OF
19
20#include "server.h"
21#include "linux-low.h"
22#include <sys/ptrace.h>
23
d05b4ac3
UW
24/* Defined in auto-generated file reg-cris.c. */
25void init_registers_cris (void);
26
45b134e5
OF
27/* CRISv10 */
28#define cris_num_regs 32
29
30/* Locations need to match <include/asm/arch/ptrace.h>. */
31static int cris_regmap[] = {
32 15*4, 14*4, 13*4, 12*4,
33 11*4, 10*4, 9*4, 8*4,
34 7*4, 6*4, 5*4, 4*4,
35 3*4, 2*4, 23*4, 19*4,
36
37 -1, -1, -1, -1,
38 -1, 17*4, -1, 16*4,
39 -1, -1, -1, 18*4,
40 -1, 17*4, -1, -1
41
42};
43
44static int
45cris_cannot_store_register (int regno)
46{
47 if (cris_regmap[regno] == -1)
48 return 1;
49
50 return (regno >= cris_num_regs);
51}
52
53static int
54cris_cannot_fetch_register (int regno)
55{
56 if (cris_regmap[regno] == -1)
57 return 1;
58
59 return (regno >= cris_num_regs);
60}
61
62extern int debug_threads;
63
64static CORE_ADDR
65cris_get_pc (void)
66{
67 unsigned long pc;
68 collect_register_by_name ("pc", &pc);
69 if (debug_threads)
70 fprintf (stderr, "stop pc is %08lx\n", pc);
71 return pc;
72}
73
74static void
75cris_set_pc (CORE_ADDR pc)
76{
77 unsigned long newpc = pc;
78 supply_register_by_name ("pc", &newpc);
79}
80
81static const unsigned short cris_breakpoint = 0xe938;
82#define cris_breakpoint_len 2
83
84static int
85cris_breakpoint_at (CORE_ADDR where)
86{
87 unsigned short insn;
88
f450004a
DJ
89 (*the_target->read_memory) (where, (unsigned char *) &insn,
90 cris_breakpoint_len);
45b134e5
OF
91 if (insn == cris_breakpoint)
92 return 1;
93
94 /* If necessary, recognize more trap instructions here. GDB only uses the
95 one. */
96 return 0;
97}
98
99/* We only place breakpoints in empty marker functions, and thread locking
100 is outside of the function. So rather than importing software single-step,
101 we can just run until exit. */
102static CORE_ADDR
103cris_reinsert_addr (void)
104{
105 unsigned long pc;
106 collect_register_by_name ("srp", &pc);
107 return pc;
108}
109
110struct linux_target_ops the_low_target = {
d05b4ac3 111 init_registers_cris,
45b134e5
OF
112 cris_num_regs,
113 cris_regmap,
114 cris_cannot_fetch_register,
115 cris_cannot_store_register,
116 cris_get_pc,
117 cris_set_pc,
f450004a 118 (const unsigned char *) &cris_breakpoint,
45b134e5
OF
119 cris_breakpoint_len,
120 cris_reinsert_addr,
121 0,
122 cris_breakpoint_at,
123 0,
124 0,
125 0,
126 0,
127};
This page took 0.180631 seconds and 4 git commands to generate.