remote_gdb.hh revision 14238:f5d137fd3a75
19401SAndreas.Sandberg@ARM.com/* 29401SAndreas.Sandberg@ARM.com * Copyright 2015 LabWare 39401SAndreas.Sandberg@ARM.com * Copyright 2014 Google, Inc. 49401SAndreas.Sandberg@ARM.com * Copyright (c) 2013, 2016, 2018-2019 ARM Limited 59401SAndreas.Sandberg@ARM.com * All rights reserved 69401SAndreas.Sandberg@ARM.com * 79401SAndreas.Sandberg@ARM.com * The license below extends only to copyright in the software and shall 89401SAndreas.Sandberg@ARM.com * not be construed as granting a license to any other intellectual 99401SAndreas.Sandberg@ARM.com * property including but not limited to intellectual property relating 109401SAndreas.Sandberg@ARM.com * to a hardware implementation of the functionality of the software 119401SAndreas.Sandberg@ARM.com * licensed hereunder. You may use the software subject to the license 129401SAndreas.Sandberg@ARM.com * terms below provided that you ensure that this notice is replicated 134977Ssaidi@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 142997Sstever@eecs.umich.edu * modified or unmodified, in source code or in binary form. 152997Sstever@eecs.umich.edu * 162997Sstever@eecs.umich.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan 172997Sstever@eecs.umich.edu * Copyright (c) 2007-2008 The Florida State University 182997Sstever@eecs.umich.edu * All rights reserved. 192997Sstever@eecs.umich.edu * 202997Sstever@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 212997Sstever@eecs.umich.edu * modification, are permitted provided that the following conditions are 222997Sstever@eecs.umich.edu * met: redistributions of source code must retain the above copyright 232997Sstever@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 242997Sstever@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 252997Sstever@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 262997Sstever@eecs.umich.edu * documentation and/or other materials provided with the distribution; 272997Sstever@eecs.umich.edu * neither the name of the copyright holders nor the names of its 282997Sstever@eecs.umich.edu * contributors may be used to endorse or promote products derived from 292997Sstever@eecs.umich.edu * this software without specific prior written permission. 302997Sstever@eecs.umich.edu * 312997Sstever@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 322997Sstever@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 332997Sstever@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 342997Sstever@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 352997Sstever@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 362997Sstever@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 372997Sstever@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 382997Sstever@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 392997Sstever@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 402997Sstever@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 415523Snate@binkert.org * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 425523Snate@binkert.org * 436928SBrad.Beckmann@amd.com * Authors: Nathan Binkert 446928SBrad.Beckmann@amd.com * Stephen Hines 456289Snate@binkert.org * Boris Shingarov 466289Snate@binkert.org */ 476289Snate@binkert.org 485523Snate@binkert.org#ifndef __ARCH_ARM_REMOTE_GDB_HH__ 495523Snate@binkert.org#define __ARCH_ARM_REMOTE_GDB_HH__ 509401SAndreas.Sandberg@ARM.com 519401SAndreas.Sandberg@ARM.com#include <algorithm> 529401SAndreas.Sandberg@ARM.com 539401SAndreas.Sandberg@ARM.com#include "arch/arm/registers.hh" 549401SAndreas.Sandberg@ARM.com#include "arch/arm/utility.hh" 559401SAndreas.Sandberg@ARM.com#include "base/compiler.hh" 569401SAndreas.Sandberg@ARM.com#include "base/remote_gdb.hh" 579401SAndreas.Sandberg@ARM.com 589401SAndreas.Sandberg@ARM.comclass System; 599401SAndreas.Sandberg@ARM.comclass ThreadContext; 609401SAndreas.Sandberg@ARM.com 619401SAndreas.Sandberg@ARM.comnamespace ArmISA 629401SAndreas.Sandberg@ARM.com{ 639401SAndreas.Sandberg@ARM.com 649401SAndreas.Sandberg@ARM.comclass RemoteGDB : public BaseRemoteGDB 659401SAndreas.Sandberg@ARM.com{ 669401SAndreas.Sandberg@ARM.com protected: 679401SAndreas.Sandberg@ARM.com bool acc(Addr addr, size_t len); 689401SAndreas.Sandberg@ARM.com 699401SAndreas.Sandberg@ARM.com class AArch32GdbRegCache : public BaseGdbRegCache 709401SAndreas.Sandberg@ARM.com { 719401SAndreas.Sandberg@ARM.com using BaseGdbRegCache::BaseGdbRegCache; 729401SAndreas.Sandberg@ARM.com private: 739401SAndreas.Sandberg@ARM.com struct { 749401SAndreas.Sandberg@ARM.com uint32_t gpr[16]; 759401SAndreas.Sandberg@ARM.com uint32_t cpsr; 769401SAndreas.Sandberg@ARM.com uint64_t fpr[32]; 779401SAndreas.Sandberg@ARM.com uint32_t fpscr; 789401SAndreas.Sandberg@ARM.com } M5_ATTR_PACKED r; 799401SAndreas.Sandberg@ARM.com public: 809401SAndreas.Sandberg@ARM.com char *data() const { return (char *)&r; } 819401SAndreas.Sandberg@ARM.com size_t size() const { return sizeof(r); } 829401SAndreas.Sandberg@ARM.com void getRegs(ThreadContext*); 839401SAndreas.Sandberg@ARM.com void setRegs(ThreadContext*) const; 849401SAndreas.Sandberg@ARM.com const std::string 859401SAndreas.Sandberg@ARM.com name() const 869401SAndreas.Sandberg@ARM.com { 879401SAndreas.Sandberg@ARM.com return gdb->name() + ".AArch32GdbRegCache"; 889401SAndreas.Sandberg@ARM.com } 899401SAndreas.Sandberg@ARM.com }; 909401SAndreas.Sandberg@ARM.com 919401SAndreas.Sandberg@ARM.com class AArch64GdbRegCache : public BaseGdbRegCache 929401SAndreas.Sandberg@ARM.com { 939401SAndreas.Sandberg@ARM.com using BaseGdbRegCache::BaseGdbRegCache; 949401SAndreas.Sandberg@ARM.com private: 959401SAndreas.Sandberg@ARM.com struct { 965523Snate@binkert.org uint64_t x[31]; 975523Snate@binkert.org uint64_t spx; 982997Sstever@eecs.umich.edu uint64_t pc; 992997Sstever@eecs.umich.edu uint32_t cpsr; 1008802Sgblack@eecs.umich.edu VecElem v[NumVecV8ArchRegs * NumVecElemPerNeonVecReg]; 1012997Sstever@eecs.umich.edu uint32_t fpsr; 1022997Sstever@eecs.umich.edu uint32_t fpcr; 1032997Sstever@eecs.umich.edu } M5_ATTR_PACKED r; 1046874SSteve.Reinhardt@amd.com public: 1056874SSteve.Reinhardt@amd.com char *data() const { return (char *)&r; } 1066289Snate@binkert.org size_t size() const { return sizeof(r); } 1072998Sstever@eecs.umich.edu void getRegs(ThreadContext*); 1082998Sstever@eecs.umich.edu void setRegs(ThreadContext*) const; 1092998Sstever@eecs.umich.edu const std::string 1102998Sstever@eecs.umich.edu name() const 1112998Sstever@eecs.umich.edu { 1122998Sstever@eecs.umich.edu return gdb->name() + ".AArch64GdbRegCache"; 1136289Snate@binkert.org } 1142997Sstever@eecs.umich.edu }; 1153475Sktlim@umich.edu 1163475Sktlim@umich.edu AArch32GdbRegCache regCache32; 1173475Sktlim@umich.edu AArch64GdbRegCache regCache64; 1183475Sktlim@umich.edu 1193475Sktlim@umich.edu public: 1206289Snate@binkert.org RemoteGDB(System *_system, ThreadContext *tc, int _port); 1213475Sktlim@umich.edu BaseGdbRegCache *gdbRegs(); 1222997Sstever@eecs.umich.edu std::vector<std::string> 1236289Snate@binkert.org availableFeatures() const 1246928SBrad.Beckmann@amd.com { 1256928SBrad.Beckmann@amd.com return {"qXfer:features:read+"}; 1266928SBrad.Beckmann@amd.com }; 1276928SBrad.Beckmann@amd.com bool getXferFeaturesRead(const std::string &annex, std::string &output); 1286928SBrad.Beckmann@amd.com}; 1292997Sstever@eecs.umich.edu} // namespace ArmISA 1302997Sstever@eecs.umich.edu 1312998Sstever@eecs.umich.edu#endif /* __ARCH_ARM_REMOTE_GDB_H__ */ 1325523Snate@binkert.org