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)
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 1bbd8b8e7f..86cf17e7eb 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 4f6547dfb8..df88905013 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