[PATCH] as: fixed internal error when immediate value of relocation overflow.

Lulu Cai cailulu@loongson.cn
Mon Oct 9 02:11:09 GMT 2023


The as reports an internal error when the relocation
overflow or is misaligned. Delete _bfd_error_handler
can avoid it and reports Reloc overflow.
---
 bfd/elfxx-loongarch.c                      | 8 +-------
 gas/testsuite/gas/loongarch/imm_overflow.d | 3 +++
 gas/testsuite/gas/loongarch/imm_overflow.l | 2 ++
 gas/testsuite/gas/loongarch/imm_overflow.s | 4 ++++
 gas/testsuite/gas/loongarch/imm_unalign.d  | 3 +++
 gas/testsuite/gas/loongarch/imm_unalign.l  | 2 ++
 gas/testsuite/gas/loongarch/imm_unalign.s  | 6 ++++++
 7 files changed, 21 insertions(+), 7 deletions(-)
 create mode 100644 gas/testsuite/gas/loongarch/imm_overflow.d
 create mode 100644 gas/testsuite/gas/loongarch/imm_overflow.l
 create mode 100644 gas/testsuite/gas/loongarch/imm_overflow.s
 create mode 100644 gas/testsuite/gas/loongarch/imm_unalign.d
 create mode 100644 gas/testsuite/gas/loongarch/imm_unalign.l
 create mode 100644 gas/testsuite/gas/loongarch/imm_unalign.s

diff --git a/bfd/elfxx-loongarch.c b/bfd/elfxx-loongarch.c
index 0a595eb87d5..c20efe82f31 100644
--- a/bfd/elfxx-loongarch.c
+++ b/bfd/elfxx-loongarch.c
@@ -1671,7 +1671,7 @@ reloc_bits (bfd *abfd ATTRIBUTE_UNUSED,
 }
 
 static bool
-reloc_sign_bits (bfd *abfd, reloc_howto_type *howto, bfd_vma *fix_val)
+reloc_sign_bits (bfd *abfd ATTRIBUTE_UNUSED, reloc_howto_type *howto, bfd_vma *fix_val)
 {
   if (howto->complain_on_overflow != complain_overflow_signed)
     return false;
@@ -1682,9 +1682,6 @@ reloc_sign_bits (bfd *abfd, reloc_howto_type *howto, bfd_vma *fix_val)
   if (howto->rightshift
       && (val & ((((bfd_signed_vma) 1) << howto->rightshift) - 1)))
     {
-      (*_bfd_error_handler) (_("%pB: relocation %s right shift %d error 0x%lx"),
-			     abfd, howto->name, howto->rightshift, (long) val);
-      bfd_set_error (bfd_error_bad_value);
       return false;
     }
 
@@ -1696,9 +1693,6 @@ reloc_sign_bits (bfd *abfd, reloc_howto_type *howto, bfd_vma *fix_val)
      high part: from sign bit to highest bit.  */
   if ((val & ~mask) && ((val & ~mask) != ~mask))
     {
-      (*_bfd_error_handler) (_("%pB: relocation %s overflow 0x%lx"),
-			     abfd, howto->name, (long) val);
-      bfd_set_error (bfd_error_bad_value);
       return false;
     }
 
diff --git a/gas/testsuite/gas/loongarch/imm_overflow.d b/gas/testsuite/gas/loongarch/imm_overflow.d
new file mode 100644
index 00000000000..1ead2c9a74f
--- /dev/null
+++ b/gas/testsuite/gas/loongarch/imm_overflow.d
@@ -0,0 +1,3 @@
+#as:
+#source: imm_overflow.s
+#warning_output: imm_overflow.l
diff --git a/gas/testsuite/gas/loongarch/imm_overflow.l b/gas/testsuite/gas/loongarch/imm_overflow.l
new file mode 100644
index 00000000000..3dd4d90ffa1
--- /dev/null
+++ b/gas/testsuite/gas/loongarch/imm_overflow.l
@@ -0,0 +1,2 @@
+.*Assembler messages:
+.*Warning: Reloc overflow
diff --git a/gas/testsuite/gas/loongarch/imm_overflow.s b/gas/testsuite/gas/loongarch/imm_overflow.s
new file mode 100644
index 00000000000..2be688bd25a
--- /dev/null
+++ b/gas/testsuite/gas/loongarch/imm_overflow.s
@@ -0,0 +1,4 @@
+.L1:
+  nop
+  .fill 0x12345, 4, 0
+  blt $r3, $r4, .L1
diff --git a/gas/testsuite/gas/loongarch/imm_unalign.d b/gas/testsuite/gas/loongarch/imm_unalign.d
new file mode 100644
index 00000000000..df1a8cf6041
--- /dev/null
+++ b/gas/testsuite/gas/loongarch/imm_unalign.d
@@ -0,0 +1,3 @@
+#as:
+#source: imm_unalign.s
+#warning_output: imm_unalign.l
diff --git a/gas/testsuite/gas/loongarch/imm_unalign.l b/gas/testsuite/gas/loongarch/imm_unalign.l
new file mode 100644
index 00000000000..3dd4d90ffa1
--- /dev/null
+++ b/gas/testsuite/gas/loongarch/imm_unalign.l
@@ -0,0 +1,2 @@
+.*Assembler messages:
+.*Warning: Reloc overflow
diff --git a/gas/testsuite/gas/loongarch/imm_unalign.s b/gas/testsuite/gas/loongarch/imm_unalign.s
new file mode 100644
index 00000000000..d97ada04d9f
--- /dev/null
+++ b/gas/testsuite/gas/loongarch/imm_unalign.s
@@ -0,0 +1,6 @@
+.L1:
+  .2byte 0x12
+
+.L2:
+  .fill 1, 4, 0
+  blt $r3, $r4, .L1
-- 
2.31.1



More information about the Binutils mailing list