File valgrind.xen-4.9-handle-all-versioned-domctl-ops.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de>
Date: Fri, 23 Nov 2018 16:30:46 +0100
Subject: xen-4.9: handle all versioned domctl ops
When support for a new domctl version is added, all versioned ops must be adjusted.
bz#390553
---
coregrind/m_syswrap/syswrap-xen.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -926,24 +926,25 @@ PRE(domctl)
case VKI_XEN_DOMCTL_createdomain:
switch (domctl->interface_version) {
case 0x00000007:
case 0x00000008:
case 0x00000009:
case 0x0000000a:
PRE_XEN_DOMCTL_READ(createdomain_00000004, ssidref);
PRE_XEN_DOMCTL_READ(createdomain_00000004, handle);
PRE_XEN_DOMCTL_READ(createdomain_00000004, flags);
break;
case 0x0000000b:
case 0x0000000c:
+ case 0x0000000d:
switch (vki_assumed_xenversion) {
case vki_xenversion_406:
PRE_XEN_DOMCTL_READ(createdomain_0000000b, ssidref);
PRE_XEN_DOMCTL_READ(createdomain_0000000b, handle);
PRE_XEN_DOMCTL_READ(createdomain_0000000b, flags);
#if defined(__i386__) || defined(__x86_64__)
__PRE_XEN_DOMCTL_READ(createdomain_0000000b, createdomain_0000000b, config.dummy);
#endif
#if defined(__arm__) || defined(__aarch64__)
__PRE_XEN_DOMCTL_READ(createdomain_0000000b, createdomain_0000000b, config.gic_version);
__PRE_XEN_DOMCTL_READ(createdomain_0000000b, createdomain_0000000b, config.nr_spis);
__PRE_XEN_DOMCTL_READ(createdomain_0000000b, createdomain_0000000b, config.clock_frequency);
@@ -988,24 +989,25 @@ PRE(domctl)
(Addr)domctl->u.hvmcontext.buffer.p,
domctl->u.hvmcontext.size);
break;
case VKI_XEN_DOMCTL_gethvmcontext_partial:
switch (domctl->interface_version) {
case 0x00000007:
case 0x00000008:
case 0x00000009:
case 0x0000000a:
case 0x0000000b:
case 0x0000000c:
+ case 0x0000000d:
__PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000005, type);
__PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000005, instance);
__PRE_XEN_DOMCTL_READ(gethvmcontext_partial, hvmcontext_partial_00000005, buffer);
switch (domctl->u.hvmcontext_partial_00000005.type) {
case VKI_HVM_SAVE_CODE(CPU):
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(CPU));
break;
case VKI_HVM_SAVE_CODE(MTRR):
@@ -1193,24 +1195,25 @@ PRE(domctl)
break;
case VKI_XEN_DOMCTL_settimeoffset:
switch (domctl->interface_version) {
case 0x00000007:
case 0x00000008:
case 0x00000009:
case 0x0000000a:
PRE_XEN_DOMCTL_READ(settimeoffset_00000001, time_offset_seconds);
break;
case 0x0000000b:
case 0x0000000c:
+ case 0x0000000d:
PRE_XEN_DOMCTL_READ(settimeoffset_0000000b, time_offset_seconds);
break;
}
break;
case VKI_XEN_DOMCTL_getvcpuinfo:
PRE_XEN_DOMCTL_READ(getvcpuinfo, vcpu);
break;
case VKI_XEN_DOMCTL_scheduler_op:
PRE_XEN_DOMCTL_READ(scheduler_op, sched_id);
PRE_XEN_DOMCTL_READ(scheduler_op, cmd);
@@ -2429,24 +2432,25 @@ POST(domctl){
sizeof(*domctl->u.hvmcontext.buffer.p)
* domctl->u.hvmcontext.size);
break;
case VKI_XEN_DOMCTL_gethvmcontext_partial:
switch (domctl->interface_version) {
case 0x00000007:
case 0x00000008:
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;
}
break;
case VKI_XEN_DOMCTL_scheduler_op:
if ( domctl->u.scheduler_op.cmd == VKI_XEN_DOMCTL_SCHEDOP_getinfo ) {
@@ -2596,24 +2600,25 @@ POST(domctl){
__POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
sysenter_disables_events);
__POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000008,
mcg_cap);
#endif
break;
case 0x00000009:
case 0x0000000a:
case 0x0000000b:
case 0x0000000c:
+ case 0x0000000d:
__POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009, size);
#if defined(__i386__) || defined(__x86_64__)
__POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
syscall32_callback_eip);
__POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
sysenter_callback_eip);
__POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
syscall32_callback_cs);
__POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
sysenter_callback_cs);
__POST_XEN_DOMCTL_WRITE(get_ext_vcpucontext, ext_vcpucontext_00000009,
syscall32_disables_events);
@@ -2702,24 +2707,25 @@ POST(domctl){
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000b, u.mov_to_cr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR:
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000b, u.mov_to_msr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST:
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000b, u.guest_request);
break;
}
}
break;
case 0x0000000c:
+ case 0x0000000d:
if (domctl->u.monitor_op_0000000c.op == VKI_XEN_DOMCTL_MONITOR_OP_GET_CAPABILITIES) {
switch(domctl->u.monitor_op_0000000c.event) {
case VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG:
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000c, u.mov_to_cr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR:
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000c, u.mov_to_msr);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST:
__POST_XEN_DOMCTL_WRITE(monitor_op, monitor_op_0000000c, u.guest_request);
break;
case VKI_XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION: