about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWilhelm Eger <wilhelm.eger@googlemail.com>2013-05-22 16:33:03 -0400
committerCarlos O'Donell <carlos@redhat.com>2013-05-22 16:33:03 -0400
commit2b863a1b2dcbe2589d27646447d9ef88f9beffa5 (patch)
treeb78ecc20215f535774184f8e0e80cae9acdd4b34
parent1032040da284af3b9fe5870c54b0dae246bc0c02 (diff)
downloadglibc-2b863a1b2dcbe2589d27646447d9ef88f9beffa5.tar.gz
glibc-2b863a1b2dcbe2589d27646447d9ef88f9beffa5.tar.xz
glibc-2b863a1b2dcbe2589d27646447d9ef88f9beffa5.zip
Backport fixes for BZ #15006 from master.
Resolved backport request BZ #15122.

Assume all unmarked objects are compatible with all ABI variants.
Such objects may have been generated in a transitional period when
ABI tags were not added to all objects.

---

2013-02-08  Carlos O'Donell  <carlos@redhat.com>

	[BZ #15006]
	* sysdeps/generic/ldconfig.h: Define FLAG_ARM_LIBSF.
	* elf/cache.c (print_entry): Add FLAG_ARM_LIBSF support.

ports/

2013-02-08  Carlos O'Donell  <carlos@redhat.com>

	[BZ #15006]
	* 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.
-rw-r--r--ChangeLog6
-rw-r--r--NEWS8
-rw-r--r--elf/cache.c6
-rw-r--r--ports/ChangeLog.arm9
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/dl-cache.h11
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/readelflib.c8
-rw-r--r--sysdeps/generic/ldconfig.h3
7 files changed, 44 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index a6e0d3004e..b76e7dc06e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-08  Carlos O'Donell  <carlos@redhat.com>
+
+	[BZ #15006]
+	* sysdeps/generic/ldconfig.h: Define FLAG_ARM_LIBSF.
+	* elf/cache.c (print_entry): Add FLAG_ARM_LIBSF support.
+
 2013-03-30  David S. Miller  <davem@davemloft.net>
 
 	* po/de.po: Update from translation team.
diff --git a/NEWS b/NEWS
index 63f465ac8c..da0f31202a 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,12 @@ See the end for copying conditions.
 Please send GNU C library bug reports via <http://sourceware.org/bugzilla/>
 using `glibc' in the "product" field.
 
+Version 2.17.1
+
+* The following bugs are resolved with this release:
+  15003, 15006, 15122.
+
+
 Version 2.17
 
 * The following bugs are resolved with this release:
@@ -23,7 +29,7 @@ Version 2.17
   14767, 14783, 14784, 14785, 14793, 14796, 14797, 14801, 14803, 14805,
   14807, 14811, 14815, 14821, 14822, 14824, 14828, 14831, 14833, 14835,
   14838, 14856, 14863, 14865, 14866, 14868, 14869, 14871, 14872, 14879,
-  14889, 14893, 14898, 14914, 15003.
+  14889, 14893, 14898, 14914.
 
 * Optimization of memcpy for MIPS.
 
diff --git a/elf/cache.c b/elf/cache.c
index f5ed370e78..699550bb60 100644
--- a/elf/cache.c
+++ b/elf/cache.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 1999.
 
@@ -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 a/ports/ChangeLog.arm b/ports/ChangeLog.arm
index d014581e97..75a88265fb 100644
--- a/ports/ChangeLog.arm
+++ b/ports/ChangeLog.arm
@@ -1,3 +1,12 @@
+2013-02-08  Carlos O'Donell  <carlos@redhat.com>
+
+	[BZ #15006]
+	* 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.
+
 2012-12-04  Steve McIntyre  <steve.mcintyre@linaro.org>
 
 	* sysdeps/unix/sysv/linux/arm/dl-cache.h: New file.
diff --git a/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h b/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h
index 525caa2cbe..504fecab58 100644
--- a/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h
+++ b/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h
@@ -1,5 +1,5 @@
 /* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
-   Copyright (C) 2003-2012 Free Software Foundation, Inc.
+   Copyright (C) 2003-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -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 a/ports/sysdeps/unix/sysv/linux/arm/readelflib.c b/ports/sysdeps/unix/sysv/linux/arm/readelflib.c
index e767f9e78f..3efb6134c3 100644
--- a/ports/sysdeps/unix/sysv/linux/arm/readelflib.c
+++ b/ports/sysdeps/unix/sysv/linux/arm/readelflib.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 1999 and
 		  Jakub Jelinek <jakub@redhat.com>, 1999.
@@ -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 a/sysdeps/generic/ldconfig.h b/sysdeps/generic/ldconfig.h
index 43cb9bdb0c..91190aa0cd 100644
--- a/sysdeps/generic/ldconfig.h
+++ b/sysdeps/generic/ldconfig.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 1999.
 
@@ -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"