| # |
| # Red Hat BZ: |
| # https://bugzilla.redhat.com/show_bug.cgi?id=905184 |
| # |
| # Sourcware BZ: |
| # http://sourceware.org/bugzilla/show_bug.cgi?id=15006 |
| # |
| # Upstream submission: |
| # http://www.sourceware.org/ml/libc-alpha/2013-02/msg00120.html |
| # |
| # ChangeLog |
| # |
| # 2013-02-07 Carlos O'Donell <carlos@redhat.com> |
| # |
| # * sysdeps/generic/ldconfig.h: Define FLAG_ARM_LIBSF. |
| # * elf/cache.c (print_entry): Add FLAG_ARM_LIBSF support. |
| # |
| # ports/ChangeLog.arm |
| # |
| # 2013-02-07 Carlos O'Donell <carlos@redhat.com> |
| # |
| # * sysdeps/unix/sysv/linux/arm/dl-cache.h |
| # [__ARM_PCS_VFP] (_dl_cache_check_flags): Allow plain FLAG_ELF_LIBC6. |
| # [!__ARM_PCS_VFP] (_dl_cache_check_flags): Likewise. |
| # * sysdeps/unix/sysv/linux/arm/readelflib.c (process_elf_file): |
| # Set FLAG_ARM_LIBSF for soft-float ABI otherwise just FLAG_ELF_LIBC6. |
| # |
| diff --git glibc-2.17-c758a686/elf/cache.c glibc-2.17-c758a686/elf/cache.c |
| index 9901952..699550b 100644 |
| |
| |
| @@ -100,6 +100,10 @@ print_entry (const char *lib, int flag, unsigned int osversion, |
| case FLAG_AARCH64_LIB64: |
| fputs (",AArch64", stdout); |
| break; |
| + /* Uses the ARM soft-float ABI. */ |
| + case FLAG_ARM_LIBSF: |
| + fputs (",soft-float", stdout); |
| + break; |
| case 0: |
| break; |
| default: |
| diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h |
| index acc4f28..504feca 100644 |
| |
| |
| @@ -18,12 +18,17 @@ |
| |
| #include <ldconfig.h> |
| |
| +/* In order to support the transition from unmarked objects |
| + to marked objects we must treat unmarked objects as |
| + compatible with either FLAG_ARM_LIBHF or FLAG_ARM_LIBSF. */ |
| #ifdef __ARM_PCS_VFP |
| # define _dl_cache_check_flags(flags) \ |
| - ((flags) == (FLAG_ARM_LIBHF | FLAG_ELF_LIBC6)) |
| + ((flags) == (FLAG_ARM_LIBHF | FLAG_ELF_LIBC6) \ |
| + || (flags) == FLAG_ELF_LIBC6) |
| #else |
| # define _dl_cache_check_flags(flags) \ |
| - ((flags) == FLAG_ELF_LIBC6) |
| + ((flags) == (FLAG_ARM_LIBSF | FLAG_ELF_LIBC6) \ |
| + || (flags) == FLAG_ELF_LIBC6) |
| #endif |
| |
| #include_next <dl-cache.h> |
| diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/arm/readelflib.c glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/arm/readelflib.c |
| index 81e5ccb..3efb613 100644 |
| |
| |
| @@ -46,6 +46,12 @@ process_elf_file (const char *file_name, const char *lib, int *flag, |
| if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_HARD) |
| *flag = FLAG_ARM_LIBHF|FLAG_ELF_LIBC6; |
| else if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_SOFT) |
| + *flag = FLAG_ARM_LIBSF|FLAG_ELF_LIBC6; |
| + else |
| + /* We must assume the unmarked objects are compatible |
| + with all ABI variants. Such objects may have been |
| + generated in a transitional period when the ABI |
| + tags were not added to all objects. */ |
| *flag = FLAG_ELF_LIBC6; |
| } |
| } |
| diff --git glibc-2.17-c758a686/sysdeps/generic/ldconfig.h glibc-2.17-c758a686/sysdeps/generic/ldconfig.h |
| index 57a9a46..91190aa 100644 |
| |
| |
| @@ -36,6 +36,7 @@ |
| #define FLAG_X8664_LIBX32 0x0800 |
| #define FLAG_ARM_LIBHF 0x0900 |
| #define FLAG_AARCH64_LIB64 0x0a00 |
| +#define FLAG_ARM_LIBSF 0x0b00 |
| |
| /* Name of auxiliary cache. */ |
| #define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache" |