[binutils-gdb] PR27101, as: Reject (byte) .align 0x100000000

Alan Modra amodra@sourceware.org
Mon Jan 4 00:41:22 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=90320e40958020aea265dc693d0613a330e40b61

commit 90320e40958020aea265dc693d0613a330e40b61
Author: Alan Modra <amodra@gmail.com>
Date:   Mon Jan 4 08:53:37 2021 +1030

    PR27101, as: Reject (byte) .align 0x100000000
    
    This allows alignments up to 2**TC_ALIGN_LIMIT, which might be larger
    than an unsigned int can hold.
    
            PR 27101
            * read.c (s_align): Use a large enough type for "align" to hold
            the result of get_absolute_expression.

Diff:
---
 gas/ChangeLog | 6 ++++++
 gas/read.c    | 4 ++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 155ec7e3b16..b38c379a215 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2021-01-04  Alan Modra  <amodra@gmail.com>
+
+	PR 27101
+	* read.c (s_align): Use a large enough type for "align" to hold
+	the result of get_absolute_expression.
+
 2021-01-01  Nicolas Boulenguez  <nicolas@debian.org>
 
 	* config/tc-i386.c: Correct comment spelling.
diff --git a/gas/read.c b/gas/read.c
index cf704b31ca3..9d0ba27ea8c 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -1548,7 +1548,7 @@ static void
 s_align (signed int arg, int bytes_p)
 {
   unsigned int align_limit = TC_ALIGN_LIMIT;
-  unsigned int align;
+  addressT align;
   char *stop = NULL;
   char stopc = 0;
   offsetT fill = 0;
@@ -1595,7 +1595,7 @@ s_align (signed int arg, int bytes_p)
   if (align > align_limit)
     {
       align = align_limit;
-      as_warn (_("alignment too large: %u assumed"), align);
+      as_warn (_("alignment too large: %u assumed"), align_limit);
     }
 
   if (*input_line_pointer != ',')


More information about the Binutils-cvs mailing list