This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Speed up read_psymtabs_with_fullname


Jan Kratochvil writes:
 > On Wed, 03 Apr 2013 01:10:52 +0200, Doug Evans wrote:
 > > --- psymtab.c	20 Mar 2013 18:28:48 -0000	1.70
 > > +++ psymtab.c	2 Apr 2013 22:58:36 -0000
 > > @@ -1114,7 +1114,11 @@ read_psymtabs_with_fullname (struct objf
 > >        if (p->anonymous)
 > >  	continue;
 > >  
 > > -      if (filename_cmp (fullname, psymtab_to_fullname (p)) == 0)
 > > +      /* psymtab_to_fullname tries to open the file which is unnecessarily
 > > +	 slow.  Don't call it if we know the basenames don't match.  */
 > > +      if ((basenames_may_differ
 > > +	   || filename_cmp (lbasename (fullname), lbasename (p->filename)) == 0)
 > > +	  && filename_cmp (fullname, psymtab_to_fullname (p)) == 0)
 > >  	psymtab_to_symtab (objfile, p);
 > >      }
 > >  }
 > 
 > I agree with the patch.  Sorry I performance regressed it.  I would even
 > prefer to check it in 7.6 as you say it may have visible performance problem.
 > There were many similar changes done so it should be safe.

Works for me.

I committed the patch with a slight comment change,
and I'll re-regression test it in the 7.6 branch and commit it there.

Thanks.

2013-04-03  Doug Evans  <dje@google.com>

	* psymtab.c (read_psymtabs_with_fullname): Don't call
	psymtab_to_fullname if the basenames are different.

Index: psymtab.c
===================================================================
RCS file: /cvs/src/src/gdb/psymtab.c,v
retrieving revision 1.70
diff -u -p -r1.70 psymtab.c
--- psymtab.c	20 Mar 2013 18:28:48 -0000	1.70
+++ psymtab.c	3 Apr 2013 18:48:29 -0000
@@ -1114,7 +1114,11 @@ read_psymtabs_with_fullname (struct objf
       if (p->anonymous)
 	continue;
 
-      if (filename_cmp (fullname, psymtab_to_fullname (p)) == 0)
+      /* psymtab_to_fullname tries to open the file which is slow.
+	 Don't call it if we know the basenames don't match.  */
+      if ((basenames_may_differ
+	   || filename_cmp (lbasename (fullname), lbasename (p->filename)) == 0)
+	  && filename_cmp (fullname, psymtab_to_fullname (p)) == 0)
 	psymtab_to_symtab (objfile, p);
     }
 }



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]