remote_gdb.hh revision 12449
12391SN/A/* 28931Sandreas.hansson@arm.com * Copyright 2015 LabWare 37733SAli.Saidi@ARM.com * Copyright 2014 Google, Inc. 47733SAli.Saidi@ARM.com * Copyright (c) 2007 The Hewlett-Packard Development Company 57733SAli.Saidi@ARM.com * All rights reserved. 67733SAli.Saidi@ARM.com * 77733SAli.Saidi@ARM.com * The license below extends only to copyright in the software and shall 87733SAli.Saidi@ARM.com * not be construed as granting a license to any other intellectual 97733SAli.Saidi@ARM.com * property including but not limited to intellectual property relating 107733SAli.Saidi@ARM.com * to a hardware implementation of the functionality of the software 117733SAli.Saidi@ARM.com * licensed hereunder. You may use the software subject to the license 127733SAli.Saidi@ARM.com * terms below provided that you ensure that this notice is replicated 137733SAli.Saidi@ARM.com * unmodified and in its entirety in all distributions of the software, 142391SN/A * modified or unmodified, in source code or in binary form. 152391SN/A * 162391SN/A * Redistribution and use in source and binary forms, with or without 172391SN/A * modification, are permitted provided that the following conditions are 182391SN/A * met: redistributions of source code must retain the above copyright 192391SN/A * notice, this list of conditions and the following disclaimer; 202391SN/A * redistributions in binary form must reproduce the above copyright 212391SN/A * notice, this list of conditions and the following disclaimer in the 222391SN/A * documentation and/or other materials provided with the distribution; 232391SN/A * neither the name of the copyright holders nor the names of its 242391SN/A * contributors may be used to endorse or promote products derived from 252391SN/A * this software without specific prior written permission. 262391SN/A * 272391SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 282391SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 292391SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 302391SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 312391SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 322391SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 332391SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 342391SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 352391SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 362665Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 378931Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 382391SN/A * 392391SN/A * Authors: Gabe Black 409293Sandreas.hansson@arm.com * Boris Shingarov 419293Sandreas.hansson@arm.com */ 429293Sandreas.hansson@arm.com 439293Sandreas.hansson@arm.com#ifndef __ARCH_X86_REMOTEGDB_HH__ 449293Sandreas.hansson@arm.com#define __ARCH_X86_REMOTEGDB_HH__ 459293Sandreas.hansson@arm.com 469293Sandreas.hansson@arm.com#include <algorithm> 479293Sandreas.hansson@arm.com 489293Sandreas.hansson@arm.com#include "arch/x86/types.hh" 499293Sandreas.hansson@arm.com#include "base/remote_gdb.hh" 509293Sandreas.hansson@arm.com 519293Sandreas.hansson@arm.comclass System; 529293Sandreas.hansson@arm.comclass ThreadContext; 539356Snilay@cs.wisc.edu 548931Sandreas.hansson@arm.comnamespace X86ISA 559293Sandreas.hansson@arm.com{ 569293Sandreas.hansson@arm.comclass RemoteGDB : public BaseRemoteGDB 572394SN/A{ 582394SN/A protected: 592391SN/A bool acc(Addr addr, size_t len); 602391SN/A bool checkBpLen(size_t len) { return len == 1; } 619293Sandreas.hansson@arm.com class X86GdbRegCache : public BaseGdbRegCache 629293Sandreas.hansson@arm.com { 639293Sandreas.hansson@arm.com using BaseGdbRegCache::BaseGdbRegCache; 642391SN/A private: 659293Sandreas.hansson@arm.com struct { 669293Sandreas.hansson@arm.com uint32_t eax; 678931Sandreas.hansson@arm.com uint32_t ecx; 688931Sandreas.hansson@arm.com uint32_t edx; 698931Sandreas.hansson@arm.com uint32_t ebx; 708931Sandreas.hansson@arm.com uint32_t esp; 718931Sandreas.hansson@arm.com uint32_t ebp; 722391SN/A uint32_t esi; 738931Sandreas.hansson@arm.com uint32_t edi; 748931Sandreas.hansson@arm.com uint32_t eip; 758931Sandreas.hansson@arm.com uint32_t eflags; 768931Sandreas.hansson@arm.com uint32_t cs; 778931Sandreas.hansson@arm.com uint32_t ss; 788931Sandreas.hansson@arm.com uint32_t ds; 798931Sandreas.hansson@arm.com uint32_t es; 808931Sandreas.hansson@arm.com uint32_t fs; 819293Sandreas.hansson@arm.com uint32_t gs; 829293Sandreas.hansson@arm.com } r; 839293Sandreas.hansson@arm.com public: 849293Sandreas.hansson@arm.com char *data() const { return (char *)&r; } 859293Sandreas.hansson@arm.com size_t size() const { return sizeof(r); } 869293Sandreas.hansson@arm.com void getRegs(ThreadContext*); 879293Sandreas.hansson@arm.com void setRegs(ThreadContext*) const; 889293Sandreas.hansson@arm.com const std::string 899293Sandreas.hansson@arm.com name() const 909293Sandreas.hansson@arm.com { 919293Sandreas.hansson@arm.com return gdb->name() + ".X86GdbRegCache"; 929293Sandreas.hansson@arm.com } 939293Sandreas.hansson@arm.com }; 949293Sandreas.hansson@arm.com 958931Sandreas.hansson@arm.com class AMD64GdbRegCache : public BaseGdbRegCache 969293Sandreas.hansson@arm.com { 979293Sandreas.hansson@arm.com using BaseGdbRegCache::BaseGdbRegCache; 989293Sandreas.hansson@arm.com private: 999293Sandreas.hansson@arm.com struct M5_ATTR_PACKED { 1009293Sandreas.hansson@arm.com uint64_t rax; 1019293Sandreas.hansson@arm.com uint64_t rbx; 1029293Sandreas.hansson@arm.com uint64_t rcx; 1039293Sandreas.hansson@arm.com uint64_t rdx; 1049293Sandreas.hansson@arm.com uint64_t rsi; 1059293Sandreas.hansson@arm.com uint64_t rdi; 1069293Sandreas.hansson@arm.com uint64_t rbp; 1079293Sandreas.hansson@arm.com uint64_t rsp; 1089293Sandreas.hansson@arm.com uint64_t r8; 1099293Sandreas.hansson@arm.com uint64_t r9; 1109293Sandreas.hansson@arm.com uint64_t r10; 1119293Sandreas.hansson@arm.com uint64_t r11; 1129293Sandreas.hansson@arm.com uint64_t r12; 1139293Sandreas.hansson@arm.com uint64_t r13; 1149293Sandreas.hansson@arm.com uint64_t r14; 1159293Sandreas.hansson@arm.com uint64_t r15; 1169293Sandreas.hansson@arm.com uint64_t rip; 1179293Sandreas.hansson@arm.com uint32_t eflags; 1189293Sandreas.hansson@arm.com uint32_t cs; 1199293Sandreas.hansson@arm.com uint32_t ss; 1209293Sandreas.hansson@arm.com uint32_t ds; 1219293Sandreas.hansson@arm.com uint32_t es; 1229293Sandreas.hansson@arm.com uint32_t fs; 1239293Sandreas.hansson@arm.com uint32_t gs; 1249293Sandreas.hansson@arm.com /* 1259293Sandreas.hansson@arm.com * We do not model st[], FPU status regs, xmm[] etc. 1269293Sandreas.hansson@arm.com * While it's not ok to have G-packets larger than what gdb 1279293Sandreas.hansson@arm.com * knows about, it is ok to have smaller ones. 1289293Sandreas.hansson@arm.com */ 1299293Sandreas.hansson@arm.com } r; 1309293Sandreas.hansson@arm.com public: 1319293Sandreas.hansson@arm.com char *data() const { return (char *)&r; } 1329293Sandreas.hansson@arm.com size_t size() const { return sizeof(r); } 1339293Sandreas.hansson@arm.com void getRegs(ThreadContext*); 1349293Sandreas.hansson@arm.com void setRegs(ThreadContext*) const; 1359293Sandreas.hansson@arm.com const std::string 1369293Sandreas.hansson@arm.com name() const 1379293Sandreas.hansson@arm.com { 1389293Sandreas.hansson@arm.com return gdb->name() + ".AMD64GdbRegCache"; 1399293Sandreas.hansson@arm.com } 1409293Sandreas.hansson@arm.com }; 1419293Sandreas.hansson@arm.com 1429293Sandreas.hansson@arm.com X86GdbRegCache regCache32; 1439293Sandreas.hansson@arm.com AMD64GdbRegCache regCache64; 1449293Sandreas.hansson@arm.com 1459293Sandreas.hansson@arm.com public: 1469293Sandreas.hansson@arm.com RemoteGDB(System *system, ThreadContext *context, int _port); 1479293Sandreas.hansson@arm.com BaseGdbRegCache *gdbRegs(); 1489293Sandreas.hansson@arm.com}; 1499293Sandreas.hansson@arm.com} // namespace X86ISA 1509293Sandreas.hansson@arm.com 1519293Sandreas.hansson@arm.com#endif // __ARCH_X86_REMOTEGDB_HH__ 1529293Sandreas.hansson@arm.com