KVM: selftests: Fix filename reporting in guest asserts

Fix filename reporting in guest asserts by ensuring the GUEST_ASSERT
macro records __FILE__ and substituting REPORT_GUEST_ASSERT for many
repetitive calls to TEST_FAIL.

Previously filename was reported by using __FILE__ directly in the
selftest, wrongly assuming it would always be the same as where the
assertion failed.

Signed-off-by: Colton Lewis <coltonlewis@google.com>
Reported-by: Ricardo Koller <ricarkol@google.com>
Fixes: 4e18bccc2e
Link: https://lore.kernel.org/r/20220615193116.806312-5-coltonlewis@google.com
[sean: convert more TEST_FAIL => REPORT_GUEST_ASSERT instances]
Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
Colton Lewis 2022-06-15 19:31:16 +00:00 committed by Sean Christopherson
parent ddcb57afd5
commit 594a1c271c
41 changed files with 68 additions and 102 deletions

View File

@ -231,10 +231,13 @@ static void *test_vcpu_run(void *arg)
break; break;
case UCALL_ABORT: case UCALL_ABORT:
sync_global_from_guest(vm, *shared_data); sync_global_from_guest(vm, *shared_data);
TEST_FAIL("%s at %s:%ld\n\tvalues: %lu, %lu; %lu, vcpu: %u; stage: %u; iter: %u", REPORT_GUEST_ASSERT_N(uc, "values: %lu, %lu; %lu, vcpu %u; stage; %u; iter: %u",
(const char *)uc.args[0], __FILE__, uc.args[1], GUEST_ASSERT_ARG(uc, 0),
uc.args[2], uc.args[3], uc.args[4], vcpu_idx, GUEST_ASSERT_ARG(uc, 1),
shared_data->guest_stage, shared_data->nr_iter); GUEST_ASSERT_ARG(uc, 2),
vcpu_idx,
shared_data->guest_stage,
shared_data->nr_iter);
break; break;
default: default:
TEST_FAIL("Unexpected guest exit\n"); TEST_FAIL("Unexpected guest exit\n");

View File

@ -283,9 +283,7 @@ int main(int argc, char *argv[])
stage, (ulong)uc.args[1]); stage, (ulong)uc.args[1]);
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld\n\tvalues: %#lx, %#lx", REPORT_GUEST_ASSERT_2(uc, "values: %#lx, %#lx");
(const char *)uc.args[0],
__FILE__, uc.args[1], uc.args[2], uc.args[3]);
break; break;
case UCALL_DONE: case UCALL_DONE:
goto done; goto done;

View File

@ -291,9 +291,10 @@ static void test_run(void)
guest_done = true; guest_done = true;
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld\n\tvalues: 0x%lx, 0x%lx; 0x%lx, stage: %u", REPORT_GUEST_ASSERT_N(uc, "values: 0x%lx, 0x%lx; 0x%lx, stage: %u",
(const char *)uc.args[0], __FILE__, uc.args[1], GUEST_ASSERT_ARG(uc, 0),
uc.args[2], uc.args[3], uc.args[4], stage); GUEST_ASSERT_ARG(uc, 1),
GUEST_ASSERT_ARG(uc, 2), stage);
break; break;
default: default:
TEST_FAIL("Unexpected guest exit\n"); TEST_FAIL("Unexpected guest exit\n");

View File

@ -94,8 +94,7 @@ static void enter_guest(struct kvm_vcpu *vcpu)
vcpu_run(vcpu); vcpu_run(vcpu);
if (get_ucall(vcpu, &uc) == UCALL_ABORT) if (get_ucall(vcpu, &uc) == UCALL_ABORT)
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, REPORT_GUEST_ASSERT(uc);
uc.args[1]);
} }
static void assert_vcpu_reset(struct kvm_vcpu *vcpu) static void assert_vcpu_reset(struct kvm_vcpu *vcpu)

View File

@ -782,9 +782,7 @@ static void test_vgic(uint32_t nr_irqs, bool level_sensitive, bool eoi_split)
run_guest_cmd(vcpu, gic_fd, &inject_args, &args); run_guest_cmd(vcpu, gic_fd, &inject_args, &args);
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld\n\tvalues: %#lx, %#lx", REPORT_GUEST_ASSERT_2(uc, "values: %#lx, %#lx");
(const char *)uc.args[0],
__FILE__, uc.args[1], uc.args[2], uc.args[3]);
break; break;
case UCALL_DONE: case UCALL_DONE:
goto done; goto done;

View File

@ -41,11 +41,12 @@ enum guest_assert_builtin_args {
GUEST_ASSERT_BUILTIN_NARGS GUEST_ASSERT_BUILTIN_NARGS
}; };
#define __GUEST_ASSERT(_condition, _condstr, _nargs, _args...) do { \ #define __GUEST_ASSERT(_condition, _condstr, _nargs, _args...) \
if (!(_condition)) \ do { \
ucall(UCALL_ABORT, 2 + _nargs, \ if (!(_condition)) \
"Failed guest assert: " \ ucall(UCALL_ABORT, GUEST_ASSERT_BUILTIN_NARGS + _nargs, \
_condstr, __LINE__, _args); \ "Failed guest assert: " _condstr, \
__FILE__, __LINE__, ##_args); \
} while (0) } while (0)
#define GUEST_ASSERT(_condition) \ #define GUEST_ASSERT(_condition) \

View File

@ -162,9 +162,7 @@ static void *vcpu_worker(void *__data)
goto done; goto done;
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld, val = %lu", REPORT_GUEST_ASSERT_1(uc, "val = %lu");
(const char *)uc.args[0],
__FILE__, uc.args[1], uc.args[2]);
break; break;
case UCALL_DONE: case UCALL_DONE:
goto done; goto done;

View File

@ -181,20 +181,18 @@ static void guest_code(void)
GUEST_SYNC(perform_next_stage(&i, mapped_0)); GUEST_SYNC(perform_next_stage(&i, mapped_0));
} }
#define HOST_SYNC_NO_TAP(vcpup, stage) \ #define HOST_SYNC_NO_TAP(vcpup, stage) \
({ \ ({ \
struct kvm_vcpu *__vcpu = (vcpup); \ struct kvm_vcpu *__vcpu = (vcpup); \
struct ucall uc; \ struct ucall uc; \
int __stage = (stage); \ int __stage = (stage); \
\ \
vcpu_run(__vcpu); \ vcpu_run(__vcpu); \
get_ucall(__vcpu, &uc); \ get_ucall(__vcpu, &uc); \
if (uc.cmd == UCALL_ABORT) { \ if (uc.cmd == UCALL_ABORT) \
TEST_FAIL("line %lu: %s, hints: %lu, %lu", uc.args[1], \ REPORT_GUEST_ASSERT_2(uc, "hints: %lu, %lu"); \
(const char *)uc.args[0], uc.args[2], uc.args[3]); \ ASSERT_EQ(uc.cmd, UCALL_SYNC); \
} \ ASSERT_EQ(uc.args[1], __stage); \
ASSERT_EQ(uc.cmd, UCALL_SYNC); \
ASSERT_EQ(uc.args[1], __stage); \
}) })
#define HOST_SYNC(vcpu, stage) \ #define HOST_SYNC(vcpu, stage) \

View File

@ -88,8 +88,7 @@ static void *vcpu_worker(void *data)
} }
if (run->exit_reason == KVM_EXIT_IO && cmd == UCALL_ABORT) if (run->exit_reason == KVM_EXIT_IO && cmd == UCALL_ABORT)
TEST_FAIL("%s at %s:%ld, val = %lu", (const char *)uc.args[0], REPORT_GUEST_ASSERT_1(uc, "val = %lu");
__FILE__, uc.args[1], uc.args[2]);
return NULL; return NULL;
} }

View File

@ -234,8 +234,7 @@ static void run_vcpu(struct kvm_vcpu *vcpu)
case UCALL_DONE: case UCALL_DONE:
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_ASSERT(false, "%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
default: default:
TEST_ASSERT(false, "Unexpected exit: %s", TEST_ASSERT(false, "Unexpected exit: %s",
exit_reason_str(vcpu->run->exit_reason)); exit_reason_str(vcpu->run->exit_reason));

View File

@ -83,8 +83,7 @@ static void handle_sync(struct ucall *uc, uint64_t start, uint64_t end)
static void handle_abort(struct ucall *uc) static void handle_abort(struct ucall *uc)
{ {
TEST_FAIL("%s at %s:%ld", (const char *)uc->args[0], REPORT_GUEST_ASSERT(*uc);
__FILE__, uc->args[1]);
} }
static void enter_guest(struct kvm_vcpu *vcpu) static void enter_guest(struct kvm_vcpu *vcpu)

View File

@ -373,8 +373,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
switch (uc.args[1]) { switch (uc.args[1]) {

View File

@ -132,8 +132,7 @@ static void run_vcpu(struct kvm_vcpu *vcpu, int stage)
case UCALL_DONE: case UCALL_DONE:
return; return;
case UCALL_ABORT: case UCALL_ABORT:
TEST_ASSERT(false, "%s at %s:%ld\n\tvalues: %#lx, %#lx", (const char *)uc.args[0], REPORT_GUEST_ASSERT_2(uc, "values: %#lx, %#lx");
__FILE__, uc.args[1], uc.args[2], uc.args[3]);
default: default:
TEST_ASSERT(false, "Unexpected exit: %s", TEST_ASSERT(false, "Unexpected exit: %s",
exit_reason_str(vcpu->run->exit_reason)); exit_reason_str(vcpu->run->exit_reason));

View File

@ -94,7 +94,7 @@ int main(int argc, char *argv[])
vcpu_sregs_set(vcpu, &sregs); vcpu_sregs_set(vcpu, &sregs);
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("Guest CR4 bit (OSXSAVE) unsynchronized with CPUID bit."); REPORT_GUEST_ASSERT(uc);
break; break;
case UCALL_DONE: case UCALL_DONE:
goto done; goto done;

View File

@ -92,8 +92,7 @@ static void process_exit_on_emulation_error(struct kvm_vcpu *vcpu)
static void do_guest_assert(struct ucall *uc) static void do_guest_assert(struct ucall *uc)
{ {
TEST_FAIL("%s at %s:%ld", (const char *)uc->args[0], __FILE__, REPORT_GUEST_ASSERT(*uc);
uc->args[1]);
} }
static void check_for_guest_assert(struct kvm_vcpu *vcpu) static void check_for_guest_assert(struct kvm_vcpu *vcpu)

View File

@ -236,8 +236,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
break; break;

View File

@ -112,7 +112,7 @@ static void enter_guest(struct kvm_vcpu *vcpu)
case UCALL_DONE: case UCALL_DONE:
return; return;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], __FILE__, uc.args[1]); REPORT_GUEST_ASSERT(uc);
default: default:
TEST_FAIL("Unhandled ucall: %ld\nexit_reason: %u (%s)", TEST_FAIL("Unhandled ucall: %ld\nexit_reason: %u (%s)",
uc.cmd, run->exit_reason, exit_reason_str(run->exit_reason)); uc.cmd, run->exit_reason, exit_reason_str(run->exit_reason));

View File

@ -234,8 +234,7 @@ int main(void)
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
break; break;

View File

@ -447,9 +447,7 @@ static void guest_test_msrs_access(void)
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld, MSR = %lx, vector = %lx", REPORT_GUEST_ASSERT_2(uc, "MSR = %lx, vector = %lx");
(const char *)uc.args[0], __FILE__,
uc.args[1], uc.args[2], uc.args[3]);
return; return;
case UCALL_DONE: case UCALL_DONE:
break; break;
@ -618,9 +616,7 @@ static void guest_test_hcalls_access(void)
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld, arg1 = %lx, arg2 = %lx", REPORT_GUEST_ASSERT_2(uc, "arg1 = %lx, arg2 = %lx");
(const char *)uc.args[0], __FILE__,
uc.args[1], uc.args[2], uc.args[3]);
return; return;
case UCALL_DONE: case UCALL_DONE:
break; break;

View File

@ -145,8 +145,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
break; break;

View File

@ -71,8 +71,7 @@ static void handle_sync(struct ucall *uc, struct kvm_clock_data *start,
static void handle_abort(struct ucall *uc) static void handle_abort(struct ucall *uc)
{ {
TEST_FAIL("%s at %s:%ld", (const char *)uc->args[0], REPORT_GUEST_ASSERT(*uc);
__FILE__, uc->args[1]);
} }
static void setup_clock(struct kvm_vm *vm, struct test_case *test_case) static void setup_clock(struct kvm_vm *vm, struct test_case *test_case)

View File

@ -137,9 +137,7 @@ static void enter_guest(struct kvm_vcpu *vcpu)
pr_hcall(&uc); pr_hcall(&uc);
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld, vector = %lu", REPORT_GUEST_ASSERT_1(uc, "vector = %lu");
(const char *)uc.args[0], __FILE__,
uc.args[1], uc.args[2]);
return; return;
case UCALL_DONE: case UCALL_DONE:
return; return;

View File

@ -100,9 +100,7 @@ int main(int argc, char *argv[])
testcase = uc.args[1]; testcase = uc.args[1];
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld, testcase = %lx, vector = %ld", REPORT_GUEST_ASSERT_2(uc, "testcase = %lx, vector = %ld");
(const char *)uc.args[0], __FILE__,
uc.args[1], uc.args[2], uc.args[3]);
goto done; goto done;
case UCALL_DONE: case UCALL_DONE:
goto done; goto done;

View File

@ -65,9 +65,7 @@ static void run_vcpu(struct kvm_vcpu *vcpu)
stage); stage);
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_ASSERT(false, "%s at %s:%ld\n\tvalues: %#lx, %#lx", REPORT_GUEST_ASSERT_2(uc, "values: %#lx, %#lx");
(const char *)uc.args[0], __FILE__,
uc.args[1], uc.args[2], uc.args[3]);
default: default:
TEST_ASSERT(false, "Unexpected exit: %s", TEST_ASSERT(false, "Unexpected exit: %s",
exit_reason_str(vcpu->run->exit_reason)); exit_reason_str(vcpu->run->exit_reason));

View File

@ -190,8 +190,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
break; break;

View File

@ -113,7 +113,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *)uc.args[0]); REPORT_GUEST_ASSERT(uc);
break; break;
/* NOT REACHED */ /* NOT REACHED */
case UCALL_DONE: case UCALL_DONE:

View File

@ -181,8 +181,7 @@ static void run_test(bool is_nmi)
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld, vals = 0x%lx 0x%lx 0x%lx", (const char *)uc.args[0], REPORT_GUEST_ASSERT_3(uc, "vals = 0x%lx 0x%lx 0x%lx");
__FILE__, uc.args[1], uc.args[2], uc.args[3], uc.args[4]);
break; break;
/* NOT REACHED */ /* NOT REACHED */
case UCALL_DONE: case UCALL_DONE:

View File

@ -58,7 +58,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *)uc.args[0]); REPORT_GUEST_ASSERT(uc);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
break; break;

View File

@ -82,7 +82,7 @@ int main(void)
case UCALL_DONE: case UCALL_DONE:
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *)uc.args[0]); REPORT_GUEST_ASSERT(uc);
default: default:
TEST_FAIL("Unexpected ucall: %lu", uc.cmd); TEST_FAIL("Unexpected ucall: %lu", uc.cmd);
} }

View File

@ -79,9 +79,7 @@ static void run_vcpu(struct kvm_vcpu *vcpu, int stage)
case UCALL_DONE: case UCALL_DONE:
return; return;
case UCALL_ABORT: case UCALL_ABORT:
TEST_ASSERT(false, "%s at %s:%ld\n" \ REPORT_GUEST_ASSERT_2(uc, "values: %#lx, %#lx");
"\tvalues: %#lx, %#lx", (const char *)uc.args[0],
__FILE__, uc.args[1], uc.args[2], uc.args[3]);
default: default:
TEST_ASSERT(false, "Unexpected exit: %s", TEST_ASSERT(false, "Unexpected exit: %s",
exit_reason_str(vcpu->run->exit_reason)); exit_reason_str(vcpu->run->exit_reason));

View File

@ -98,9 +98,7 @@ int main(int argc, char *argv[])
case UCALL_DONE: case UCALL_DONE:
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld : argN+1 = 0x%lx, argN+2 = 0x%lx", REPORT_GUEST_ASSERT_2(uc, "argN+1 = 0x%lx, argN+2 = 0x%lx");
(const char *)uc.args[0], __FILE__, uc.args[1],
uc.args[2], uc.args[3]);
default: default:
TEST_FAIL("Unknown ucall %lu", uc.cmd); TEST_FAIL("Unknown ucall %lu", uc.cmd);
} }

View File

@ -400,8 +400,7 @@ static void check_for_guest_assert(struct kvm_vcpu *vcpu)
if (vcpu->run->exit_reason == KVM_EXIT_IO && if (vcpu->run->exit_reason == KVM_EXIT_IO &&
get_ucall(vcpu, &uc) == UCALL_ABORT) { get_ucall(vcpu, &uc) == UCALL_ABORT) {
TEST_FAIL("%s at %s:%ld", REPORT_GUEST_ASSERT(uc);
(const char *)uc.args[0], __FILE__, uc.args[1]);
} }
} }
@ -610,7 +609,7 @@ static int handle_ucall(struct kvm_vcpu *vcpu)
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("Guest assertion not met"); REPORT_GUEST_ASSERT(uc);
break; break;
case UCALL_SYNC: case UCALL_SYNC:
vm_ioctl(vcpu->vm, KVM_X86_SET_MSR_FILTER, &no_filter_deny); vm_ioctl(vcpu->vm, KVM_X86_SET_MSR_FILTER, &no_filter_deny);

View File

@ -114,8 +114,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
apic_access_addr = uc.args[1]; apic_access_addr = uc.args[1];

View File

@ -74,7 +74,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *)uc.args[0]); REPORT_GUEST_ASSERT(uc);
/* NOT REACHED */ /* NOT REACHED */
default: default:
TEST_FAIL("Unknown ucall %lu", uc.cmd); TEST_FAIL("Unknown ucall %lu", uc.cmd);

View File

@ -123,8 +123,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
/* /*

View File

@ -98,7 +98,7 @@ int main(int argc, char *argv[])
case UCALL_DONE: case UCALL_DONE:
break; break;
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *)uc.args[0]); REPORT_GUEST_ASSERT(uc);
default: default:
TEST_FAIL("Unexpected ucall: %lu", uc.cmd); TEST_FAIL("Unexpected ucall: %lu", uc.cmd);
} }

View File

@ -194,7 +194,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *) uc.args[0]); REPORT_GUEST_ASSERT(uc);
case UCALL_SYNC: case UCALL_SYNC:
switch (uc.args[0]) { switch (uc.args[0]) {
case USLEEP: case USLEEP:

View File

@ -189,8 +189,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s at %s:%ld", (const char *)uc.args[0], REPORT_GUEST_ASSERT(uc);
__FILE__, uc.args[1]);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
break; break;

View File

@ -147,7 +147,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *)uc.args[0]); REPORT_GUEST_ASSERT(uc);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
report(uc.args[1]); report(uc.args[1]);

View File

@ -542,7 +542,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *)uc.args[0]); REPORT_GUEST_ASSERT(uc);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: { case UCALL_SYNC: {
struct kvm_xen_vcpu_attr rst; struct kvm_xen_vcpu_attr rst;

View File

@ -129,7 +129,7 @@ int main(int argc, char *argv[])
switch (get_ucall(vcpu, &uc)) { switch (get_ucall(vcpu, &uc)) {
case UCALL_ABORT: case UCALL_ABORT:
TEST_FAIL("%s", (const char *)uc.args[0]); REPORT_GUEST_ASSERT(uc);
/* NOT REACHED */ /* NOT REACHED */
case UCALL_SYNC: case UCALL_SYNC:
break; break;