From a2d8448d1db6b052303dbbd576be1c00128e1bc6 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 12 May 2022 11:15:24 +0930 Subject: [PATCH] Re: IBM zSystems: Accept (. - 0x100000000) PCRel32 operands 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 | 10 +++++----- gas/testsuite/gas/s390/zarch-z900-err.l | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c index 4fd4f1f0693..fb452f8a986 100644 --- a/gas/config/tc-s390.c +++ b/gas/config/tc-s390.c @@ -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. */ diff --git a/gas/testsuite/gas/s390/zarch-z900-err.l b/gas/testsuite/gas/s390/zarch-z900-err.l index 72994192095..cf8e9c2cefc 100644 --- a/gas/testsuite/gas/s390/zarch-z900-err.l +++ b/gas/testsuite/gas/s390/zarch-z900-err.l @@ -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\) -- 2.30.2