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.
This commit is contained in:
Alan Modra 2018-05-12 16:21:22 +09:30
parent 9933dc5273
commit 861d86514a
2 changed files with 72 additions and 70 deletions

View File

@ -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.

View File

@ -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