remote_gdb.cc revision 12449:2260f4a68210
112239Sandreas.sandberg@arm.com/*
214249Sgiacomo.travaglini@arm.com * Copyright 2015 LabWare
314249Sgiacomo.travaglini@arm.com * Copyright 2014 Google Inc.
414249Sgiacomo.travaglini@arm.com * Copyright (c) 2010, 2013, 2016 ARM Limited
514249Sgiacomo.travaglini@arm.com * All rights reserved
614249Sgiacomo.travaglini@arm.com *
714249Sgiacomo.travaglini@arm.com * The license below extends only to copyright in the software and shall
814249Sgiacomo.travaglini@arm.com * not be construed as granting a license to any other intellectual
914249Sgiacomo.travaglini@arm.com * property including but not limited to intellectual property relating
1014249Sgiacomo.travaglini@arm.com * to a hardware implementation of the functionality of the software
1114249Sgiacomo.travaglini@arm.com * licensed hereunder.  You may use the software subject to the license
1214249Sgiacomo.travaglini@arm.com * terms below provided that you ensure that this notice is replicated
1314249Sgiacomo.travaglini@arm.com * unmodified and in its entirety in all distributions of the software,
1412239Sandreas.sandberg@arm.com * modified or unmodified, in source code or in binary form.
1512239Sandreas.sandberg@arm.com *
1612239Sandreas.sandberg@arm.com * Copyright (c) 2002-2005 The Regents of The University of Michigan
1712239Sandreas.sandberg@arm.com * All rights reserved.
1812239Sandreas.sandberg@arm.com *
1912239Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without
2012239Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are
2112239Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright
2212239Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer;
2312239Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright
2412239Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the
2512239Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution;
2612239Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its
2712239Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from
2812239Sandreas.sandberg@arm.com * this software without specific prior written permission.
2912239Sandreas.sandberg@arm.com *
3012239Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
3112239Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3212239Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
3312239Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3412239Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3512239Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3612239Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3712239Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3812239Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3912239Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
4012239Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4112239Sandreas.sandberg@arm.com *
4212239Sandreas.sandberg@arm.com * Authors: Nathan Binkert
4312239Sandreas.sandberg@arm.com *          William Wang
4412239Sandreas.sandberg@arm.com *          Boris Shingarov
4512239Sandreas.sandberg@arm.com */
4612239Sandreas.sandberg@arm.com
4712239Sandreas.sandberg@arm.com/*
4812239Sandreas.sandberg@arm.com * Copyright (c) 1990, 1993 The Regents of the University of California
4912239Sandreas.sandberg@arm.com * All rights reserved
5012239Sandreas.sandberg@arm.com *
5112239Sandreas.sandberg@arm.com * This software was developed by the Computer Systems Engineering group
5212239Sandreas.sandberg@arm.com * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
5312239Sandreas.sandberg@arm.com * contributed to Berkeley.
5412239Sandreas.sandberg@arm.com *
5512239Sandreas.sandberg@arm.com * All advertising materials mentioning features or use of this software
5612239Sandreas.sandberg@arm.com * must display the following acknowledgement:
5712239Sandreas.sandberg@arm.com *      This product includes software developed by the University of
5812239Sandreas.sandberg@arm.com *      California, Lawrence Berkeley Laboratories.
5912239Sandreas.sandberg@arm.com *
6012239Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without
6112239Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions
6212239Sandreas.sandberg@arm.com * are met:
6312239Sandreas.sandberg@arm.com * 1. Redistributions of source code must retain the above copyright
6412239Sandreas.sandberg@arm.com *    notice, this list of conditions and the following disclaimer.
6512239Sandreas.sandberg@arm.com * 2. Redistributions in binary form must reproduce the above copyright
6612239Sandreas.sandberg@arm.com *    notice, this list of conditions and the following disclaimer in the
6712239Sandreas.sandberg@arm.com *    documentation and/or other materials provided with the distribution.
6812239Sandreas.sandberg@arm.com * 3. All advertising materials mentioning features or use of this software
6912239Sandreas.sandberg@arm.com *    must display the following acknowledgement:
7012334Sgabeblack@google.com *      This product includes software developed by the University of
7112239Sandreas.sandberg@arm.com *      California, Berkeley and its contributors.
7212239Sandreas.sandberg@arm.com * 4. Neither the name of the University nor the names of its contributors
7312239Sandreas.sandberg@arm.com *    may be used to endorse or promote products derived from this software
7412239Sandreas.sandberg@arm.com *    without specific prior written permission.
7512239Sandreas.sandberg@arm.com *
7612239Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
7712239Sandreas.sandberg@arm.com * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
7812239Sandreas.sandberg@arm.com * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
7912239Sandreas.sandberg@arm.com * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
8012239Sandreas.sandberg@arm.com * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
8112239Sandreas.sandberg@arm.com * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
8212239Sandreas.sandberg@arm.com * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
8312239Sandreas.sandberg@arm.com * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
8412239Sandreas.sandberg@arm.com * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
8512239Sandreas.sandberg@arm.com * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
8612239Sandreas.sandberg@arm.com * SUCH DAMAGE.
8712239Sandreas.sandberg@arm.com *
8812239Sandreas.sandberg@arm.com *      @(#)kgdb_stub.c 8.4 (Berkeley) 1/12/94
8912239Sandreas.sandberg@arm.com */
9012239Sandreas.sandberg@arm.com
9112239Sandreas.sandberg@arm.com/*-
9212239Sandreas.sandberg@arm.com * Copyright (c) 2001 The NetBSD Foundation, Inc.
9312239Sandreas.sandberg@arm.com * All rights reserved.
9412239Sandreas.sandberg@arm.com *
9512239Sandreas.sandberg@arm.com * This code is derived from software contributed to The NetBSD Foundation
9612239Sandreas.sandberg@arm.com * by Jason R. Thorpe.
9712239Sandreas.sandberg@arm.com *
9812239Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without
9912239Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions
10012239Sandreas.sandberg@arm.com * are met:
10112239Sandreas.sandberg@arm.com * 1. Redistributions of source code must retain the above copyright
10212239Sandreas.sandberg@arm.com *    notice, this list of conditions and the following disclaimer.
10312239Sandreas.sandberg@arm.com * 2. Redistributions in binary form must reproduce the above copyright
10412239Sandreas.sandberg@arm.com *    notice, this list of conditions and the following disclaimer in the
10512239Sandreas.sandberg@arm.com *    documentation and/or other materials provided with the distribution.
10612239Sandreas.sandberg@arm.com * 3. All advertising materials mentioning features or use of this software
10712239Sandreas.sandberg@arm.com *    must display the following acknowledgement:
10812239Sandreas.sandberg@arm.com *      This product includes software developed by the NetBSD
10912239Sandreas.sandberg@arm.com *      Foundation, Inc. and its contributors.
11012239Sandreas.sandberg@arm.com * 4. Neither the name of The NetBSD Foundation nor the names of its
11112239Sandreas.sandberg@arm.com *    contributors may be used to endorse or promote products derived
11212239Sandreas.sandberg@arm.com *    from this software without specific prior written permission.
11312239Sandreas.sandberg@arm.com *
11412239Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
11512239Sandreas.sandberg@arm.com * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
11612239Sandreas.sandberg@arm.com * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
11712239Sandreas.sandberg@arm.com * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
11812239Sandreas.sandberg@arm.com * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
11912239Sandreas.sandberg@arm.com * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
12012239Sandreas.sandberg@arm.com * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
12112239Sandreas.sandberg@arm.com * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
12212239Sandreas.sandberg@arm.com * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
12312239Sandreas.sandberg@arm.com * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
12414249Sgiacomo.travaglini@arm.com * POSSIBILITY OF SUCH DAMAGE.
12512239Sandreas.sandberg@arm.com */
12612239Sandreas.sandberg@arm.com
12712239Sandreas.sandberg@arm.com/*
12812239Sandreas.sandberg@arm.com * $NetBSD: kgdb_stub.c,v 1.8 2001/07/07 22:58:00 wdk Exp $
12912239Sandreas.sandberg@arm.com *
13012239Sandreas.sandberg@arm.com * Taken from NetBSD
13112239Sandreas.sandberg@arm.com *
13212239Sandreas.sandberg@arm.com * "Stub" to allow remote cpu to debug over a serial line using gdb.
13312239Sandreas.sandberg@arm.com */
13412239Sandreas.sandberg@arm.com
13512239Sandreas.sandberg@arm.com#include "arch/arm/remote_gdb.hh"
13612239Sandreas.sandberg@arm.com
13712239Sandreas.sandberg@arm.com#include <sys/signal.h>
13812239Sandreas.sandberg@arm.com#include <unistd.h>
13912239Sandreas.sandberg@arm.com
14012239Sandreas.sandberg@arm.com#include <string>
14112239Sandreas.sandberg@arm.com
14212239Sandreas.sandberg@arm.com#include "arch/arm/decoder.hh"
14312239Sandreas.sandberg@arm.com#include "arch/arm/pagetable.hh"
14412239Sandreas.sandberg@arm.com#include "arch/arm/registers.hh"
14512239Sandreas.sandberg@arm.com#include "arch/arm/system.hh"
14612239Sandreas.sandberg@arm.com#include "arch/arm/utility.hh"
14712239Sandreas.sandberg@arm.com#include "arch/arm/vtophys.hh"
14814249Sgiacomo.travaglini@arm.com#include "base/chunk_generator.hh"
14914249Sgiacomo.travaglini@arm.com#include "base/intmath.hh"
15014249Sgiacomo.travaglini@arm.com#include "base/remote_gdb.hh"
15114249Sgiacomo.travaglini@arm.com#include "base/socket.hh"
15214249Sgiacomo.travaglini@arm.com#include "base/trace.hh"
15314249Sgiacomo.travaglini@arm.com#include "cpu/static_inst.hh"
15414288SAndrea.Mondelli@ucf.edu#include "cpu/thread_context.hh"
15514249Sgiacomo.travaglini@arm.com#include "cpu/thread_state.hh"
15614288SAndrea.Mondelli@ucf.edu#include "debug/GDBAcc.hh"
15714249Sgiacomo.travaglini@arm.com#include "debug/GDBMisc.hh"
15814249Sgiacomo.travaglini@arm.com#include "mem/page_table.hh"
15914249Sgiacomo.travaglini@arm.com#include "mem/physical.hh"
16014249Sgiacomo.travaglini@arm.com#include "mem/port.hh"
16114249Sgiacomo.travaglini@arm.com#include "sim/full_system.hh"
16214249Sgiacomo.travaglini@arm.com#include "sim/system.hh"
16314249Sgiacomo.travaglini@arm.com
16412239Sandreas.sandberg@arm.comusing namespace std;
16512239Sandreas.sandberg@arm.comusing namespace ArmISA;
16612239Sandreas.sandberg@arm.com
16712239Sandreas.sandberg@arm.comRemoteGDB::RemoteGDB(System *_system, ThreadContext *tc, int _port)
16812239Sandreas.sandberg@arm.com    : BaseRemoteGDB(_system, tc, _port), regCache32(this), regCache64(this)
16912239Sandreas.sandberg@arm.com{
17012239Sandreas.sandberg@arm.com}
17112239Sandreas.sandberg@arm.com
17212239Sandreas.sandberg@arm.com/*
17312239Sandreas.sandberg@arm.com * Determine if the mapping at va..(va+len) is valid.
17412239Sandreas.sandberg@arm.com */
17512239Sandreas.sandberg@arm.combool
17612239Sandreas.sandberg@arm.comRemoteGDB::acc(Addr va, size_t len)
17712239Sandreas.sandberg@arm.com{
17812239Sandreas.sandberg@arm.com    if (FullSystem) {
17912239Sandreas.sandberg@arm.com        for (ChunkGenerator gen(va, len, PageBytes); !gen.done(); gen.next()) {
18012239Sandreas.sandberg@arm.com            if (!virtvalid(context(), gen.addr())) {
18112239Sandreas.sandberg@arm.com                DPRINTF(GDBAcc, "acc:   %#x mapping is invalid\n", va);
18212239Sandreas.sandberg@arm.com                return false;
18312239Sandreas.sandberg@arm.com            }
18412693Sandreas.sandberg@arm.com        }
18512693Sandreas.sandberg@arm.com
18612239Sandreas.sandberg@arm.com        DPRINTF(GDBAcc, "acc:   %#x mapping is valid\n", va);
18712239Sandreas.sandberg@arm.com        return true;
18812239Sandreas.sandberg@arm.com    } else {
18912239Sandreas.sandberg@arm.com        TlbEntry entry;
19012239Sandreas.sandberg@arm.com        //Check to make sure the first byte is mapped into the processes address
19112239Sandreas.sandberg@arm.com        //space.
19212239Sandreas.sandberg@arm.com        if (context()->getProcessPtr()->pTable->lookup(va, entry))
19312239Sandreas.sandberg@arm.com            return true;
19412239Sandreas.sandberg@arm.com        return false;
19512239Sandreas.sandberg@arm.com    }
19612239Sandreas.sandberg@arm.com}
19712239Sandreas.sandberg@arm.com
19812239Sandreas.sandberg@arm.comvoid
19912239Sandreas.sandberg@arm.comRemoteGDB::AArch64GdbRegCache::getRegs(ThreadContext *context)
20012239Sandreas.sandberg@arm.com{
20112239Sandreas.sandberg@arm.com    DPRINTF(GDBAcc, "getRegs in remotegdb \n");
20212239Sandreas.sandberg@arm.com
20312239Sandreas.sandberg@arm.com    for (int i = 0; i < 31; ++i)
20412239Sandreas.sandberg@arm.com        r.x[i] = context->readIntReg(INTREG_X0 + i);
20512239Sandreas.sandberg@arm.com    r.spx = context->readIntReg(INTREG_SPX);
20612239Sandreas.sandberg@arm.com    r.pc = context->pcState().pc();
20712239Sandreas.sandberg@arm.com    r.cpsr = context->readMiscRegNoEffect(MISCREG_CPSR);
20812239Sandreas.sandberg@arm.com
20912239Sandreas.sandberg@arm.com    for (int i = 0; i < 32*4; i += 4) {
21012239Sandreas.sandberg@arm.com        r.v[i + 0] = context->readFloatRegBits(i + 2);
21112239Sandreas.sandberg@arm.com        r.v[i + 1] = context->readFloatRegBits(i + 3);
21212239Sandreas.sandberg@arm.com        r.v[i + 2] = context->readFloatRegBits(i + 0);
21312239Sandreas.sandberg@arm.com        r.v[i + 3] = context->readFloatRegBits(i + 1);
21412239Sandreas.sandberg@arm.com    }
21512239Sandreas.sandberg@arm.com
21612239Sandreas.sandberg@arm.com    for (int i = 0; i < 32; i ++) {
21712239Sandreas.sandberg@arm.com        r.vec[i] = context->readVecReg(RegId(VecRegClass,i));
21812239Sandreas.sandberg@arm.com    }
21912239Sandreas.sandberg@arm.com}
22012239Sandreas.sandberg@arm.com
22112239Sandreas.sandberg@arm.comvoid
22212239Sandreas.sandberg@arm.comRemoteGDB::AArch64GdbRegCache::setRegs(ThreadContext *context) const
22312239Sandreas.sandberg@arm.com{
22412239Sandreas.sandberg@arm.com    DPRINTF(GDBAcc, "setRegs in remotegdb \n");
22512239Sandreas.sandberg@arm.com
22612239Sandreas.sandberg@arm.com    for (int i = 0; i < 31; ++i)
22712239Sandreas.sandberg@arm.com        context->setIntReg(INTREG_X0 + i, r.x[i]);
22812239Sandreas.sandberg@arm.com    context->pcState(r.pc);
22912239Sandreas.sandberg@arm.com    context->setMiscRegNoEffect(MISCREG_CPSR, r.cpsr);
23012239Sandreas.sandberg@arm.com    // Update the stack pointer. This should be done after
23112239Sandreas.sandberg@arm.com    // updating CPSR/PSTATE since that might affect how SPX gets
23212239Sandreas.sandberg@arm.com    // mapped.
23312239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_SPX, r.spx);
23412239Sandreas.sandberg@arm.com
23512239Sandreas.sandberg@arm.com    for (int i = 0; i < 32*4; i += 4) {
23612239Sandreas.sandberg@arm.com        context->setFloatRegBits(i + 2, r.v[i + 0]);
23712239Sandreas.sandberg@arm.com        context->setFloatRegBits(i + 3, r.v[i + 1]);
23812239Sandreas.sandberg@arm.com        context->setFloatRegBits(i + 0, r.v[i + 2]);
23912239Sandreas.sandberg@arm.com        context->setFloatRegBits(i + 1, r.v[i + 3]);
24012239Sandreas.sandberg@arm.com    }
24112239Sandreas.sandberg@arm.com
24212239Sandreas.sandberg@arm.com    for (int i = 0; i < 32; i ++) {
24312239Sandreas.sandberg@arm.com        context->setVecReg(RegId(VecRegClass, i), r.vec[i]);
24412239Sandreas.sandberg@arm.com    }
24512239Sandreas.sandberg@arm.com}
24612239Sandreas.sandberg@arm.com
24712239Sandreas.sandberg@arm.comvoid
24812239Sandreas.sandberg@arm.comRemoteGDB::AArch32GdbRegCache::getRegs(ThreadContext *context)
24912239Sandreas.sandberg@arm.com{
25012239Sandreas.sandberg@arm.com    DPRINTF(GDBAcc, "getRegs in remotegdb \n");
25112239Sandreas.sandberg@arm.com
25212239Sandreas.sandberg@arm.com    r.gpr[0] = context->readIntReg(INTREG_R0);
25312239Sandreas.sandberg@arm.com    r.gpr[1] = context->readIntReg(INTREG_R1);
25412239Sandreas.sandberg@arm.com    r.gpr[2] = context->readIntReg(INTREG_R2);
25512239Sandreas.sandberg@arm.com    r.gpr[3] = context->readIntReg(INTREG_R3);
25612239Sandreas.sandberg@arm.com    r.gpr[4] = context->readIntReg(INTREG_R4);
25712239Sandreas.sandberg@arm.com    r.gpr[5] = context->readIntReg(INTREG_R5);
25812239Sandreas.sandberg@arm.com    r.gpr[6] = context->readIntReg(INTREG_R6);
25912239Sandreas.sandberg@arm.com    r.gpr[7] = context->readIntReg(INTREG_R7);
26012239Sandreas.sandberg@arm.com    r.gpr[8] = context->readIntReg(INTREG_R8);
26112239Sandreas.sandberg@arm.com    r.gpr[9] = context->readIntReg(INTREG_R9);
26212239Sandreas.sandberg@arm.com    r.gpr[10] = context->readIntReg(INTREG_R10);
26312239Sandreas.sandberg@arm.com    r.gpr[11] = context->readIntReg(INTREG_R11);
26412239Sandreas.sandberg@arm.com    r.gpr[12] = context->readIntReg(INTREG_R12);
26512239Sandreas.sandberg@arm.com    r.gpr[13] = context->readIntReg(INTREG_SP);
26612239Sandreas.sandberg@arm.com    r.gpr[14] = context->readIntReg(INTREG_LR);
26712239Sandreas.sandberg@arm.com    r.gpr[15] = context->pcState().pc();
26812239Sandreas.sandberg@arm.com
26912239Sandreas.sandberg@arm.com    // One day somebody will implement transfer of FPRs correctly.
27012239Sandreas.sandberg@arm.com    for (int i=0; i<8*3; i++) r.fpr[i] = 0;
27112239Sandreas.sandberg@arm.com
27212239Sandreas.sandberg@arm.com    r.fpscr = context->readMiscRegNoEffect(MISCREG_FPSCR);
27312239Sandreas.sandberg@arm.com    r.cpsr = context->readMiscRegNoEffect(MISCREG_CPSR);
27412239Sandreas.sandberg@arm.com}
27512239Sandreas.sandberg@arm.com
27612239Sandreas.sandberg@arm.comvoid
27712239Sandreas.sandberg@arm.comRemoteGDB::AArch32GdbRegCache::setRegs(ThreadContext *context) const
27812239Sandreas.sandberg@arm.com{
27912239Sandreas.sandberg@arm.com    DPRINTF(GDBAcc, "setRegs in remotegdb \n");
28012239Sandreas.sandberg@arm.com
28112239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R0, r.gpr[0]);
28212239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R1, r.gpr[1]);
28312239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R2, r.gpr[2]);
28412239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R3, r.gpr[3]);
28512239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R4, r.gpr[4]);
28612239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R5, r.gpr[5]);
28712239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R6, r.gpr[6]);
28812239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R7, r.gpr[7]);
28912239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R8, r.gpr[8]);
29012239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R9, r.gpr[9]);
29112239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R10, r.gpr[10]);
29212239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R11, r.gpr[11]);
29312239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_R12, r.gpr[12]);
29412239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_SP, r.gpr[13]);
29512239Sandreas.sandberg@arm.com    context->setIntReg(INTREG_LR, r.gpr[14]);
29612239Sandreas.sandberg@arm.com    context->pcState(r.gpr[15]);
29712239Sandreas.sandberg@arm.com
29812239Sandreas.sandberg@arm.com    // One day somebody will implement transfer of FPRs correctly.
29912239Sandreas.sandberg@arm.com
30012239Sandreas.sandberg@arm.com    context->setMiscReg(MISCREG_FPSCR, r.fpscr);
30112239Sandreas.sandberg@arm.com    context->setMiscRegNoEffect(MISCREG_CPSR, r.cpsr);
30212239Sandreas.sandberg@arm.com}
30312239Sandreas.sandberg@arm.com
30412239Sandreas.sandberg@arm.comBaseGdbRegCache*
30512239Sandreas.sandberg@arm.comRemoteGDB::gdbRegs()
30612239Sandreas.sandberg@arm.com{
30712239Sandreas.sandberg@arm.com    if (inAArch64(context()))
30812239Sandreas.sandberg@arm.com        return &regCache64;
30912239Sandreas.sandberg@arm.com    else
31012239Sandreas.sandberg@arm.com        return &regCache32;
31112239Sandreas.sandberg@arm.com}
31212239Sandreas.sandberg@arm.com