feat!: bump QEMU to 5.1.0
[!NOTE] This PR is insanely large - every commit is atomic in nature, but it's still not super easy to review. I've tried to make it as easy as possible by splitting each arch's update into their own commit, as well as various QEMU components so that the more important stuff like FPU/TCG changes can be more easily reviewed. I don't think it's really possible to fully review the code, especially stuff like RISC-V's
decode_insn(16|32).inc.cfiles - in these cases, building QEMU 5.1.0 and comparing the files should suffice.
Problem
Unicorn is on QEMU 5.0.1, which is 5 years old now and is missing a ton of new features. We should ideally be updating QEMU to allow users to use these new features.
Solution
This PR upgrades QEMU from 5.0.1 to 5.1.0. It is very large, namely due to many changes in the FPU and TCG backends, and large changes in ARM (for MTE & TTS2UXN support) and RISC-V (new CPU support & lots of insn translation additions). The public-facing changes for consumers of Unicorn are:
- MTE & TTS2UXN support for ARM, meaning, in theory, instructions that leverage memory tagging should work (
IRG,ADDG, etc.) - New Loongson MIPS CPUs
- New RISC-V CPUs
While I truly appreciate and respect your efforts, merging this will inevitably block previous PRs for new architectures, which also needs upgrading to 5.1.0. My bandwidth is quite full before early May and thus giving the fact that I plan to release 2.2.0 in June, please expect delay for this PR till then.
Or if you wish, i.e. it is totally optional and much more appreciated if done, you might review/push those PR forwards.
Yeah that's totally understandable - I could review and/or update those PRs as well, wouldn't mind doing that (though for updating for 5.1.0 I might need to have you apply a patch OR I can open my own PR stacked on top of the contributor's)
I will create a standalone branch like “staging” shortly so that we can have a playground for such big updates.
Okay, playground is there =)
I will firstly try to merge all those PR together and get a TODO list:
https://github.com/unicorn-engine/unicorn/pull/2145