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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [gdb/] [gdbserver/] [linux-m32r-low.c] - Blame information for rev 330

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* GNU/Linux/m32r specific low level interface, for the remote server for GDB.
2
   Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
3
 
4
   This file is part of GDB.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 3 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18
 
19
#include "server.h"
20
#include "linux-low.h"
21
 
22
#ifdef HAVE_SYS_REG_H
23
#include <sys/reg.h>
24
#endif
25
 
26
/* Defined in auto-generated file reg-m32r.c.  */
27
void init_registers_m32r (void);
28
 
29
#define m32r_num_regs 25
30
 
31
static int m32r_regmap[] = {
32
#ifdef PT_R0
33
  PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5, PT_R6, PT_R7,
34
  PT_R8, PT_R9, PT_R10, PT_R11, PT_R12, PT_FP, PT_LR, PT_SPU,
35
  PT_PSW, PT_CBR, PT_SPI, PT_SPU, PT_BPC, PT_PC, PT_ACCL, PT_ACCH, PT_EVB
36
#else
37
  4 * 4, 4 * 5, 4 * 6, 4 * 7, 4 * 0, 4 * 1, 4 * 2, 4 * 8,
38
  4 * 9, 4 * 10, 4 * 11, 4 * 12, 4 * 13, 4 * 24, 4 * 25, 4 * 23,
39
  4 * 19, 4 * 31, 4 * 26, 4 * 23, 4 * 20, 4 * 30, 4 * 16, 4 * 15, 4 * 32
40
#endif
41
};
42
 
43
static int
44
m32r_cannot_store_register (int regno)
45
{
46
  return (regno >= m32r_num_regs);
47
}
48
 
49
static int
50
m32r_cannot_fetch_register (int regno)
51
{
52
  return (regno >= m32r_num_regs);
53
}
54
 
55
static CORE_ADDR
56
m32r_get_pc (struct regcache *regcache)
57
{
58
  unsigned long pc;
59
  collect_register_by_name (regcache, "pc", &pc);
60
  if (debug_threads)
61
    fprintf (stderr, "stop pc is %08lx\n", pc);
62
  return pc;
63
}
64
 
65
static void
66
m32r_set_pc (struct regcache *regcache, CORE_ADDR pc)
67
{
68
  unsigned long newpc = pc;
69
  supply_register_by_name (regcache, "pc", &newpc);
70
}
71
 
72
static const unsigned short m32r_breakpoint = 0x10f1;
73
#define m32r_breakpoint_len 2
74
 
75
static int
76
m32r_breakpoint_at (CORE_ADDR where)
77
{
78
  unsigned short insn;
79
 
80
  (*the_target->read_memory) (where, (unsigned char *) &insn,
81
                              m32r_breakpoint_len);
82
  if (insn == m32r_breakpoint)
83
    return 1;
84
 
85
  /* If necessary, recognize more trap instructions here.  GDB only uses the
86
     one.  */
87
  return 0;
88
}
89
 
90
struct linux_target_ops the_low_target = {
91
  init_registers_m32r,
92
  m32r_num_regs,
93
  m32r_regmap,
94
  m32r_cannot_fetch_register,
95
  m32r_cannot_store_register,
96
  m32r_get_pc,
97
  m32r_set_pc,
98
  (const unsigned char *) &m32r_breakpoint,
99
  m32r_breakpoint_len,
100
  NULL,
101
  0,
102
  m32r_breakpoint_at,
103
};

powered by: WebSVN 2.1.0

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