binutils-gdb/include
Maciej W. Rozycki 9785fc2a4d MIPS: Fix XPA base and Virtualization ASE instruction handling
Correct a commit 7d64c587c1 ("Add support for the MIPS eXtended
Physical Address (XPA) ASE.") bug, causing XPA base and Virtualization
ASE instructions to be wrongly always enabled with the selection of the
MIPS32r2 or higher ISA.

For example this source assembles successfully as shown below:

$ cat xpa.s
	mfhc0	$2, $1
$ as -32 -mips32 -o xpa.o xpa.s
xpa.s: Assembler messages:
xpa.s:1: Error: opcode not supported on this processor: mips32 (mips32) `mfhc0 $2,$1'
$ as -32 -mips32r2 -o xpa.o xpa.s
$ objdump -d xpa.o

xpa.o:     file format elf32-tradbigmips

Disassembly of section .text:

00000000 <.text>:
   0:	40420800 	mfhc0	v0,c0_random
	...
$

To address this issue remove the I33 (INSN_ISA32R2) marking from all XPA
instructions in the opcode table.  Additionally, for XPA Virtualization
ASE instructions implement an XPAVZ (ASE_XPA_VIRT) combination ASE flag
and use it in place of IVIRT|XPA (ASE_VIRT|ASE_XPA).

Now the same source is correctly rejected unless the `-mxpa' option is
also used:

$ as -32 -mips32r2 -o xpa.o xpa.s
xpa.s: Assembler messages:
xpa.s:1: Error: opcode not supported on this processor: mips32r2 (mips32r2) `mfhc0 $2,$1'
$ as -32 -mips32r2 -mxpa -o xpa.o xpa.s
$

Add test cases for XPA base and XPA Virtualization ASE instructions.

Parts of this change by Andrew Bennett.

	include/
	* opcode/mips.h (ASE_XPA_VIRT): New macro.

	opcodes/
	* mips-dis.c (mips_calculate_combination_ases): Handle the
	ASE_XPA_VIRT flag.
	(parse_mips_ase_option): New function.
	(parse_mips_dis_option): Factor out ASE option handling to the
	new function.  Call `mips_calculate_combination_ases'.
	* mips-opc.c (XPAVZ): New macro.
	(mips_builtin_opcodes): Correct ISA and ASE flags for "mfhc0",
	"mfhgc0", "mthc0" and "mthgc0".

	gas/
	* config/tc-mips.c (mips_set_ase): Handle the ASE_XPA_VIRT flag.
	* testsuite/gas/mips/xpa.d: Remove `xpa' from `-M' in `objdump'
	flags.  Add `-mvirt' to `as' flags.
	* testsuite/gas/mips/xpa-err.d: New test.
	* testsuite/gas/mips/xpa-virt-err.d: New test.
	* testsuite/gas/mips/xpa-err.l: New stderr output.
	* testsuite/gas/mips/xpa-virt-err.l: New stderr output.
	* testsuite/gas/mips/xpa-err.s: New test source.
	* testsuite/gas/mips/xpa-virt-err.s: New test source.
	* testsuite/gas/mips/mips.exp: Run the new tests.

	binutils/
	* testsuite/binutils-all/mips/mips-xpa-virt-1.d: New test.
	* testsuite/binutils-all/mips/mips-xpa-virt-2.d: New test.
	* testsuite/binutils-all/mips/mips-xpa-virt-3.d: New test.
	* testsuite/binutils-all/mips/mips-xpa-virt-4.d: New test.
	* testsuite/binutils-all/mips/mips-xpa-virt.s: New test source.
	* testsuite/binutils-all/mips/mips.exp: Run the new tests.
2017-06-30 07:21:55 +01:00
..
aout Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
cgen Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
coff Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
elf S390: Support guarded-storage core note sections 2017-06-29 10:30:09 +02:00
gdb update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
mach-o Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
nlm Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
opcode MIPS: Fix XPA base and Virtualization ASE instruction handling 2017-06-30 07:21:55 +01:00
som Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
vms Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
COPYING Update the address and phone number of the FSF organization 2005-05-10 10:21:13 +00:00
COPYING3 * COPYING3: New file. Contains version 3 of the GNU General Public License. 2007-07-17 13:50:23 +00:00
ChangeLog MIPS: Fix XPA base and Virtualization ASE instruction handling 2017-06-30 07:21:55 +01:00
ChangeLog-0415 binutils ChangeLog rotation 2016-01-01 22:59:17 +10:30
ChangeLog-2016 ChangeLog rotation 2017-01-02 13:55:05 +10:30
ChangeLog-9103 Add copyright notices 2012-12-10 12:48:03 +00:00
MAINTAINERS Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
alloca-conf.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ansidecl.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
bfdlink.h x86: Support Intel Shadow Stack with SHSTK property 2017-06-22 05:50:31 -07:00
binary-io.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
bout.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
demangle.h Sync libiberty sources with GCC. 2017-03-13 17:49:32 +00:00
dis-asm.h Don't use print_insn_XXX in GDB 2017-06-14 16:29:01 +01:00
dwarf2.def Add DW_OP_GNU_variable_value 2017-03-14 12:57:48 -07:00
dwarf2.h Sync dwarf headers with master versions in gcc repository. 2017-01-03 15:18:52 +00:00
dyn-string.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
environ.h Fix MinGW compilation warnings due to environ.h 2017-05-31 09:35:07 +03:00
fibheap.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
filenames.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
floatformat.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
fnmatch.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
fopen-bin.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
fopen-same.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
fopen-vms.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
gcc-c-fe.def Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
gcc-c-interface.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
gcc-interface.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
getopt.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
hashtab.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
hp-symtab.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ieee.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
leb128.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
libiberty.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
longlong.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
lto-symtab.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
md5.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
oasys.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
objalloc.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
obstack.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
os9k.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
partition.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
plugin-api.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
progress.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
safe-ctype.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
sha1.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
simple-object.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
sort.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
splay-tree.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
symcat.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
timeval-utils.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
vtv-change-permission.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
xregex.h merge from gcc 2011-07-25 17:11:48 +00:00
xregex2.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
xtensa-config.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
xtensa-isa-internal.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
xtensa-isa.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30