kesl/khypervisor

Guest pc, lr의 data abort 핸들링 이슈

Opened this issue · 6 comments

hyp_hvc_service 루틴에서
srt가 14(lr), 15(pc)인 경우에 대해서 처리가 안 되어 있음.

guest 가 아래 와 같은 어셈블리를 수행하는 중 Data abort 가 발생하면
add pc r0 #(데이타 어보트 주소)

하이퍼바이저가 게스트의 PC, LR 값을 제대로 핸들링 할수 없음.
라즈베리포팅에서 생긴 이슈

enum hyp_hvc_result _hyp_hvc_service(struct arch_regs *regs)
{
,,,,
srt = (iss & ISS_SRT_MASK) >> ISS_SRT_SHIFT;

// 아래코드는 임시방편으로 만든 코드
if (srt == 14)
info.value = &data;
else if (srt == 15)
info.value = &(regs->pc);
else
info.value = &(regs->gpr[srt]);

오케이. 이건 해결해야하는 문제고 아직 Trap Handler가 다 구현 안되어서 발생하는 문제야.

미구현이랑 별개의 사항. 버그임

원래 ARM VE가 Guest OS의 LR이랑 PC랑 건들필요가 없으니깐 버그가 아닌거 같은데? 어떻게 이게 버그지?

그리고 누가 PC에 Add 명령어로 접근하나 그게 버그 같음

pc 는 제가 쉽게 이해하시라고 쓴거고 직접적인 코드는 라즈비안 커널에 있습니다. LR관련된 문제 사항이었고, lr 처리 문제는 인규형한테 물어보니 인규형도 모니터링 구현 하면서도 생겼던 문제구요. 직접 전화하셔서 확인해보세요. 그리고 hyp_hvc_service()에서 코프로세스나 wfi 처리같은게 미구현 문제지, 지금 data abort 핸들링은 구현되어 있는데 여기서 문제가 생긴건 버그죠.

오케이