Currently, all versions of Hexagon CPU are treated the same, and all opcodes are able to run on any version. This series changes the behavior such that only the opcodes available on the currently executing Hexagon CPU version can execute.
Changes include: Mark which Hexagon CPU version is currently executing Check that each opcode is supported in the Hexagon CPU version If not, generate INVALID_PACKET opcode, which is converted to SIGILL Properly handle disassembly (-d in_asm) Test case added Co-authored-by: Matheus Tavares Bernardino <[email protected]> Co-authored-by: Brian Cain <[email protected]> Changes in v2: - Rebase with Brian Cain's "Handle some invalid encodings" series - Add older opcodes to tag_rev_info.c.inc - Change tag_rev_info to use HexagonVersion Suggested by Richard Henderson <[email protected]> - Disassembly includes valid opcodes inside packet with invalid opcodes - Remove unused function - snpring_a_pkt_debug Changes in v3: - Use a struct to hold Hexagon definition rather than a simple enum Suggested by Anton Johansson <[email protected]> Brian Cain (1): tests/tcg/hexagon: Add test for revision-gated instruction decoding Matheus Tavares Bernardino (1): Hexagon (target/hexagon) Introduce tag_rev_info.c.inc Taylor Simpson (6): Hexagon (target/hexagon) Properly handle Hexagon CPU version Hexagon (linux-user/hexagon) Identify Hexagon version in ELF file Hexagon (target/hexagon) Add Hexagon definition field to DisasContext Hexagon (target/hexagon) Check each opcode against current CPU definition Hexagon (target/hexagon) Disassembly of invalid packets Hexagon (target/hexagon) Remove snprint_a_pkt_debug target/hexagon/cpu-qom.h | 27 ++ target/hexagon/cpu.h | 2 + target/hexagon/cpu_bits.h | 4 +- target/hexagon/decode.h | 2 + target/hexagon/printinsn.h | 4 +- target/hexagon/translate.h | 1 + disas/hexagon.c | 3 +- linux-user/hexagon/elfload.c | 43 +- target/hexagon/cpu.c | 48 ++- target/hexagon/decode.c | 52 ++- target/hexagon/printinsn.c | 40 +- target/hexagon/translate.c | 1 + tests/tcg/hexagon/check_rev_gating.c | 141 ++++++ target/hexagon/tag_rev_info.c.inc | 613 +++++++++++++++++++++++++++ tests/tcg/hexagon/Makefile.target | 6 + 15 files changed, 911 insertions(+), 76 deletions(-) create mode 100644 tests/tcg/hexagon/check_rev_gating.c create mode 100644 target/hexagon/tag_rev_info.c.inc -- 2.43.0
