[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen staging] x86emul: introduce EXPECT()



commit cb3b3438c7c73657f3e025f8af8b8dca63fb79d3
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Tue Nov 20 15:02:18 2018 +0100
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Tue Nov 20 15:02:18 2018 +0100

    x86emul: introduce EXPECT()
    
    This abstracts away the debug/release coverage using both
    ASSERT_UNREACHABLE() and a return value of X86EMUL_UNHANDLEABLE.
    
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
 xen/arch/x86/x86_emulate/x86_emulate.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c 
b/xen/arch/x86/x86_emulate/x86_emulate.c
index e69dfdd983..ffd8632479 100644
--- a/xen/arch/x86/x86_emulate/x86_emulate.c
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c
@@ -1017,6 +1017,15 @@ do {                                                    \
     if ( rc ) goto done;                                \
 } while (0)
 
+#define EXPECT(p)                                       \
+do {                                                    \
+    if ( unlikely(!(p)) )                               \
+    {                                                   \
+        ASSERT_UNREACHABLE();                           \
+        goto unhandleable;                              \
+    }                                                   \
+} while (0)
+
 static inline int mkec(uint8_t e, int32_t ec, ...)
 {
     return (e < 32 && ((1u << e) & EXC_HAS_EC)) ? ec : X86_EVENT_NO_EC;
@@ -8837,12 +8846,7 @@ x86_emulate(
                 dst.type = OP_NONE;
                 break;
             default:
-                if ( (d & DstMask) != DstMem )
-                {
-                    ASSERT_UNREACHABLE();
-                    rc = X86EMUL_UNHANDLEABLE;
-                    goto done;
-                }
+                EXPECT((d & DstMask) == DstMem);
                 break;
             }
             if ( (d & DstMask) == DstMem )
@@ -8974,9 +8978,11 @@ x86_emulate(
             stub.func);
     generate_exception_if(stub_exn.info.fields.trapnr == EXC_UD, EXC_UD);
     domain_crash(current->domain);
+#endif
+
+ unhandleable:
     rc = X86EMUL_UNHANDLEABLE;
     goto done;
-#endif
 }
 
 #undef op_bytes
--
generated by git-patchbot for /home/xen/git/xen.git#staging

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.