Re: IBM zSystems: Accept (. - 0x100000000) PCRel32 operands
authorAlan Modra <amodra@gmail.com>
Thu, 12 May 2022 01:45:24 +0000 (11:15 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 12 May 2022 02:19:45 +0000 (11:49 +0930)
The new test failed on s390-linux due to bfd_sprintf_vma trimming
output to 32 bits for 32-bit targets.  The test was faulty anyway,
expecting zero as the min end of the range is plainly wrong, but
that's what you get if you cast min to int.

* config/tc-s390.c (s390_insert_operand): Print range error using
PRId64.
* testsuite/gas/s390/zarch-z900-err.l: Correct expected output.

gas/config/tc-s390.c
gas/testsuite/gas/s390/zarch-z900-err.l

index 4fd4f1f06935750122da2965610b8063f521bf8a..fb452f8a986087bca861bc2a044c4a09c68f7510 100644 (file)
@@ -617,8 +617,8 @@ s390_insert_operand (unsigned char *insn,
       if (val < min || val > max)
        {
          const char *err =
-           _("operand out of range (%s not between %ld and %ld)");
-         char buf[100];
+           _("operand out of range (%" PRId64 " not between %" PRId64
+             " and %" PRId64 ")");
 
          if (operand->flags & S390_OPERAND_PCREL)
            {
@@ -626,11 +626,11 @@ s390_insert_operand (unsigned char *insn,
              min <<= 1;
              max <<= 1;
            }
-         bfd_sprintf_vma (stdoutput, buf, val);
          if (file == (char *) NULL)
-           as_bad (err, buf, (int) min, (int) max);
+           as_bad (err, (int64_t) val, (int64_t) min, (int64_t) max);
          else
-           as_bad_where (file, line, err, buf, (int) min, (int) max);
+           as_bad_where (file, line,
+                         err, (int64_t) val, (int64_t) min, (int64_t) max);
          return;
        }
       /* val is ok, now restrict it to operand->bits bits.  */
index 72994192095d055806317acf87f6265b0d196f81..cf8e9c2cefcc829fb5b7b223169eb47e87acac95 100644 (file)
@@ -1,3 +1,3 @@
 .*: Assembler messages:
-.*:3: Error: operand out of range \(fffffffefffffffe not between 0 and 4294967294\)
-.*:4: Error: operand out of range \(0000000100000000 not between 0 and 4294967294\)
+.*:3: Error: operand out of range \(-4294967298 not between -4294967296 and 4294967294\)
+.*:4: Error: operand out of range \(4294967296 not between -4294967296 and 4294967294\)