PR22127, as segfaults assembling invalid .reloc
authorAlan Modra <amodra@gmail.com>
Thu, 14 Sep 2017 00:49:31 +0000 (10:19 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 14 Sep 2017 01:05:17 +0000 (10:35 +0930)
"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.

gas/ChangeLog
gas/write.c

index 1bbd8b8..86cf17e 100644 (file)
@@ -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.
index 4f6547d..df88905 100644 (file)
@@ -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