gem5  v21.1.0.2
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++) r.gpr[i] = htobe((uint32_t)context->readIntReg(i));
180  PCState pc = context->pcState();
181  r.pc = htobe((uint32_t)pc.pc());
182  r.npc = htobe((uint32_t)pc.npc());
183  r.y = htobe((uint32_t)context->readIntReg(INTREG_Y));
184  PSTATE pstate = context->readMiscReg(MISCREG_PSTATE);
185  r.psr = htobe((uint32_t)pstate);
186  r.fsr = htobe((uint32_t)context->readMiscReg(MISCREG_FSR));
187  r.csr = htobe((uint32_t)context->readIntReg(INTREG_CCR));
188 }
189 
190 void
191 RemoteGDB::SPARC64GdbRegCache::getRegs(ThreadContext *context)
192 {
193  DPRINTF(GDBAcc, "getRegs in remotegdb \n");
194  for (int i = 0; i < 32; i++) r.gpr[i] = htobe(context->readIntReg(i));
195  for (int i = 0; i < 32; i++) r.fpr[i] = 0;
196  PCState pc = context->pcState();
197  r.pc = htobe(pc.pc());
198  r.npc = htobe(pc.npc());
202  PSTATE pstate = context->readMiscReg(MISCREG_PSTATE);
203  r.state = htobe(
205  pstate << 8 |
207  context->readIntReg(INTREG_CCR) << 32);
208 }
209 
210 void
211 RemoteGDB::SPARCGdbRegCache::setRegs(ThreadContext *context) const
212 {
213  for (int i = 0; i < 32; i++) context->setIntReg(i, r.gpr[i]);
214  PCState pc;
215  pc.pc(r.pc);
216  pc.npc(r.npc);
217  pc.nnpc(pc.npc() + sizeof(MachInst));
218  pc.upc(0);
219  pc.nupc(1);
220  context->pcState(pc);
221  // Floating point registers are left at 0 in netbsd
222  // All registers other than the pc, npc and int regs
223  // are ignored as well.
224 }
225 
226 void
227 RemoteGDB::SPARC64GdbRegCache::setRegs(ThreadContext *context) const
228 {
229  for (int i = 0; i < 32; i++) context->setIntReg(i, r.gpr[i]);
230  PCState pc;
231  pc.pc(r.pc);
232  pc.npc(r.npc);
233  pc.nnpc(pc.npc() + sizeof(MachInst));
234  pc.upc(0);
235  pc.nupc(1);
236  context->pcState(pc);
237  // Floating point registers are left at 0 in netbsd
238  // All registers other than the pc, npc and int regs
239  // are ignored as well.
240 }
241 
242 
245 {
246  PSTATE pstate = context()->readMiscReg(MISCREG_PSTATE);
247  if (pstate.am) {
248  return &regCache32;
249  } else {
250  return &regCache64;
251  }
252 }
253 
254 } // namespace gem5
gem5::ThreadContext::setIntReg
virtual void setIntReg(RegIndex reg_idx, RegVal val)=0
gem5::SparcISA::MISCREG_ASI
@ MISCREG_ASI
Ancillary State Registers.
Definition: misc.hh:45
socket.hh
gem5::ThreadContext::readMiscReg
virtual RegVal readMiscReg(RegIndex misc_reg)=0
gem5::ArmISA::len
Bitfield< 18, 16 > len
Definition: misc_types.hh:444
misc.hh
system.hh
remote_gdb.hh
gem5::RiscvISA::RemoteGDB::gdbRegs
BaseGdbRegCache * gdbRegs() override
gem5::SparcISA::MachInst
uint32_t MachInst
Definition: types.hh:41
gem5::EmulationPageTable::lookup
const Entry * lookup(Addr vaddr)
Lookup function.
Definition: page_table.cc:133
gem5::htobe
T htobe(T value)
Definition: byteswap.hh:174
gem5::SparcISA::MISCREG_FPRS
@ MISCREG_FPRS
Definition: misc.hh:47
gem5::BaseGdbRegCache
Concrete subclasses of this abstract class represent how the register values are transmitted on the w...
Definition: remote_gdb.hh:85
remote_gdb.hh
gem5::SparcISA::INTREG_Y
@ INTREG_Y
Definition: int.hh:58
gem5::SparcISA::INTREG_CCR
@ INTREG_CCR
Definition: int.hh:59
gem5::RiscvISA::RemoteGDB::acc
bool acc(Addr addr, size_t len) override
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:93
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:186
gem5::RiscvISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:243
gem5::Process::pTable
EmulationPageTable * pTable
Definition: process.hh:171
process.hh
port.hh
int.hh
gem5::RiscvISA::r
Bitfield< 1 > r
Definition: pagetable.hh:75
static_inst.hh
gem5::ThreadContext::pcState
virtual TheISA::PCState pcState() const =0
types.hh
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::ThreadContext::readIntReg
virtual RegVal readIntReg(RegIndex reg_idx) const =0
gem5::ArmISA::va
Bitfield< 8 > va
Definition: misc_types.hh:275
full_system.hh
gem5::ThreadContext::getProcessPtr
virtual Process * getProcessPtr()=0
gem5::FullSystem
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
Definition: root.cc:223
gem5::SparcISA::RemoteGDB::RemoteGDB
RemoteGDB(System *_system, int _port)
gem5::SparcISA::MISCREG_FSR
@ MISCREG_FSR
Floating Point Status Register.
Definition: misc.hh:86
gem5::GenericISA::DelaySlotUPCState
Definition: types.hh:384
physical.hh
gem5::SparcISA::MISCREG_PSTATE
@ MISCREG_PSTATE
Definition: misc.hh:65
gem5::BaseRemoteGDB::context
ThreadContext * context()
Definition: remote_gdb.hh:372
trace.hh
gem5::SparcISA::MISCREG_CWP
@ MISCREG_CWP
Definition: misc.hh:68
intmath.hh
page_table.hh
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: decoder.cc:40
gem5::RiscvISA::i
Bitfield< 2 > i
Definition: pra_constants.hh:279
thread_context.hh
byteswap.hh

Generated on Tue Sep 21 2021 12:24:41 for gem5 by doxygen 1.8.17