|
1 | 1 | // SPDX-License-Identifier: LGPL-2.1
|
2 |
| -#include <uapi/linux/mman.h> |
3 | 2 | #include <linux/log2.h>
|
4 | 3 |
|
5 |
| -static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, |
6 |
| - struct syscall_arg *arg) |
| 4 | +#include "trace/beauty/generated/mmap_prot_array.c" |
| 5 | +static DEFINE_STRARRAY(mmap_prot, "PROT_"); |
| 6 | + |
| 7 | +static size_t mmap__scnprintf_prot(unsigned long prot, char *bf, size_t size, bool show_prefix) |
| 8 | +{ |
| 9 | + return strarray__scnprintf_flags(&strarray__mmap_prot, bf, size, show_prefix, prot); |
| 10 | +} |
| 11 | + |
| 12 | +static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, struct syscall_arg *arg) |
7 | 13 | {
|
8 |
| - const char *prot_prefix = "PROT_"; |
9 |
| - int printed = 0, prot = arg->val; |
10 |
| - bool show_prefix = arg->show_string_prefix; |
11 |
| - |
12 |
| - if (prot == PROT_NONE) |
13 |
| - return scnprintf(bf, size, "%sNONE", show_prefix ? prot_prefix : ""); |
14 |
| -#define P_MMAP_PROT(n) \ |
15 |
| - if (prot & PROT_##n) { \ |
16 |
| - printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prot_prefix :"", #n); \ |
17 |
| - prot &= ~PROT_##n; \ |
18 |
| - } |
19 |
| - |
20 |
| - P_MMAP_PROT(READ); |
21 |
| - P_MMAP_PROT(WRITE); |
22 |
| - P_MMAP_PROT(EXEC); |
23 |
| - P_MMAP_PROT(SEM); |
24 |
| - P_MMAP_PROT(GROWSDOWN); |
25 |
| - P_MMAP_PROT(GROWSUP); |
26 |
| -#undef P_MMAP_PROT |
27 |
| - |
28 |
| - if (prot) |
29 |
| - printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", prot); |
30 |
| - |
31 |
| - return printed; |
| 14 | + unsigned long prot = arg->val; |
| 15 | + |
| 16 | + if (prot == 0) |
| 17 | + return scnprintf(bf, size, "%sNONE", arg->show_string_prefix ? strarray__mmap_prot.prefix : ""); |
| 18 | + |
| 19 | + return mmap__scnprintf_prot(prot, bf, size, arg->show_string_prefix); |
32 | 20 | }
|
33 | 21 |
|
34 | 22 | #define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot
|
|
0 commit comments