summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2017-09-14 10:19:31 +0930
committerAlan Modra <amodra@gmail.com>2017-09-14 10:35:17 +0930
commit2578f2f307f7e80caa0bce32c7fa880d579e736b (patch)
tree4c3d552a24271680913057f9b487ecc3d81c3fd7
parent0952b7101e85b205f93389216a7733caccb8f267 (diff)
downloadbinutils-gdb-2578f2f307f7e80caa0bce32c7fa880d579e736b.tar.gz
PR22127, as segfaults assembling invalid .reloc
"sec" gets set to NULL on errors in the offset expression. This patch disables part of the reloc expression processing that needs "sec" valid. I didn't disable the entire reloc expression handling so that errors in the reloc expression are reported even when the offset expression has an error. PR 22127 * write.c (resolve_reloc_expr_symbols): Don't segfault when sec has been set to NULL.
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/write.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 1bbd8b8e7fe..86cf17e7eb8 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2017-09-14 Alan Modra <amodra@gmail.com>
+
+ PR 22127
+ * write.c (resolve_reloc_expr_symbols): Don't segfault when
+ sec has been set to NULL.
+
2017-09-09 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (NOTRACK_PREFIX): Removed.
diff --git a/gas/write.c b/gas/write.c
index 4f6547dfb85..df88905013b 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -724,7 +724,7 @@ resolve_reloc_expr_symbols (void)
as_bad_where (r->file, r->line, _("invalid reloc expression"));
sec = NULL;
}
- else if (sym != NULL)
+ else if (sym != NULL && sec != NULL)
{
/* Convert relocs against local symbols to refer to the
corresponding section symbol plus offset instead. Keep