Skip to content

Commit 388968d

Browse files
committed
perf trace: Use the autogenerated mmap 'prot' string/id table
No change in behaviour: # perf trace -e mmap sleep 1 0.000 ( 0.009 ms): sleep/751870 mmap(len: 143317, prot: READ, flags: PRIVATE, fd: 3) = 0x7fa96d0f7000 0.028 ( 0.004 ms): sleep/751870 mmap(len: 8192, prot: READ|WRITE, flags: PRIVATE|ANONYMOUS) = 0x7fa96d0f5000 0.037 ( 0.005 ms): sleep/751870 mmap(len: 1872744, prot: READ, flags: PRIVATE|DENYWRITE, fd: 3) = 0x7fa96cf2b000 0.044 ( 0.011 ms): sleep/751870 mmap(addr: 0x7fa96cf50000, len: 1376256, prot: READ|EXEC, flags: PRIVATE|FIXED|DENYWRITE, fd: 3, off: 0x25000) = 0x7fa96cf50000 0.056 ( 0.007 ms): sleep/751870 mmap(addr: 0x7fa96d0a0000, len: 307200, prot: READ, flags: PRIVATE|FIXED|DENYWRITE, fd: 3, off: 0x175000) = 0x7fa96d0a0000 0.064 ( 0.007 ms): sleep/751870 mmap(addr: 0x7fa96d0eb000, len: 24576, prot: READ|WRITE, flags: PRIVATE|FIXED|DENYWRITE, fd: 3, off: 0x1bf000) = 0x7fa96d0eb000 0.075 ( 0.005 ms): sleep/751870 mmap(addr: 0x7fa96d0f1000, len: 13160, prot: READ|WRITE, flags: PRIVATE|FIXED|ANONYMOUS) = 0x7fa96d0f1000 0.253 ( 0.005 ms): sleep/751870 mmap(len: 218049136, prot: READ, flags: PRIVATE, fd: 3) = 0x7fa95ff38000 # # # set -o vi # strace -e mmap sleep 1 mmap(NULL, 143317, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f333bd83000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f333bd81000 mmap(NULL, 1872744, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f333bbb7000 mmap(0x7f333bbdc000, 1376256, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7f333bbdc000 mmap(0x7f333bd2c000, 307200, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x175000) = 0x7f333bd2c000 mmap(0x7f333bd77000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7f333bd77000 mmap(0x7f333bd7d000, 13160, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f333bd7d000 mmap(NULL, 218049136, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f332ebc4000 +++ exited with 0 +++ # And you can as well tweak 'perf trace's output to more closely match strace's: # perf config trace.show_arg_names=no # perf config trace.show_duration=no # perf config trace.show_prefix=yes # perf config trace.show_timestamp=no # perf config trace.show_zeros=yes # perf config trace.no_inherit=yes # perf trace -e mmap sleep 1 mmap(NULL, 143317, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0d287ca000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS) = 0x7f0d287c8000 mmap(NULL, 1872744, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0d285fe000 mmap(0x7f0d28623000, 1376256, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7f0d28623000 mmap(0x7f0d28773000, 307200, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x175000) = 0x7f0d28773000 mmap(0x7f0d287be000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7f0d287be000 mmap(0x7f0d287c4000, 13160, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS) = 0x7f0d287c4000 mmap(NULL, 218049136, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0d1b60b000 # # perf config | grep ^trace trace.show_arg_names=no trace.show_duration=no trace.show_prefix=yes trace.show_timestamp=no trace.show_zeros=yes trace.no_inherit=yes # Cc: Adrian Hunter <[email protected]> Cc: Ian Rogers <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Namhyung Kim <[email protected]> Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent 08fc476 commit 388968d

File tree

2 files changed

+24
-27
lines changed

2 files changed

+24
-27
lines changed

tools/perf/Makefile.perf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,13 @@ move_mount_flags_tbl := $(srctree)/tools/perf/trace/beauty/move_mount_flags.sh
555555
$(move_mount_flags_array): $(linux_uapi_dir)/fs.h $(move_mount_flags_tbl)
556556
$(Q)$(SHELL) '$(move_mount_flags_tbl)' $(linux_uapi_dir) > $@
557557

558+
559+
mmap_prot_array := $(beauty_outdir)/mmap_prot_array.c
560+
mmap_prot_tbl := $(srctree)/tools/perf/trace/beauty/mmap_prot.sh
561+
562+
$(mmap_prot_array): $(asm_generic_uapi_dir)/mman.h $(asm_generic_uapi_dir)/mman-common.h $(mmap_prot_tbl)
563+
$(Q)$(SHELL) '$(mmap_prot_tbl)' $(asm_generic_uapi_dir) $(arch_asm_uapi_dir) > $@
564+
558565
prctl_option_array := $(beauty_outdir)/prctl_option_array.c
559566
prctl_hdr_dir := $(srctree)/tools/include/uapi/linux/
560567
prctl_option_tbl := $(srctree)/tools/perf/trace/beauty/prctl_option.sh
@@ -716,6 +723,7 @@ prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders $(drm_ioc
716723
$(vhost_virtio_ioctl_array) \
717724
$(madvise_behavior_array) \
718725
$(mmap_flags_array) \
726+
$(mmap_prot_array) \
719727
$(mremap_flags_array) \
720728
$(mount_flags_array) \
721729
$(move_mount_flags_array) \
@@ -1015,6 +1023,7 @@ clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clea
10151023
$(OUTPUT)$(fspick_arrays) \
10161024
$(OUTPUT)$(madvise_behavior_array) \
10171025
$(OUTPUT)$(mmap_flags_array) \
1026+
$(OUTPUT)$(mmap_prot_array) \
10181027
$(OUTPUT)$(mremap_flags_array) \
10191028
$(OUTPUT)$(mount_flags_array) \
10201029
$(OUTPUT)$(move_mount_flags_array) \

tools/perf/trace/beauty/mmap.c

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,22 @@
11
// SPDX-License-Identifier: LGPL-2.1
2-
#include <uapi/linux/mman.h>
32
#include <linux/log2.h>
43

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)
713
{
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);
3220
}
3321

3422
#define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot

0 commit comments

Comments
 (0)