1 // SPDX-License-Identifier: LGPL-2.1
5 * Copyright (C) 2017, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
8 #include "trace/beauty/beauty.h"
9 #include <linux/kernel.h>
10 #include <sys/types.h>
11 #include <uapi/linux/sched.h>
13 static size_t clone__scnprintf_flags(unsigned long flags
, char *bf
, size_t size
, bool show_prefix
)
15 const char *prefix
= "CLONE_";
19 if (flags & CLONE_##n) { \
20 printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
21 flags &= ~CLONE_##n; \
36 P_FLAG(PARENT_SETTID
);
37 P_FLAG(CHILD_CLEARTID
);
48 P_FLAG(CLEAR_SIGHAND
);
53 printed
+= scnprintf(bf
+ printed
, size
- printed
, "%s%#x", printed
? "|" : "", flags
);
58 size_t syscall_arg__scnprintf_clone_flags(char *bf
, size_t size
, struct syscall_arg
*arg
)
60 unsigned long flags
= arg
->val
;
61 enum syscall_clone_args
{
63 SCC_CHILD_STACK
= (1 << 1),
64 SCC_PARENT_TIDPTR
= (1 << 2),
65 SCC_CHILD_TIDPTR
= (1 << 3),
68 if (!(flags
& CLONE_PARENT_SETTID
))
69 arg
->mask
|= SCC_PARENT_TIDPTR
;
71 if (!(flags
& (CLONE_CHILD_SETTID
| CLONE_CHILD_CLEARTID
)))
72 arg
->mask
|= SCC_CHILD_TIDPTR
;
74 if (!(flags
& CLONE_SETTLS
))
77 return clone__scnprintf_flags(flags
, bf
, size
, arg
->show_string_prefix
);