* arm abort fix
authorFrank Ch. Eigler <fche@redhat.com>
Mon, 10 Apr 2000 15:35:56 +0000 (15:35 +0000)
committerFrank Ch. Eigler <fche@redhat.com>
Mon, 10 Apr 2000 15:35:56 +0000 (15:35 +0000)
2000-03-11  Philip Blundell  <philb@gnu.org>

* armemu.c (LoadSMult, LoadMult): Correct handling of aborts.
Patch from Allan Skillman <Allan.Skillman@arm.com>.

sim/arm/ChangeLog
sim/arm/armemu.c

index ce2a17e43f120c7a32000c9bcdb6760e597dc82e..bb55ddd8f10bc6d8f2789db6050d1ab09cf68cf3 100644 (file)
@@ -1,3 +1,8 @@
+2000-03-11  Philip Blundell  <philb@gnu.org>
+
+       * armemu.c (LoadSMult, LoadMult): Correct handling of aborts.
+       Patch from Allan Skillman <Allan.Skillman@arm.com>.
+
 Wed Mar 22 15:24:21 2000  glen mccready  <gkm@pobox.com>
 
        * wrapper.c (sim_open,sim_close): Copy into myname, free myname.
index 83853f1599cc2c927749ac34908c040b81f21653..d890cda25946fd7d6432bd8d8a1c5f5706b3098e 100644 (file)
@@ -3457,7 +3457,7 @@ LoadMult (ARMul_State * state, ARMword instr, ARMword address, ARMword WBBase)
          state->Aborted = ARMul_DataAbortV;
       }
 
-  if (BIT (15))
+  if (BIT (15) && !state->Aborted)
     {                          /* PC is in the reg list */
 #ifdef MODE32
       state->Reg[15] = PC;
@@ -3520,13 +3520,13 @@ LoadSMult (ARMul_State * state, ARMword instr,
       {                                /* load this register */
        address += 4;
        dest = ARMul_LoadWordS (state, address);
-       if (!state->abortSig || state->Aborted)
+       if (!state->abortSig && !state->Aborted)
          state->Reg[temp] = dest;
        else if (!state->Aborted)
          state->Aborted = ARMul_DataAbortV;
       }
 
-  if (BIT (15))
+  if (BIT (15) && !state->Aborted)
     {                          /* PC is in the reg list */
 #ifdef MODE32
       if (state->Mode != USER26MODE && state->Mode != USER32MODE)