summaryrefslogtreecommitdiff
path: root/src/arch/riscv/remote_gdb.cc
diff options
context:
space:
mode:
authorAlec Roelke <ar4jc@virginia.edu>2017-03-21 12:54:50 -0400
committerAlec Roelke <ar4jc@virginia.edu>2017-04-05 20:21:45 +0000
commit616d48a570296f3d6eb38e5ce5e6fe41facf1a29 (patch)
tree62f4ae2782d9ff1c4f43ce3abcf190113ee0e8bb /src/arch/riscv/remote_gdb.cc
parentcd06bcf4ec2443eb719410e7e496e3d9d4d479c9 (diff)
downloadgem5-616d48a570296f3d6eb38e5ce5e6fe41facf1a29.tar.xz
riscv: add remote gdb support
This patch adds support for debugging with remote GDB to RISC-V. Using GDB compiled with the RISC-V GNU toolchain, it is possible to pause and continue execution, view debugging information, etc. As with the rest of RISC-V, this does not support full-system mode. Change-Id: I2d3a8be614725e1be4b4c283f9fb678a0a30578d Reviewed-on: https://gem5-review.googlesource.com/2304 Maintainer: Alec Roelke <ar4jc@virginia.edu> Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/arch/riscv/remote_gdb.cc')
-rw-r--r--src/arch/riscv/remote_gdb.cc180
1 files changed, 157 insertions, 23 deletions
diff --git a/src/arch/riscv/remote_gdb.cc b/src/arch/riscv/remote_gdb.cc
index 64735d0b4..2b508762d 100644
--- a/src/arch/riscv/remote_gdb.cc
+++ b/src/arch/riscv/remote_gdb.cc
@@ -1,8 +1,20 @@
/*
+ * Copyright 2015 LabWare
+ * Copyright 2014 Google, Inc.
+ * Copyright (c) 2010 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) 2017 The University of Virginia
* Copyright (c) 2002-2005 The Regents of The University of Michigan
- * Copyright (c) 2007-2008 The Florida State University
- * Copyright (c) 2009 The University of Edinburgh
- * Copyright (c) 2015 Sven Karlsson
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,43 +41,165 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Authors: Nathan Binkert
- * Stephen Hines
- * Timothy M. Jones
- * Sven Karlsson
+ * William Wang
+ * Deyuan Guo
+ * Boris Shingarov
+ * Alec Roelke
+ */
+
+/*
+ * Copyright (c) 1990, 1993 The Regents of the University of California
+ * All rights reserved
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Lawrence Berkeley Laboratories.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)kgdb_stub.c 8.4 (Berkeley) 1/12/94
+ */
+
+/*-
+ * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
*/
- #include "base/remote_gdb.hh"
- #include "arch/riscv/remote_gdb.hh"
- #include "sim/system.hh"
+/*
+ * $NetBSD: kgdb_stub.c,v 1.8 2001/07/07 22:58:00 wdk Exp $
+ *
+ * Taken from NetBSD
+ *
+ * "Stub" to allow remote cpu to debug over a serial line using gdb.
+ */
+
+#include "arch/riscv/remote_gdb.hh"
+
+#include <string>
+
+#include "arch/riscv/registers.hh"
+#include "cpu/thread_state.hh"
+#include "debug/GDBAcc.hh"
+#include "mem/page_table.hh"
+#include "sim/full_system.hh"
using namespace std;
using namespace RiscvISA;
-RemoteGDB::RemoteGDB(System *system, ThreadContext *context)
- : BaseRemoteGDB(system, context)
+RemoteGDB::RemoteGDB(System *_system, ThreadContext *tc)
+ : BaseRemoteGDB(_system, tc)
{
}
-RemoteGDB::BaseGdbRegCache*
-RemoteGDB::gdbRegs()
-{
- panic("gdbRegs not implemented for Riscv!");
-}
-
bool
-RemoteGDB::acc(Addr, size_t)
+RemoteGDB::acc(Addr va, size_t len)
{
- panic("acc not implemented for Riscv!");
+ TlbEntry entry;
+ if (FullSystem)
+ panic("acc not implemented for RISCV FS!");
+ else
+ return context->getProcessPtr()->pTable->lookup(va, entry);
}
void
-RemoteGDB::getregs()
+RemoteGDB::RiscvGdbRegCache::getRegs(ThreadContext *context)
{
- panic("getregs not implemented for Riscv!");
+ DPRINTF(GDBAcc, "getregs in remotegdb, size %lu\n", size());
+ for (int i = 0; i < NumIntArchRegs; i++)
+ r.gpr[i] = context->readIntReg(i);
+ r.pc = context->pcState().pc();
+ for (int i = 0; i < NumFloatRegs; i++)
+ r.fpr[i] = context->readFloatRegBits(i);
+
+ r.csr_base = context->readMiscReg(0);
+ r.fflags = context->readMiscReg(MISCREG_FFLAGS);
+ r.frm = context->readMiscReg(MISCREG_FRM);
+ r.fcsr = context->readMiscReg(MISCREG_FCSR);
+ for (int i = ExplicitCSRs; i < NumMiscRegs; i++)
+ r.csr[i - ExplicitCSRs] = context->readMiscReg(i);
}
void
-RemoteGDB::setregs()
+RemoteGDB::RiscvGdbRegCache::setRegs(ThreadContext *context) const
{
- panic("setregs not implemented for Riscv!");
+ DPRINTF(GDBAcc, "setregs in remotegdb \n");
+ for (int i = 0; i < NumIntArchRegs; i++)
+ context->setIntReg(i, r.gpr[i]);
+ context->pcState(r.pc);
+ for (int i = 0; i < NumFloatRegs; i++)
+ context->setFloatRegBits(i, r.fpr[i]);
+
+ context->setMiscReg(0, r.csr_base);
+ context->setMiscReg(MISCREG_FFLAGS, r.fflags);
+ context->setMiscReg(MISCREG_FRM, r.frm);
+ context->setMiscReg(MISCREG_FCSR, r.fcsr);
+ for (int i = ExplicitCSRs; i < NumMiscRegs; i++)
+ context->setMiscReg(i, r.csr[i - ExplicitCSRs]);
+}
+
+RemoteGDB::BaseGdbRegCache*
+RemoteGDB::gdbRegs() {
+ return new RiscvGdbRegCache(this);
}