diff options
author | Alan Modra <amodra@gmail.com> | 2023-03-01 12:50:34 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-03-01 12:50:34 +1030 |
commit | d09f4d4a9b96dcb4b732fe13549506be5b276ec2 (patch) | |
tree | 3ce424c6f9f9103533272008905249b233821e76 /gas | |
parent | 0eb3224b35d94576e0498eed51373f52dee71bf1 (diff) | |
download | binutils-d09f4d4a9b96dcb4b732fe13549506be5b276ec2.zip binutils-d09f4d4a9b96dcb4b732fe13549506be5b276ec2.tar.gz binutils-d09f4d4a9b96dcb4b732fe13549506be5b276ec2.tar.bz2 |
gas s_fill caused internal error in frag_new
Fix an internal error after "non-constant fill count for absolute
section".
* read.c (s_fill): Don't create frags after errors.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/read.c | 30 |
1 files changed, 20 insertions, 10 deletions
@@ -2201,22 +2201,32 @@ s_fill (int ignore ATTRIBUTE_UNUSED) as_warn (_("repeat < 0; .fill ignored")); size = 0; } - - if (size && !need_pass_2) + else if (size && !need_pass_2) { - if (now_seg == absolute_section) + if (now_seg == absolute_section && rep_exp.X_op != O_constant) { - if (rep_exp.X_op != O_constant) - as_bad (_("non-constant fill count for absolute section")); - else if (fill && rep_exp.X_add_number != 0) - as_bad (_("attempt to fill absolute section with non-zero value")); - abs_section_offset += rep_exp.X_add_number * size; + as_bad (_("non-constant fill count for absolute section")); + size = 0; + } + else if (now_seg == absolute_section && fill && rep_exp.X_add_number != 0) + { + as_bad (_("attempt to fill absolute section with non-zero value")); + size = 0; } else if (fill && (rep_exp.X_op != O_constant || rep_exp.X_add_number != 0) && in_bss ()) - as_bad (_("attempt to fill section `%s' with non-zero value"), - segment_name (now_seg)); + { + as_bad (_("attempt to fill section `%s' with non-zero value"), + segment_name (now_seg)); + size = 0; + } + } + + if (size && !need_pass_2) + { + if (now_seg == absolute_section) + abs_section_offset += rep_exp.X_add_number * size; if (rep_exp.X_op == O_constant) { |