rpms/gdb/F-11 gdb-bz507267-block-sort-fast.patch, NONE, 1.1 gdb.spec, 1.353, 1.354

Jan Kratochvil jkratoch at fedoraproject.org
Mon Jun 22 17:14:50 UTC 2009


Author: jkratoch

Update of /cvs/pkgs/rpms/gdb/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv6330

Modified Files:
	gdb.spec 
Added Files:
	gdb-bz507267-block-sort-fast.patch 
Log Message:
* Mon Jun 22 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090302-30
- Accelerate sorting blocks on reading a file (found on WebKit) (BZ 507267).


gdb-bz507267-block-sort-fast.patch:

--- NEW FILE gdb-bz507267-block-sort-fast.patch ---
https://bugzilla.redhat.com/show_bug.cgi?id=507267

--- gdb-6.8.50.20090302/gdb/buildsym.c-orig	2009-06-22 15:20:39.000000000 +0200
+++ gdb-6.8.50.20090302/gdb/buildsym.c	2009-06-22 17:50:54.000000000 +0200
@@ -900,6 +900,19 @@ watch_main_source_file_lossage (void)
     }
 }
 
+/* Helper function for qsort.  Parametes are `struct block *' pointers,
+   function sorts them in descending order by their BLOCK_START.  */
+
+static int
+block_compar (const void *ap, const void *bp)
+{
+  const struct block *a = *(const struct block **) ap;
+  const struct block *b = *(const struct block **) bp;
+
+  return (BLOCK_START (b) > BLOCK_START (a))
+	 - (BLOCK_START (b) < BLOCK_START (a));
+}
+
 /* Finish the symbol definitions for one main source file, close off
    all the lexical contexts for that file (creating struct block's for
    them), then make the struct symtab for that file and put it in the
@@ -953,32 +966,28 @@ end_symtab (CORE_ADDR end_addr, struct o
      OBJF_REORDERED is true, then sort the pending blocks.  */
   if ((objfile->flags & OBJF_REORDERED) && pending_blocks)
     {
-      /* FIXME!  Remove this horrid bubble sort and use merge sort!!! */
-      int swapped;
-      do
-	{
-	  struct pending_block *pb, *pbnext;
+      unsigned count = 0;
+      struct pending_block *pb;
+      struct block **barray, **bp;
+      struct cleanup *back_to;
 
-	  pb = pending_blocks;
-	  pbnext = pb->next;
-	  swapped = 0;
+      for (pb = pending_blocks; pb != NULL; pb = pb->next)
+	count++;
 
-	  while (pbnext)
-	    {
-	      /* swap blocks if unordered! */
+      barray = xmalloc (sizeof (*barray) * count);
+      back_to = make_cleanup (xfree, barray);
 
-	      if (BLOCK_START (pb->block) < BLOCK_START (pbnext->block))
-		{
-		  struct block *tmp = pb->block;
-		  pb->block = pbnext->block;
-		  pbnext->block = tmp;
-		  swapped = 1;
-		}
-	      pb = pbnext;
-	      pbnext = pbnext->next;
-	    }
-	}
-      while (swapped);
+      bp = barray;
+      for (pb = pending_blocks; pb != NULL; pb = pb->next)
+	*bp++ = pb->block;
+
+      qsort (barray, count, sizeof (*barray), block_compar);
+
+      bp = barray;
+      for (pb = pending_blocks; pb != NULL; pb = pb->next)
+	pb->block = *bp++;
+
+      do_cleanups (back_to);
     }
 
   /* Cleanup any undefined types that have been left hanging around


Index: gdb.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/F-11/gdb.spec,v
retrieving revision 1.353
retrieving revision 1.354
diff -u -p -r1.353 -r1.354
--- gdb.spec	22 Jun 2009 11:15:51 -0000	1.353
+++ gdb.spec	22 Jun 2009 17:14:20 -0000	1.354
@@ -14,7 +14,7 @@ Version: 6.8.50.20090302
 
 # The release always contains a leading reserved number, start it at 1.
 # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 29%{?_with_upstream:.upstream}%{?dist}
+Release: 30%{?_with_upstream:.upstream}%{?dist}
 
 License: GPLv3+
 Group: Development/Debuggers
@@ -386,6 +386,9 @@ Patch359: gdb-charset-crash.patch
 Patch369: gdb-varobj-revalidate-prep.patch
 Patch370: gdb-varobj-revalidate-core.patch
 
+# Accelerate sorting blocks on reading a file (found on WebKit) (BZ 507267).
+patch374: gdb-bz507267-block-sort-fast.patch
+
 BuildRequires: ncurses-devel texinfo gettext flex bison expat-devel
 Requires: readline
 BuildRequires: readline-devel
@@ -584,6 +587,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc
 %patch359 -p1
 %patch369 -p1
 %patch370 -p1
+%patch374 -p1
 %patch124 -p1
 
 find -name "*.orig" | xargs rm -f
@@ -876,6 +880,9 @@ fi
 %endif
 
 %changelog
+* Mon Jun 22 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090302-30
+- Accelerate sorting blocks on reading a file (found on WebKit) (BZ 507267).
+
 * Mon Jun 22 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090302-29
 - Fix backtraces from core files with the executable found+loaded via build-id.
   - Due to F-11 GCC no longer needlessly duplicating .eh_frame as .debug_frame.




More information about the fedora-extras-commits mailing list