diff options
Diffstat (limited to 'tests-m32/membarrier.c')
-rw-r--r-- | tests-m32/membarrier.c | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/tests-m32/membarrier.c b/tests-m32/membarrier.c index 73dd3b02..43f99f88 100644 --- a/tests-m32/membarrier.c +++ b/tests-m32/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; |