This commit was generated by cvs2svn to track changes on a CVS vendor
[deliverable/binutils-gdb.git] / sim / common / sim-memopt.c
index f48e560c0b4c9aa3f6debe578e8067ff195bcdd9..6e12a4555295a4c3a2af833396e75cdeb74a2b20 100644 (file)
@@ -123,7 +123,13 @@ do_memopt_add (SIM_DESC sd,
       int padding = (addr % sizeof (unsigned64));
       unsigned long bytes = (modulo == 0 ? nr_bytes : modulo) + padding;
 
-      free_buffer = zalloc (bytes);
+      /* If filling with non-zero value, do not use clearing allocator. */
+
+      if (fill_byte_flag && fill_byte_value != 0)
+        free_buffer = xmalloc (bytes); /* don't clear */
+      else
+        free_buffer = zalloc (bytes); /* clear */
+
       aligned_buffer = (char*) free_buffer + padding;
 
       sim_core_attach (sd, NULL,
@@ -132,6 +138,12 @@ do_memopt_add (SIM_DESC sd,
 
       fill_buffer = aligned_buffer;
       fill_length = (modulo == 0) ? nr_bytes : modulo;
+
+      /* If we just used a clearing allocator, and are about to fill with
+         zero, truncate the redundant fill operation. */
+
+      if (fill_byte_flag && fill_byte_value == 0)
+         fill_length = 1; /* avoid boundary length=0 case */
     }
 
   if (fill_byte_flag)
@@ -437,6 +449,10 @@ sim_memory_uninstall (SIM_DESC sd)
 
       /* delete it and its aliases */
       alias = *entry;
+
+      /* next victim */
+      *entry = (*entry)->next;
+
       while (alias != NULL)
        {
          sim_memopt *dead = alias;
@@ -444,9 +460,6 @@ sim_memory_uninstall (SIM_DESC sd)
          sim_core_detach (sd, NULL, dead->level, dead->space, dead->addr);
          zfree (dead);
        }
-
-      /* next victim */
-      *entry = (*entry)->next;
     }
 }
 
This page took 0.023253 seconds and 4 git commands to generate.