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@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2018-11-20 15:02:18 +01:00
1 parent 789589968e
commit cb3b3438c7
1 file changed
+13 -7
+13 -7
View File
@@ -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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.