diff options
author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-06-18 15:40:43 +0000 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-06-18 15:40:43 +0000 |
commit | 328d2c63d3529eacf2d4c47c949f1f9830bf8470 (patch) | |
tree | 4c0e7ebbe8455843c8b09cd5ccd8e3969a972ce3 /libc/sysdeps/linux/bfin/crtreloc.c | |
parent | fb7f0f49c739f96f2867fbfebdfea4eac4af70db (diff) | |
download | uClibc-alpine-328d2c63d3529eacf2d4c47c949f1f9830bf8470.tar.bz2 uClibc-alpine-328d2c63d3529eacf2d4c47c949f1f9830bf8470.tar.xz |
Synch libc bfin specific with trunk
Diffstat (limited to 'libc/sysdeps/linux/bfin/crtreloc.c')
-rw-r--r-- | libc/sysdeps/linux/bfin/crtreloc.c | 49 |
1 files changed, 26 insertions, 23 deletions
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++; } |