MIPS/opcodes: Correctly combine ASE flags for ASE_MIPS16E2_MT calculation
authorMaciej W. Rozycki <macro@imgtec.com>
Thu, 29 Jun 2017 23:55:07 +0000 (00:55 +0100)
committerMaciej W. Rozycki <macro@imgtec.com>
Thu, 29 Jun 2017 23:55:07 +0000 (00:55 +0100)
commit60804c53a0c365f0802e90c12dfcbe6696b861fe
treede4dd080541708b2341d8a7df1f3a3a460aeb8f8
parent92cebb3dbea282bbf7357ed2f3f03bc92fee8c7b
MIPS/opcodes: Correctly combine ASE flags for ASE_MIPS16E2_MT calculation

Correct a commit 25499ac7ee92 ("MIPS16e2: Add MIPS16e2 ASE support")
disassembler bug with the handling of the ASE_MIPS16E2_MT combination
ASE flag, where the calculation uses MIPS ABI Flags directly rather than
calculated internal ASE flags.  Consequently code does not correctly set
the ASE_MIPS16E2_MT flag when the MIPS16e2 ASE flag and the MT ASE flag
come from different sources, i.e. one from the BFD chosen and the other
one from MIPS ABI Flags.

Fix this by using internal ASE_MT and ASE_MIPS16E2 flags in a separate
subsequent step, factored out to a dedicated function for use with
future combination ASE flags.  Adjust the `mips16e2@mips16e2-mt-sub.d'
test case accordingly, where the MT flag comes from the BFD selected for
the disassembler and the MIPS16e2 flag comes from the ELF binary itself.

opcodes/
* mips-dis.c (mips_calculate_combination_ases): New function.
(mips_convert_abiflags_ases): Factor out ASE_MIPS16E2_MT
calculation to the new function.
(set_default_mips_dis_options): Call the new function.

gas/
* testsuite/gas/mips/mips16e2@mips16e2-mt-sub.d: Adjust for the
ASE_MIPS16E2_MT flag disassembler fix.
* testsuite/gas/mips/mips16e2-interaptiv-mr2@mips16e2-mt-sub.d:
Likewise.
gas/ChangeLog
gas/testsuite/gas/mips/mips16e2-interaptiv-mr2@mips16e2-mt-sub.d
gas/testsuite/gas/mips/mips16e2@mips16e2-mt-sub.d
opcodes/ChangeLog
opcodes/mips-dis.c