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);
openSUSE Build Service is sponsored by