gem5  v22.1.0.0
remote_gdb.cc
Go to the documentation of this file.
1 /*
2  * Copyright 2015 LabWare
3  * Copyright 2014 Google, Inc.
4  * Copyright (c) 2002-2005 The Regents of The University of Michigan
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are
9  * met: redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer;
11  * redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the distribution;
14  * neither the name of the copyright holders nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 /*
32  * Copyright (c) 1990, 1993 The Regents of the University of California
33  * All rights reserved
34  *
35  * This software was developed by the Computer Systems Engineering group
36  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
37  * contributed to Berkeley.
38  *
39  * All advertising materials mentioning features or use of this software
40  * must display the following acknowledgement:
41  * This product includes software developed by the University of
42  * California, Lawrence Berkeley Laboratories.
43  *
44  * Redistribution and use in source and binary forms, with or without
45  * modification, are permitted provided that the following conditions
46  * are met:
47  * 1. Redistributions of source code must retain the above copyright
48  * notice, this list of conditions and the following disclaimer.
49  * 2. Redistributions in binary form must reproduce the above copyright
50  * notice, this list of conditions and the following disclaimer in the
51  * documentation and/or other materials provided with the distribution.
52  * 3. All advertising materials mentioning features or use of this software
53  * must display the following acknowledgement:
54  * This product includes software developed by the University of
55  * California, Berkeley and its contributors.
56  * 4. Neither the name of the University nor the names of its contributors
57  * may be used to endorse or promote products derived from this software
58  * without specific prior written permission.
59  *
60  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
61  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
62  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
63  * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
64  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
65  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
66  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
67  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
68  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
69  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
70  * SUCH DAMAGE.
71  *
72  * @(#)kgdb_stub.c 8.4 (Berkeley) 1/12/94
73  */
74 
75 /*-
76  * Copyright (c) 2001 The NetBSD Foundation, Inc.
77  * All rights reserved.
78  *
79  * This code is derived from software contributed to The NetBSD Foundation
80  * by Jason R. Thorpe.
81  *
82  * Redistribution and use in source and binary forms, with or without
83  * modification, are permitted provided that the following conditions
84  * are met:
85  * 1. Redistributions of source code must retain the above copyright
86  * notice, this list of conditions and the following disclaimer.
87  * 2. Redistributions in binary form must reproduce the above copyright
88  * notice, this list of conditions and the following disclaimer in the
89  * documentation and/or other materials provided with the distribution.
90  * 3. All advertising materials mentioning features or use of this software
91  * must display the following acknowledgement:
92  * This product includes software developed by the NetBSD
93  * Foundation, Inc. and its contributors.
94  * 4. Neither the name of The NetBSD Foundation nor the names of its
95  * contributors may be used to endorse or promote products derived
96  * from this software without specific prior written permission.
97  *
98  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
99  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
100  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
101  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
102  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
103  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
104  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
105  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
106  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
107  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
108  * POSSIBILITY OF SUCH DAMAGE.
109  */
110 
111 /*
112  * $NetBSD: kgdb_stub.c,v 1.8 2001/07/07 22:58:00 wdk Exp $
113  *
114  * Taken from NetBSD
115  *
116  * "Stub" to allow remote cpu to debug over a serial line using gdb.
117  */
118 
119 #include "arch/sparc/remote_gdb.hh"
120 
121 #include <sys/signal.h>
122 #include <unistd.h>
123 
124 #include <csignal>
125 #include <string>
126 
127 #include "arch/sparc/regs/int.hh"
128 #include "arch/sparc/regs/misc.hh"
129 #include "arch/sparc/types.hh"
130 #include "base/intmath.hh"
131 #include "base/remote_gdb.hh"
132 #include "base/socket.hh"
133 #include "base/trace.hh"
134 #include "cpu/static_inst.hh"
135 #include "cpu/thread_context.hh"
136 #include "debug/GDBAcc.hh"
137 #include "debug/GDBRead.hh"
138 #include "mem/page_table.hh"
139 #include "mem/physical.hh"
140 #include "mem/port.hh"
141 #include "sim/byteswap.hh"
142 #include "sim/full_system.hh"
143 #include "sim/process.hh"
144 #include "sim/system.hh"
145 
146 namespace gem5
147 {
148 
149 using namespace SparcISA;
150 
151 RemoteGDB::RemoteGDB(System *_system, int _port)
152  : BaseRemoteGDB(_system, _port), regCache32(this), regCache64(this)
153 {}
154 
156 // RemoteGDB::acc
157 //
158 // Determine if the mapping at va..(va+len) is valid.
159 //
160 bool
161 RemoteGDB::acc(Addr va, size_t len)
162 {
163  //@Todo In NetBSD, this function checks if all addresses
164  // from va to va + len have valid page map entries. Not
165  // sure how this will work for other OSes or in general.
166  if (FullSystem) {
167  return va != 0;
168  } else {
169  // Check to make sure the first byte is mapped into the processes
170  // address space.
171  return context()->getProcessPtr()->pTable->lookup(va) != nullptr;
172  }
173 }
174 
175 void
176 RemoteGDB::SPARCGdbRegCache::getRegs(ThreadContext *context)
177 {
178  DPRINTF(GDBAcc, "getRegs in remotegdb \n");
179  for (int i = 0; i < 32; i++)
180  r.gpr[i] = htobe((uint32_t)context->getReg(intRegClass[i]));
181  auto &pc = context->pcState().as<SparcISA::PCState>();
182  r.pc = htobe((uint32_t)pc.pc());
183  r.npc = htobe((uint32_t)pc.npc());
184  r.y = htobe((uint32_t)context->getReg(int_reg::Y));
185  PSTATE pstate = context->readMiscReg(MISCREG_PSTATE);
186  r.psr = htobe((uint32_t)pstate);
187  r.fsr = htobe((uint32_t)context->readMiscReg(MISCREG_FSR));
188  r.csr = htobe((uint32_t)context->getReg(int_reg::Ccr));
189 }
190 
191 void
192 RemoteGDB::SPARC64GdbRegCache::getRegs(ThreadContext *context)
193 {
194  DPRINTF(GDBAcc, "getRegs in remotegdb \n");
195  for (int i = 0; i < 32; i++)
196  r.gpr[i] = htobe(context->getReg(intRegClass[i]));
197  for (int i = 0; i < 32; i++)
198  r.fpr[i] = 0;
199  auto &pc = context->pcState().as<SparcISA::PCState>();
200  r.pc = htobe(pc.pc());
201  r.npc = htobe(pc.npc());
202  r.fsr = htobe(context->readMiscReg(MISCREG_FSR));
203  r.fprs = htobe(context->readMiscReg(MISCREG_FPRS));
204  r.y = htobe(context->getReg(int_reg::Y));
205  PSTATE pstate = context->readMiscReg(MISCREG_PSTATE);
206  r.state = htobe(
207  context->readMiscReg(MISCREG_CWP) |
208  pstate << 8 |
209  context->readMiscReg(MISCREG_ASI) << 24 |
210  context->getReg(int_reg::Ccr) << 32);
211 }
212 
213 void
214 RemoteGDB::SPARCGdbRegCache::setRegs(ThreadContext *context) const
215 {
216  for (int i = 0; i < 32; i++)
217  context->setReg(intRegClass[i], r.gpr[i]);
218  PCState pc;
219  pc.pc(r.pc);
220  pc.npc(r.npc);
221  pc.nnpc(pc.npc() + sizeof(MachInst));
222  pc.upc(0);
223  pc.nupc(1);
224  context->pcState(pc);
225  // Floating point registers are left at 0 in netbsd
226  // All registers other than the pc, npc and int regs
227  // are ignored as well.
228 }
229 
230 void
231 RemoteGDB::SPARC64GdbRegCache::setRegs(ThreadContext *context) const
232 {
233  for (int i = 0; i < 32; i++)
234  context->setReg(intRegClass[i], r.gpr[i]);
235  PCState pc;
236  pc.pc(r.pc);
237  pc.npc(r.npc);
238  pc.nnpc(pc.npc() + sizeof(MachInst));
239  pc.upc(0);
240  pc.nupc(1);
241  context->pcState(pc);
242  // Floating point registers are left at 0 in netbsd
243  // All registers other than the pc, npc and int regs
244  // are ignored as well.
245 }
246 
247 
249 RemoteGDB::gdbRegs()
250 {
251  PSTATE pstate = context()->readMiscReg(MISCREG_PSTATE);
252  if (pstate.am) {
253  return &regCache32;
254  } else {
255  return &regCache64;
256  }
257 }
258 
259 } // namespace gem5
#define DPRINTF(x,...)
Definition: trace.hh:186
Concrete subclasses of this abstract class represent how the register values are transmitted on the w...
Definition: remote_gdb.hh:86
Target & as()
Definition: pcstate.hh:72
RemoteGDB(System *_system, int _port)
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual RegVal readMiscReg(RegIndex misc_reg)=0
virtual RegVal getReg(const RegId &reg) const
virtual const PCStateBase & pcState() const =0
virtual void setReg(const RegId &reg, RegVal val)
uint16_t len
Definition: helpers.cc:62
Port Object Declaration.
Bitfield< 7 > i
Definition: misc_types.hh:67
constexpr RegClass intRegClass
Definition: int.hh:173
Bitfield< 8 > va
Definition: misc_types.hh:282
Bitfield< 4 > pc
constexpr RegId Y
Definition: int.hh:131
constexpr RegId Ccr
Definition: int.hh:132
@ MISCREG_CWP
Definition: misc.hh:70
@ MISCREG_PSTATE
Definition: misc.hh:67
@ MISCREG_FPRS
Definition: misc.hh:49
@ MISCREG_ASI
Ancillary State Registers.
Definition: misc.hh:47
@ MISCREG_FSR
Floating Point Status Register.
Definition: misc.hh:88
uint32_t MachInst
Definition: types.hh:41
Bitfield< 5 > r
Definition: pagetable.hh:60
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
Definition: root.cc:220
T htobe(T value)
Definition: byteswap.hh:174
Declarations of a non-full system Page Table.

Generated on Wed Dec 21 2022 10:22:25 for gem5 by doxygen 1.9.1