From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8536 invoked by alias); 19 Apr 2010 08:59:48 -0000 Received: (qmail 8518 invoked by uid 22791); 19 Apr 2010 08:59:44 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=BAYES_00,MSGID_MULTIPLE_AT X-Spam-Check-By: sourceware.org Received: from mailhost.u-strasbg.fr (HELO mailhost.u-strasbg.fr) (130.79.200.157) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 19 Apr 2010 08:59:30 +0000 Received: from baal.u-strasbg.fr (baal.u-strasbg.fr [IPv6:2001:660:2402::41]) by mailhost.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id o3J8xQjc009480 for ; Mon, 19 Apr 2010 10:59:27 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from mailserver.u-strasbg.fr (ms2.u-strasbg.fr [IPv6:2001:660:2402:d::11]) by baal.u-strasbg.fr (8.14.0/jtpda-5.5pre1) with ESMTP id o3J8xQYD004953 for ; Mon, 19 Apr 2010 10:59:26 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from d620muller (gw-ics.u-strasbg.fr [130.79.210.225]) (user=mullerp mech=LOGIN) by mailserver.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id o3J8xQZn037626 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) for ; Mon, 19 Apr 2010 10:59:26 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) From: "Pierre Muller" To: Subject: [RFC/Windows] Remember last tlb type for re-use in windows_get_tlb_type Date: Mon, 19 Apr 2010 08:59:00 -0000 Message-ID: <000f01cadf9e$a4fd4910$eef7db30$@muller@ics-cnrs.unistra.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-04/txt/msg00552.txt.bz2 Each time, you examine the convenience variable $_tlb on Windows executable the function windows_get_tlb_type is called and creates a new type. I copied this behavior from the internal variable _siginfo, but I think that it is a big waste of time and memory to regenerate it each time. Nevertheless, with multi-target GDB, you can possibly create a type of windows-32 bit another for windows 64-bit or even one for windows-CE. Thus I remember the last gdbarch passed and return the remember type only if gdbarch did not change, which is most of the time. I do not know if those kind of patches are regarded as useful. Comments welcome. Pierre Muller 2010-04-19 Pierre Muller * windows-tdep.c (windows_get_tlb_type): Remember last GDBARCH and created type for re-use. Index: windows-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/windows-tdep.c,v retrieving revision 1.6 diff -u -p -r1.6 windows-tdep.c --- windows-tdep.c 16 Apr 2010 07:49:35 -0000 1.6 +++ windows-tdep.c 19 Apr 2010 08:45:27 -0000 @@ -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, @@ -210,6 +216,9 @@ windows_get_tlb_type (struct gdbarch *gd 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; }