* windows-tdep.c (windows_get_tlb_type): Remember last GDBARCH
authorPierre Muller <muller@sourceware.org>
Fri, 30 Apr 2010 15:38:42 +0000 (15:38 +0000)
committerPierre Muller <muller@sourceware.org>
Fri, 30 Apr 2010 15:38:42 +0000 (15:38 +0000)
and created type for re-use.

gdb/ChangeLog
gdb/windows-tdep.c

index 135d9d95817839031c12aa4f51646f0ad0ed9311..1b9094f1d8692f73b16dda408ba06b9dee28c5ac 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-30  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+       * windows-tdep.c (windows_get_tlb_type): Remember last GDBARCH
+       and created type for re-use.
+
 2010-04-30  Pierre Muller  <muller@ics.u-strasbg.fr>
 
        * NEWS: Mention gdbserver support for x86_64 Windows 64-bit.
index 50dfbe21c9870addd0fc72837d27b1057661994f..84f42e06051298df5116a804195caa41eafb535a 100644 (file)
@@ -97,12 +97,18 @@ static int maint_display_all_tib = 0;
 static struct type *
 windows_get_tlb_type (struct gdbarch *gdbarch)
 {
+  static struct gdbarch *last_gdbarch = NULL;
+  static struct type *last_tlb_type = NULL;
   struct type *dword_ptr_type, *dword32_type, *void_ptr_type;
   struct type *peb_ldr_type, *peb_ldr_ptr_type;
   struct type *peb_type, *peb_ptr_type, *list_type, *list_ptr_type;
   struct type *module_list_ptr_type;
   struct type *tib_type, *seh_type, *tib_ptr_type, *seh_ptr_type;
 
+  /* Do not rebuild type if same gdbarch as last time.  */
+  if (last_tlb_type && last_gdbarch == gdbarch)
+    return last_tlb_type;
+  
   dword_ptr_type = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch),
                                 1, "DWORD_PTR");
   dword32_type = arch_integer_type (gdbarch, 32,
@@ -211,6 +217,9 @@ windows_get_tlb_type (struct gdbarch *gdbarch)
                            TYPE_LENGTH (void_ptr_type), NULL);
   TYPE_TARGET_TYPE (tib_ptr_type) = tib_type;
 
+  last_tlb_type = tib_ptr_type;
+  last_gdbarch = gdbarch;
+
   return tib_ptr_type;
 }