gem5  v19.0.0.0
remote_gdb.cc
Go to the documentation of this file.
1 /*
2  * Copyright 2014 Google, Inc.
3  * Copyright (c) 2002-2005 The Regents of The University of Michigan
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met: redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer;
10  * redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution;
13  * neither the name of the copyright holders nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  *
29  * Authors: Nathan Binkert
30  */
31 
32 /*
33  * Copyright (c) 1990, 1993 The Regents of the University of California
34  * All rights reserved.
35  *
36  * This software was developed by the Computer Systems Engineering group
37  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
38  * contributed to Berkeley.
39  *
40  * All advertising materials mentioning features or use of this software
41  * must display the following acknowledgement:
42  * This product includes software developed by the University of
43  * California, Lawrence Berkeley Laboratories.
44  *
45  * Redistribution and use in source and binary forms, with or without
46  * modification, are permitted provided that the following conditions
47  * are met:
48  * 1. Redistributions of source code must retain the above copyright
49  * notice, this list of conditions and the following disclaimer.
50  * 2. Redistributions in binary form must reproduce the above copyright
51  * notice, this list of conditions and the following disclaimer in the
52  * documentation and/or other materials provided with the distribution.
53  * 3. All advertising materials mentioning features or use of this software
54  * must display the following acknowledgement:
55  * This product includes software developed by the University of
56  * California, Berkeley and its contributors.
57  * 4. Neither the name of the University nor the names of its contributors
58  * may be used to endorse or promote products derived from this software
59  * without specific prior written permission.
60  *
61  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
62  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
63  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
64  * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
65  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
66  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
67  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
68  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
69  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
70  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
71  * SUCH DAMAGE.
72  *
73  * @(#)kgdb_stub.c 8.4 (Berkeley) 1/12/94
74  */
75 
76 /*-
77  * Copyright (c) 2001 The NetBSD Foundation, Inc.
78  * All rights reserved.
79  *
80  * This code is derived from software contributed to The NetBSD Foundation
81  * by Jason R. Thorpe.
82  *
83  * Redistribution and use in source and binary forms, with or without
84  * modification, are permitted provided that the following conditions
85  * are met:
86  * 1. Redistributions of source code must retain the above copyright
87  * notice, this list of conditions and the following disclaimer.
88  * 2. Redistributions in binary form must reproduce the above copyright
89  * notice, this list of conditions and the following disclaimer in the
90  * documentation and/or other materials provided with the distribution.
91  * 3. All advertising materials mentioning features or use of this software
92  * must display the following acknowledgement:
93  * This product includes software developed by the NetBSD
94  * Foundation, Inc. and its contributors.
95  * 4. Neither the name of The NetBSD Foundation nor the names of its
96  * contributors may be used to endorse or promote products derived
97  * from this software without specific prior written permission.
98  *
99  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
100  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
101  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
102  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
103  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
104  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
105  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
106  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
107  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
108  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
109  * POSSIBILITY OF SUCH DAMAGE.
110  */
111 
112 /*
113  * $NetBSD: kgdb_stub.c,v 1.8 2001/07/07 22:58:00 wdk Exp $
114  *
115  * Taken from NetBSD
116  *
117  * "Stub" to allow remote cpu to debug over a serial line using gdb.
118  */
119 
120 #include "arch/alpha/remote_gdb.hh"
121 
122 #include <sys/signal.h>
123 #include <unistd.h>
124 
125 #include <string>
126 
127 #include "arch/alpha/decoder.hh"
128 #include "arch/alpha/regredir.hh"
129 #include "arch/alpha/utility.hh"
130 #include "arch/alpha/vtophys.hh"
131 #include "base/intmath.hh"
132 #include "base/remote_gdb.hh"
133 #include "base/socket.hh"
134 #include "base/trace.hh"
135 #include "cpu/static_inst.hh"
136 #include "cpu/thread_context.hh"
137 #include "debug/GDBAcc.hh"
138 #include "debug/GDBMisc.hh"
139 #include "mem/physical.hh"
140 #include "mem/port.hh"
141 #include "sim/full_system.hh"
142 #include "sim/system.hh"
143 
144 using namespace std;
145 using namespace AlphaISA;
146 
147 RemoteGDB::RemoteGDB(System *_system, ThreadContext *tc, int _port)
148  : BaseRemoteGDB(_system, tc, _port)
149 {
150  warn_once("Breakpoints do not work in Alpha PAL mode.\n"
151  " See PCEventQueue::doService() in cpu/pc_event.cc.\n");
152 }
153 
154 /*
155  * Determine if the mapping at va..(va+len) is valid.
156  */
157 bool
159 {
160  if (!FullSystem)
161  panic("acc function needs to be rewritten for SE mode\n");
162 
163  Addr last_va;
164 
165  va = TruncPage(va);
166  last_va = RoundPage(va + len);
167 
168  do {
169  if (IsK0Seg(va)) {
170  if (va < (K0SegBase + system()->memSize())) {
171  DPRINTF(GDBAcc, "acc: Mapping is valid K0SEG <= "
172  "%#x < K0SEG + size\n", va);
173  return true;
174  } else {
175  DPRINTF(GDBAcc, "acc: Mapping invalid %#x "
176  "> K0SEG + size\n", va);
177  return false;
178  }
179  }
180 
189  if (PcPAL(va) || va < 0x10000)
190  return true;
191 
193  PageTableEntry pte =
194  kernel_pte_lookup(context()->getPhysProxy(), ptbr, va);
195  if (!pte.valid()) {
196  DPRINTF(GDBAcc, "acc: %#x pte is invalid\n", va);
197  return false;
198  }
199  va += PageBytes;
200  } while (va < last_va);
201 
202  DPRINTF(GDBAcc, "acc: %#x mapping is valid\n", va);
203  return true;
204 }
205 
206 void
208 {
209  DPRINTF(GDBAcc, "getRegs in remotegdb \n");
210 
211  r.pc = context->pcState().pc();
212 
213  if (PcPAL(r.pc)) {
214  for (int i = 0; i < 32; ++i)
215  r.gpr[i] = context->readIntReg(reg_redir[i]);
216  } else {
217  for (int i = 0; i < 32; ++i)
218  r.gpr[i] = context->readIntReg(i);
219  }
220 
221  for (int i = 0; i < 32; ++i)
222 #ifdef KGDB_FP_REGS
223  r.fpr[i] = context->readFloatReg(i);
224 #else
225  r.fpr[i] = 0;
226 #endif
227 }
228 
229 void
231 {
232  DPRINTF(GDBAcc, "setRegs in remotegdb \n");
233 
234  if (PcPAL(r.pc)) {
235  for (int i = 0; i < 32; ++i) {
236  context->setIntReg(reg_redir[i], r.gpr[i]);
237  }
238  } else {
239  for (int i = 0; i < 32; ++i) {
240  context->setIntReg(i, r.gpr[i]);
241  }
242  }
243 
244 #ifdef KGDB_FP_REGS
245  for (int i = 0; i < NumFloatArchRegs; ++i) {
246  context->setFloatReg(i, gdbregs.regs64[i + KGDB_REG_F0]);
247  }
248 #endif
249  context->pcState(r.pc);
250 }
251 
252 
255 {
256  return new AlphaGdbRegCache(this);
257 }
258 
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:167
#define DPRINTF(x,...)
Definition: trace.hh:229
bool PcPAL(Addr addr)
Definition: utility.hh:62
Bitfield< 7 > i
virtual TheISA::PCState pcState() const =0
virtual RegVal readIntReg(RegIndex reg_idx) const =0
const int reg_redir[NumIntRegs]
Definition: regredir.cc:37
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
Definition: root.cc:136
Definition: system.hh:77
Overload hash function for BasicBlockRange type.
Definition: vec_reg.hh:586
virtual void setFloatReg(RegIndex reg_idx, RegVal val)=0
ThreadContext is the external interface to all thread state for anything outside of the CPU...
const int NumFloatArchRegs
Definition: registers.hh:91
virtual RegVal readFloatReg(RegIndex reg_idx) const =0
Concrete subclasses of this abstract class represent how the register values are transmitted on the w...
Definition: remote_gdb.hh:73
Bitfield< 18, 16 > len
void getRegs(ThreadContext *)
Fill the raw buffer from the registers in the ThreadContext.
Definition: remote_gdb.cc:207
Port Object Declaration.
PageTableEntry kernel_pte_lookup(PortProxy &mem, Addr ptbr, VAddr vaddr)
Definition: vtophys.cc:49
virtual void setIntReg(RegIndex reg_idx, RegVal val)=0
Addr TruncPage(Addr addr)
Definition: utility.hh:82
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
Bitfield< 8 > va
#define warn_once(...)
Definition: logging.hh:216
const Addr PageBytes
Definition: isa_traits.hh:47
ThreadContext * context()
Definition: remote_gdb.hh:287
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
bool IsK0Seg(Addr a)
Definition: utility.hh:75
BaseGdbRegCache * gdbRegs() override
Definition: remote_gdb.cc:254
bool acc(Addr addr, size_t len) override
Definition: remote_gdb.cc:158
Addr RoundPage(Addr addr)
Definition: utility.hh:86
void setRegs(ThreadContext *) const
Set the ThreadContext&#39;s registers from the values in the raw buffer.
Definition: remote_gdb.cc:230
System * system()
Definition: remote_gdb.hh:288
const Addr K0SegBase
Definition: isa_traits.hh:66

Generated on Fri Feb 28 2020 16:26:56 for gem5 by doxygen 1.8.13