* interp.c (load_mem): If we get a load from an out of range
authorJeff Law <law@redhat.com>
Fri, 16 May 1997 22:37:02 +0000 (22:37 +0000)
committerJeff Law <law@redhat.com>
Fri, 16 May 1997 22:37:02 +0000 (22:37 +0000)
        address, abort.
        (store_mem): Likewise for stores.
        (max_mem): New variable.

sim/mn10300/ChangeLog
sim/mn10300/interp.c

index 51efa7b80d715dd0a1e59265fc99d0e9b4462601..50db97433443173cf54a7ddddcd6a1174844572d 100644 (file)
@@ -1,3 +1,10 @@
+Fri May 16 16:36:17 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * interp.c (load_mem): If we get a load from an out of range
+       address, abort.
+       (store_mem): Likewise for stores.
+       (max_mem): New variable.
+
 Tue May  6 13:24:36 1997  Jeffrey A Law  (law@cygnus.com)
 
        * mn10300_sim.h: Fix ordering of bits in the PSW.
index 711356fd99250917d6db2c95360bfb7ee94d9393..1a14039e1e291147b6eaf00aba064ff7d34adda3 100644 (file)
@@ -33,6 +33,7 @@ struct hash_entry
 #endif
 };
 
+static int max_mem = 0;
 struct hash_entry hash_table[MAX_HASH+1];
 
 
@@ -241,6 +242,9 @@ load_mem_big (addr, len)
 {
   uint8 *p = addr + State.mem;
 
+  if (addr > max_mem)
+    abort ();
+
   switch (len)
     {
     case 1:
@@ -263,6 +267,9 @@ load_mem (addr, len)
 {
   uint8 *p = addr + State.mem;
 
+  if (addr > max_mem)
+    abort ();
+
   switch (len)
     {
     case 1:
@@ -286,6 +293,9 @@ store_mem (addr, len, data)
 {
   uint8 *p = addr + State.mem;
 
+  if (addr > max_mem)
+    abort ();
+
   switch (len)
     {
     case 1:
@@ -314,6 +324,7 @@ sim_size (power)
   if (State.mem)
     free (State.mem);
 
+  max_mem = 1 << power;
   State.mem = (uint8 *) calloc (1,  1 << power);
   if (!State.mem)
     {