OSDN Git Service

Ignore entries of "-1" in rofixup; the linker sometimes has no choice but to
authorBernd Schmidt <bernds_cb1@t-online.de>
Thu, 22 Nov 2007 19:27:42 +0000 (19:27 -0000)
committerBernd Schmidt <bernds_cb1@t-online.de>
Thu, 22 Nov 2007 19:27:42 +0000 (19:27 -0000)
create these for deleted entries in .eh_frame.

libc/sysdeps/linux/bfin/crtreloc.c

index afc9504..4c09f90 100644 (file)
@@ -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++;
     }