diff options
author | Alan Modra <amodra@gmail.com> | 2018-05-12 16:21:22 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2018-05-12 16:21:22 +0930 |
commit | 861d86514a78b9215a67275e15c30242ccc2d7c8 (patch) | |
tree | 1d321239d892208d9f01977cf8729d84dbe416ba | |
parent | 9933dc52736dd349503e00a68cd0b9be4388f5a9 (diff) | |
download | fsf-binutils-gdb-861d86514a78b9215a67275e15c30242ccc2d7c8.zip fsf-binutils-gdb-861d86514a78b9215a67275e15c30242ccc2d7c8.tar.gz fsf-binutils-gdb-861d86514a78b9215a67275e15c30242ccc2d7c8.tar.bz2 |
score gcc-8 warning fixes
Rather than just silencing the gcc-8 warnings, I decided to rewrite
the buffer handling in the two functions where gcc was warning.
The rest of the file could do with the same treatment.
* config/tc-score.c (s3_do_macro_bcmp): Don't use fixed size
buffers.
(s3_do_macro_bcmpz): Likewise.
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-score.c | 136 |
2 files changed, 72 insertions, 70 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 56c0c24..200879c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2018-05-12 Alan Modra <amodra@gmail.com> + + * config/tc-score.c (s3_do_macro_bcmp): Don't use fixed size + buffers. + (s3_do_macro_bcmpz): Likewise. + 2018-05-10 Tamar Christina <tamar.christina@arm.com> * config/tc-aarch64.c (parse_aarch64_imm_float): Remove restrictions. diff --git a/gas/config/tc-score.c b/gas/config/tc-score.c index 8b587c8..c4e5ed9 100644 --- a/gas/config/tc-score.c +++ b/gas/config/tc-score.c @@ -4485,9 +4485,9 @@ static void s3_do_macro_bcmp (char *str) { int reg_a , reg_b; - char keep_data[s3_MAX_LITERAL_POOL_SIZE]; - char* ptemp; - int i = 0; + char *keep_data; + size_t keep_data_size; + int i; struct s3_score_it inst_expand[2]; struct s3_score_it inst_main; @@ -4498,26 +4498,23 @@ s3_do_macro_bcmp (char *str) ||(reg_b = s3_reg_required_here (&str, 10, s3_REG_TYPE_SCORE)) == (int) s3_FAIL || s3_skip_past_comma (&str) == (int) s3_FAIL) return; - ptemp = str; - while (*ptemp != 0) - { - keep_data[i] = *ptemp; - i++; - ptemp++; - } - keep_data[i] = 0; + + keep_data_size = strlen (str) + 1; + keep_data = xmalloc (keep_data_size * 2 + 14); + memcpy (keep_data, str, keep_data_size); + if (s3_my_get_expression (&s3_inst.reloc.exp, &str) == (int) s3_FAIL ||reg_b == 0 || s3_end_of_line (str) == (int) s3_FAIL) - return; + goto out; else if (s3_inst.reloc.exp.X_add_symbol == 0) { s3_inst.error = _("lacking label "); - return; + goto out; } else { - char append_str[s3_MAX_LITERAL_POOL_SIZE]; + char *append_str = keep_data + keep_data_size; s3_SET_INSN_ERROR (NULL); s3_inst.reloc.type = BFD_RELOC_SCORE_BCMP; @@ -4536,15 +4533,15 @@ s3_do_macro_bcmp (char *str) /* support bcmp --> cmp!+beq (bne) */ if (s3_score_pic == s3_NO_PIC) { - sprintf (&append_str[0], "cmp! r%d, r%d", reg_a, reg_b); - if (s3_append_insn (&append_str[0], TRUE) == (int) s3_FAIL) - return; - if ((inst_main.instruction & 0x3e00007e) == 0x0000004c) - sprintf (&append_str[1], "beq %s", keep_data); - else - sprintf (&append_str[1], "bne %s", keep_data); - if (s3_append_insn (&append_str[1], TRUE) == (int) s3_FAIL) - return; + sprintf (append_str, "cmp! r%d, r%d", reg_a, reg_b); + if (s3_append_insn (append_str, TRUE) == (int) s3_FAIL) + goto out; + if ((inst_main.instruction & 0x3e00007e) == 0x0000004c) + sprintf (append_str, "beq %s", keep_data); + else + sprintf (append_str, "bne %s", keep_data); + if (s3_append_insn (append_str, TRUE) == (int) s3_FAIL) + goto out; } else { @@ -4552,7 +4549,7 @@ s3_do_macro_bcmp (char *str) } /* Set bwarn as -1, so macro instruction itself will not be generated frag. */ s3_inst.bwarn = -1; - return; + goto out; } else { @@ -4567,18 +4564,18 @@ s3_do_macro_bcmp (char *str) if (s3_score_pic == s3_NO_PIC) { - sprintf (&append_str[0], "cmp! r%d, r%d", reg_a, reg_b); - if (s3_append_insn (&append_str[0], FALSE) == (int) s3_FAIL) - return; - memcpy (&inst_expand[0], &s3_inst, sizeof (struct s3_score_it)); + sprintf (append_str, "cmp! r%d, r%d", reg_a, reg_b); + if (s3_append_insn (append_str, FALSE) == (int) s3_FAIL) + goto out; + memcpy (&inst_expand[0], &s3_inst, sizeof (struct s3_score_it)); - if ((inst_main.instruction & 0x3e00007e) == 0x0000004c) - sprintf (&append_str[1], "beq %s", keep_data); - else - sprintf (&append_str[1], "bne %s", keep_data); - if (s3_append_insn (&append_str[1], FALSE) == (int) s3_FAIL) - return; - memcpy (&inst_expand[1], &s3_inst, sizeof (struct s3_score_it)); + if ((inst_main.instruction & 0x3e00007e) == 0x0000004c) + sprintf (append_str, "beq %s", keep_data); + else + sprintf (append_str, "bne %s", keep_data); + if (s3_append_insn (append_str, FALSE) == (int) s3_FAIL) + goto out; + memcpy (&inst_expand[1], &s3_inst, sizeof (struct s3_score_it)); } else { @@ -4634,6 +4631,8 @@ s3_do_macro_bcmp (char *str) /* Set bwarn as -1, so macro instruction itself will not be generated frag. */ s3_inst.bwarn = -1; } + out: + free (keep_data); } /* Handle bcmpeqz / bcmpnez */ @@ -4641,9 +4640,9 @@ static void s3_do_macro_bcmpz (char *str) { int reg_a; - char keep_data[s3_MAX_LITERAL_POOL_SIZE]; - char* ptemp; - int i = 0; + char *keep_data; + size_t keep_data_size; + int i; struct s3_score_it inst_expand[2]; struct s3_score_it inst_main; @@ -4652,27 +4651,22 @@ s3_do_macro_bcmpz (char *str) if (( reg_a = s3_reg_required_here (&str, 15, s3_REG_TYPE_SCORE)) == (int) s3_FAIL || s3_skip_past_comma (&str) == (int) s3_FAIL) return; - ptemp = str; - while (*ptemp != 0) - { - keep_data[i] = *ptemp; - i++; - ptemp++; - } - keep_data[i] = 0; + keep_data_size = strlen (str) + 1; + keep_data = xmalloc (keep_data_size * 2 + 13); + memcpy (keep_data, str, keep_data_size); if (s3_my_get_expression (&s3_inst.reloc.exp, &str) == (int) s3_FAIL || s3_end_of_line (str) == (int) s3_FAIL) - return; + goto out; else if (s3_inst.reloc.exp.X_add_symbol == 0) { s3_inst.error = _("lacking label "); - return; + goto out; } else { - char append_str[s3_MAX_LITERAL_POOL_SIZE]; + char *append_str = keep_data + keep_data_size; s3_SET_INSN_ERROR (NULL); s3_inst.reloc.type = BFD_RELOC_SCORE_BCMP; s3_inst.reloc.pc_rel = 1; @@ -4687,15 +4681,15 @@ s3_do_macro_bcmpz (char *str) { if (s3_score_pic == s3_NO_PIC) { - sprintf (&append_str[0], "cmpi! r%d,0", reg_a); - if (s3_append_insn (&append_str[0], TRUE) == (int) s3_FAIL) - return; - if ((inst_main.instruction & 0x3e00007e) == 0x0000004c) - sprintf (&append_str[1], "beq %s", keep_data); - else - sprintf (&append_str[1], "bne %s", keep_data); - if (s3_append_insn (&append_str[1], TRUE) == (int) s3_FAIL) - return; + sprintf (append_str, "cmpi! r%d, 0", reg_a); + if (s3_append_insn (append_str, TRUE) == (int) s3_FAIL) + goto out; + if ((inst_main.instruction & 0x3e00007e) == 0x0000004c) + sprintf (append_str, "beq %s", keep_data); + else + sprintf (append_str, "bne %s", keep_data); + if (s3_append_insn (append_str, TRUE) == (int) s3_FAIL) + goto out; } else { @@ -4703,7 +4697,7 @@ s3_do_macro_bcmpz (char *str) } /* Set bwarn as -1, so macro instruction itself will not be generated frag. */ s3_inst.bwarn = -1; - return; + goto out; } else { @@ -4718,17 +4712,17 @@ s3_do_macro_bcmpz (char *str) if (s3_score_pic == s3_NO_PIC) { - sprintf (&append_str[0], "cmpi! r%d, 0", reg_a); - if (s3_append_insn (&append_str[0], FALSE) == (int) s3_FAIL) - return; - memcpy (&inst_expand[0], &s3_inst, sizeof (struct s3_score_it)); - if ((inst_main.instruction & 0x3e00007e) == 0x0000004c) - sprintf (&append_str[1], "beq %s", keep_data); - else - sprintf (&append_str[1], "bne %s", keep_data); - if (s3_append_insn (&append_str[1], FALSE) == (int) s3_FAIL) - return; - memcpy (&inst_expand[1], &s3_inst, sizeof (struct s3_score_it)); + sprintf (append_str, "cmpi! r%d, 0", reg_a); + if (s3_append_insn (append_str, FALSE) == (int) s3_FAIL) + goto out; + memcpy (&inst_expand[0], &s3_inst, sizeof (struct s3_score_it)); + if ((inst_main.instruction & 0x3e00007e) == 0x0000004c) + sprintf (append_str, "beq %s", keep_data); + else + sprintf (append_str, "bne %s", keep_data); + if (s3_append_insn (append_str, FALSE) == (int) s3_FAIL) + goto out; + memcpy (&inst_expand[1], &s3_inst, sizeof (struct s3_score_it)); } else { @@ -4784,6 +4778,8 @@ s3_do_macro_bcmpz (char *str) /* Set bwarn as -1, so macro instruction itself will not be generated frag. */ s3_inst.bwarn = -1; } + out: + free (keep_data); } static int |