summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2016-07-27 10:49:32 +0100
committerNick Clifton <nickc@redhat.com>2016-07-27 10:50:52 +0100
commit147d994bcdd36a177e49e7b6ac8d9c1f7b4cdcf5 (patch)
tree6dd71ad25f4b9e7a6518f8cb15fb3a31870c9017 /bfd
parent7fca8e8ff70e53aeb5459cbe1438d168d5624958 (diff)
downloadbinutils-gdb-147d994bcdd36a177e49e7b6ac8d9c1f7b4cdcf5.tar.gz
Fix seg-fault when running garbage collection on coff binaries.
PR ld/20401 * coffgen.c (fini_reloc_cookie_rels): Check for the extistence of the coff_section_data before using it.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/coffgen.c8
2 files changed, 14 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 077917801b1..ba48136a547 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+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-26 Maciej W. Rozycki <macro@imgtec.com>
* elfxx-mips.c (mips_elf_calculate_relocation): Handle branches
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 56864cacb2c..75512fbd7d1 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);
}