1 /*
2 * Copyright (c) 2015 Dmitry V. Levin <ldv@strace.io>
3 * Copyright (c) 2015-2021 The strace developers.
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: LGPL-2.1-or-later
7 */
8
9 #include "defs.h"
10
11 #include "xlat/membarrier_cmds.h"
12 #include "xlat/membarrier_flags.h"
13
14 SYS_FUNC(membarrier)
15 {
16 if (entering(tcp)) {
17 int cmd = tcp->u_arg[0];
18 unsigned flags = tcp->u_arg[1];
19 int cpu_id = tcp->u_arg[2];
20
21 /* cmd */
22 printxval(membarrier_cmds, cmd, "MEMBARRIER_CMD_???");
23 tprint_arg_next();
24
25 /* flags */
26 printflags(membarrier_flags, flags, "MEMBARRIER_CMD_FLAG_???");
27
28 if (flags & MEMBARRIER_CMD_FLAG_CPU) {
29 tprint_arg_next();
30
31 /* cpu_id */
32 PRINT_VAL_D(cpu_id);
33 }
34
35 return cmd ? RVAL_DECODED : 0;
36 }
37
38 if (syserror(tcp) || !tcp->u_rval)
39 return 0;
40
41 tcp->auxstr = sprintflags("", membarrier_cmds,
42 (kernel_ulong_t) tcp->u_rval);
43 return RVAL_HEX | RVAL_STR;
44 }