[ARM] Mark USER_SPECIFIED_MACHINE_TYPE in disassemble_info.flags
opcodes/arm-dis.c:print_insn may update disassemble_info.mach to bfd_mach_arm_unknown unless USER_SPECIFIED_MACHINE_TYPE is marked. When default_print_insn is called for the first time, disassemble_info.mach is correctly set in GDB, but arm-dis.c:print_insn sets it to bfd_mach_arm_unknown. Then, when default_print_insn is called again (in a loop), it triggers the assert. The patch fixes the assert by marking USER_SPECIFIED_MACHINE_TYPE so that opcodes won't reset disassemble_info.mach. gdb: 2017-08-18 Yao Qi <yao.qi@linaro.org> PR tdep/21818 * arm-tdep.c (gdb_print_insn_arm): Mark USER_SPECIFIED_MACHINE_TYPE if exec_bfd isn't NULL.
This commit is contained in:
parent
6d580b635f
commit
e60eb28803
|
@ -1,3 +1,9 @@
|
|||
2017-08-18 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
PR tdep/21818
|
||||
* arm-tdep.c (gdb_print_insn_arm): Mark
|
||||
USER_SPECIFIED_MACHINE_TYPE if exec_bfd isn't NULL.
|
||||
|
||||
2017-08-18 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* NEWS: Mention GDBserver's new option "--selftest".
|
||||
|
|
|
@ -7773,6 +7773,14 @@ gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
|
|||
else
|
||||
info->symbols = NULL;
|
||||
|
||||
/* GDB is able to get bfd_mach from the exe_bfd, info->mach is
|
||||
accurate, so mark USER_SPECIFIED_MACHINE_TYPE bit. Otherwise,
|
||||
opcodes/arm-dis.c:print_insn reset info->mach, and it will trigger
|
||||
the assert on the mismatch of info->mach and bfd_get_mach (exec_bfd)
|
||||
in default_print_insn. */
|
||||
if (exec_bfd != NULL)
|
||||
info->flags |= USER_SPECIFIED_MACHINE_TYPE;
|
||||
|
||||
return default_print_insn (memaddr, info);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue