File valgrind.xen-4.10-versioned-hvmcontext_partial.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de>
Date: Fri, 16 Nov 2018 17:29:43 +0100
Subject: xen-4.10: versioned hvmcontext_partial
Handle new layout of xen_domctl_hvmcontext_partial of xen-4.10
Fixes commit c88133141a354d65568fb85037abc5e1f74ce46b.
bz#390553
---
coregrind/m_syswrap/syswrap-xen.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -1023,24 +1023,46 @@ PRE(domctl)
if ( domctl->u.hvmcontext_partial_00000005.buffer.p )
PRE_MEM_WRITE("XEN_DOMCTL_gethvmcontext_partial *buffer",
(Addr)domctl->u.hvmcontext_partial_00000005.buffer.p,
VKI_HVM_SAVE_LENGTH(MTRR));
break;
default:
bad_subop(tid, layout, arrghs, status, flags,
"__HYPERVISOR_domctl_gethvmcontext_partial type",
domctl->u.hvmcontext_partial_00000005.type);
break;
}
break;
+ case 0x0000000e:
+ __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_0000000e, type);
+ __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_0000000e, instance);
+ __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_0000000e, bufsz);
+ __PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_0000000e, buffer);
+
+ switch (domctl->u.hvmcontext_partial_0000000e.type) {
+ case VKI_HVM_SAVE_CODE(CPU):
+ if ( domctl->u.hvmcontext_partial_0000000e.buffer.p )
+ PRE_MEM_WRITE("XEN_DOMCTL_gethvmcontext_partial *buffer", (Addr)domctl->u.hvmcontext_partial_0000000e.buffer.p, VKI_HVM_SAVE_LENGTH(CPU));
+ break;
+ case VKI_HVM_SAVE_CODE(MTRR):
+ if ( domctl->u.hvmcontext_partial_0000000e.buffer.p )
+ PRE_MEM_WRITE("XEN_DOMCTL_gethvmcontext_partial *buffer", (Addr)domctl->u.hvmcontext_partial_0000000e.buffer.p, VKI_HVM_SAVE_LENGTH(MTRR));
+ break;
+ default:
+ bad_subop(tid, layout, arrghs, status, flags,
+ "__HYPERVISOR_domctl_gethvmcontext_partial type",
+ domctl->u.hvmcontext_partial_0000000e.type);
+ break;
+ }
+ break;
}
break;
case VKI_XEN_DOMCTL_max_mem:
PRE_XEN_DOMCTL_READ(max_mem, max_memkb);
break;
case VKI_XEN_DOMCTL_set_address_size:
__PRE_XEN_DOMCTL_READ(set_address_size, address_size, size);
break;
case VKI_XEN_DOMCTL_test_assign_device:
@@ -2500,24 +2522,32 @@ POST(domctl){
case 0x00000009:
case 0x0000000a:
case 0x0000000b:
case 0x0000000c:
case 0x0000000d:
switch (domctl->u.hvmcontext_partial_00000005.type) {
case VKI_HVM_SAVE_CODE(CPU):
if ( domctl->u.hvmcontext_partial_00000005.buffer.p )
POST_MEM_WRITE((Addr)domctl->u.hvmcontext_partial_00000005.buffer.p, VKI_HVM_SAVE_LENGTH(CPU));
break;
}
break;
+ case 0x0000000e:
+ switch (domctl->u.hvmcontext_partial_0000000e.type) {
+ case VKI_HVM_SAVE_CODE(CPU):
+ if ( domctl->u.hvmcontext_partial_0000000e.buffer.p )
+ POST_MEM_WRITE((Addr)domctl->u.hvmcontext_partial_0000000e.buffer.p, VKI_HVM_SAVE_LENGTH(CPU));
+ break;
+ }
+ break;
}
break;
case VKI_XEN_DOMCTL_scheduler_op:
if ( domctl->u.scheduler_op.cmd == VKI_XEN_DOMCTL_SCHEDOP_getinfo ) {
switch(domctl->u.scheduler_op.sched_id) {
case VKI_XEN_SCHEDULER_SEDF:
POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.period);
POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.slice);
POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.latency);
POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.extratime);
POST_XEN_DOMCTL_WRITE(scheduler_op, u.sedf.weight);