diff options
author | Alan Modra <amodra@gmail.com> | 2017-09-14 10:19:31 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2017-09-14 10:35:17 +0930 |
commit | 2578f2f307f7e80caa0bce32c7fa880d579e736b (patch) | |
tree | 4c3d552a24271680913057f9b487ecc3d81c3fd7 /gas | |
parent | 0952b7101e85b205f93389216a7733caccb8f267 (diff) | |
download | fsf-binutils-gdb-2578f2f307f7e80caa0bce32c7fa880d579e736b.zip fsf-binutils-gdb-2578f2f307f7e80caa0bce32c7fa880d579e736b.tar.gz fsf-binutils-gdb-2578f2f307f7e80caa0bce32c7fa880d579e736b.tar.bz2 |
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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/write.c | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 1bbd8b8..86cf17e 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 4f6547d..df88905 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 |