This is the mail archive of the
binutils-cvs@sourceware.org
mailing list for the binutils project.
[binutils-gdb/binutils-2_27-branch] Fix seg fault in linker when performing garbage collection on COFF based targets.
- From: Nick Clifton <nickc at sourceware dot org>
- To: bfd-cvs at sourceware dot org
- Date: 27 Jul 2016 12:18:56 -0000
- Subject: [binutils-gdb/binutils-2_27-branch] Fix seg fault in linker when performing garbage collection on COFF based targets.
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=492a7a54d688b511b0ed47c1f0ab054334a4b218
commit 492a7a54d688b511b0ed47c1f0ab054334a4b218
Author: Nick Clifton <nickc@redhat.com>
Date: Wed Jul 27 13:18:13 2016 +0100
Fix seg fault in linker when performing garbage collection on COFF based targets.
PR ld/20401
bfd * coffgen.c (fini_reloc_cookie_rels): Check for the extistence
of the coff_section_data before using it.
Diff:
---
bfd/ChangeLog | 10 ++++++++++
bfd/coffgen.c | 8 +++++++-
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 992e54e..1e08f3d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+2016-07-27 Nick Clifton <nickc@redhat.com>
+
+ * Import this patch from the mainline:
+ 2016-07-27 Ozkan Sezer <sezeroz@gmail.com>
+ Nick Clifton <nickc@redhat.com>
+
+ PR ld/20401
+ * coffgen.c (fini_reloc_cookie_rels): Check for the extistence
+ of the coff_section_data before using it.
+
2016-07-01 Tristan Gingold <gingold@adacore.com>
* version.m4: Bump version to 2.26.90
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 56864ca..75512fb 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -2691,7 +2691,13 @@ static void
fini_reloc_cookie_rels (struct coff_reloc_cookie *cookie,
asection *sec)
{
- if (cookie->rels && coff_section_data (NULL, sec)->relocs != cookie->rels)
+ if (cookie->rels
+ /* PR 20401. The relocs may not have been cached, so check first.
+ If the relocs were loaded by init_reloc_cookie_rels() then this
+ will be the case. FIXME: Would performance be improved if the
+ relocs *were* cached ? */
+ && coff_section_data (NULL, sec)
+ && coff_section_data (NULL, sec)->relocs != cookie->rels)
free (cookie->rels);
}