gem5  v19.0.0.0
remote_gdb.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 The University of Virginia
3  * Copyright 2015 LabWare
4  * Copyright 2014 Google, Inc.
5  * Copyright (c) 2007 The Regents of The University of Michigan
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are
10  * met: redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer;
12  * redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution;
15  * neither the name of the copyright holders nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  * Authors: Nathan Binkert
32  * Boris Shingarov
33  * Alec Roelke
34  */
35 
36 #ifndef __ARCH_RISCV_REMOTE_GDB_HH__
37 #define __ARCH_RISCV_REMOTE_GDB_HH__
38 
39 #include <string>
40 
41 #include "arch/riscv/registers.hh"
42 #include "base/remote_gdb.hh"
43 
44 class System;
45 class ThreadContext;
46 
47 namespace RiscvISA
48 {
49 
50 class RemoteGDB : public BaseRemoteGDB
51 {
52  protected:
53  static const int NumGDBRegs = 4162;
54  static const int NumCSRs = 4096;
55 
56  bool acc(Addr addr, size_t len) override;
57  // A breakpoint will be 2 bytes if it is compressed and 4 if not
58  bool checkBpLen(size_t len) override { return len == 2 || len == 4; }
59 
61  {
63  private:
64  struct {
65  uint64_t gpr[NumIntArchRegs];
66  uint64_t pc;
67  } r;
68  public:
69  char *data() const { return (char *)&r; }
70  size_t size() const { return sizeof(r); }
71  void getRegs(ThreadContext*);
72  void setRegs(ThreadContext*) const;
73 
74  const std::string
75  name() const
76  {
77  return gdb->name() + ".RiscvGdbRegCache";
78  }
79  };
80 
82 
83  public:
84  RemoteGDB(System *_system, ThreadContext *tc, int _port);
85  BaseGdbRegCache *gdbRegs() override;
86 };
87 
88 } // namespace RiscvISA
89 
90 #endif /* __ARCH_RISCV_REMOTE_GDB_H__ */
ThreadContext * tc
Definition: remote_gdb.hh:195
bool checkBpLen(size_t len) override
Definition: remote_gdb.hh:58
void setRegs(ThreadContext *) const
Set the ThreadContext&#39;s registers from the values in the raw buffer.
Definition: remote_gdb.cc:173
const int NumIntArchRegs
Definition: registers.hh:87
struct RiscvISA::RemoteGDB::RiscvGdbRegCache::@20 r
ip6_addr_t addr
Definition: inet.hh:335
Definition: system.hh:77
void getRegs(ThreadContext *)
Fill the raw buffer from the registers in the ThreadContext.
Definition: remote_gdb.cc:164
ThreadContext is the external interface to all thread state for anything outside of the CPU...
RemoteGDB(System *_system, ThreadContext *tc, int _port)
Definition: remote_gdb.cc:151
bool acc(Addr addr, size_t len) override
Definition: remote_gdb.cc:157
static const int NumCSRs
Definition: remote_gdb.hh:54
static const int NumGDBRegs
Definition: remote_gdb.hh:53
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:70
BaseRemoteGDB * gdb
Definition: remote_gdb.hh:115
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
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
BaseGdbRegCache * gdbRegs() override
Definition: remote_gdb.cc:182
std::string name()
Definition: remote_gdb.cc:337
char * data() const
Return the pointer to the raw bytes buffer containing the register values.
Definition: remote_gdb.hh:69
uint64_t gpr[NumIntArchRegs]
Definition: remote_gdb.hh:65
BaseGdbRegCache(BaseRemoteGDB *g)
Definition: remote_gdb.hh:109
const std::string name() const
Return the name to use in places like DPRINTF.
Definition: remote_gdb.hh:75
RiscvGdbRegCache regCache
Definition: remote_gdb.hh:81

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