aarch64: Don't assert on long sysreg names
authorAlex Coplan <alex.coplan@arm.com>
Mon, 10 Aug 2020 16:44:02 +0000 (17:44 +0100)
committerAlex Coplan <alex.coplan@arm.com>
Mon, 10 Aug 2020 16:44:02 +0000 (17:44 +0100)
commitfa63795f40875541e05b90970825bb57132fcc3d
treecf53183de7a8e90f4c54dc7317d0781a7bab667a
parent9546e03d55a4d8aeca5e69ff2943884420c2584f
aarch64: Don't assert on long sysreg names

This patch fixes an assertion failure on long system register operands
in the AArch64 backend. See the new testcase for an input which
reproduces the issue.

gas/ChangeLog:

* config/tc-aarch64.c (parse_sys_reg): Don't assert when parsing
a long system register.
(parse_sys_ins_reg): Likewise.
(sysreg_hash_insert): New.
(md_begin): Use sysreg_hash_insert() to ensure all system
registers are no longer than the maximum length at startup.
* testsuite/gas/aarch64/invalid-sysreg-assert.d: New test.
* testsuite/gas/aarch64/invalid-sysreg-assert.l: Error output.
* testsuite/gas/aarch64/invalid-sysreg-assert.s: Input.

include/ChangeLog:

* opcode/aarch64.h (AARCH64_MAX_SYSREG_NAME_LEN): New.
gas/ChangeLog
gas/config/tc-aarch64.c
gas/testsuite/gas/aarch64/invalid-sysreg-assert.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/invalid-sysreg-assert.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/invalid-sysreg-assert.s [new file with mode: 0644]
include/ChangeLog
include/opcode/aarch64.h