gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
remote_gdb.hh
Go to the documentation of this file.
1 /*
2  * Copyright 2015 LabWare
3  * Copyright 2014 Google, Inc.
4  * Copyright (c) 2007 The Hewlett-Packard Development Company
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  * Redistribution and use in source and binary forms, with or without
17  * modification, are permitted provided that the following conditions are
18  * met: redistributions of source code must retain the above copyright
19  * notice, this list of conditions and the following disclaimer;
20  * redistributions in binary form must reproduce the above copyright
21  * notice, this list of conditions and the following disclaimer in the
22  * documentation and/or other materials provided with the distribution;
23  * neither the name of the copyright holders nor the names of its
24  * contributors may be used to endorse or promote products derived from
25  * this software without specific prior written permission.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38  *
39  * Authors: Gabe Black
40  * Boris Shingarov
41  */
42 
43 #ifndef __ARCH_X86_REMOTEGDB_HH__
44 #define __ARCH_X86_REMOTEGDB_HH__
45 
46 #include <algorithm>
47 
48 #include "arch/x86/types.hh"
49 #include "base/remote_gdb.hh"
50 
51 class System;
52 class ThreadContext;
53 
54 namespace X86ISA
55 {
56 class RemoteGDB : public BaseRemoteGDB
57 {
58  protected:
59  bool acc(Addr addr, size_t len);
60  bool checkBpLen(size_t len) { return len == 1; }
62  {
64  private:
65  struct {
66  uint32_t eax;
67  uint32_t ecx;
68  uint32_t edx;
69  uint32_t ebx;
70  uint32_t esp;
71  uint32_t ebp;
72  uint32_t esi;
73  uint32_t edi;
74  uint32_t eip;
75  uint32_t eflags;
76  uint32_t cs;
77  uint32_t ss;
78  uint32_t ds;
79  uint32_t es;
80  uint32_t fs;
81  uint32_t gs;
82  } r;
83  public:
84  char *data() const { return (char *)&r; }
85  size_t size() const { return sizeof(r); }
86  void getRegs(ThreadContext*);
87  void setRegs(ThreadContext*) const;
88  const std::string
89  name() const
90  {
91  return gdb->name() + ".X86GdbRegCache";
92  }
93  };
94 
96  {
98  private:
99  struct M5_ATTR_PACKED {
100  uint64_t rax;
101  uint64_t rbx;
102  uint64_t rcx;
103  uint64_t rdx;
104  uint64_t rsi;
105  uint64_t rdi;
106  uint64_t rbp;
107  uint64_t rsp;
108  uint64_t r8;
109  uint64_t r9;
110  uint64_t r10;
111  uint64_t r11;
112  uint64_t r12;
113  uint64_t r13;
114  uint64_t r14;
115  uint64_t r15;
116  uint64_t rip;
117  uint32_t eflags;
118  uint32_t cs;
119  uint32_t ss;
120  uint32_t ds;
121  uint32_t es;
122  uint32_t fs;
123  uint32_t gs;
124  /*
125  * We do not model st[], FPU status regs, xmm[] etc.
126  * While it's not ok to have G-packets larger than what gdb
127  * knows about, it is ok to have smaller ones.
128  */
129  } r;
130  public:
131  char *data() const { return (char *)&r; }
132  size_t size() const { return sizeof(r); }
133  void getRegs(ThreadContext*);
134  void setRegs(ThreadContext*) const;
135  const std::string
136  name() const
137  {
138  return gdb->name() + ".AMD64GdbRegCache";
139  }
140  };
141 
144 
145  public:
148 };
149 } // namespace X86ISA
150 
151 #endif // __ARCH_X86_REMOTEGDB_HH__
bool checkBpLen(size_t len)
Definition: remote_gdb.hh:60
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:85
char * data() const
Return the pointer to the raw bytes buffer containing the register values.
Definition: remote_gdb.hh:84
RemoteGDB(System *system, ThreadContext *context, int _port)
Definition: remote_gdb.cc:67
void getRegs(ThreadContext *)
Fill the raw buffer from the registers in the ThreadContext.
Definition: remote_gdb.cc:138
Definition: system.hh:77
const std::string name() const
Return the name to use in places like DPRINTF.
Definition: remote_gdb.hh:89
ThreadContext is the external interface to all thread state for anything outside of the CPU...
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:132
bool acc(Addr addr, size_t len)
Definition: remote_gdb.cc:72
X86GdbRegCache regCache32
Definition: remote_gdb.hh:142
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
BaseGdbRegCache * gdbRegs()
Definition: remote_gdb.cc:96
Bitfield< 18, 16 > len
const std::string name() const
Return the name to use in places like DPRINTF.
Definition: remote_gdb.hh:136
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
char * data() const
Return the pointer to the raw bytes buffer containing the register values.
Definition: remote_gdb.hh:131
std::string name()
Definition: remote_gdb.cc:337
void setRegs(ThreadContext *) const
Set the ThreadContext&#39;s registers from the values in the raw buffer.
Definition: remote_gdb.cc:196
ThreadContext * context()
Definition: remote_gdb.hh:287
AMD64GdbRegCache regCache64
Definition: remote_gdb.hh:143
This is exposed globally, independent of the ISA.
Definition: acpi.hh:57
BaseGdbRegCache(BaseRemoteGDB *g)
Definition: remote_gdb.hh:109
struct X86ISA::RemoteGDB::X86GdbRegCache::@23 r
Bitfield< 3 > addr
Definition: types.hh:81
System * system()
Definition: remote_gdb.hh:288

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