arch-arm: fix the aarch64 GDB stub
authorCiro Santilli <ciro.santilli@arm.com>
Wed, 18 Jul 2018 17:00:51 +0000 (18:00 +0100)
committerCiro Santilli <ciro.santilli@arm.com>
Mon, 3 Dec 2018 10:43:15 +0000 (10:43 +0000)
The main change is to remove vector registers from the GDB stub.

Those registers were intended for SVE, which is a new architecture feature
and not yet treated by default on the GDB present in Ubuntu 18.04, and
possibly not even on GDB master.

As a result, aarch64 GDB stub connections would fail with:

Remote 'g' packet reply is too long

The correct way to support those registers is to send XML GDB target
description files to the client. This feature is not yet available for
any architecture, and should be implemented in future patches.

Other smaller fixes are:

* cpsr is uint32_t in aarch64 as well as arm
* use M5_ATTR_PACKED on the register structs since they are being cast and
  sent as byte arrays

Change-Id: I77cd8a98e322ecc60799e5b11fe5cd414d893cc7
Reviewed-on: https://gem5-review.googlesource.com/c/14495
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>

src/arch/arm/remote_gdb.cc
src/arch/arm/remote_gdb.hh

index f1919372b654b3e2f0f29a7a5215006ae286a382..a395cd91300ac8c7dd5f46fe27ab5972d2a93a3b 100644 (file)
@@ -209,10 +209,6 @@ RemoteGDB::AArch64GdbRegCache::getRegs(ThreadContext *context)
         r.v[i + 2] = context->readFloatRegBits(i + 0);
         r.v[i + 3] = context->readFloatRegBits(i + 1);
     }
-
-    for (int i = 0; i < 32; i ++) {
-        r.vec[i] = context->readVecReg(RegId(VecRegClass,i));
-    }
 }
 
 void
@@ -235,10 +231,6 @@ RemoteGDB::AArch64GdbRegCache::setRegs(ThreadContext *context) const
         context->setFloatRegBits(i + 0, r.v[i + 2]);
         context->setFloatRegBits(i + 1, r.v[i + 3]);
     }
-
-    for (int i = 0; i < 32; i ++) {
-        context->setVecReg(RegId(VecRegClass, i), r.vec[i]);
-    }
 }
 
 void
index e5d50ee136ea473e7a4d6c0a82b340e92f29c157..e59d7b04563c78289397f6b923babb2c6f521ed1 100644 (file)
@@ -51,7 +51,7 @@
 #include <algorithm>
 
 #include "arch/arm/utility.hh"
-#include "arch/generic/vec_reg.hh"
+#include "base/compiler.hh"
 #include "base/remote_gdb.hh"
 
 class System;
@@ -74,7 +74,7 @@ class RemoteGDB : public BaseRemoteGDB
           uint32_t fpr[8*3];
           uint32_t fpscr;
           uint32_t cpsr;
-        } r;
+        } M5_ATTR_PACKED r;
       public:
         char *data() const { return (char *)&r; }
         size_t size() const { return sizeof(r); }
@@ -95,10 +95,9 @@ class RemoteGDB : public BaseRemoteGDB
           uint64_t x[31];
           uint64_t spx;
           uint64_t pc;
-          uint64_t cpsr;
+          uint32_t cpsr;
           uint32_t v[32*4];
-          ArmISA::VecRegContainer vec[32];
-        } r;
+        } M5_ATTR_PACKED r;
       public:
         char *data() const { return (char *)&r; }
         size_t size() const { return sizeof(r); }