Avoid self-test failures on x86-linux
authorTom Tromey <tromey@adacore.com>
Wed, 29 Sep 2021 16:14:52 +0000 (10:14 -0600)
committerTom Tromey <tromey@adacore.com>
Fri, 29 Oct 2021 13:23:38 +0000 (07:23 -0600)
The disassembly tests in "maint selftest" will fail on x86-linux.
This happens because opcodes rejects an attempt to disassemble for an
arch with a 64-bit address size when bfd_vma is 32-bit.

This patch avoids this problem by avoiding the test in this case.  I
chose to do it this way because this seems to be the only situation
where opcodes checks the size of bfd_vma.

For v2 of this patch, I've also updated memory_error_test to do the
same thing.  This is needed due to the "improve error reporting from
the disassembler" patch.

gdb/disasm-selftests.c

index 0a383d6b79590522514700e32430e9e7392107a3..59c09c983813a1ae025a264c60378f22a3f2e644 100644 (file)
@@ -85,8 +85,19 @@ print_one_insn_test (struct gdbarch *gdbarch)
       /* PR 21003 */
       if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_arc_arc601)
        return;
+      goto generic_case;
+    case bfd_arch_i386:
+      {
+       const struct bfd_arch_info *info = gdbarch_bfd_arch_info (gdbarch);
+       /* The disassembly tests will fail on x86-linux because
+          opcodes rejects an attempt to disassemble for an arch with
+          a 64-bit address size when bfd_vma is 32-bit.  */
+       if (info->bits_per_address > sizeof (bfd_vma) * CHAR_BIT)
+         return;
+      }
       /* fall through */
     default:
+    generic_case:
       {
        /* Test disassemble breakpoint instruction.  */
        CORE_ADDR pc = 0;
@@ -187,6 +198,16 @@ memory_error_test (struct gdbarch *gdbarch)
     }
   };
 
+  if (gdbarch_bfd_arch_info (gdbarch)->arch == bfd_arch_i386)
+    {
+      const struct bfd_arch_info *info = gdbarch_bfd_arch_info (gdbarch);
+      /* This test will fail on x86-linux because opcodes rejects an
+        attempt to disassemble for an arch with a 64-bit address size
+        when bfd_vma is 32-bit.  */
+      if (info->bits_per_address > sizeof (bfd_vma) * CHAR_BIT)
+       return;
+    }
+
   gdb_disassembler_test di (gdbarch);
   bool saw_memory_error = false;