sim: drop duplicate header checks
[deliverable/binutils-gdb.git] / sim / arm / arminit.c
index 04399900c959047fe01963d108579c4a0e5debb4..38b8f401056e4069ae044633c15903dcff446975 100644 (file)
@@ -3,7 +3,7 @@
  
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
+    the Free Software Foundation; either version 3 of the License, or
     (at your option) any later version.
  
     This program is distributed in the hope that it will be useful,
     GNU General Public License for more details.
  
     You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+    along with this program; if not, see <http://www.gnu.org/licenses/>. */
+
+#include <string.h>
 
 #include "armdefs.h"
 #include "armemu.h"
+#include "dbg_rdi.h"
 
 /***************************************************************************\
 *                 Definitions for the emulator architecture                 *
@@ -127,6 +129,8 @@ ARMul_NewState (void)
   state->is_v5 = LOW;
   state->is_v5e = LOW;
   state->is_XScale = LOW;
+  state->is_iWMMXt = LOW;
+  state->is_v6 = LOW;
 
   ARMul_Reset (state);
 
@@ -157,7 +161,9 @@ ARMul_SelectProcessor (ARMul_State * state, unsigned properties)
   state->is_v5 = (properties & ARM_v5_Prop) ? HIGH : LOW;
   state->is_v5e = (properties & ARM_v5e_Prop) ? HIGH : LOW;
   state->is_XScale = (properties & ARM_XScale_Prop) ? HIGH : LOW;
+  state->is_iWMMXt = (properties & ARM_iWMMXt_Prop) ? HIGH : LOW;
   state->is_ep9312 = (properties & ARM_ep9312_Prop) ? HIGH : LOW;
+  state->is_v6 = (properties & ARM_v6_Prop) ? HIGH : LOW;
 
   /* Only initialse the coprocessor support once we
      know what kind of chip we are dealing with.  */
@@ -323,4 +329,24 @@ ARMul_Abort (ARMul_State * state, ARMword vector)
     ARMul_SetR15 (state, vector);
   else
     ARMul_SetR15 (state, R15CCINTMODE | vector);
+
+  if (ARMul_ReadWord (state, ARMul_GetPC (state)) == 0)
+    {
+      /* No vector has been installed.  Rather than simulating whatever
+        random bits might happen to be at address 0x20 onwards we elect
+        to stop.  */
+      switch (vector)
+       {
+       case ARMul_ResetV: state->EndCondition = RDIError_Reset; break;
+       case ARMul_UndefinedInstrV: state->EndCondition = RDIError_UndefinedInstruction; break;
+       case ARMul_SWIV: state->EndCondition = RDIError_SoftwareInterrupt; break;
+       case ARMul_PrefetchAbortV: state->EndCondition = RDIError_PrefetchAbort; break;
+       case ARMul_DataAbortV: state->EndCondition = RDIError_DataAbort; break;
+       case ARMul_AddrExceptnV: state->EndCondition = RDIError_AddressException; break;
+       case ARMul_IRQV: state->EndCondition = RDIError_IRQ; break;
+       case ARMul_FIQV: state->EndCondition = RDIError_FIQ; break;
+       default: break;
+       }
+      state->Emulate = FALSE;
+    }
 }
This page took 0.024007 seconds and 4 git commands to generate.