* symfile.c (add_psymbol_to_bcache): Make 'psymbol' static again.
authorTom Tromey <tromey@redhat.com>
Thu, 5 Nov 2009 22:19:09 +0000 (22:19 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 5 Nov 2009 22:19:09 +0000 (22:19 +0000)
Zero the 'value' field.

gdb/ChangeLog
gdb/symfile.c

index 659e9d12a6a64d6473057cfae1b4335eceea883a..bf20ded4d378ba7da97b3d2c0192269d00349c3d 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-05  Tom Tromey  <tromey@redhat.com>
+
+       * symfile.c (add_psymbol_to_bcache): Make 'psymbol' static again.
+       Zero the 'value' field.
+
 2009-11-05  Doug Evans  <dje@google.com>
 
        * amd64-tdep.c (amd64_init_frame_cache): Enhance comment describing
index 7461ed628885dd840832ddedfa53aa68c688bb3d..117f17fb163be39c822c0d71f7698ad81e5f903e 100644 (file)
@@ -3105,9 +3105,15 @@ add_psymbol_to_bcache (char *name, int namelength, domain_enum domain,
                       enum language language, struct objfile *objfile,
                       int *added)
 {
-  struct partial_symbol psymbol;
-
-  memset (&psymbol, 0, sizeof (struct partial_symbol));
+  /* psymbol is static so that there will be no uninitialized gaps in the
+     structure which might contain random data, causing cache misses in
+     bcache. */
+  static struct partial_symbol psymbol;
+
+  /* However, we must ensure that the entire 'value' field has been
+     zeroed before assigning to it, because an assignment may not
+     write the entire field.  */
+  memset (&psymbol.ginfo.value, 0, sizeof (psymbol.ginfo.value));
   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
   if (val != 0)
     {