remote_gdb.cc revision 8780
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/* 328332Snate@binkert.org * Copyright (c) 1990, 1993 The Regents of the University of California 338332Snate@binkert.org * 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: 415543Ssaidi@eecs.umich.edu * This product includes software developed by the University of 425543Ssaidi@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: 545543Ssaidi@eecs.umich.edu * This product includes software developed by the University of 555543Ssaidi@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 * 725543Ssaidi@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: 925543Ssaidi@eecs.umich.edu * This product includes software developed by the NetBSD 935543Ssaidi@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> 1205569Snate@binkert.org#include <unistd.h> 1213536Sgblack@eecs.umich.edu 1223536Sgblack@eecs.umich.edu#include <string> 1233536Sgblack@eecs.umich.edu 1243961Sgblack@eecs.umich.edu 1253550Sgblack@eecs.umich.edu#include "arch/alpha/kgdb.h" 1266327Sgblack@eecs.umich.edu#include "arch/alpha/regredir.hh" 1273550Sgblack@eecs.umich.edu#include "arch/alpha/remote_gdb.hh" 1288229Snate@binkert.org#include "arch/alpha/utility.hh" 1298780Sgblack@eecs.umich.edu#include "arch/alpha/vtophys.hh" 1303536Sgblack@eecs.umich.edu#include "base/intmath.hh" 1313536Sgblack@eecs.umich.edu#include "base/remote_gdb.hh" 1323536Sgblack@eecs.umich.edu#include "base/socket.hh" 1333536Sgblack@eecs.umich.edu#include "base/trace.hh" 1348541Sgblack@eecs.umich.edu#include "cpu/decode.hh" 1358229Snate@binkert.org#include "cpu/static_inst.hh" 1363536Sgblack@eecs.umich.edu#include "cpu/thread_context.hh" 1378232Snate@binkert.org#include "debug/GDBAcc.hh" 1388232Snate@binkert.org#include "debug/GDBMisc.hh" 1393536Sgblack@eecs.umich.edu#include "mem/physical.hh" 1403536Sgblack@eecs.umich.edu#include "mem/port.hh" 1413536Sgblack@eecs.umich.edu#include "sim/system.hh" 1428780Sgblack@eecs.umich.edu#include "sim/full_system.hh" 1433536Sgblack@eecs.umich.edu 1443536Sgblack@eecs.umich.eduusing namespace std; 1455567Snate@binkert.orgusing namespace AlphaISA; 1463536Sgblack@eecs.umich.edu 1475569Snate@binkert.orgRemoteGDB::RemoteGDB(System *_system, ThreadContext *tc) 1485569Snate@binkert.org : BaseRemoteGDB(_system, tc, KGDB_NUMREGS) 1493536Sgblack@eecs.umich.edu{ 1503579Sgblack@eecs.umich.edu memset(gdbregs.regs, 0, gdbregs.bytes()); 1513536Sgblack@eecs.umich.edu} 1523536Sgblack@eecs.umich.edu 1535569Snate@binkert.org/* 1545569Snate@binkert.org * Determine if the mapping at va..(va+len) is valid. 1555569Snate@binkert.org */ 1563536Sgblack@eecs.umich.edubool 1573536Sgblack@eecs.umich.eduRemoteGDB::acc(Addr va, size_t len) 1583536Sgblack@eecs.umich.edu{ 1598780Sgblack@eecs.umich.edu if (FullSystem) { 1608780Sgblack@eecs.umich.edu Addr last_va; 1613536Sgblack@eecs.umich.edu 1628780Sgblack@eecs.umich.edu va = TruncPage(va); 1638780Sgblack@eecs.umich.edu last_va = RoundPage(va + len); 1643536Sgblack@eecs.umich.edu 1658780Sgblack@eecs.umich.edu do { 1668780Sgblack@eecs.umich.edu if (IsK0Seg(va)) { 1678780Sgblack@eecs.umich.edu if (va < (K0SegBase + pmem->size())) { 1688780Sgblack@eecs.umich.edu DPRINTF(GDBAcc, "acc: Mapping is valid K0SEG <= " 1698780Sgblack@eecs.umich.edu "%#x < K0SEG + size\n", va); 1708780Sgblack@eecs.umich.edu return true; 1718780Sgblack@eecs.umich.edu } else { 1728780Sgblack@eecs.umich.edu DPRINTF(GDBAcc, "acc: Mapping invalid %#x " 1738780Sgblack@eecs.umich.edu "> K0SEG + size\n", va); 1748780Sgblack@eecs.umich.edu return false; 1758780Sgblack@eecs.umich.edu } 1768780Sgblack@eecs.umich.edu } 1778780Sgblack@eecs.umich.edu 1788780Sgblack@eecs.umich.edu /** 1798780Sgblack@eecs.umich.edu * This code says that all accesses to palcode (instruction 1808780Sgblack@eecs.umich.edu * and data) are valid since there isn't a va->pa mapping 1818780Sgblack@eecs.umich.edu * because palcode is accessed physically. At some point this 1828780Sgblack@eecs.umich.edu * should probably be cleaned up but there is no easy way to 1838780Sgblack@eecs.umich.edu * do it. 1848780Sgblack@eecs.umich.edu */ 1858780Sgblack@eecs.umich.edu 1868780Sgblack@eecs.umich.edu if (PcPAL(va) || va < 0x10000) 1873536Sgblack@eecs.umich.edu return true; 1888780Sgblack@eecs.umich.edu 1898780Sgblack@eecs.umich.edu Addr ptbr = context->readMiscRegNoEffect(IPR_PALtemp20); 1908780Sgblack@eecs.umich.edu PageTableEntry pte = 1918780Sgblack@eecs.umich.edu kernel_pte_lookup(context->getPhysPort(), ptbr, va); 1928780Sgblack@eecs.umich.edu if (!pte.valid()) { 1938780Sgblack@eecs.umich.edu DPRINTF(GDBAcc, "acc: %#x pte is invalid\n", va); 1943536Sgblack@eecs.umich.edu return false; 1953536Sgblack@eecs.umich.edu } 1968780Sgblack@eecs.umich.edu va += PageBytes; 1978780Sgblack@eecs.umich.edu } while (va < last_va); 1983536Sgblack@eecs.umich.edu 1998780Sgblack@eecs.umich.edu DPRINTF(GDBAcc, "acc: %#x mapping is valid\n", va); 2008780Sgblack@eecs.umich.edu return true; 2018780Sgblack@eecs.umich.edu } else { 2028780Sgblack@eecs.umich.edu panic("acc function needs to be rewritten for SE mode\n"); 2038780Sgblack@eecs.umich.edu } 2043536Sgblack@eecs.umich.edu} 2053536Sgblack@eecs.umich.edu 2065569Snate@binkert.org/* 2075569Snate@binkert.org * Translate the kernel debugger register format into the GDB register 2085569Snate@binkert.org * format. 2095569Snate@binkert.org */ 2103536Sgblack@eecs.umich.eduvoid 2113536Sgblack@eecs.umich.eduRemoteGDB::getregs() 2123536Sgblack@eecs.umich.edu{ 2133579Sgblack@eecs.umich.edu memset(gdbregs.regs, 0, gdbregs.bytes()); 2143536Sgblack@eecs.umich.edu 2157720Sgblack@eecs.umich.edu gdbregs.regs[KGDB_REG_PC] = context->pcState().pc(); 2163536Sgblack@eecs.umich.edu 2173536Sgblack@eecs.umich.edu // @todo: Currently this is very Alpha specific. 2185568Snate@binkert.org if (PcPAL(gdbregs.regs[KGDB_REG_PC])) { 2195568Snate@binkert.org for (int i = 0; i < NumIntArchRegs; ++i) { 2205568Snate@binkert.org gdbregs.regs[i] = context->readIntReg(reg_redir[i]); 2213536Sgblack@eecs.umich.edu } 2223536Sgblack@eecs.umich.edu } else { 2235568Snate@binkert.org for (int i = 0; i < NumIntArchRegs; ++i) { 2243536Sgblack@eecs.umich.edu gdbregs.regs[i] = context->readIntReg(i); 2253536Sgblack@eecs.umich.edu } 2263536Sgblack@eecs.umich.edu } 2273536Sgblack@eecs.umich.edu 2283536Sgblack@eecs.umich.edu#ifdef KGDB_FP_REGS 2295568Snate@binkert.org for (int i = 0; i < NumFloatArchRegs; ++i) { 2303536Sgblack@eecs.umich.edu gdbregs.regs[i + KGDB_REG_F0] = context->readFloatRegBits(i); 2313536Sgblack@eecs.umich.edu } 2323536Sgblack@eecs.umich.edu#endif 2333536Sgblack@eecs.umich.edu} 2343536Sgblack@eecs.umich.edu 2355569Snate@binkert.org/* 2365569Snate@binkert.org * Translate the GDB register format into the kernel debugger register 2375569Snate@binkert.org * format. 2385569Snate@binkert.org */ 2393536Sgblack@eecs.umich.eduvoid 2403536Sgblack@eecs.umich.eduRemoteGDB::setregs() 2413536Sgblack@eecs.umich.edu{ 2423536Sgblack@eecs.umich.edu // @todo: Currently this is very Alpha specific. 2435568Snate@binkert.org if (PcPAL(gdbregs.regs[KGDB_REG_PC])) { 2445568Snate@binkert.org for (int i = 0; i < NumIntArchRegs; ++i) { 2455568Snate@binkert.org context->setIntReg(reg_redir[i], gdbregs.regs[i]); 2463536Sgblack@eecs.umich.edu } 2473536Sgblack@eecs.umich.edu } else { 2485568Snate@binkert.org for (int i = 0; i < NumIntArchRegs; ++i) { 2493536Sgblack@eecs.umich.edu context->setIntReg(i, gdbregs.regs[i]); 2503536Sgblack@eecs.umich.edu } 2513536Sgblack@eecs.umich.edu } 2523536Sgblack@eecs.umich.edu 2533536Sgblack@eecs.umich.edu#ifdef KGDB_FP_REGS 2545568Snate@binkert.org for (int i = 0; i < NumFloatArchRegs; ++i) { 2553536Sgblack@eecs.umich.edu context->setFloatRegBits(i, gdbregs.regs[i + KGDB_REG_F0]); 2563536Sgblack@eecs.umich.edu } 2573536Sgblack@eecs.umich.edu#endif 2587720Sgblack@eecs.umich.edu context->pcState(gdbregs.regs[KGDB_REG_PC]); 2593536Sgblack@eecs.umich.edu} 2603536Sgblack@eecs.umich.edu 2613536Sgblack@eecs.umich.eduvoid 2623536Sgblack@eecs.umich.eduRemoteGDB::clearSingleStep() 2633536Sgblack@eecs.umich.edu{ 2643536Sgblack@eecs.umich.edu DPRINTF(GDBMisc, "clearSingleStep bt_addr=%#x nt_addr=%#x\n", 2653550Sgblack@eecs.umich.edu takenBkpt, notTakenBkpt); 2663536Sgblack@eecs.umich.edu 2673550Sgblack@eecs.umich.edu if (takenBkpt != 0) 2683536Sgblack@eecs.umich.edu clearTempBreakpoint(takenBkpt); 2693536Sgblack@eecs.umich.edu 2703550Sgblack@eecs.umich.edu if (notTakenBkpt != 0) 2713536Sgblack@eecs.umich.edu clearTempBreakpoint(notTakenBkpt); 2723536Sgblack@eecs.umich.edu} 2733536Sgblack@eecs.umich.edu 2743536Sgblack@eecs.umich.eduvoid 2753536Sgblack@eecs.umich.eduRemoteGDB::setSingleStep() 2763536Sgblack@eecs.umich.edu{ 2777720Sgblack@eecs.umich.edu PCState pc = context->pcState(); 2787720Sgblack@eecs.umich.edu PCState bpc; 2793536Sgblack@eecs.umich.edu bool set_bt = false; 2803536Sgblack@eecs.umich.edu 2813536Sgblack@eecs.umich.edu // User was stopped at pc, e.g. the instruction at pc was not 2823536Sgblack@eecs.umich.edu // executed. 2837720Sgblack@eecs.umich.edu MachInst inst = read<MachInst>(pc.pc()); 2848541Sgblack@eecs.umich.edu StaticInstPtr si = context->getDecoderPtr()->decode(inst, pc.pc()); 2853536Sgblack@eecs.umich.edu if (si->hasBranchTarget(pc, context, bpc)) { 2863536Sgblack@eecs.umich.edu // Don't bother setting a breakpoint on the taken branch if it 2873536Sgblack@eecs.umich.edu // is the same as the next pc 2887720Sgblack@eecs.umich.edu if (bpc.pc() != pc.npc()) 2893536Sgblack@eecs.umich.edu set_bt = true; 2903536Sgblack@eecs.umich.edu } 2913536Sgblack@eecs.umich.edu 2923536Sgblack@eecs.umich.edu DPRINTF(GDBMisc, "setSingleStep bt_addr=%#x nt_addr=%#x\n", 2933550Sgblack@eecs.umich.edu takenBkpt, notTakenBkpt); 2943536Sgblack@eecs.umich.edu 2957720Sgblack@eecs.umich.edu setTempBreakpoint(notTakenBkpt = pc.npc()); 2963536Sgblack@eecs.umich.edu 2973536Sgblack@eecs.umich.edu if (set_bt) 2987720Sgblack@eecs.umich.edu setTempBreakpoint(takenBkpt = bpc.pc()); 2993536Sgblack@eecs.umich.edu} 3003536Sgblack@eecs.umich.edu 3013536Sgblack@eecs.umich.edu// Write bytes to kernel address space for debugger. 3023536Sgblack@eecs.umich.edubool 3033536Sgblack@eecs.umich.eduRemoteGDB::write(Addr vaddr, size_t size, const char *data) 3043536Sgblack@eecs.umich.edu{ 3053536Sgblack@eecs.umich.edu if (BaseRemoteGDB::write(vaddr, size, data)) { 3063536Sgblack@eecs.umich.edu#ifdef IMB 3073536Sgblack@eecs.umich.edu alpha_pal_imb(); 3083536Sgblack@eecs.umich.edu#endif 3093536Sgblack@eecs.umich.edu return true; 3103536Sgblack@eecs.umich.edu } else { 3113536Sgblack@eecs.umich.edu return false; 3123536Sgblack@eecs.umich.edu } 3133536Sgblack@eecs.umich.edu} 3143536Sgblack@eecs.umich.edu 315