aboutsummaryrefslogtreecommitdiff
path: root/tests/membarrier.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/membarrier.c')
-rw-r--r--tests/membarrier.c42
1 files changed, 32 insertions, 10 deletions
diff --git a/tests/membarrier.c b/tests/membarrier.c
index 73dd3b02..43f99f88 100644
--- a/tests/membarrier.c
+++ b/tests/membarrier.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -44,28 +45,49 @@ main(void)
printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = %s\n",
sprintrc(-1));
if (saved_errno != ENOSYS) {
+ const char *text_global;
const char *text;
int rc = syscall(__NR_membarrier, 0, 0);
- switch (rc) {
- case 1:
- text = "MEMBARRIER_CMD_SHARED";
+ assert(rc >= 0);
+
+ text_global = rc & 1 ? "MEMBARRIER_CMD_GLOBAL" : "";
+
+ switch (rc & ~1) {
+ case 0:
+ text = "";
break;
- case 1|8:
- text = "MEMBARRIER_CMD_SHARED|"
- "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
+ case 8:
+ text = "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
break;
- case 1|8|16:
- text = "MEMBARRIER_CMD_SHARED|"
+ case 8|16:
+ text = "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
+ "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
+ break;
+
+ case 2|4|8|16:
+ text = "MEMBARRIER_CMD_GLOBAL_EXPEDITED|"
+ "MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED|"
"MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
"MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
break;
+
+ case 2|4|8|16|32|64:
+ text = "MEMBARRIER_CMD_GLOBAL_EXPEDITED|"
+ "MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED|"
+ "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
+ "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED|"
+ "MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE|"
+ "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE";
+ break;
+
default:
error_msg_and_fail("membarrier returned %#x, does"
" the test have to be updated?", rc);
}
- printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s)\n",
- rc, text);
+ printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s%s%s)\n",
+ rc, text_global, text[0] && text_global[0] ? "|" : "",
+ text);
}
puts("+++ exited with 0 +++");
return 0;