OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-6.8/] [gdb/] [gdbserver/] [linux-cris-low.c] - Blame information for rev 855

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 24 jeremybenn
/* GNU/Linux/CRIS specific low level interface, for the remote server for GDB.
2
   Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3
   2007, 2008 Free Software Foundation, Inc.
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
9
   the Free Software Foundation; either version 3 of the License, or
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
18
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
 
20
#include "server.h"
21
#include "linux-low.h"
22
#include <sys/ptrace.h>
23
 
24
/* CRISv10 */
25
#define cris_num_regs 32
26
 
27
/* Locations need to match <include/asm/arch/ptrace.h>.  */
28
static int cris_regmap[] = {
29
  15*4, 14*4, 13*4, 12*4,
30
  11*4, 10*4, 9*4, 8*4,
31
  7*4, 6*4, 5*4, 4*4,
32
  3*4, 2*4, 23*4, 19*4,
33
 
34
  -1, -1, -1, -1,
35
  -1, 17*4, -1, 16*4,
36
  -1, -1, -1, 18*4,
37
  -1, 17*4, -1, -1
38
 
39
};
40
 
41
static int
42
cris_cannot_store_register (int regno)
43
{
44
  if (cris_regmap[regno] == -1)
45
    return 1;
46
 
47
  return (regno >= cris_num_regs);
48
}
49
 
50
static int
51
cris_cannot_fetch_register (int regno)
52
{
53
  if (cris_regmap[regno] == -1)
54
    return 1;
55
 
56
  return (regno >= cris_num_regs);
57
}
58
 
59
extern int debug_threads;
60
 
61
static CORE_ADDR
62
cris_get_pc (void)
63
{
64
  unsigned long pc;
65
  collect_register_by_name ("pc", &pc);
66
  if (debug_threads)
67
    fprintf (stderr, "stop pc is %08lx\n", pc);
68
  return pc;
69
}
70
 
71
static void
72
cris_set_pc (CORE_ADDR pc)
73
{
74
  unsigned long newpc = pc;
75
  supply_register_by_name ("pc", &newpc);
76
}
77
 
78
static const unsigned short cris_breakpoint = 0xe938;
79
#define cris_breakpoint_len 2
80
 
81
static int
82
cris_breakpoint_at (CORE_ADDR where)
83
{
84
  unsigned short insn;
85
 
86
  (*the_target->read_memory) (where, (unsigned char *) &insn,
87
                              cris_breakpoint_len);
88
  if (insn == cris_breakpoint)
89
    return 1;
90
 
91
  /* If necessary, recognize more trap instructions here.  GDB only uses the
92
     one.  */
93
  return 0;
94
}
95
 
96
/* We only place breakpoints in empty marker functions, and thread locking
97
   is outside of the function.  So rather than importing software single-step,
98
   we can just run until exit.  */
99
static CORE_ADDR
100
cris_reinsert_addr (void)
101
{
102
  unsigned long pc;
103
  collect_register_by_name ("srp", &pc);
104
  return pc;
105
}
106
 
107
struct linux_target_ops the_low_target = {
108
  cris_num_regs,
109
  cris_regmap,
110
  cris_cannot_fetch_register,
111
  cris_cannot_store_register,
112
  cris_get_pc,
113
  cris_set_pc,
114
  (const unsigned char *) &cris_breakpoint,
115
  cris_breakpoint_len,
116
  cris_reinsert_addr,
117
  0,
118
  cris_breakpoint_at,
119
  0,
120
  0,
121
  0,
122
  0,
123
};

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.