remote_gdb.cc revision 3571
13536Sgblack@eecs.umich.edu/* 23536Sgblack@eecs.umich.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan 33536Sgblack@eecs.umich.edu * All rights reserved. 43536Sgblack@eecs.umich.edu * 53536Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 63536Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 73536Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 83536Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 93536Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 103536Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 113536Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 123536Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 133536Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 143536Sgblack@eecs.umich.edu * this software without specific prior written permission. 153536Sgblack@eecs.umich.edu * 163536Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173536Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183536Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193536Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203536Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213536Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223536Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233536Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243536Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253536Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263536Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273536Sgblack@eecs.umich.edu * 283536Sgblack@eecs.umich.edu * Authors: Nathan Binkert 293536Sgblack@eecs.umich.edu */ 303536Sgblack@eecs.umich.edu 313536Sgblack@eecs.umich.edu/* 323536Sgblack@eecs.umich.edu * Copyright (c) 1990, 1993 333536Sgblack@eecs.umich.edu * The Regents of the University of California. All rights reserved. 343536Sgblack@eecs.umich.edu * 353536Sgblack@eecs.umich.edu * This software was developed by the Computer Systems Engineering group 363536Sgblack@eecs.umich.edu * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 373536Sgblack@eecs.umich.edu * contributed to Berkeley. 383536Sgblack@eecs.umich.edu * 393536Sgblack@eecs.umich.edu * All advertising materials mentioning features or use of this software 403536Sgblack@eecs.umich.edu * must display the following acknowledgement: 413536Sgblack@eecs.umich.edu * This product includes software developed by the University of 423536Sgblack@eecs.umich.edu * California, Lawrence Berkeley Laboratories. 433536Sgblack@eecs.umich.edu * 443536Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 453536Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions 463536Sgblack@eecs.umich.edu * are met: 473536Sgblack@eecs.umich.edu * 1. Redistributions of source code must retain the above copyright 483536Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer. 493536Sgblack@eecs.umich.edu * 2. Redistributions in binary form must reproduce the above copyright 503536Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 513536Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution. 523536Sgblack@eecs.umich.edu * 3. All advertising materials mentioning features or use of this software 533536Sgblack@eecs.umich.edu * must display the following acknowledgement: 543536Sgblack@eecs.umich.edu * This product includes software developed by the University of 553536Sgblack@eecs.umich.edu * California, Berkeley and its contributors. 563536Sgblack@eecs.umich.edu * 4. Neither the name of the University nor the names of its contributors 573536Sgblack@eecs.umich.edu * may be used to endorse or promote products derived from this software 583536Sgblack@eecs.umich.edu * without specific prior written permission. 593536Sgblack@eecs.umich.edu * 603536Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 613536Sgblack@eecs.umich.edu * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 623536Sgblack@eecs.umich.edu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 633536Sgblack@eecs.umich.edu * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 643536Sgblack@eecs.umich.edu * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 653536Sgblack@eecs.umich.edu * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 663536Sgblack@eecs.umich.edu * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 673536Sgblack@eecs.umich.edu * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 683536Sgblack@eecs.umich.edu * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 693536Sgblack@eecs.umich.edu * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 703536Sgblack@eecs.umich.edu * SUCH DAMAGE. 713536Sgblack@eecs.umich.edu * 723536Sgblack@eecs.umich.edu * @(#)kgdb_stub.c 8.4 (Berkeley) 1/12/94 733536Sgblack@eecs.umich.edu */ 743536Sgblack@eecs.umich.edu 753536Sgblack@eecs.umich.edu/*- 763536Sgblack@eecs.umich.edu * Copyright (c) 2001 The NetBSD Foundation, Inc. 773536Sgblack@eecs.umich.edu * All rights reserved. 783536Sgblack@eecs.umich.edu * 793536Sgblack@eecs.umich.edu * This code is derived from software contributed to The NetBSD Foundation 803536Sgblack@eecs.umich.edu * by Jason R. Thorpe. 813536Sgblack@eecs.umich.edu * 823536Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 833536Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions 843536Sgblack@eecs.umich.edu * are met: 853536Sgblack@eecs.umich.edu * 1. Redistributions of source code must retain the above copyright 863536Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer. 873536Sgblack@eecs.umich.edu * 2. Redistributions in binary form must reproduce the above copyright 883536Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 893536Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution. 903536Sgblack@eecs.umich.edu * 3. All advertising materials mentioning features or use of this software 913536Sgblack@eecs.umich.edu * must display the following acknowledgement: 923536Sgblack@eecs.umich.edu * This product includes software developed by the NetBSD 933536Sgblack@eecs.umich.edu * Foundation, Inc. and its contributors. 943536Sgblack@eecs.umich.edu * 4. Neither the name of The NetBSD Foundation nor the names of its 953536Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived 963536Sgblack@eecs.umich.edu * from this software without specific prior written permission. 973536Sgblack@eecs.umich.edu * 983536Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 993536Sgblack@eecs.umich.edu * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 1003536Sgblack@eecs.umich.edu * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1013536Sgblack@eecs.umich.edu * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 1023536Sgblack@eecs.umich.edu * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1033536Sgblack@eecs.umich.edu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1043536Sgblack@eecs.umich.edu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 1053536Sgblack@eecs.umich.edu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 1063536Sgblack@eecs.umich.edu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 1073536Sgblack@eecs.umich.edu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 1083536Sgblack@eecs.umich.edu * POSSIBILITY OF SUCH DAMAGE. 1093536Sgblack@eecs.umich.edu */ 1103536Sgblack@eecs.umich.edu 1113536Sgblack@eecs.umich.edu/* 1123536Sgblack@eecs.umich.edu * $NetBSD: kgdb_stub.c,v 1.8 2001/07/07 22:58:00 wdk Exp $ 1133536Sgblack@eecs.umich.edu * 1143536Sgblack@eecs.umich.edu * Taken from NetBSD 1153536Sgblack@eecs.umich.edu * 1163536Sgblack@eecs.umich.edu * "Stub" to allow remote cpu to debug over a serial line using gdb. 1173536Sgblack@eecs.umich.edu */ 1183536Sgblack@eecs.umich.edu 1193536Sgblack@eecs.umich.edu#include <sys/signal.h> 1203536Sgblack@eecs.umich.edu 1213536Sgblack@eecs.umich.edu#include <string> 1223536Sgblack@eecs.umich.edu#include <unistd.h> 1233536Sgblack@eecs.umich.edu 1243536Sgblack@eecs.umich.edu#include "arch/vtophys.hh" 1253536Sgblack@eecs.umich.edu#include "arch/sparc/remote_gdb.hh" 1263536Sgblack@eecs.umich.edu#include "base/intmath.hh" 1273536Sgblack@eecs.umich.edu#include "base/remote_gdb.hh" 1283536Sgblack@eecs.umich.edu#include "base/socket.hh" 1293536Sgblack@eecs.umich.edu#include "base/trace.hh" 1303536Sgblack@eecs.umich.edu#include "config/full_system.hh" 1313536Sgblack@eecs.umich.edu#include "cpu/thread_context.hh" 1323536Sgblack@eecs.umich.edu#include "cpu/static_inst.hh" 1333536Sgblack@eecs.umich.edu#include "mem/physical.hh" 1343536Sgblack@eecs.umich.edu#include "mem/port.hh" 1353536Sgblack@eecs.umich.edu#include "sim/system.hh" 1363536Sgblack@eecs.umich.edu 1373536Sgblack@eecs.umich.eduusing namespace std; 1383536Sgblack@eecs.umich.eduusing namespace TheISA; 1393536Sgblack@eecs.umich.edu 1403550Sgblack@eecs.umich.eduRemoteGDB::RemoteGDB(System *_system, ThreadContext *c) 1413550Sgblack@eecs.umich.edu : BaseRemoteGDB(_system, c, NumGDBRegs) 1423536Sgblack@eecs.umich.edu{} 1433536Sgblack@eecs.umich.edu 1443536Sgblack@eecs.umich.edu/////////////////////////////////////////////////////////// 1453536Sgblack@eecs.umich.edu// RemoteGDB::acc 1463536Sgblack@eecs.umich.edu// 1473536Sgblack@eecs.umich.edu// Determine if the mapping at va..(va+len) is valid. 1483536Sgblack@eecs.umich.edu// 1493536Sgblack@eecs.umich.edubool 1503536Sgblack@eecs.umich.eduRemoteGDB::acc(Addr va, size_t len) 1513536Sgblack@eecs.umich.edu{ 1523571Sgblack@eecs.umich.edu //@Todo In NetBSD, this function checks if all addresses 1533571Sgblack@eecs.umich.edu //from va to va + len have valid page mape entries. Not 1543571Sgblack@eecs.umich.edu //sure how this will work for other OSes or in general. 1553536Sgblack@eecs.umich.edu return true; 1563536Sgblack@eecs.umich.edu} 1573536Sgblack@eecs.umich.edu 1583536Sgblack@eecs.umich.edu/////////////////////////////////////////////////////////// 1593536Sgblack@eecs.umich.edu// RemoteGDB::getregs 1603536Sgblack@eecs.umich.edu// 1613536Sgblack@eecs.umich.edu// Translate the kernel debugger register format into 1623536Sgblack@eecs.umich.edu// the GDB register format. 1633536Sgblack@eecs.umich.eduvoid 1643536Sgblack@eecs.umich.eduRemoteGDB::getregs() 1653536Sgblack@eecs.umich.edu{ 1663536Sgblack@eecs.umich.edu memset(gdbregs.regs, 0, gdbregs.size); 1673536Sgblack@eecs.umich.edu 1683550Sgblack@eecs.umich.edu gdbregs.regs[RegPc] = context->readPC(); 1693550Sgblack@eecs.umich.edu gdbregs.regs[RegNpc] = context->readNextPC(); 1703571Sgblack@eecs.umich.edu for(int x = RegG0; x <= RegI0 + 7; x++) 1713550Sgblack@eecs.umich.edu gdbregs.regs[x] = context->readIntReg(x - RegG0); 1723571Sgblack@eecs.umich.edu //Floating point registers are left at 0 in netbsd 1733571Sgblack@eecs.umich.edu //All registers other than the pc, npc and int regs 1743571Sgblack@eecs.umich.edu //are ignored as well. 1753536Sgblack@eecs.umich.edu} 1763536Sgblack@eecs.umich.edu 1773536Sgblack@eecs.umich.edu/////////////////////////////////////////////////////////// 1783536Sgblack@eecs.umich.edu// RemoteGDB::setregs 1793536Sgblack@eecs.umich.edu// 1803536Sgblack@eecs.umich.edu// Translate the GDB register format into the kernel 1813536Sgblack@eecs.umich.edu// debugger register format. 1823536Sgblack@eecs.umich.edu// 1833536Sgblack@eecs.umich.eduvoid 1843536Sgblack@eecs.umich.eduRemoteGDB::setregs() 1853536Sgblack@eecs.umich.edu{ 1863550Sgblack@eecs.umich.edu context->setPC(gdbregs.regs[RegPc]); 1873550Sgblack@eecs.umich.edu context->setNextPC(gdbregs.regs[RegNpc]); 1883571Sgblack@eecs.umich.edu for(int x = RegG0; x <= RegI0 + 7; x++) 1893550Sgblack@eecs.umich.edu context->setIntReg(x - RegG0, gdbregs.regs[x]); 1903571Sgblack@eecs.umich.edu //Only the integer registers, pc and npc are set in netbsd 1913536Sgblack@eecs.umich.edu} 1923536Sgblack@eecs.umich.edu 1933536Sgblack@eecs.umich.eduvoid 1943536Sgblack@eecs.umich.eduRemoteGDB::clearSingleStep() 1953536Sgblack@eecs.umich.edu{ 1963571Sgblack@eecs.umich.edu panic("SPARC does not support hardware single stepping\n"); 1973536Sgblack@eecs.umich.edu} 1983536Sgblack@eecs.umich.edu 1993536Sgblack@eecs.umich.eduvoid 2003536Sgblack@eecs.umich.eduRemoteGDB::setSingleStep() 2013536Sgblack@eecs.umich.edu{ 2023571Sgblack@eecs.umich.edu panic("SPARC does not support hardware single stepping\n"); 2033536Sgblack@eecs.umich.edu} 204