summary refs log tree commit diff stats
path: root/results/scraper/launchpad-without-comments/1879587
diff options
context:
space:
mode:
Diffstat (limited to 'results/scraper/launchpad-without-comments/1879587')
-rw-r--r--results/scraper/launchpad-without-comments/187958720
1 files changed, 20 insertions, 0 deletions
diff --git a/results/scraper/launchpad-without-comments/1879587 b/results/scraper/launchpad-without-comments/1879587
new file mode 100644
index 00000000..e2c2c0bb
--- /dev/null
+++ b/results/scraper/launchpad-without-comments/1879587
@@ -0,0 +1,20 @@
+Register number in ESR is incorrect for certain banked registers when switching from AA32 to AA64
+
+I am running into a situation where I have:
+- A hypervisor running in EL2, AA64
+- A guest running in EL1, AA32
+
+We trap certain accesses to special registers such as DACR (via HCR.TVM). One instruction that is trapped is:
+
+ee03ef10  ->	mcr	15, 0, lr, cr3, cr0, {0}
+
+The guest is running in SVC mode. So, LR should refer to LR_svc there. LR_svc is mapped to X18 in AA64. So, ESR should reflect that. However, the actual ESR value is: 0xfe00dc0
+
+If we decode the 'rt':
+>>> (0xfe00dc0 >> 5) & 0x1f
+14
+
+My understanding is that 14 is incorrect in the context of AA64. rt should be set to 18. The current mode being SVC, LR refers to LR_svc not LR_usr. In other words, the mapping between registers in AA64 and AA32 doesn't seem to be accounted for. I've tested this with Qemu 5.0.0
+
+Let me know if that makes sense and if you would like more info. I am also happy to test patches.
+Thanks for all the great work on Qemu!
\ No newline at end of file