diff options
| -rw-r--r-- | tools/perf/Makefile.perf | 8 | ||||
| -rw-r--r-- | tools/perf/builtin-trace.c | 3 | ||||
| -rw-r--r-- | tools/perf/trace/beauty/Build | 1 | ||||
| -rw-r--r-- | tools/perf/trace/beauty/beauty.h | 6 | ||||
| -rw-r--r-- | tools/perf/trace/beauty/mount_flags.c | 43 |
5 files changed, 61 insertions, 0 deletions
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 2f3bf025e305..a31c5c29d53a 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf | |||
| @@ -460,6 +460,12 @@ madvise_behavior_tbl := $(srctree)/tools/perf/trace/beauty/madvise_behavior.sh | |||
| 460 | $(madvise_behavior_array): $(madvise_hdr_dir)/mman-common.h $(madvise_behavior_tbl) | 460 | $(madvise_behavior_array): $(madvise_hdr_dir)/mman-common.h $(madvise_behavior_tbl) |
| 461 | $(Q)$(SHELL) '$(madvise_behavior_tbl)' $(madvise_hdr_dir) > $@ | 461 | $(Q)$(SHELL) '$(madvise_behavior_tbl)' $(madvise_hdr_dir) > $@ |
| 462 | 462 | ||
| 463 | mount_flags_array := $(beauty_outdir)/mount_flags_array.c | ||
| 464 | mount_flags_tbl := $(srctree)/tools/perf/trace/beauty/mount_flags.sh | ||
| 465 | |||
| 466 | $(mount_flags_array): $(linux_uapi_dir)/fs.h $(mount_flags_tbl) | ||
| 467 | $(Q)$(SHELL) '$(mount_flags_tbl)' $(linux_uapi_dir) > $@ | ||
| 468 | |||
| 463 | prctl_option_array := $(beauty_outdir)/prctl_option_array.c | 469 | prctl_option_array := $(beauty_outdir)/prctl_option_array.c |
| 464 | prctl_hdr_dir := $(srctree)/tools/include/uapi/linux/ | 470 | prctl_hdr_dir := $(srctree)/tools/include/uapi/linux/ |
| 465 | prctl_option_tbl := $(srctree)/tools/perf/trace/beauty/prctl_option.sh | 471 | prctl_option_tbl := $(srctree)/tools/perf/trace/beauty/prctl_option.sh |
| @@ -577,6 +583,7 @@ prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders $(drm_ioc | |||
| 577 | $(socket_ipproto_array) \ | 583 | $(socket_ipproto_array) \ |
| 578 | $(vhost_virtio_ioctl_array) \ | 584 | $(vhost_virtio_ioctl_array) \ |
| 579 | $(madvise_behavior_array) \ | 585 | $(madvise_behavior_array) \ |
| 586 | $(mount_flags_array) \ | ||
| 580 | $(perf_ioctl_array) \ | 587 | $(perf_ioctl_array) \ |
| 581 | $(prctl_option_array) \ | 588 | $(prctl_option_array) \ |
| 582 | $(arch_errno_name_array) | 589 | $(arch_errno_name_array) |
| @@ -863,6 +870,7 @@ clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clea | |||
| 863 | $(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \ | 870 | $(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \ |
| 864 | $(OUTPUT)pmu-events/pmu-events.c \ | 871 | $(OUTPUT)pmu-events/pmu-events.c \ |
| 865 | $(OUTPUT)$(madvise_behavior_array) \ | 872 | $(OUTPUT)$(madvise_behavior_array) \ |
| 873 | $(OUTPUT)$(mount_flags_array) \ | ||
| 866 | $(OUTPUT)$(drm_ioctl_array) \ | 874 | $(OUTPUT)$(drm_ioctl_array) \ |
| 867 | $(OUTPUT)$(pkey_alloc_access_rights_array) \ | 875 | $(OUTPUT)$(pkey_alloc_access_rights_array) \ |
| 868 | $(OUTPUT)$(sndrv_ctl_ioctl_array) \ | 876 | $(OUTPUT)$(sndrv_ctl_ioctl_array) \ |
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 14fb63e17de5..76c14c0129fc 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
| @@ -726,6 +726,9 @@ static struct syscall_fmt { | |||
| 726 | .arg = { [0] = { .scnprintf = SCA_HEX, /* addr */ }, | 726 | .arg = { [0] = { .scnprintf = SCA_HEX, /* addr */ }, |
| 727 | [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, | 727 | [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, |
| 728 | [3] = { .scnprintf = SCA_MMAP_FLAGS, /* flags */ }, }, }, | 728 | [3] = { .scnprintf = SCA_MMAP_FLAGS, /* flags */ }, }, }, |
| 729 | { .name = "mount", | ||
| 730 | .arg = { [3] = { .scnprintf = SCA_MOUNT_FLAGS, /* flags */ | ||
| 731 | .mask_val = SCAMV_MOUNT_FLAGS, /* flags */ }, }, }, | ||
| 729 | { .name = "mprotect", | 732 | { .name = "mprotect", |
| 730 | .arg = { [0] = { .scnprintf = SCA_HEX, /* start */ }, | 733 | .arg = { [0] = { .scnprintf = SCA_HEX, /* start */ }, |
| 731 | [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, }, }, | 734 | [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, }, }, |
diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build index c3b0afd67760..304313073242 100644 --- a/tools/perf/trace/beauty/Build +++ b/tools/perf/trace/beauty/Build | |||
| @@ -5,6 +5,7 @@ ifeq ($(SRCARCH),$(filter $(SRCARCH),x86)) | |||
| 5 | libperf-y += ioctl.o | 5 | libperf-y += ioctl.o |
| 6 | endif | 6 | endif |
| 7 | libperf-y += kcmp.o | 7 | libperf-y += kcmp.o |
| 8 | libperf-y += mount_flags.o | ||
| 8 | libperf-y += pkey_alloc.o | 9 | libperf-y += pkey_alloc.o |
| 9 | libperf-y += prctl.o | 10 | libperf-y += prctl.o |
| 10 | libperf-y += sockaddr.o | 11 | libperf-y += sockaddr.o |
diff --git a/tools/perf/trace/beauty/beauty.h b/tools/perf/trace/beauty/beauty.h index a1806c4f3ccd..039c29039b2c 100644 --- a/tools/perf/trace/beauty/beauty.h +++ b/tools/perf/trace/beauty/beauty.h | |||
| @@ -123,6 +123,12 @@ size_t syscall_arg__scnprintf_kcmp_type(char *bf, size_t size, struct syscall_ar | |||
| 123 | size_t syscall_arg__scnprintf_kcmp_idx(char *bf, size_t size, struct syscall_arg *arg); | 123 | size_t syscall_arg__scnprintf_kcmp_idx(char *bf, size_t size, struct syscall_arg *arg); |
| 124 | #define SCA_KCMP_IDX syscall_arg__scnprintf_kcmp_idx | 124 | #define SCA_KCMP_IDX syscall_arg__scnprintf_kcmp_idx |
| 125 | 125 | ||
| 126 | unsigned long syscall_arg__mask_val_mount_flags(struct syscall_arg *arg, unsigned long flags); | ||
| 127 | #define SCAMV_MOUNT_FLAGS syscall_arg__mask_val_mount_flags | ||
| 128 | |||
| 129 | size_t syscall_arg__scnprintf_mount_flags(char *bf, size_t size, struct syscall_arg *arg); | ||
| 130 | #define SCA_MOUNT_FLAGS syscall_arg__scnprintf_mount_flags | ||
| 131 | |||
| 126 | size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg); | 132 | size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg); |
| 127 | #define SCA_PKEY_ALLOC_ACCESS_RIGHTS syscall_arg__scnprintf_pkey_alloc_access_rights | 133 | #define SCA_PKEY_ALLOC_ACCESS_RIGHTS syscall_arg__scnprintf_pkey_alloc_access_rights |
| 128 | 134 | ||
diff --git a/tools/perf/trace/beauty/mount_flags.c b/tools/perf/trace/beauty/mount_flags.c new file mode 100644 index 000000000000..712935c6620a --- /dev/null +++ b/tools/perf/trace/beauty/mount_flags.c | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | // SPDX-License-Identifier: LGPL-2.1 | ||
| 2 | /* | ||
| 3 | * trace/beauty/mount_flags.c | ||
| 4 | * | ||
| 5 | * Copyright (C) 2018, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com> | ||
| 6 | */ | ||
| 7 | |||
| 8 | #include "trace/beauty/beauty.h" | ||
| 9 | #include <linux/compiler.h> | ||
| 10 | #include <linux/kernel.h> | ||
| 11 | #include <linux/log2.h> | ||
| 12 | #include <sys/mount.h> | ||
| 13 | |||
| 14 | static size_t mount__scnprintf_flags(unsigned long flags, char *bf, size_t size) | ||
| 15 | { | ||
| 16 | #include "trace/beauty/generated/mount_flags_array.c" | ||
| 17 | static DEFINE_STRARRAY(mount_flags); | ||
| 18 | |||
| 19 | return strarray__scnprintf_flags(&strarray__mount_flags, bf, size, flags); | ||
| 20 | } | ||
| 21 | |||
| 22 | unsigned long syscall_arg__mask_val_mount_flags(struct syscall_arg *arg __maybe_unused, unsigned long flags) | ||
| 23 | { | ||
| 24 | // do_mount in fs/namespace.c: | ||
| 25 | /* | ||
| 26 | * Pre-0.97 versions of mount() didn't have a flags word. When the | ||
| 27 | * flags word was introduced its top half was required to have the | ||
| 28 | * magic value 0xC0ED, and this remained so until 2.4.0-test9. | ||
| 29 | * Therefore, if this magic number is present, it carries no | ||
| 30 | * information and must be discarded. | ||
| 31 | */ | ||
| 32 | if ((flags & MS_MGC_MSK) == MS_MGC_VAL) | ||
| 33 | flags &= ~MS_MGC_MSK; | ||
| 34 | |||
| 35 | return flags; | ||
| 36 | } | ||
| 37 | |||
| 38 | size_t syscall_arg__scnprintf_mount_flags(char *bf, size_t size, struct syscall_arg *arg) | ||
| 39 | { | ||
| 40 | unsigned long flags = arg->val; | ||
| 41 | |||
| 42 | return mount__scnprintf_flags(flags, bf, size); | ||
| 43 | } | ||
