binutils-gdb/include
Tamar Christina f9830ec165 Implement Read/Write constraints on system registers on AArch64
This patch adds constraints for read and write only system registers with the
msr and mrs instructions.  The code will treat having both flags set and none
set as the same.  These flags add constraints that must be matched up. e.g. a
system register with a READ only flag set, can only be used with mrs.  If The
constraint fails a warning is emitted.

Examples of the warnings generated:

test.s: Assembler messages:
test.s:5: Warning: specified register cannot be written to at operand 1 -- `msr dbgdtrrx_el0,x3'
test.s:7: Warning: specified register cannot be read from at operand 2 -- `mrs x3,dbgdtrtx_el0'
test.s:8: Warning: specified register cannot be written to at operand 1 -- `msr midr_el1,x3'

and disassembly notes:

0000000000000000 <main>:
   0:	d5130503 	msr	dbgdtrtx_el0, x3
   4:	d5130503 	msr	dbgdtrtx_el0, x3
   8:	d5330503 	mrs	x3, dbgdtrrx_el0
   c:	d5330503 	mrs	x3, dbgdtrrx_el0
  10:	d5180003 	msr	midr_el1, x3	; note: writing to a read-only register.

Note that because dbgdtrrx_el0 and dbgdtrtx_el0 have the same encoding, during
disassembly the constraints are use to disambiguate between the two.  An exact
constraint match is always prefered over partial ones if available.

As always the warnings can be suppressed with -w and also be made errors using
warnings as errors.

binutils/

	PR binutils/21446
	* doc/binutils.texi (-M): Document AArch64 options.

gas/

	PR binutils/21446
	* testsuite/gas/aarch64/illegal-sysreg-2.s: Fix pmbidr_el1 test.
	* testsuite/gas/aarch64/illegal-sysreg-2.l: Likewise.
	* testsuite/gas/aarch64/illegal-sysreg-2.d: Likewise.
	* testsuite/gas/aarch64/sysreg-diagnostic.s: New.
	* testsuite/gas/aarch64/sysreg-diagnostic.l: New.
	* testsuite/gas/aarch64/sysreg-diagnostic.d: New.

include/

	PR binutils/21446
	* opcode/aarch64.h (F_SYS_READ, F_SYS_WRITE): New.

opcodes/

	PR binutils/21446
	* aarch64-asm.c (opintl.h): Include.
	(aarch64_ins_sysreg): Enforce read/write constraints.
	* aarch64-dis.c (aarch64_ext_sysreg): Likewise.
	* aarch64-opc.h (F_DEPRECATED, F_ARCHEXT, F_HASXT): Moved here.
	(F_REG_READ, F_REG_WRITE): New.
	* aarch64-opc.c (aarch64_print_operand): Generate notes for
	AARCH64_OPND_SYSREG.
	(F_DEPRECATED, F_ARCHEXT, F_HASXT): Move to aarch64-opc.h.
	(aarch64_sys_regs): Add constraints to currentel, midr_el1, ctr_el0,
	mpidr_el1, revidr_el1, aidr_el1, dczid_el0, id_dfr0_el1, id_pfr0_el1,
	id_pfr1_el1, id_afr0_el1, id_mmfr0_el1, id_mmfr1_el1, id_mmfr2_el1,
	id_mmfr3_el1, id_mmfr4_el1, id_isar0_el1, id_isar1_el1, id_isar2_el1,
	id_isar3_el1, id_isar4_el1, id_isar5_el1, mvfr0_el1, mvfr1_el1,
	mvfr2_el1, ccsidr_el1, id_aa64pfr0_el1, id_aa64pfr1_el1,
	id_aa64dfr0_el1, id_aa64dfr1_el1, id_aa64isar0_el1, id_aa64isar1_el1,
	id_aa64mmfr0_el1, id_aa64mmfr1_el1, id_aa64mmfr2_el1, id_aa64afr0_el1,
	id_aa64afr0_el1, id_aa64afr1_el1, id_aa64zfr0_el1, clidr_el1,
	csselr_el1, vsesr_el2, erridr_el1, erxfr_el1, rvbar_el1, rvbar_el2,
	rvbar_el3, isr_el1, tpidrro_el0, cntfrq_el0, cntpct_el0, cntvct_el0,
	mdccsr_el0, dbgdtrrx_el0, dbgdtrtx_el0, osdtrrx_el1, osdtrtx_el1,
	mdrar_el1, oslar_el1, oslsr_el1, dbgauthstatus_el1, pmbidr_el1,
	pmsidr_el1, pmswinc_el0, pmceid0_el0, pmceid1_el0.
	* aarch64-tbl.h (aarch64_opcode_table): Add constraints to
	msr (F_SYS_WRITE), mrs (F_SYS_READ).
2018-05-15 17:17:36 +01:00
..
aout various i386-aout and i386-coff target removal 2018-04-18 09:34:19 +09:30
cgen Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
coff -Wstringop-truncation warnings 2018-05-04 18:58:23 +09:30
elf Add support for detecting Freescale S12Z binaries in readelf. 2018-05-10 12:51:42 +01:00
gdb Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
mach-o PR22069, Several instances of register accidentally spelled as regsiter 2018-05-09 15:55:28 +09:30
opcode Implement Read/Write constraints on system registers on AArch64 2018-05-15 17:17:36 +01:00
som Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
vms Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
alloca-conf.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
ansidecl.h -Wstringop-truncation warnings 2018-05-04 18:58:23 +09:30
bfdlink.h [MicroBlaze] PIC data text relative 2018-04-17 14:47:13 -07:00
binary-io.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
bout.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
ChangeLog Implement Read/Write constraints on system registers on AArch64 2018-05-15 17:17:36 +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-2017 ChangeLog rotation 2018-01-03 17:49:42 +10:30
ChangeLog-9103
COPYING
COPYING3
demangle.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
dis-asm.h This patch adds support to objdump for disassembly of NFP (Netronome Flow Processor) ELF files (.nffw) as well as some basic readelf support. 2018-04-30 17:02:59 +01:00
dwarf2.def Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
dwarf2.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
dyn-string.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
environ.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
fibheap.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
filenames.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
floatformat.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
fnmatch.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
fopen-bin.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
fopen-same.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
fopen-vms.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
gcc-c-fe.def Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
gcc-c-interface.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
gcc-cp-fe.def Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
gcc-cp-interface.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
gcc-interface.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
getopt.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
hashtab.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
hp-symtab.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
leb128.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
libiberty.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
longlong.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
lto-symtab.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
MAINTAINERS Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
md5.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
oasys.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
objalloc.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
obstack.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
os9k.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
partition.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
plugin-api.h New plugin interface to get list of symbols wrapped with --wrap option. 2018-02-22 13:56:46 -08:00
progress.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
safe-ctype.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
sha1.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
simple-object.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
sort.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
splay-tree.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
symcat.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
timeval-utils.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
vtv-change-permission.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
xregex2.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
xregex.h
xtensa-config.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
xtensa-isa-internal.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
xtensa-isa.h Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30