1 /*
2 * Copyright (c) 2016-2018 Dmitry V. Levin <ldv@strace.io>
3 * Copyright (c) 2017-2023 The strace developers.
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: LGPL-2.1-or-later
7 */
8
9 #ifndef STRACE_NUMBER_SET_H
10 # define STRACE_NUMBER_SET_H
11
12 # include "gcc_compat.h"
13
14 struct number_set;
15
16 extern bool
17 number_set_array_is_empty(const struct number_set *, unsigned int idx);
18
19 extern bool
20 is_number_in_set(unsigned int number, const struct number_set *);
21
22 extern bool
23 is_number_in_set_array(unsigned int number, const struct number_set *, unsigned int idx);
24
25 extern bool
26 is_complete_set(const struct number_set *, unsigned int max_numbers);
27
28 extern bool
29 is_complete_set_array(const struct number_set *, const unsigned int *,
30 const unsigned int nmemb);
31
32 extern void
33 add_number_to_set(unsigned int number, struct number_set *);
34
35 extern void
36 add_number_to_set_array(unsigned int number, struct number_set *, unsigned int idx);
37
38 extern void
39 clear_number_set_array(struct number_set *, unsigned int nmemb);
40
41 extern void
42 invert_number_set_array(struct number_set *, unsigned int nmemb);
43
44 extern struct number_set *
45 alloc_number_set_array(unsigned int nmemb) ATTRIBUTE_MALLOC;
46
47 extern void
48 free_number_set_array(struct number_set *, unsigned int nmemb);
49
50 enum status_t {
51 STATUS_SUCCESSFUL,
52 STATUS_FAILED,
53 STATUS_UNFINISHED,
54 STATUS_UNAVAILABLE,
55 STATUS_DETACHED,
56 NUMBER_OF_STATUSES
57 };
58
59 enum quiet_bits {
60 /** Do not print messages on tracee attach/detach. */
61 QUIET_ATTACH,
62 /** Do not print messages on tracee exits. */
63 QUIET_EXIT,
64 /** Do not print messages about path tracing path resolution. */
65 QUIET_PATH_RESOLVE,
66 /** Do not print messages on personality change. */
67 QUIET_PERSONALITY,
68 /** Do not print messages on superseding execve. */
69 QUIET_THREAD_EXECVE,
70
71 NUM_QUIET_BITS
72 };
73
74 enum decode_fd_bits {
75 DECODE_FD_PATH,
76 DECODE_FD_SOCKET,
77 DECODE_FD_DEV,
78 DECODE_FD_PIDFD,
79 DECODE_FD_SIGNALFD,
80
81 NUM_DECODE_FD_BITS
82 };
83
84 enum decode_pid_bits {
85 DECODE_PID_NS_TRANSLATION,
86 DECODE_PID_COMM,
87
88 NUM_DECODE_PID_BITS
89 };
90
91 extern bool quiet_set_updated;
92 extern bool decode_fd_set_updated;
93
94 extern struct number_set *read_set;
95 extern struct number_set *write_set;
96 extern struct number_set *signal_set;
97 extern struct number_set *status_set;
98 extern struct number_set *quiet_set;
99 extern struct number_set *decode_fd_set;
100 extern struct number_set *decode_pid_set;
101 extern struct number_set *trace_set;
102 extern struct number_set *trace_fd_set;
103
104 #endif /* !STRACE_NUMBER_SET_H */