gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
remote_gdb.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 LabWare
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  * Boris Shingarov
31  */
32 
33 #ifndef __ARCH_SPARC_REMOTE_GDB_HH__
34 #define __ARCH_SPARC_REMOTE_GDB_HH__
35 
36 #include <map>
37 
38 #include "base/remote_gdb.hh"
39 
40 class System;
41 class ThreadContext;
42 
43 namespace SparcISA
44 {
45 
46 class RemoteGDB : public BaseRemoteGDB
47 {
48  protected:
49  bool acc(Addr addr, size_t len);
50 
51  class SPARCGdbRegCache : public BaseGdbRegCache
52  {
54  private:
55  struct {
56  uint32_t gpr[32];
57  uint32_t hole[32];
58  uint32_t y;
59  uint32_t psr;
60  uint32_t wim;
61  uint32_t tbr;
62  uint32_t pc;
63  uint32_t npc;
64  uint32_t fsr;
65  uint32_t csr;
66  } r;
67  public:
68  char *data() const { return (char *)&r; }
69  size_t size() const { return sizeof(r); }
70  void getRegs(ThreadContext*);
71  void setRegs(ThreadContext*) const;
72  const std::string name() const { return gdb->name() + ".SPARCGdbRegCache"; }
73  };
74 
76  {
78  private:
79  struct {
80  uint64_t gpr[32];
81  uint64_t fpr[32];
82  uint64_t pc;
83  uint64_t npc;
84  uint64_t state;
85  uint64_t fsr;
86  uint64_t fprs;
87  uint64_t y;
88  } r;
89  public:
90  char *data() const { return (char *)&r; }
91  size_t size() const { return sizeof(r); }
92  void getRegs(ThreadContext*);
93  void setRegs(ThreadContext*) const;
94  const std::string name() const { return gdb->name() + ".SPARC64GdbRegCache"; }
95  };
96 
99 
100  public:
101  RemoteGDB(System *_system, ThreadContext *tc);
103 };
104 } // namespace SparcISA
105 
106 #endif /* __ARCH_SPARC_REMOTE_GDB_H__ */
BaseGdbRegCache(BaseRemoteGDB *g)
Definition: remote_gdb.hh:219
ip6_addr_t addr
Definition: inet.hh:335
void getRegs(ThreadContext *)
Fill the raw buffer from the registers in the ThreadContext.
Definition: remote_gdb.cc:195
void setRegs(ThreadContext *) const
Set the ThreadContext's registers from the values in the raw buffer.
Definition: remote_gdb.cc:231
Definition: system.hh:83
const std::string name() const
Return the name to use in places like DPRINTF.
Definition: remote_gdb.hh:94
struct SparcISA::RemoteGDB::SPARCGdbRegCache::@21 r
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Concrete subclasses of this abstract class represent how the register values are transmitted on the w...
Definition: remote_gdb.hh:183
SPARCGdbRegCache regCache32
Definition: remote_gdb.hh:97
void setRegs(ThreadContext *) const
Definition: remote_gdb.cc:215
BaseGdbRegCache * gdbRegs()
Definition: remote_gdb.cc:248
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
std::string name()
Definition: remote_gdb.cc:303
RemoteGDB(System *_system, ThreadContext *tc)
Definition: remote_gdb.cc:150
struct SparcISA::RemoteGDB::SPARC64GdbRegCache::@22 r
size_t size() const
Return the size of the raw buffer, in bytes (i.e., half of the number of digits in the g/G packet)...
Definition: remote_gdb.hh:91
bool acc(Addr addr, size_t len)
Definition: remote_gdb.cc:160
SPARC64GdbRegCache regCache64
Definition: remote_gdb.hh:98
Bitfield< 18, 16 > len
Definition: miscregs.hh:1626
char * data() const
Return the pointer to the raw bytes buffer containing the register values.
Definition: remote_gdb.hh:90
const std::string name() const
Definition: remote_gdb.hh:72

Generated on Fri Jun 9 2017 13:03:36 for gem5 by doxygen 1.8.6