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 2015 LabWare
3  * Copyright 2014 Google, Inc.
4  * Copyright (c) 2013 ARM Limited
5  * All rights reserved
6  *
7  * The license below extends only to copyright in the software and shall
8  * not be construed as granting a license to any other intellectual
9  * property including but not limited to intellectual property relating
10  * to a hardware implementation of the functionality of the software
11  * licensed hereunder. You may use the software subject to the license
12  * terms below provided that you ensure that this notice is replicated
13  * unmodified and in its entirety in all distributions of the software,
14  * modified or unmodified, in source code or in binary form.
15  *
16  * Copyright (c) 2002-2005 The Regents of The University of Michigan
17  * Copyright (c) 2007-2008 The Florida State University
18  * All rights reserved.
19  *
20  * Redistribution and use in source and binary forms, with or without
21  * modification, are permitted provided that the following conditions are
22  * met: redistributions of source code must retain the above copyright
23  * notice, this list of conditions and the following disclaimer;
24  * redistributions in binary form must reproduce the above copyright
25  * notice, this list of conditions and the following disclaimer in the
26  * documentation and/or other materials provided with the distribution;
27  * neither the name of the copyright holders nor the names of its
28  * contributors may be used to endorse or promote products derived from
29  * this software without specific prior written permission.
30  *
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
36  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
37  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
38  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
39  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
41  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42  *
43  * Authors: Nathan Binkert
44  * Stephen Hines
45  * Boris Shingarov
46  */
47 
48 #ifndef __ARCH_ARM_REMOTE_GDB_HH__
49 #define __ARCH_ARM_REMOTE_GDB_HH__
50 
51 #include <algorithm>
52 
53 #include "arch/arm/utility.hh"
54 #include "base/remote_gdb.hh"
55 
56 class System;
57 class ThreadContext;
58 
59 namespace ArmISA
60 {
61 
62 class RemoteGDB : public BaseRemoteGDB
63 {
64  protected:
65  bool acc(Addr addr, size_t len);
66 
67  class AArch32GdbRegCache : public BaseGdbRegCache
68  {
70  private:
71  struct {
72  uint32_t gpr[16];
73  uint32_t fpr[8*3];
74  uint32_t fpscr;
75  uint32_t cpsr;
76  } r;
77  public:
78  char *data() const { return (char *)&r; }
79  size_t size() const { return sizeof(r); }
80  void getRegs(ThreadContext*);
81  void setRegs(ThreadContext*) const;
82  const std::string
83  name() const
84  {
85  return gdb->name() + ".AArch32GdbRegCache";
86  }
87  };
88 
90  {
92  private:
93  struct {
94  uint64_t x[31];
95  uint64_t spx;
96  uint64_t pc;
97  uint64_t cpsr;
98  uint32_t v[32*4];
99  } r;
100  public:
101  char *data() const { return (char *)&r; }
102  size_t size() const { return sizeof(r); }
103  void getRegs(ThreadContext*);
104  void setRegs(ThreadContext*) const;
105  const std::string
106  name() const
107  {
108  return gdb->name() + ".AArch64GdbRegCache";
109  }
110  };
111 
114 
115  public:
116  RemoteGDB(System *_system, ThreadContext *tc);
118 };
119 } // namespace ArmISA
120 
121 #endif /* __ARCH_ARM_REMOTE_GDB_H__ */
void setRegs(ThreadContext *) const
Set the ThreadContext's registers from the values in the raw buffer.
Definition: remote_gdb.cc:218
BaseGdbRegCache(BaseRemoteGDB *g)
Definition: remote_gdb.hh:219
AArch32GdbRegCache regCache32
Definition: remote_gdb.hh:112
AArch64GdbRegCache regCache64
Definition: remote_gdb.hh:113
void getRegs(ThreadContext *)
Fill the raw buffer from the registers in the ThreadContext.
Definition: remote_gdb.cc:199
struct ArmISA::RemoteGDB::AArch64GdbRegCache::@7 r
ip6_addr_t addr
Definition: inet.hh:335
char * data() const
Return the pointer to the raw bytes buffer containing the register values.
Definition: remote_gdb.hh:101
Definition: system.hh:83
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
struct ArmISA::RemoteGDB::AArch32GdbRegCache::@6 r
BaseGdbRegCache * gdbRegs()
Definition: remote_gdb.cc:297
const std::string name() const
Return the name to use in places like DPRINTF.
Definition: remote_gdb.hh:106
void setRegs(ThreadContext *) const
Definition: remote_gdb.cc:269
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
const std::string name() const
Definition: remote_gdb.hh:83
Bitfield< 18, 16 > len
Definition: miscregs.hh:1626
bool acc(Addr addr, size_t len)
Definition: remote_gdb.cc:176
RemoteGDB(System *_system, ThreadContext *tc)
Definition: remote_gdb.cc:167
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:102

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