* regcache.c (new_register_cache): Return NULL if the register
authorPedro Alves <palves@redhat.com>
Mon, 8 Sep 2008 21:16:18 +0000 (21:16 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 8 Sep 2008 21:16:18 +0000 (21:16 +0000)
cache size isn't known yet.
(free_register_cache): Avoid dereferencing a NULL regcache.

gdb/gdbserver/ChangeLog
gdb/gdbserver/regcache.c

index b84dc01e0cc93d5004c9676ce0c9f103b92654f2..0b5d10b551ee3ef38e928ada45c55326e0dd6061 100644 (file)
@@ -1,3 +1,9 @@
+2008-09-08  Pedro Alves  <pedro@codesourcery.com>
+
+       * regcache.c (new_register_cache): Return NULL if the register
+       cache size isn't known yet.
+       (free_register_cache): Avoid dereferencing a NULL regcache.
+
 2008-09-04  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * configure.srv: Merge MIPS and MIPS64.
index a324d43df65ccdb6c2d38347bc7f45b564390679..b5ec2159fc213915db94d58d3e5e64191279eec9 100644 (file)
@@ -91,6 +91,9 @@ new_register_cache (void)
 {
   struct inferior_regcache_data *regcache;
 
+  if (register_bytes == 0)
+    return NULL; /* The architecture hasn't been initialized yet.  */
+
   regcache = malloc (sizeof (*regcache));
 
   /* Make sure to zero-initialize the register cache when it is created,
@@ -111,8 +114,11 @@ free_register_cache (void *regcache_p)
   struct inferior_regcache_data *regcache
     = (struct inferior_regcache_data *) regcache_p;
 
-  free (regcache->registers);
-  free (regcache);
+  if (regcache)
+    {
+      free (regcache->registers);
+      free (regcache);
+    }
 }
 
 static void