Return results 4–7 from SMC calls.
Bug: 141469322
Change-Id: I796307e905db0c6f19bb23586300a8293dc07d7e
diff --git a/src/arch/aarch64/hypervisor/handler.c b/src/arch/aarch64/hypervisor/handler.c
index d58a600..acbe562 100644
--- a/src/arch/aarch64/hypervisor/handler.c
+++ b/src/arch/aarch64/hypervisor/handler.c
@@ -583,7 +583,10 @@
case 0x17: /* EC = 010111, SMC instruction. */ {
uintreg_t smc_pc = vcpu->regs.pc;
- struct smc_result ret = {0};
+ struct smc_result ret = {.res4 = vcpu->regs.r[4],
+ .res5 = vcpu->regs.r[5],
+ .res6 = vcpu->regs.r[6],
+ .res7 = vcpu->regs.r[7]};
struct vcpu *next = NULL;
if (!smc_handler(vcpu, &ret, &next)) {
@@ -598,6 +601,10 @@
vcpu->regs.r[1] = ret.res1;
vcpu->regs.r[2] = ret.res2;
vcpu->regs.r[3] = ret.res3;
+ vcpu->regs.r[4] = ret.res4;
+ vcpu->regs.r[5] = ret.res5;
+ vcpu->regs.r[6] = ret.res6;
+ vcpu->regs.r[7] = ret.res7;
return next;
}