[gdb/tdep] Fix exec check in gdb_print_insn_arm

With a gdb build with --enable-targets=all we run into a KFAIL:
KFAIL: gdb.gdb/unittest.exp: executable loaded: maintenance selftest, \
  failed none (PRMS: gdb/27891)
due to:
Running selftest print_one_insn.^M
Self test failed: arch armv8.1-m.main: self-test failed at \

The test fails because we expect disassembling of one arm insn to consume 4
bytes and produce (using verbose = true in disasm-selftests.c):
arm mov r0, #0
but instead the disassembler uses thumb mode and only consumes 2
bytes and produces:
arm movs        r0, r0

The failure does not show up in the "no executable loaded" variant because
this code in gdb_print_insn_arm isn't triggered:
  if (current_program_space->exec_bfd () != NULL)
and consequently we do this in print_insn:
      if ((info->flags & USER_SPECIFIED_MACHINE_TYPE) == 0)
        info->mach = bfd_mach_arm_unknown;
and don't set force_thumb to true in select_arm_features.

The code in gdb_print_insn_arm makes the assumption that the disassembly
architecture matches the exec architecture, which in this case is incorrect,
because the exec architecture is x86_64, and the disassembly architecture is
armv8.1-m.main.  Fix that by explicitly checking it:
  if (current_program_space->exec_bfd () != NULL
      && (current_program_space->exec_bfd ()->arch_info
	  == gdbarch_bfd_arch_info (gdbarch)))

This fixes the print_one_insn failure, so remove the KFAIL.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27891
2 files changed