From d10b4f574d28ec8e679a62f491d45a7820042273 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Thu, 22 Nov 2007 19:27:42 +0000 Subject: Ignore entries of "-1" in rofixup; the linker sometimes has no choice but to create these for deleted entries in .eh_frame. --- libc/sysdeps/linux/bfin/crtreloc.c | 49 ++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 23 deletions(-) (limited to 'libc/sysdeps/linux/bfin') diff --git a/libc/sysdeps/linux/bfin/crtreloc.c b/libc/sysdeps/linux/bfin/crtreloc.c index afc9504ce..4c09f904f 100644 --- a/libc/sysdeps/linux/bfin/crtreloc.c +++ b/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++; } -- cgit v1.2.3