aboutsummaryrefslogtreecommitdiff
path: root/gas/messages.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2021-07-07 10:25:41 +0100
committerNick Clifton <nickc@redhat.com>2021-07-07 10:25:41 +0100
commitffa5352c0c0f735541e69fe6d9a192d82e7d418c (patch)
treedf3fd83903f3eb8ae28975107352d5f657583729 /gas/messages.c
parent1f00b55dba8ed2c6bec4d263b00d41b0e91edb35 (diff)
downloadbinutils-ffa5352c0c0f735541e69fe6d9a192d82e7d418c.zip
binutils-ffa5352c0c0f735541e69fe6d9a192d82e7d418c.tar.gz
binutils-ffa5352c0c0f735541e69fe6d9a192d82e7d418c.tar.bz2
Fix problems translating messages when a percentage sign appears at the end of a string.
PR 28051 gas * config/tc-i386.c (offset_in_range): Reformat error messages in order to fix problems when translating. (md_assemble): Likewise. * messages.c (as_internal_value_out_of_range): Likewise. * read.c (emit_expr_with_reloc): Likewise. * testsuite/gas/all/overflow.l Change expected output format. * po/gas.pot: Regenerate. bfd * coff-rs6000.c (xcoff_reloc_type_tls): Reformat error messages in order to fix problems when translating. * cofflink.c (_bfd_coff_write_global_sym): Likewise. * elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub): Likewise. * po/bfd.pot: Regenerate.
Diffstat (limited to 'gas/messages.c')
-rw-r--r--gas/messages.c57
1 files changed, 30 insertions, 27 deletions
diff --git a/gas/messages.c b/gas/messages.c
index 62f9312..fbd4581 100644
--- a/gas/messages.c
+++ b/gas/messages.c
@@ -366,9 +366,15 @@ as_internal_value_out_of_range (const char *prefix,
offsetT max,
const char *file,
unsigned line,
- int bad)
+ bool bad)
{
const char * err;
+ /* These buffer sizes are excessive, but better to be safe than sorry.
+ Note - these buffers are used in order to make the error message
+ string translateable. */
+ char val_buf [128];
+ char min_buf [128];
+ char max_buf [128];
if (prefix == NULL)
prefix = "";
@@ -380,41 +386,38 @@ as_internal_value_out_of_range (const char *prefix,
if (max <= 1)
abort ();
+ sprintf (val_buf, "%" BFD_VMA_FMT "d", val);
+ sprintf (min_buf, "%" BFD_VMA_FMT "d", right);
+
/* xgettext:c-format */
- err = _("%s out of domain (%" BFD_VMA_FMT "d is not a multiple of %" \
- BFD_VMA_FMT "d)");
+ err = _("%s out of domain (%s is not a multiple of %s)");
+
if (bad)
- as_bad_where (file, line, err, prefix, val, right);
+ as_bad_where (file, line, err, prefix, val_buf, min_buf);
else
- as_warn_where (file, line, err, prefix, val, right);
- return;
+ as_warn_where (file, line, err, prefix, val_buf, min_buf);
}
-
- if ( val < HEX_MAX_THRESHOLD
- && min < HEX_MAX_THRESHOLD
- && max < HEX_MAX_THRESHOLD
- && val > HEX_MIN_THRESHOLD
- && min > HEX_MIN_THRESHOLD
- && max > HEX_MIN_THRESHOLD)
+ else if ( val < HEX_MAX_THRESHOLD
+ && min < HEX_MAX_THRESHOLD
+ && max < HEX_MAX_THRESHOLD
+ && val > HEX_MIN_THRESHOLD
+ && min > HEX_MIN_THRESHOLD
+ && max > HEX_MIN_THRESHOLD)
{
- /* xgettext:c-format */
- err = _("%s out of range (%" BFD_VMA_FMT "d is not between %" \
- BFD_VMA_FMT "d and %" BFD_VMA_FMT "d)");
+ sprintf (val_buf, "%" BFD_VMA_FMT "d", val);
+ sprintf (min_buf, "%" BFD_VMA_FMT "d", min);
+ sprintf (max_buf, "%" BFD_VMA_FMT "d", max);
+
+ /* xgettext:c-format. */
+ err = _("%s out of range (%s is not between %s and %s)");
if (bad)
- as_bad_where (file, line, err, prefix, val, min, max);
+ as_bad_where (file, line, err, prefix, val_buf, min_buf, max_buf);
else
- as_warn_where (file, line, err, prefix, val, min, max);
+ as_warn_where (file, line, err, prefix, val_buf, min_buf, max_buf);
}
else
{
- char val_buf [sizeof (val) * 3 + 2];
- char min_buf [sizeof (val) * 3 + 2];
- char max_buf [sizeof (val) * 3 + 2];
-
- if (sizeof (val) > sizeof (bfd_vma))
- abort ();
-
sprintf_vma (val_buf, (bfd_vma) val);
sprintf_vma (min_buf, (bfd_vma) min);
sprintf_vma (max_buf, (bfd_vma) max);
@@ -437,7 +440,7 @@ as_warn_value_out_of_range (const char *prefix,
const char *file,
unsigned line)
{
- as_internal_value_out_of_range (prefix, value, min, max, file, line, 0);
+ as_internal_value_out_of_range (prefix, value, min, max, file, line, false);
}
void
@@ -448,5 +451,5 @@ as_bad_value_out_of_range (const char *prefix,
const char *file,
unsigned line)
{
- as_internal_value_out_of_range (prefix, value, min, max, file, line, 1);
+ as_internal_value_out_of_range (prefix, value, min, max, file, line, true);
}