Message ID | 20250308003209.234114-1-irogers@google.com (mailing list archive) |
---|---|
Headers | show |
Series | perf: Support multiple system call tables in the build | expand |
On Fri, Mar 07, 2025 at 04:31:58PM -0800, Ian Rogers wrote: > This work builds on the clean up of system call tables and removal of > libaudit by Charlie Jenkins <charlie@rivosinc.com>. > > The system call table in perf trace is used to map system call numbers > to names and vice versa. Prior to these changes, a single table > matching the perf binary's build was present. The table would be > incorrect if tracing say a 32-bit binary from a 64-bit version of > perf, the names and numbers wouldn't match. > > Change the build so that a single system call file is built and the > potentially multiple tables are identifiable from the ELF machine type > of the process being examined. To determine the ELF machine type, the > executable's maps are searched and the associated DSOs ELF headers are > read. When this fails and when live, /proc/pid/exe's ELF header is > read. Fallback to using the perf's binary type when unknown. Now it works well for me! $ sudo ./perf trace a32.out ? ( ): a32.out/1267727 ... [continued]: execve()) = 0 ? ( ): a32.out/1267727 ... [continued]: brk()) = 0x57f33000 0.062 ( 0.003 ms): a32.out/1267727 access(filename: 0xf7f170cc, mode: R) = -1 ENOENT (No such file or directory) 0.070 ( 0.011 ms): a32.out/1267727 openat(dfd: CWD, filename: 0xf7f1347f, flags: RDONLY|CLOEXEC|LARGEFILE) = 3 0.070 ( 0.023 ms): a32.out/1267727 ... [continued]: close()) = 0 0.103 ( 0.009 ms): a32.out/1267727 openat(dfd: CWD, filename: 0xf7ee43e0, flags: RDONLY|CLOEXEC|LARGEFILE) = 3 0.113 ( 0.002 ms): a32.out/1267727 read(fd: 3, buf: 0xff854990, count: 512) = 512 0.113 ( 0.049 ms): a32.out/1267727 ... [continued]: close()) = 0 0.113 ( 0.060 ms): a32.out/1267727 ... [continued]: set_tid_address()) = 1267727 (a32.out) 0.175 ( 0.001 ms): a32.out/1267727 set_robust_list(head: 0xf7ee556c, len: 12) = 0.222 ( 0.005 ms): a32.out/1267727 mprotect(start: 0xf7ebc000, len: 8192, prot: READ) = 0 0.230 ( 0.004 ms): a32.out/1267727 mprotect(start: 0x565b1000, len: 4096, prot: READ) = 0 0.237 ( 0.003 ms): a32.out/1267727 mprotect(start: 0xf7f1f000, len: 8192, prot: READ) = 0 0.258 ( 0.006 ms): a32.out/1267727 munmap(addr: 0xf7ec9000, len: 108298) = 0 0.258 ( 0.027 ms): a32.out/1267727 ... [continued]: brk()) = 0x57f33000 0.258 ( 0.031 ms): a32.out/1267727 ... [continued]: brk()) = 0x57f54000 0.258 ( 0.033 ms): a32.out/1267727 ... [continued]: brk()) = 0x57f55000 0.296 ( 0.008 ms): a32.out/1267727 openat(dfd: CWD, filename: 0x565b000a) = 3 0.316 ( 0.002 ms): a32.out/1267727 read(fd: 3, buf: 0xff8544a8, count: 4096) = 211 0.319 ( 0.001 ms): a32.out/1267727 read(fd: 3, buf: 0x57f332e0, count: 4096) = 0 0.319 ( 0.005 ms): a32.out/1267727 ... [continued]: close()) = 0 0.319 ( 0.010 ms): a32.out/1267727 ... [continued]: brk()) = 0x57f54000 0.337 ( ): a32.out/1267727 exit_group() = ? Thanks, Namhyung > > Remove some runtime types used by the system call tables and make > equivalents generated at build time. > > v5: Add byte swap to dso__e_machine and fix comment as suggested by > Namhyung. > > v4: Add reading the e_machine from the thread's maps dsos, only read > from /proc/pid/exe on failure and when live as requested by > Namhyung. Add patches to add dso comments and remove unused > dso_data variables that are unused without libunwind. > > v3: Add Charlie's reviewed-by tags. Incorporate feedback from Arnd > Bergmann <arnd@arndb.de> on additional optional column and MIPS > system call numbering. Rebase past Namhyung's global system call > statistics and add comments that they don't yet support an > e_machine other than EM_HOST. > > v2: Change the 1 element cache for the last table as suggested by > Howard Chu, add Howard's reviewed-by tags. > Add a comment and apology to Charlie for not doing better in > guiding: > https://lore.kernel.org/all/20250114-perf_syscall_arch_runtime-v1-1-5b304e408e11@rivosinc.com/ > After discussion on v1 and he agreed this patch series would be > the better direction. > > Ian Rogers (11): > perf dso: Move libunwind dso_data variables into ifdef > perf dso: kernel-doc for enum dso_binary_type > perf syscalltbl: Remove syscall_table.h > perf trace: Reorganize syscalls > perf syscalltbl: Remove struct syscalltbl > perf dso: Add support for reading the e_machine type for a dso > perf thread: Add support for reading the e_machine type for a thread > perf trace beauty: Add syscalltbl.sh generating all system call tables > perf syscalltbl: Use lookup table containing multiple architectures > perf build: Remove Makefile.syscalls > perf syscalltbl: Mask off ABI type for MIPS system calls > > tools/perf/Makefile.perf | 10 +- > tools/perf/arch/alpha/entry/syscalls/Kbuild | 2 - > .../alpha/entry/syscalls/Makefile.syscalls | 5 - > tools/perf/arch/alpha/include/syscall_table.h | 2 - > tools/perf/arch/arc/entry/syscalls/Kbuild | 2 - > .../arch/arc/entry/syscalls/Makefile.syscalls | 3 - > tools/perf/arch/arc/include/syscall_table.h | 2 - > tools/perf/arch/arm/entry/syscalls/Kbuild | 4 - > .../arch/arm/entry/syscalls/Makefile.syscalls | 2 - > tools/perf/arch/arm/include/syscall_table.h | 2 - > tools/perf/arch/arm64/entry/syscalls/Kbuild | 3 - > .../arm64/entry/syscalls/Makefile.syscalls | 6 - > tools/perf/arch/arm64/include/syscall_table.h | 8 - > tools/perf/arch/csky/entry/syscalls/Kbuild | 2 - > .../csky/entry/syscalls/Makefile.syscalls | 3 - > tools/perf/arch/csky/include/syscall_table.h | 2 - > .../perf/arch/loongarch/entry/syscalls/Kbuild | 2 - > .../entry/syscalls/Makefile.syscalls | 3 - > .../arch/loongarch/include/syscall_table.h | 2 - > tools/perf/arch/mips/entry/syscalls/Kbuild | 2 - > .../mips/entry/syscalls/Makefile.syscalls | 5 - > tools/perf/arch/mips/include/syscall_table.h | 2 - > tools/perf/arch/parisc/entry/syscalls/Kbuild | 3 - > .../parisc/entry/syscalls/Makefile.syscalls | 6 - > .../perf/arch/parisc/include/syscall_table.h | 8 - > tools/perf/arch/powerpc/entry/syscalls/Kbuild | 3 - > .../powerpc/entry/syscalls/Makefile.syscalls | 6 - > .../perf/arch/powerpc/include/syscall_table.h | 8 - > tools/perf/arch/riscv/entry/syscalls/Kbuild | 2 - > .../riscv/entry/syscalls/Makefile.syscalls | 4 - > tools/perf/arch/riscv/include/syscall_table.h | 8 - > tools/perf/arch/s390/entry/syscalls/Kbuild | 2 - > .../s390/entry/syscalls/Makefile.syscalls | 5 - > tools/perf/arch/s390/include/syscall_table.h | 2 - > tools/perf/arch/sh/entry/syscalls/Kbuild | 2 - > .../arch/sh/entry/syscalls/Makefile.syscalls | 4 - > tools/perf/arch/sh/include/syscall_table.h | 2 - > tools/perf/arch/sparc/entry/syscalls/Kbuild | 3 - > .../sparc/entry/syscalls/Makefile.syscalls | 5 - > tools/perf/arch/sparc/include/syscall_table.h | 8 - > tools/perf/arch/x86/entry/syscalls/Kbuild | 3 - > .../arch/x86/entry/syscalls/Makefile.syscalls | 6 - > tools/perf/arch/x86/include/syscall_table.h | 8 - > tools/perf/arch/xtensa/entry/syscalls/Kbuild | 2 - > .../xtensa/entry/syscalls/Makefile.syscalls | 4 - > .../perf/arch/xtensa/include/syscall_table.h | 2 - > tools/perf/builtin-trace.c | 290 +++++++++++------- > tools/perf/scripts/Makefile.syscalls | 61 ---- > tools/perf/scripts/syscalltbl.sh | 86 ------ > tools/perf/trace/beauty/syscalltbl.sh | 274 +++++++++++++++++ > tools/perf/util/dso.c | 88 ++++++ > tools/perf/util/dso.h | 58 ++++ > tools/perf/util/symbol-elf.c | 27 -- > tools/perf/util/syscalltbl.c | 148 ++++----- > tools/perf/util/syscalltbl.h | 22 +- > tools/perf/util/thread.c | 80 +++++ > tools/perf/util/thread.h | 14 +- > 57 files changed, 792 insertions(+), 536 deletions(-) > delete mode 100644 tools/perf/arch/alpha/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/alpha/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/alpha/include/syscall_table.h > delete mode 100644 tools/perf/arch/arc/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/arc/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/arc/include/syscall_table.h > delete mode 100644 tools/perf/arch/arm/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/arm/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/arm/include/syscall_table.h > delete mode 100644 tools/perf/arch/arm64/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/arm64/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/arm64/include/syscall_table.h > delete mode 100644 tools/perf/arch/csky/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/csky/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/csky/include/syscall_table.h > delete mode 100644 tools/perf/arch/loongarch/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/loongarch/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/loongarch/include/syscall_table.h > delete mode 100644 tools/perf/arch/mips/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/mips/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/mips/include/syscall_table.h > delete mode 100644 tools/perf/arch/parisc/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/parisc/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/parisc/include/syscall_table.h > delete mode 100644 tools/perf/arch/powerpc/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/powerpc/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/powerpc/include/syscall_table.h > delete mode 100644 tools/perf/arch/riscv/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/riscv/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/riscv/include/syscall_table.h > delete mode 100644 tools/perf/arch/s390/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/s390/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/s390/include/syscall_table.h > delete mode 100644 tools/perf/arch/sh/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/sh/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/sh/include/syscall_table.h > delete mode 100644 tools/perf/arch/sparc/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/sparc/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/sparc/include/syscall_table.h > delete mode 100644 tools/perf/arch/x86/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/x86/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/x86/include/syscall_table.h > delete mode 100644 tools/perf/arch/xtensa/entry/syscalls/Kbuild > delete mode 100644 tools/perf/arch/xtensa/entry/syscalls/Makefile.syscalls > delete mode 100644 tools/perf/arch/xtensa/include/syscall_table.h > delete mode 100644 tools/perf/scripts/Makefile.syscalls > delete mode 100755 tools/perf/scripts/syscalltbl.sh > create mode 100755 tools/perf/trace/beauty/syscalltbl.sh > > -- > 2.49.0.rc0.332.g42c0ae87b1-goog >
On Thu, Mar 13, 2025 at 12:11:40AM -0700, Namhyung Kim wrote: > On Fri, Mar 07, 2025 at 04:31:58PM -0800, Ian Rogers wrote: > > This work builds on the clean up of system call tables and removal of > > libaudit by Charlie Jenkins <charlie@rivosinc.com>. > > > > The system call table in perf trace is used to map system call numbers > > to names and vice versa. Prior to these changes, a single table > > matching the perf binary's build was present. The table would be > > incorrect if tracing say a 32-bit binary from a 64-bit version of > > perf, the names and numbers wouldn't match. > > > > Change the build so that a single system call file is built and the > > potentially multiple tables are identifiable from the ELF machine type > > of the process being examined. To determine the ELF machine type, the > > executable's maps are searched and the associated DSOs ELF headers are > > read. When this fails and when live, /proc/pid/exe's ELF header is > > read. Fallback to using the perf's binary type when unknown. > > Now it works well for me! Its working for me on x86_64 as well, I'm doing some more tests, the container builds and will do 32-bit tracing on 64-bit ARM (rpi5 aarch64) and then report results here, should be later today as the default kernel for the rpi5 doesn't come with CONFIG_FTRACE_SYSCALLS=y and BTF, so building one with it. - Arnaldo
On Thu, Mar 13, 2025 at 04:49:52PM -0300, Arnaldo Carvalho de Melo wrote: > On Thu, Mar 13, 2025 at 12:11:40AM -0700, Namhyung Kim wrote: > > On Fri, Mar 07, 2025 at 04:31:58PM -0800, Ian Rogers wrote: > > > This work builds on the clean up of system call tables and removal of > > > libaudit by Charlie Jenkins <charlie@rivosinc.com>. > > > > > > The system call table in perf trace is used to map system call numbers > > > to names and vice versa. Prior to these changes, a single table > > > matching the perf binary's build was present. The table would be > > > incorrect if tracing say a 32-bit binary from a 64-bit version of > > > perf, the names and numbers wouldn't match. > > > > > > Change the build so that a single system call file is built and the > > > potentially multiple tables are identifiable from the ELF machine type > > > of the process being examined. To determine the ELF machine type, the > > > executable's maps are searched and the associated DSOs ELF headers are > > > read. When this fails and when live, /proc/pid/exe's ELF header is > > > read. Fallback to using the perf's binary type when unknown. > > > > Now it works well for me! > > Its working for me on x86_64 as well, I'm doing some more tests, the > container builds and will do 32-bit tracing on 64-bit ARM (rpi5 aarch64) > and then report results here, should be later today as the default > kernel for the rpi5 doesn't come with CONFIG_FTRACE_SYSCALLS=y and BTF, > so building one with it. Still building, but noticed this on x86_64: 105: perf trace enum augmentation tests : FAILED! 106: perf trace BTF general tests : FAILED! 107: perf trace exit race : Ok 108: perf trace record and replay : FAILED! The first doesn´t help that much with verbose mode, haven't checked if before this series it was failing :-\ root@x1:~# perf test -vvv 105 105: perf trace enum augmentation tests: --- start --- test child forked, pid 19411 Checking if vmlinux exists Tracing syscall landlock_add_rule ---- end(-1) ---- 105: perf trace enum augmentation tests : FAILED! root@x1:~# Ditto for 106: root@x1:~# perf test -vv 106 106: perf trace BTF general tests: --- start --- test child forked, pid 19467 Checking if vmlinux BTF exists Testing perf trace's string augmentation Testing perf trace's buffer augmentation Buffer augmentation test failed ---- end(-1) ---- 106: perf trace BTF general tests : FAILED! root@x1:~# 108 works when its the only test: root@x1:~# perf test 108 108: perf trace record and replay : Ok root@x1:~# perf test 108 108: perf trace record and replay : Ok root@x1:~# perf test 108 108: perf trace record and replay : Ok root@x1:~# I'll try to check what is happening with the first two later today. - Arnaldo
On Thu, Mar 13, 2025 at 05:20:09PM -0300, Arnaldo Carvalho de Melo wrote: > Still building, but noticed this on x86_64: > > 105: perf trace enum augmentation tests : FAILED! > 106: perf trace BTF general tests : FAILED! > 107: perf trace exit race : Ok > 108: perf trace record and replay : FAILED! > > > The first doesn´t help that much with verbose mode, haven't checked if > before this series it was failing :-\ > > root@x1:~# perf test -vvv 105 > 105: perf trace enum augmentation tests: > --- start --- > test child forked, pid 19411 > Checking if vmlinux exists > Tracing syscall landlock_add_rule > ---- end(-1) ---- > 105: perf trace enum augmentation tests : FAILED! > root@x1:~# So: root@x1:~# perf trace -e landlock_add_rule perf test -w landlock root@x1:~# But: root@x1:~# perf trace perf test -w landlock |& grep landlock_add_rule 26.120 ( 0.002 ms): perf/19791 landlock_add_rule(ruleset_fd: 11, rule_type: LANDLOCK_RULE_PATH_BENEATH, rule_attr: 0x7ffde75e2680, flags: 45) = -1 EINVAL (Invalid argument) 26.124 ( 0.001 ms): perf/19791 landlock_add_rule(ruleset_fd: 11, rule_type: LANDLOCK_RULE_NET_PORT, rule_attr: 0x7ffde75e2690, flags: 45) = -1 EINVAL (Invalid argument) root@x1:~# -e is having some trouble, when no event is specified, then it works. Something in the changes made to: static int trace__parse_events_option(const struct option *opt, const char *str, int unset __maybe_unused) - Arnaldo More data: root@x1:~# perf trace -vvv -e landlock_add_rule perf test -w landlock Using CPUID GenuineIntel-6-BA-3 Opening: cpu/cycles/ ------------------------------------------------------------ perf_event_attr: type 0 (PERF_TYPE_HARDWARE) config 0xa00000000 (cpu_atom/PERF_COUNT_HW_CPU_CYCLES/) disabled 1 ------------------------------------------------------------ sys_perf_event_open: pid 0 cpu -1 group_fd -1 flags 0x8 = 27 Opening: cpu/cycles/ ------------------------------------------------------------ perf_event_attr: type 0 (PERF_TYPE_HARDWARE) config 0x400000000 (cpu_core/PERF_COUNT_HW_CPU_CYCLES/) disabled 1 ------------------------------------------------------------ sys_perf_event_open: pid 0 cpu -1 group_fd -1 flags 0x8 = 28 Opening: raw_syscalls:sys_enter ------------------------------------------------------------ perf_event_attr: type 2 (PERF_TYPE_TRACEPOINT) size 136 config 0x197 (raw_syscalls:sys_enter) { sample_period, sample_freq } 1 sample_type IP|TID|TIME|ID|CPU|PERIOD|RAW read_format ID|LOST disabled 1 inherit 1 mmap 1 comm 1 enable_on_exec 1 task 1 sample_id_all 1 mmap2 1 comm_exec 1 ksymbol 1 bpf_event 1 { wakeup_events, wakeup_watermark } 1 ------------------------------------------------------------ sys_perf_event_open: pid 19786 cpu 0 group_fd -1 flags 0x8 = 29 sys_perf_event_open: pid 19786 cpu 1 group_fd -1 flags 0x8 = 30 sys_perf_event_open: pid 19786 cpu 2 group_fd -1 flags 0x8 = 31 sys_perf_event_open: pid 19786 cpu 3 group_fd -1 flags 0x8 = 33 sys_perf_event_open: pid 19786 cpu 4 group_fd -1 flags 0x8 = 34 sys_perf_event_open: pid 19786 cpu 5 group_fd -1 flags 0x8 = 35 sys_perf_event_open: pid 19786 cpu 6 group_fd -1 flags 0x8 = 36 sys_perf_event_open: pid 19786 cpu 7 group_fd -1 flags 0x8 = 37 sys_perf_event_open: pid 19786 cpu 8 group_fd -1 flags 0x8 = 38 sys_perf_event_open: pid 19786 cpu 9 group_fd -1 flags 0x8 = 39 sys_perf_event_open: pid 19786 cpu 10 group_fd -1 flags 0x8 = 40 sys_perf_event_open: pid 19786 cpu 11 group_fd -1 flags 0x8 = 41 Opening: raw_syscalls:sys_exit ------------------------------------------------------------ perf_event_attr: type 2 (PERF_TYPE_TRACEPOINT) size 136 config 0x196 (raw_syscalls:sys_exit) { sample_period, sample_freq } 1 sample_type IP|TID|TIME|ID|CPU|PERIOD|RAW read_format ID|LOST disabled 1 inherit 1 enable_on_exec 1 sample_id_all 1 { wakeup_events, wakeup_watermark } 1 ------------------------------------------------------------ sys_perf_event_open: pid 19786 cpu 0 group_fd -1 flags 0x8 = 42 sys_perf_event_open: pid 19786 cpu 1 group_fd -1 flags 0x8 = 43 sys_perf_event_open: pid 19786 cpu 2 group_fd -1 flags 0x8 = 44 sys_perf_event_open: pid 19786 cpu 3 group_fd -1 flags 0x8 = 45 sys_perf_event_open: pid 19786 cpu 4 group_fd -1 flags 0x8 = 46 sys_perf_event_open: pid 19786 cpu 5 group_fd -1 flags 0x8 = 47 sys_perf_event_open: pid 19786 cpu 6 group_fd -1 flags 0x8 = 48 sys_perf_event_open: pid 19786 cpu 7 group_fd -1 flags 0x8 = 49 sys_perf_event_open: pid 19786 cpu 8 group_fd -1 flags 0x8 = 50 sys_perf_event_open: pid 19786 cpu 9 group_fd -1 flags 0x8 = 51 sys_perf_event_open: pid 19786 cpu 10 group_fd -1 flags 0x8 = 52 sys_perf_event_open: pid 19786 cpu 11 group_fd -1 flags 0x8 = 53 Opening: __augmented_syscalls__ ------------------------------------------------------------ perf_event_attr: type 1 (PERF_TYPE_SOFTWARE) size 136 config 0xa (PERF_COUNT_SW_BPF_OUTPUT) { sample_period, sample_freq } 1 sample_type IP|TID|TIME|ID|CPU|PERIOD|RAW read_format ID|LOST disabled 1 enable_on_exec 1 sample_id_all 1 { wakeup_events, wakeup_watermark } 1 ------------------------------------------------------------ sys_perf_event_open: pid 19786 cpu 0 group_fd -1 flags 0x8 = 54 sys_perf_event_open: pid 19786 cpu 1 group_fd -1 flags 0x8 = 55 sys_perf_event_open: pid 19786 cpu 2 group_fd -1 flags 0x8 = 56 sys_perf_event_open: pid 19786 cpu 3 group_fd -1 flags 0x8 = 57 sys_perf_event_open: pid 19786 cpu 4 group_fd -1 flags 0x8 = 58 sys_perf_event_open: pid 19786 cpu 5 group_fd -1 flags 0x8 = 59 sys_perf_event_open: pid 19786 cpu 6 group_fd -1 flags 0x8 = 60 sys_perf_event_open: pid 19786 cpu 7 group_fd -1 flags 0x8 = 61 sys_perf_event_open: pid 19786 cpu 8 group_fd -1 flags 0x8 = 62 sys_perf_event_open: pid 19786 cpu 9 group_fd -1 flags 0x8 = 63 sys_perf_event_open: pid 19786 cpu 10 group_fd -1 flags 0x8 = 64 sys_perf_event_open: pid 19786 cpu 11 group_fd -1 flags 0x8 = 65 Problems reading syscall 156: 2 (No such file or directory)(_sysctl) information Problems reading syscall 183: 2 (No such file or directory)(afs_syscall) information Problems reading syscall 174: 2 (No such file or directory)(create_module) information Problems reading syscall 214: 2 (No such file or directory)(epoll_ctl_old) information Problems reading syscall 215: 2 (No such file or directory)(epoll_wait_old) information Problems reading syscall 177: 2 (No such file or directory)(get_kernel_syms) information Problems reading syscall 211: 2 (No such file or directory)(get_thread_area) information Problems reading syscall 181: 2 (No such file or directory)(getpmsg) information vmlinux BTF loaded Problems reading syscall 212: 2 (No such file or directory)(lookup_dcookie) information Problems reading syscall 180: 2 (No such file or directory)(nfsservctl) information Problems reading syscall 182: 2 (No such file or directory)(putpmsg) information Problems reading syscall 178: 2 (No such file or directory)(query_module) information Problems reading syscall 185: 2 (No such file or directory)(security) information Problems reading syscall 205: 2 (No such file or directory)(set_thread_area) information Problems reading syscall 184: 2 (No such file or directory)(tuxcall) information Problems reading syscall 134: 2 (No such file or directory)(uselib) information Problems reading syscall 236: 2 (No such file or directory)(vserver) information event qualifier tracepoint filter: id == 29098429 mmap size 528384B libperf: mmap_per_cpu: nr cpu values 12 nr threads 1 libperf: idx 0: mmapping fd 29 <SNIP> root@x1:~# root@x1:~# cat /sys/kernel/tracing/events/syscalls/sys_enter_landlock_add_rule/id 1449 root@x1:~# perf trace -e landlock_add_rule perf test -w landlock root@x1:~# strace -e landlock_add_rule perf test -w landlock landlock_add_rule(11, LANDLOCK_RULE_PATH_BENEATH, {allowed_access=LANDLOCK_ACCESS_FS_READ_FILE, parent_fd=14}, 0x2d) = -1 EINVAL (Invalid argument) landlock_add_rule(11, LANDLOCK_RULE_NET_PORT, {allowed_access=LANDLOCK_ACCESS_NET_CONNECT_TCP, port=19}, 0x2d) = -1 EINVAL (Invalid argument) +++ exited with 0 +++ root@x1:~# root@x1:~# vim /tmp/build/perf-tools-next/trace/beauty/generated/syscalltbl.c <SNIP> static const char *const syscall_num_to_name_EM_X86_64[] = { [0] = "read", [1] = "write", [2] = "open", <SNIP> [442] = "mount_setattr", [443] = "quotactl_fd", [444] = "landlock_create_ruleset", [445] = "landlock_add_rule", [446] = "landlock_restrict_self", [447] = "memfd_secret", [448] = "process_mrelease", [449] = "futex_waitv", [450] = "set_mempolicy_home_node", <SNIP> }; static const uint16_t syscall_sorted_names_EM_X86_64[] = { 156, /* _sysctl */ 43, /* accept */ 288, /* accept4 */ <SNIP> 246, /* kexec_load */ 250, /* keyctl */ 62, /* kill */ 445, /* landlock_add_rule */ 444, /* landlock_create_ruleset */ 446, /* landlock_restrict_self */ 94, /* lchown */ 192, /* lgetxattr */ <SNIP> }; <SNIP> #if defined(ALL_SYSCALLTBL) || defined(__i386__) || defined(__x86_64__) { .num_to_name = syscall_num_to_name_EM_386, .sorted_names = syscall_sorted_names_EM_386, .e_machine = EM_386, .num_to_name_len = ARRAY_SIZE(syscall_num_to_name_EM_386), .sorted_names_len = ARRAY_SIZE(syscall_sorted_names_EM_386), }, { .num_to_name = syscall_num_to_name_EM_X86_64, .sorted_names = syscall_sorted_names_EM_X86_64, .e_machine = EM_X86_64, .num_to_name_len = ARRAY_SIZE(syscall_num_to_name_EM_X86_64), .sorted_names_len = ARRAY_SIZE(syscall_sorted_names_EM_X86_64), }, #endif // defined(ALL_SYSCALLTBL) || defined(__i386__) || defined(__x86_64__) <SNIP>
On Thu, Mar 13, 2025 at 05:47:27PM -0300, Arnaldo Carvalho de Melo wrote: > On Thu, Mar 13, 2025 at 05:20:09PM -0300, Arnaldo Carvalho de Melo wrote: > > Still building, but noticed this on x86_64: > > > > 105: perf trace enum augmentation tests : FAILED! > > 106: perf trace BTF general tests : FAILED! > > 107: perf trace exit race : Ok > > 108: perf trace record and replay : FAILED! > > > > > > The first doesn´t help that much with verbose mode, haven't checked if > > before this series it was failing :-\ > > > > root@x1:~# perf test -vvv 105 > > 105: perf trace enum augmentation tests: > > --- start --- > > test child forked, pid 19411 > > Checking if vmlinux exists > > Tracing syscall landlock_add_rule > > ---- end(-1) ---- > > 105: perf trace enum augmentation tests : FAILED! > > root@x1:~# > > So: > > root@x1:~# perf trace -e landlock_add_rule perf test -w landlock > root@x1:~# > > But: > > root@x1:~# perf trace perf test -w landlock |& grep landlock_add_rule > 26.120 ( 0.002 ms): perf/19791 landlock_add_rule(ruleset_fd: 11, rule_type: LANDLOCK_RULE_PATH_BENEATH, rule_attr: 0x7ffde75e2680, flags: 45) = -1 EINVAL (Invalid argument) > 26.124 ( 0.001 ms): perf/19791 landlock_add_rule(ruleset_fd: 11, rule_type: LANDLOCK_RULE_NET_PORT, rule_attr: 0x7ffde75e2690, flags: 45) = -1 EINVAL (Invalid argument) > root@x1:~# > > -e is having some trouble, when no event is specified, then it works. > > Something in the changes made to: > > static int trace__parse_events_option(const struct option *opt, const char *str, > int unset __maybe_unused) Thanks for the test, I think this should fix it: Thanks, Namhyung ---8<--- diff --git a/tools/perf/util/syscalltbl.c b/tools/perf/util/syscalltbl.c index ace66e69c1bcde1e..67a8ec10e9e4bc8d 100644 --- a/tools/perf/util/syscalltbl.c +++ b/tools/perf/util/syscalltbl.c @@ -76,7 +76,7 @@ int syscalltbl__id(int e_machine, const char *name) { const struct syscalltbl *table = find_table(e_machine); struct syscall_cmp_key key; - const int *id; + const uint16_t *id; if (!table) return -1;