stats: update stats for mmap() change.
[gem5.git] / src / arch / arm / remote_gdb.hh
index ec8098c7a686cdbc4772f1692f91ca669389262d..13ceac17fed229c6aeccd43c33166d06cba64cbc 100644 (file)
@@ -1,4 +1,18 @@
 /*
+ * Copyright 2015 LabWare
+ * Copyright 2014 Google, Inc.
+ * Copyright (c) 2013 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
  * Copyright (c) 2002-2005 The Regents of The University of Michigan
  * Copyright (c) 2007-2008 The Florida State University
  * All rights reserved.
  *
  * Authors: Nathan Binkert
  *          Stephen Hines
+ *          Boris Shingarov
  */
 
 #ifndef __ARCH_ARM_REMOTE_GDB_HH__
 #define __ARCH_ARM_REMOTE_GDB_HH__
 
+#include <algorithm>
+
+#include "arch/arm/utility.hh"
 #include "base/remote_gdb.hh"
 
+class System;
+class ThreadContext;
+
 namespace ArmISA
 {
-    class RemoteGDB : public BaseRemoteGDB
-    {
-      public:
-        //These needs to be written to suit ARM
-
-        RemoteGDB(System *system, ThreadContext *context)
-            : BaseRemoteGDB(system, context, 1)
-        {}
-
-        bool acc(Addr, size_t)
-        { panic("acc not implemented for ARM!"); }
 
-        void getregs()
-        { panic("getregs not implemented for ARM!"); }
-
-        void setregs()
-        { panic("setregs not implemented for ARM!"); }
+class RemoteGDB : public BaseRemoteGDB
+{
+  protected:
+    bool acc(Addr addr, size_t len);
 
-        void clearSingleStep()
-        { panic("clearSingleStep not implemented for ARM!"); }
+    class AArch32GdbRegCache : public BaseGdbRegCache
+    {
+      using BaseGdbRegCache::BaseGdbRegCache;
+      private:
+        struct {
+          uint32_t gpr[16];
+          uint32_t fpr[8*3];
+          uint32_t fpscr;
+          uint32_t cpsr;
+        } r;
+      public:
+        char *data() const { return (char *)&r; }
+        size_t size() const { return sizeof(r); }
+        void getRegs(ThreadContext*);
+        void setRegs(ThreadContext*) const;
+        const std::string name() const { return gdb->name() + ".AArch32GdbRegCache"; }
+    };
 
-        void setSingleStep()
-        { panic("setSingleStep not implemented for ARM!"); }
+    class AArch64GdbRegCache : public BaseGdbRegCache
+    {
+      using BaseGdbRegCache::BaseGdbRegCache;
+      private:
+        struct {
+          uint64_t x[31];
+          uint64_t spx;
+          uint64_t pc;
+          uint64_t cpsr;
+          uint32_t v[32*4];
+        } r;
+      public:
+        char *data() const { return (char *)&r; }
+        size_t size() const { return sizeof(r); }
+        void getRegs(ThreadContext*);
+        void setRegs(ThreadContext*) const;
+        const std::string name() const { return gdb->name() + ".AArch64GdbRegCache"; }
     };
-}
+
+  public:
+    RemoteGDB(System *_system, ThreadContext *tc);
+    BaseGdbRegCache *gdbRegs();
+};
+} // namespace ArmISA
 
 #endif /* __ARCH_ARM_REMOTE_GDB_H__ */