Browse Source

Ignore entries of "-1" in rofixup; the linker sometimes has no choice but to
create these for deleted entries in .eh_frame.

Bernd Schmidt 17 years ago
parent
commit
d10b4f574d
1 changed files with 26 additions and 23 deletions
  1. 26 23
      libc/sysdeps/linux/bfin/crtreloc.c

+ 26 - 23
libc/sysdeps/linux/bfin/crtreloc.c

@@ -47,32 +47,35 @@ reloc_range_indirect (void ***p, void ***e,
 {
   while (p < e)
     {
-      void *ptr = __reloc_pointer (*p, map);
-      if (ptr)
+      if (*p != (void **)-1)
 	{
-	  void *pt;
-	  if ((long)ptr & 3)
+	  void *ptr = __reloc_pointer (*p, map);
+	  if (ptr != (void *)-1)
 	    {
-	      unsigned char *c = ptr;
-	      int i;
-	      unsigned long v = 0;
-	      for (i = 0; i < 4; i++)
-		v |= c[i] << 8 * i;
-	      pt = (void *)v;
+	      void *pt;
+	      if ((long)ptr & 3)
+		{
+		  unsigned char *c = ptr;
+		  int i;
+		  unsigned long v = 0;
+		  for (i = 0; i < 4; i++)
+		    v |= c[i] << 8 * i;
+		  pt = (void *)v;
+		}
+	      else
+		pt = *(void**)ptr;
+	      pt = __reloc_pointer (pt, map);
+	      if ((long)ptr & 3)
+		{
+		  unsigned char *c = ptr;
+		  int i;
+		  unsigned long v = (unsigned long)pt;
+		  for (i = 0; i < 4; i++, v >>= 8)
+		    c[i] = v;
+		}
+	      else
+		*(void**)ptr = pt;
 	    }
-	  else
-	    pt = *(void**)ptr;
-	  pt = __reloc_pointer (pt, map);
-	  if ((long)ptr & 3)
-	    {
-	      unsigned char *c = ptr;
-	      int i;
-	      unsigned long v = (unsigned long)pt;
-	      for (i = 0; i < 4; i++, v >>= 8)
-		c[i] = v;
-	    }
-	  else
-	    *(void**)ptr = pt;
 	}
       p++;
     }