This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[COMMITTED PATCH] Fix array bounds warnings in elf_get_dyanmic_info() on sparc with gcc-4.6


Thanks to Carlos for showing me how to handle this kind of issue
properly.

	* get-dynamic-info.h (elf_get_dynamic_info): Ignore -Warray-bounds for a
	link_map->l_info array access.
---
 ChangeLog              |  5 +++++
 elf/get-dynamic-info.h | 11 ++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index e15a3cf..f983898 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-12-19  David S. Miller  <davem@davemloft.net>
+
+	* get-dynamic-info.h (elf_get_dynamic_info): Ignore -Warray-bounds for a
+	link_map->l_info array access.
+
 2014-12-19  Chris Metcalf  <cmetcalf@ezchip.com>
 
 	* math/atest-exp.c (TIMEOUT): Increase timeout to 10 sec.
diff --git a/elf/get-dynamic-info.h b/elf/get-dynamic-info.h
index 20ccf30..3f12e2e 100644
--- a/elf/get-dynamic-info.h
+++ b/elf/get-dynamic-info.h
@@ -17,6 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <assert.h>
+#include <libc-internal.h>
 
 #ifndef RESOLVE_MAP
 static
@@ -47,7 +48,15 @@ elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp)
 	info[dyn->d_tag] = dyn;
       else if (dyn->d_tag >= DT_LOPROC &&
 	       dyn->d_tag < DT_LOPROC + DT_THISPROCNUM)
-	info[dyn->d_tag - DT_LOPROC + DT_NUM] = dyn;
+	{
+	  /* This does not violate the array bounds of l->l_info, but
+	     gcc 4.6 on sparc somehow does not see this.  */
+	  DIAG_PUSH_NEEDS_COMMENT;
+	  DIAG_IGNORE_NEEDS_COMMENT (4.6,
+				     "-Warray-bounds");
+	  info[dyn->d_tag - DT_LOPROC + DT_NUM] = dyn;
+	  DIAG_POP_NEEDS_COMMENT;
+	}
       else if ((d_tag_utype) DT_VERSIONTAGIDX (dyn->d_tag) < DT_VERSIONTAGNUM)
 	info[VERSYMIDX (dyn->d_tag)] = dyn;
       else if ((d_tag_utype) DT_EXTRATAGIDX (dyn->d_tag) < DT_EXTRANUM)
-- 
2.1.2.532.g19b5d50


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]