Francesco Cagnin <francesco.cag...@gmail.com> writes:
> Hi, > indeed, the patch doesn't keep separate copies of debug registers and > just directly sets cp15.* values, as I was not aware of the issue—thanks > for the detailed explanation. > > I remain available to implement the required fixes, but I'd need > some guidance on how to proceed. Thanks, In the KVM world we put of the final setting of the registers until right before the context switch. I guess the equivalent in HVF would be to modify hvf_put_registers() and make the decision about if to use the QEMU supplied debug registers or the env values there. Something like: for (i = 0; i < ARRAY_SIZE(hvf_sreg_match); i++) { if (hvf_sreg_match[i].cp_idx == -1) { continue; } if (hvf_sref_match[i].can_override && should_override) { val = get_from_debug(...) } else { val = arm_cpu->cpreg_values[hvf_sreg_match[i].cp_idx]; } ret = hv_vcpu_set_sys_reg(cpu->hvf->fd, hvf_sreg_match[i].reg, val); assert_hvf_ok(ret); } You will of course have to ensure the get_registers doesn't inadvertently splat the env values with what we have just written here. I'm not super familiar with the HVF architecture but maybe its possible to do directly call hv_vcpu_set_sys_reg steps in your current update_guest_debug function instead of copying to env and then and just skip setting/getting them again in the final put registers just before you exec. -- Alex Bennée Virtualisation Tech Lead @ Linaro