From 32e2157355b79af2c3b0af8429e5df3d4c7df562 Mon Sep 17 00:00:00 2001 From: Ciro Santilli Date: Wed, 14 Nov 2018 00:00:00 +0000 Subject: [PATCH] arch-arm: only change the pc address when GDB registers are set The entire pcState was being reset, which made the simulation incorrectly switch to aarch32 from aarch64. Change-Id: I9ba7dd0ed95bc6120d94393bba272e0cb8c081c5 Reviewed-on: https://gem5-review.googlesource.com/c/14496 Reviewed-by: Giacomo Travaglini Maintainer: Giacomo Travaglini --- src/arch/arm/remote_gdb.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/arch/arm/remote_gdb.cc b/src/arch/arm/remote_gdb.cc index a395cd913..38207d494 100644 --- a/src/arch/arm/remote_gdb.cc +++ b/src/arch/arm/remote_gdb.cc @@ -218,7 +218,9 @@ RemoteGDB::AArch64GdbRegCache::setRegs(ThreadContext *context) const for (int i = 0; i < 31; ++i) context->setIntReg(INTREG_X0 + i, r.x[i]); - context->pcState(r.pc); + auto pc_state = context->pcState(); + pc_state.set(r.pc); + context->pcState(pc_state); context->setMiscRegNoEffect(MISCREG_CPSR, r.cpsr); // Update the stack pointer. This should be done after // updating CPSR/PSTATE since that might affect how SPX gets @@ -282,7 +284,9 @@ RemoteGDB::AArch32GdbRegCache::setRegs(ThreadContext *context) const context->setIntReg(INTREG_R12, r.gpr[12]); context->setIntReg(INTREG_SP, r.gpr[13]); context->setIntReg(INTREG_LR, r.gpr[14]); - context->pcState(r.gpr[15]); + auto pc_state = context->pcState(); + pc_state.set(r.gpr[15]); + context->pcState(pc_state); // One day somebody will implement transfer of FPRs correctly. -- 2.30.2