Sophie

Sophie

distrib > Mageia > 7 > i586 > by-pkgid > 08f7f62ad8debca71f444a3272b26be1 > files > 14

gcc3.3-3.3.6-16.mga7.src.rpm

2001-10-31  Jakub Jelinek  <jakub@redhat.com>

	* frame.c (fde_merge): Choose just one from FDEs for the
	same function in erratic array.

--- gcc/unwind-dw2-fde.c.jj	Fri Jan 11 14:01:21 2002
+++ gcc/unwind-dw2-fde.c	Tue Jan 15 15:58:27 2002
@@ -535,7 +535,7 @@ fde_merge (struct object *ob, fde_compar
 	   struct fde_vector *v1, struct fde_vector *v2)
 {
   size_t i1, i2;
-  fde * fde2;
+  fde * fde2 = NULL;
 
   i2 = v2->count;
   if (i2 > 0)
@@ -544,6 +544,17 @@ fde_merge (struct object *ob, fde_compar
       do
 	{
 	  i2--;
+	  if (fde2 != NULL && fde_compare (ob, v2->array[i2], fde2) == 0)
+	    {
+	      /* Some linkers (e.g. 2.10.91.0.2 or 2.11.92.0.8) resolve
+		 section relative relocations against removed linkonce
+		 section to corresponding location in the output linkonce
+		 section. Always use the earliest fde in that case.  */
+	      fde2 = v2->array[i2];
+	      v1->array[i1+i2+1] = fde2;
+	      v1->array[i1+i2] = fde2;
+	      continue;
+	    }
 	  fde2 = v2->array[i2];
 	  while (i1 > 0 && fde_compare (ob, v1->array[i1-1], fde2) > 0)
 	    {