linux/tools/perf/util
Howard Chu 7a2fb5619c perf trace: Fix iteration of syscall ids in syscalltbl->entries
This is a bug found when implementing pretty-printing for the
landlock_add_rule system call, I decided to send this patch separately
because this is a serious bug that should be fixed fast.

I wrote a test program to do landlock_add_rule syscall in a loop,
yet perf trace -e landlock_add_rule freezes, giving no output.

This bug is introduced by the false understanding of the variable "key"
below:
```
for (key = 0; key < trace->sctbl->syscalls.nr_entries; ++key) {
	struct syscall *sc = trace__syscall_info(trace, NULL, key);
	...
}
```
The code above seems right at the beginning, but when looking at
syscalltbl.c, I found these lines:

```
for (i = 0; i <= syscalltbl_native_max_id; ++i)
	if (syscalltbl_native[i])
		++nr_entries;

entries = tbl->syscalls.entries = malloc(sizeof(struct syscall) * nr_entries);
...

for (i = 0, j = 0; i <= syscalltbl_native_max_id; ++i) {
	if (syscalltbl_native[i]) {
		entries[j].name = syscalltbl_native[i];
		entries[j].id = i;
		++j;
	}
}
```

meaning the key is merely an index to traverse the syscall table,
instead of the actual syscall id for this particular syscall.

So if one uses key to do trace__syscall_info(trace, NULL, key), because
key only goes up to trace->sctbl->syscalls.nr_entries, for example, on
my X86_64 machine, this number is 373, it will end up neglecting all
the rest of the syscall, in my case, everything after `rseq`, because
the traversal will stop at 373, and `rseq` is the last syscall whose id
is lower than 373

in tools/perf/arch/x86/include/generated/asm/syscalls_64.c:
```
	...
	[334] = "rseq",
	[424] = "pidfd_send_signal",
	...
```

The reason why the key is scrambled but perf trace works well is that
key is used in trace__syscall_info(trace, NULL, key) to do
trace->syscalls.table[id], this makes sure that the struct syscall returned
actually has an id the same value as key, making the later bpf_prog
matching all correct.

After fixing this bug, I can do perf trace on 38 more syscalls, and
because more syscalls are visible, we get 8 more syscalls that can be
augmented.

before:

perf $ perf trace -vv --max-events=1 |& grep Reusing
Reusing "open" BPF sys_enter augmenter for "stat"
Reusing "open" BPF sys_enter augmenter for "lstat"
Reusing "open" BPF sys_enter augmenter for "access"
Reusing "connect" BPF sys_enter augmenter for "accept"
Reusing "sendto" BPF sys_enter augmenter for "recvfrom"
Reusing "connect" BPF sys_enter augmenter for "bind"
Reusing "connect" BPF sys_enter augmenter for "getsockname"
Reusing "connect" BPF sys_enter augmenter for "getpeername"
Reusing "open" BPF sys_enter augmenter for "execve"
Reusing "open" BPF sys_enter augmenter for "truncate"
Reusing "open" BPF sys_enter augmenter for "chdir"
Reusing "open" BPF sys_enter augmenter for "mkdir"
Reusing "open" BPF sys_enter augmenter for "rmdir"
Reusing "open" BPF sys_enter augmenter for "creat"
Reusing "open" BPF sys_enter augmenter for "link"
Reusing "open" BPF sys_enter augmenter for "unlink"
Reusing "open" BPF sys_enter augmenter for "symlink"
Reusing "open" BPF sys_enter augmenter for "readlink"
Reusing "open" BPF sys_enter augmenter for "chmod"
Reusing "open" BPF sys_enter augmenter for "chown"
Reusing "open" BPF sys_enter augmenter for "lchown"
Reusing "open" BPF sys_enter augmenter for "mknod"
Reusing "open" BPF sys_enter augmenter for "statfs"
Reusing "open" BPF sys_enter augmenter for "pivot_root"
Reusing "open" BPF sys_enter augmenter for "chroot"
Reusing "open" BPF sys_enter augmenter for "acct"
Reusing "open" BPF sys_enter augmenter for "swapon"
Reusing "open" BPF sys_enter augmenter for "swapoff"
Reusing "open" BPF sys_enter augmenter for "delete_module"
Reusing "open" BPF sys_enter augmenter for "setxattr"
Reusing "open" BPF sys_enter augmenter for "lsetxattr"
Reusing "openat" BPF sys_enter augmenter for "fsetxattr"
Reusing "open" BPF sys_enter augmenter for "getxattr"
Reusing "open" BPF sys_enter augmenter for "lgetxattr"
Reusing "openat" BPF sys_enter augmenter for "fgetxattr"
Reusing "open" BPF sys_enter augmenter for "listxattr"
Reusing "open" BPF sys_enter augmenter for "llistxattr"
Reusing "open" BPF sys_enter augmenter for "removexattr"
Reusing "open" BPF sys_enter augmenter for "lremovexattr"
Reusing "fsetxattr" BPF sys_enter augmenter for "fremovexattr"
Reusing "open" BPF sys_enter augmenter for "mq_open"
Reusing "open" BPF sys_enter augmenter for "mq_unlink"
Reusing "fsetxattr" BPF sys_enter augmenter for "add_key"
Reusing "fremovexattr" BPF sys_enter augmenter for "request_key"
Reusing "fremovexattr" BPF sys_enter augmenter for "inotify_add_watch"
Reusing "fremovexattr" BPF sys_enter augmenter for "mkdirat"
Reusing "fremovexattr" BPF sys_enter augmenter for "mknodat"
Reusing "fremovexattr" BPF sys_enter augmenter for "fchownat"
Reusing "fremovexattr" BPF sys_enter augmenter for "futimesat"
Reusing "fremovexattr" BPF sys_enter augmenter for "newfstatat"
Reusing "fremovexattr" BPF sys_enter augmenter for "unlinkat"
Reusing "fremovexattr" BPF sys_enter augmenter for "linkat"
Reusing "open" BPF sys_enter augmenter for "symlinkat"
Reusing "fremovexattr" BPF sys_enter augmenter for "readlinkat"
Reusing "fremovexattr" BPF sys_enter augmenter for "fchmodat"
Reusing "fremovexattr" BPF sys_enter augmenter for "faccessat"
Reusing "fremovexattr" BPF sys_enter augmenter for "utimensat"
Reusing "connect" BPF sys_enter augmenter for "accept4"
Reusing "fremovexattr" BPF sys_enter augmenter for "name_to_handle_at"
Reusing "fremovexattr" BPF sys_enter augmenter for "renameat2"
Reusing "open" BPF sys_enter augmenter for "memfd_create"
Reusing "fremovexattr" BPF sys_enter augmenter for "execveat"
Reusing "fremovexattr" BPF sys_enter augmenter for "statx"

after

perf $ perf trace -vv --max-events=1 |& grep Reusing
Reusing "open" BPF sys_enter augmenter for "stat"
Reusing "open" BPF sys_enter augmenter for "lstat"
Reusing "open" BPF sys_enter augmenter for "access"
Reusing "connect" BPF sys_enter augmenter for "accept"
Reusing "sendto" BPF sys_enter augmenter for "recvfrom"
Reusing "connect" BPF sys_enter augmenter for "bind"
Reusing "connect" BPF sys_enter augmenter for "getsockname"
Reusing "connect" BPF sys_enter augmenter for "getpeername"
Reusing "open" BPF sys_enter augmenter for "execve"
Reusing "open" BPF sys_enter augmenter for "truncate"
Reusing "open" BPF sys_enter augmenter for "chdir"
Reusing "open" BPF sys_enter augmenter for "mkdir"
Reusing "open" BPF sys_enter augmenter for "rmdir"
Reusing "open" BPF sys_enter augmenter for "creat"
Reusing "open" BPF sys_enter augmenter for "link"
Reusing "open" BPF sys_enter augmenter for "unlink"
Reusing "open" BPF sys_enter augmenter for "symlink"
Reusing "open" BPF sys_enter augmenter for "readlink"
Reusing "open" BPF sys_enter augmenter for "chmod"
Reusing "open" BPF sys_enter augmenter for "chown"
Reusing "open" BPF sys_enter augmenter for "lchown"
Reusing "open" BPF sys_enter augmenter for "mknod"
Reusing "open" BPF sys_enter augmenter for "statfs"
Reusing "open" BPF sys_enter augmenter for "pivot_root"
Reusing "open" BPF sys_enter augmenter for "chroot"
Reusing "open" BPF sys_enter augmenter for "acct"
Reusing "open" BPF sys_enter augmenter for "swapon"
Reusing "open" BPF sys_enter augmenter for "swapoff"
Reusing "open" BPF sys_enter augmenter for "delete_module"
Reusing "open" BPF sys_enter augmenter for "setxattr"
Reusing "open" BPF sys_enter augmenter for "lsetxattr"
Reusing "openat" BPF sys_enter augmenter for "fsetxattr"
Reusing "open" BPF sys_enter augmenter for "getxattr"
Reusing "open" BPF sys_enter augmenter for "lgetxattr"
Reusing "openat" BPF sys_enter augmenter for "fgetxattr"
Reusing "open" BPF sys_enter augmenter for "listxattr"
Reusing "open" BPF sys_enter augmenter for "llistxattr"
Reusing "open" BPF sys_enter augmenter for "removexattr"
Reusing "open" BPF sys_enter augmenter for "lremovexattr"
Reusing "fsetxattr" BPF sys_enter augmenter for "fremovexattr"
Reusing "open" BPF sys_enter augmenter for "mq_open"
Reusing "open" BPF sys_enter augmenter for "mq_unlink"
Reusing "fsetxattr" BPF sys_enter augmenter for "add_key"
Reusing "fremovexattr" BPF sys_enter augmenter for "request_key"
Reusing "fremovexattr" BPF sys_enter augmenter for "inotify_add_watch"
Reusing "fremovexattr" BPF sys_enter augmenter for "mkdirat"
Reusing "fremovexattr" BPF sys_enter augmenter for "mknodat"
Reusing "fremovexattr" BPF sys_enter augmenter for "fchownat"
Reusing "fremovexattr" BPF sys_enter augmenter for "futimesat"
Reusing "fremovexattr" BPF sys_enter augmenter for "newfstatat"
Reusing "fremovexattr" BPF sys_enter augmenter for "unlinkat"
Reusing "fremovexattr" BPF sys_enter augmenter for "linkat"
Reusing "open" BPF sys_enter augmenter for "symlinkat"
Reusing "fremovexattr" BPF sys_enter augmenter for "readlinkat"
Reusing "fremovexattr" BPF sys_enter augmenter for "fchmodat"
Reusing "fremovexattr" BPF sys_enter augmenter for "faccessat"
Reusing "fremovexattr" BPF sys_enter augmenter for "utimensat"
Reusing "connect" BPF sys_enter augmenter for "accept4"
Reusing "fremovexattr" BPF sys_enter augmenter for "name_to_handle_at"
Reusing "fremovexattr" BPF sys_enter augmenter for "renameat2"
Reusing "open" BPF sys_enter augmenter for "memfd_create"
Reusing "fremovexattr" BPF sys_enter augmenter for "execveat"
Reusing "fremovexattr" BPF sys_enter augmenter for "statx"

TL;DR:

These are the new syscalls that can be augmented
Reusing "openat" BPF sys_enter augmenter for "open_tree"
Reusing "openat" BPF sys_enter augmenter for "openat2"
Reusing "openat" BPF sys_enter augmenter for "mount_setattr"
Reusing "openat" BPF sys_enter augmenter for "move_mount"
Reusing "open" BPF sys_enter augmenter for "fsopen"
Reusing "openat" BPF sys_enter augmenter for "fspick"
Reusing "openat" BPF sys_enter augmenter for "faccessat2"
Reusing "openat" BPF sys_enter augmenter for "fchmodat2"

as for the perf trace output:

before

perf $ perf trace -e faccessat2 --max-events=1
[no output]

after

perf $ ./perf trace -e faccessat2 --max-events=1
     0.000 ( 0.037 ms): waybar/958 faccessat2(dfd: 40, filename: "uevent")                               = 0

P.S. The reason why this bug was not found in the past five years is
probably because it only happens to the newer syscalls whose id is
greater, for instance, faccessat2 of id 439, which not a lot of people
care about when using perf trace.

[Arnaldo]: notes

That and the fact that the BPF code was hidden before having to use -e,
that got changed kinda recently when we switched to using BPF skels for
augmenting syscalls in 'perf trace':

⬢[acme@toolbox perf-tools-next]$ git log --oneline tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
a9f4c6c999 perf trace: Collect sys_nanosleep first argument
29d16de26d perf augmented_raw_syscalls.bpf: Move 'struct timespec64' to vmlinux.h
5069211e2f perf trace: Use the right bpf_probe_read(_str) variant for reading user data
33b725ce7b perf trace: Avoid compile error wrt redefining bool
7d9642311b perf bpf augmented_raw_syscalls: Add an assert to make sure sizeof(augmented_arg->value) is a power of two.
262b54b6c9 perf bpf augmented_raw_syscalls: Add an assert to make sure sizeof(saddr) is a power of two.
1836480429 perf bpf_skel augmented_raw_syscalls: Cap the socklen parameter using &= sizeof(saddr)
cd2cece61a perf trace: Tidy comments related to BPF + syscall augmentation
5e6da6be30 perf trace: Migrate BPF augmentation to use a skeleton
⬢[acme@toolbox perf-tools-next]$

⬢[acme@toolbox perf-tools-next]$ git show --oneline --pretty=reference 5e6da6be30 | head -1
5e6da6be30 (perf trace: Migrate BPF augmentation to use a skeleton, 2023-08-10)
⬢[acme@toolbox perf-tools-next]$

I.e. from August, 2023.

One had as well to ask for BUILD_BPF_SKEL=1, which now is default if all
it needs is available on the system.

I simplified the code to not expose the 'struct syscall' outside of
tools/perf/util/syscalltbl.c, instead providing a function to go from
the index to the syscall id:

  int syscalltbl__id_at_idx(struct syscalltbl *tbl, int idx);

Signed-off-by: Howard Chu <howardchu95@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: https://lore.kernel.org/lkml/ZmhlAxbVcAKoPTg8@x1
Link: https://lore.kernel.org/r/20240705132059.853205-2-howardchu95@gmail.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
2024-07-12 09:49:02 -07:00
..
arm-spe-decoder perf util: Make util its own library 2024-06-26 11:07:42 -07:00
bpf_skel perf bpf filter: Add uid and gid terms 2024-05-30 10:05:57 -07:00
cs-etm-decoder perf util: Make util its own library 2024-06-26 11:07:42 -07:00
hisi-ptt-decoder perf util: Make util its own library 2024-06-26 11:07:42 -07:00
include tools headers: Update the copy of x86's mem{cpy,set}_64.S used in 'perf bench' 2024-01-30 11:31:15 -03:00
intel-pt-decoder perf util: Make util its own library 2024-06-26 11:07:42 -07:00
libunwind perf unwind: Use perf_arch_reg_{ip|sp}() to substitute macros 2023-08-16 08:48:06 -03:00
perf-regs-arch perf util: Make util its own library 2024-06-26 11:07:42 -07:00
scripting-engines perf util: Make util its own library 2024-06-26 11:07:42 -07:00
addr_location.c perf addr_location: Add init/exit/copy functions 2023-06-12 15:57:53 -03:00
addr_location.h perf addr_location: Add init/exit/copy functions 2023-06-12 15:57:53 -03:00
affinity.c perf tools: Use dedicated non-atomic clear/set bit helpers 2022-12-05 09:29:06 -03:00
affinity.h
amd-sample-raw.c perf script ibs: Remove unused include 2023-08-23 08:41:52 -03:00
annotate-data.c perf annotate-data: Ensure the number of type histograms 2024-05-11 13:03:13 -03:00
annotate-data.h perf annotate-data: Add hist_entry__annotate_data_tui() 2024-04-12 12:02:06 -03:00
annotate.c perf annotate: Fix segfault on sample histogram 2024-05-11 13:03:13 -03:00
annotate.h perf annotate: Move 'start' field struct to 'struct annotated_source' 2024-04-08 17:43:20 -03:00
archinsn.h
arm-spe.c perf thread: Add accessor functions for thread 2023-06-12 15:57:53 -03:00
arm-spe.h perf pmu: Lazily compute default config 2023-10-17 12:40:50 -07:00
arm64-frame-pointer-unwind-support.c
arm64-frame-pointer-unwind-support.h perf unwind arm64: Remove needless event.h & thread.h includes 2022-10-27 16:37:26 -03:00
auxtrace.c perf auxtrace: Allow number of queues to be specified 2024-05-07 12:44:02 -03:00
auxtrace.h perf auxtrace: Allow number of queues to be specified 2024-05-07 12:44:02 -03:00
block-info.c perf block-info: Remove unused refcount 2024-05-07 18:06:44 -03:00
block-info.h perf block-info: Remove unused refcount 2024-05-07 18:06:44 -03:00
block-range.c perf annotate: Move max_coverage from 'struct annotation' to 'struct annotated_branch' 2023-11-09 13:49:33 -03:00
block-range.h
bpf_counter_cgroup.c perf tools: Ignore deleted cgroups 2024-05-10 10:52:46 -03:00
bpf_counter.c libperf cpumap: Replace usage of perf_cpu_map__new(NULL) with perf_cpu_map__new_online_cpus() 2023-12-12 14:55:13 -03:00
bpf_counter.h perf build: Properly guard libbpf includes 2023-01-10 10:51:39 -03:00
bpf_ftrace.c
bpf_kwork_top.c perf cpumap: Use perf_cpu_map__for_each_cpu when possible 2024-03-21 10:41:28 -03:00
bpf_kwork.c perf cpumap: Use perf_cpu_map__for_each_cpu when possible 2024-03-21 10:41:28 -03:00
bpf_lock_contention.c perf machine: Move machine's threads into its own abstraction 2024-03-03 22:51:44 -08:00
bpf_map.c
bpf_map.h perf bpf: No need to include compiler.h when HAVE_LIBBPF_SUPPORT is true 2022-10-27 16:37:26 -03:00
bpf_off_cpu.c perf offcpu: Add missed btf_free 2023-10-25 13:38:33 -07:00
bpf-event.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
bpf-event.h perf env: Avoid recursively taking env->bpf_progs.lock 2024-01-03 17:54:54 -03:00
bpf-filter.c perf bpf filter: Add uid and gid terms 2024-05-30 10:05:57 -07:00
bpf-filter.h perf bpf filter: Give terms their own enum 2024-05-30 10:05:57 -07:00
bpf-filter.l perf bpf filter: Add uid and gid terms 2024-05-30 10:05:57 -07:00
bpf-filter.y perf bpf filter: Give terms their own enum 2024-05-30 10:05:57 -07:00
bpf-prologue.h perf bpf: No need to include headers just use forward declarations 2022-10-31 11:05:41 -03:00
bpf-utils.c perf bpf: 8 byte align bpil data 2022-06-28 12:05:25 -03:00
bpf-utils.h
branch.c perf callchain: Make display use of branch_type_stat const 2023-10-25 13:38:50 -07:00
branch.h perf callchain: Make display use of branch_type_stat const 2023-10-25 13:38:50 -07:00
Build perf util: Make util its own library 2024-06-26 11:07:42 -07:00
build-id.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
build-id.h perf dsos: Attempt to better abstract DSOs internals 2024-04-12 12:04:13 -03:00
cache.h perf path: Make mkpath thread safe, remove 16384 bytes from .bss 2023-05-28 10:24:14 -03:00
cacheline.c
cacheline.h perf c2c: Add report option to show false sharing in adjacent cachelines 2023-02-16 09:33:45 -03:00
call-path.c
call-path.h
callchain.c perf callchain: Use zfree() to avoid possibly accessing dangling pointers 2024-05-07 12:44:02 -03:00
callchain.h perf callchain: Minor layout changes to callchain_list 2023-10-25 13:39:32 -07:00
cap.c
cap.h
cgroup.c perf tools: Ignore deleted cgroups 2024-05-10 10:52:46 -03:00
cgroup.h perf lock contention: Add -G/--cgroup-filter option 2023-09-12 17:32:00 -03:00
clockid.c
clockid.h
cloexec.c perf util: Remove weak sched_getcpu 2023-03-14 08:29:46 -03:00
cloexec.h
color_config.c
color.c
color.h
comm.c perf comm str: Avoid sort during insert 2024-07-03 14:59:15 -07:00
comm.h
compress.h perf mmap: Lazily initialize zstd streams to save memory when not using it 2023-11-28 14:25:06 -03:00
config.c perf parse-events: Remove BPF event support 2023-08-15 16:41:48 -03:00
config.h perf tools: Add perf_config_scan() 2022-10-04 08:55:21 -03:00
copyfile.c
copyfile.h
counts.c perf stat: Remove unused perf_counts.aggr field 2022-10-27 16:37:25 -03:00
counts.h perf stat: Remove unused perf_counts.aggr field 2022-10-27 16:37:25 -03:00
cpu-set-sched.h
cpumap.c perf cpumap: Remove refcnt from 'struct cpu_aggr_map' 2024-05-07 18:06:44 -03:00
cpumap.h perf cpumap: Remove refcnt from 'struct cpu_aggr_map' 2024-05-07 18:06:44 -03:00
cputopo.c libperf cpumap: Replace usage of perf_cpu_map__new(NULL) with perf_cpu_map__new_online_cpus() 2023-12-12 14:55:13 -03:00
cputopo.h perf expr: Make the online topology accessible globally 2023-02-19 08:03:12 -03:00
cs-etm-base.c perf cs-etm: Move mapping of Trace ID and cpu into helper function 2023-04-04 09:39:56 -03:00
cs-etm.c perf dso: Fix address sanitizer build 2024-07-12 09:38:41 -07:00
cs-etm.h perf pmu: Lazily compute default config 2023-10-17 12:40:50 -07:00
data-convert-bt.c perf trace: Reduce #ifdefs for TEP_FIELD_IS_RELATIVE 2023-01-19 13:26:28 -03:00
data-convert-json.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
data-convert.h
data.c perf data: Minor code style alignment cleanup 2024-01-22 12:08:21 -08:00
data.h perf data: Minor code style alignment cleanup 2024-01-22 12:08:21 -08:00
db-export.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
db-export.h
debug.c perf annotate-data: Add debug messages 2024-03-21 10:41:28 -03:00
debug.h perf annotate-data: Add debug messages 2024-03-21 10:41:28 -03:00
debuginfo.c perf tools: Add util/debuginfo.[ch] files 2023-11-10 09:03:54 -03:00
debuginfo.h perf tools: Add util/debuginfo.[ch] files 2023-11-10 09:03:54 -03:00
demangle-cxx.cpp perf symbol: Avoid memory leak from abi::__cxa_demangle 2023-03-20 12:49:58 -03:00
demangle-cxx.h perf symbol: Add abi::__cxa_demangle C++ demangling support 2023-03-14 08:29:46 -03:00
demangle-java.c
demangle-java.h
demangle-ocaml.c
demangle-ocaml.h
demangle-rust.c
demangle-rust.h
disasm.c perf dso: Fix address sanitizer build 2024-07-12 09:38:41 -07:00
disasm.h perf annotate: Split out util/disasm.c 2024-04-03 11:48:57 -03:00
dlfilter.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
dlfilter.h
dso.c tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load 2024-06-25 11:00:43 -07:00
dso.h perf dso: Fix address sanitizer build 2024-07-12 09:38:41 -07:00
dsos.c perf dsos: When adding a dso into sorted dsos maintain the sort order 2024-07-03 15:02:53 -07:00
dsos.h perf dsos: Remove __dsos__findnew_link_by_longname_id() 2024-05-06 09:33:37 -03:00
dump-insn.c
dump-insn.h perf script: Add capstone support for '-F +brstackdisasm' 2024-04-05 10:43:07 -03:00
dwarf-aux.c perf dwarf-aux: Fix build with HAVE_DWARF_CFI_SUPPORT 2024-05-09 18:19:27 -03:00
dwarf-aux.h perf dwarf-aux: Add die_collect_global_vars() 2024-05-02 10:45:30 -03:00
dwarf-regs.c perf dwarf-regs: Add get_dwarf_regnum() 2023-12-23 10:56:05 -03:00
env.c perf env: Avoid recursively taking env->bpf_progs.lock 2024-01-03 17:54:54 -03:00
env.h perf stat: Support per-cluster aggregation 2024-02-09 14:59:53 -08:00
event.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
event.h perf symbols: Add kallsyms__get_symbol_start() 2023-07-28 19:01:16 -03:00
events_stats.h perf hist: Add symbol_conf.skip_empty 2024-06-15 21:04:04 -07:00
evlist.c perf parse-events: Add new 'fake_tp' parameter for tests 2024-05-10 10:49:26 -03:00
evlist.h perf top: Uniform the event name for the hybrid machine 2023-12-14 19:13:10 -03:00
evsel_config.h
evsel_fprintf.c perf callchain: Use pthread keys for tls callchain_cursor 2023-06-12 15:57:54 -03:00
evsel_fprintf.h perf script: Add new output field 'dsoff' to print dso offset 2023-05-12 15:21:49 -03:00
evsel.c util: constant -1 with expression of type char 2024-06-25 11:06:20 -07:00
evsel.h perf evsel: Refactor tool events 2024-06-10 16:45:10 -07:00
evswitch.c
evswitch.h perf: Various spelling fixes 2023-01-23 10:00:47 -03:00
expr.c perf: parse-events: Fix compilation error while defining DEBUG_PARSER 2024-06-06 00:19:36 -07:00
expr.h perf jevents: Add a new expression builtin strcmp_cpuid_str() 2023-08-17 14:12:14 -03:00
expr.l perf expr: Allow NaN to be a valid number 2024-02-13 13:47:08 -08:00
expr.y perf expr: Make YYDEBUG dependent on doing a debug build 2023-09-12 17:46:50 -03:00
find-map.c
fncache.c
fncache.h
ftrace.h perf ftrace: Reuse target::initial_delay 2023-03-13 14:52:14 -03:00
genelf_debug.c perf jit: Fix incorrect file name in DWARF line table 2023-06-20 22:18:58 -07:00
genelf.c perf genelf: remove unused struct 'options' 2024-06-03 22:07:52 -07:00
genelf.h perf genelf: Fix compiling with libelf on rv32 2024-04-18 22:22:51 -03:00
generate-cmdlist.sh perf help: Use HAVE_LIBTRACEEVENT to filter out unsupported commands 2023-01-02 11:51:53 -03:00
get_current_dir_name.c
get_current_dir_name.h
hashmap.c libbpf: Hashmap interface update to allow both long and void* keys/values 2022-11-09 20:45:14 -08:00
hashmap.h perf tools: Update copy of libbpf's hashmap.c 2023-09-11 10:31:02 -03:00
header.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
header.h perf: Extract building cache level for a CPU into separate function 2023-05-23 12:20:14 -03:00
help-unknown-cmd.c perf help: Lower levenshtein penality for deleting character 2024-03-21 13:54:40 -03:00
help-unknown-cmd.h
hisi-ptt.c perf hisi-ptt: remove unused struct 'hisi_ptt_queue' 2024-06-04 18:17:17 -07:00
hisi-ptt.h perf auxtrace arm64: Add support for parsing HiSilicon PCIe Trace packet 2022-10-15 10:13:16 -03:00
hist.c perf hist: Add symbol_conf.skip_empty 2024-06-15 21:04:04 -07:00
hist.h perf hist: Add symbol_conf.skip_empty 2024-06-15 21:04:04 -07:00
intel-bts.c perf thread: Add accessor functions for thread 2023-06-12 15:57:53 -03:00
intel-bts.h
intel-pt.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
intel-pt.h perf pmu: Lazily compute default config 2023-10-17 12:40:50 -07:00
intlist.c
intlist.h
iostat.c perf stat: Pass through 'struct outstate' 2022-11-24 09:40:37 -03:00
iostat.h perf stat: Pass through 'struct outstate' 2022-11-24 09:40:37 -03:00
jit.h
jitdump.c perf jitdump: Avoid memory leak 2023-10-12 10:01:56 -07:00
jitdump.h
kvm-stat.h perf kvm: Reference count 'struct kvm_info' 2023-03-21 10:06:05 -03:00
kwork.h perf kwork top: Implements BPF-based cpu usage statistics 2023-09-12 17:31:59 -03:00
levenshtein.c
levenshtein.h
lock-contention.h perf lock contention: Add -G/--cgroup-filter option 2023-09-12 17:32:00 -03:00
lzma.c perf lzma: Convert some pr_err() to pr_debug() as callers already use pr_debug() 2023-08-22 16:53:32 -03:00
machine.c perf mem-info: Add reference count checking 2024-05-07 18:06:44 -03:00
machine.h perf dsos: Attempt to better abstract DSOs internals 2024-04-12 12:04:13 -03:00
map_symbol.c perf mem_info: Add and use map_symbol__exit and addr_map_symbol__exit 2023-10-25 13:39:58 -07:00
map_symbol.h perf mem_info: Add and use map_symbol__exit and addr_map_symbol__exit 2023-10-25 13:39:58 -07:00
map.c perf map: Add missing dso__put() in map__new() 2024-05-06 15:36:51 -03:00
map.h perf map: Add map__objdump_2rip() 2024-03-21 10:41:28 -03:00
maps.c perf maps: Add/use a sorted insert for fixup overlap and insert 2024-06-06 23:31:30 -07:00
maps.h perf maps: Locking tidy up of nr_maps 2024-02-12 12:35:41 -08:00
mem-events.c perf mem: Warn if memory events are not supported on all CPUs 2024-07-12 09:38:40 -07:00
mem-events.h perf mem-info: Move mem-info out of mem-events and symbol 2024-05-07 18:06:44 -03:00
mem-info.c perf mem-info: Add reference count checking 2024-05-07 18:06:44 -03:00
mem-info.h perf mem-info: Add reference count checking 2024-05-07 18:06:44 -03:00
mem2node.c
mem2node.h
memswap.c
memswap.h
metricgroup.c perf parse-events: Add new 'fake_tp' parameter for tests 2024-05-10 10:49:26 -03:00
metricgroup.h perf stat: Add new field in stat_config to enable hardware aware grouping 2024-04-18 22:22:51 -03:00
mmap.c perf mmap: Lazily initialize zstd streams to save memory when not using it 2023-11-28 14:25:06 -03:00
mmap.h perf mmap: Lazily initialize zstd streams to save memory when not using it 2023-11-28 14:25:06 -03:00
mutex.c perf mutex: Add thread safety annotations 2022-10-04 08:55:20 -03:00
mutex.h perf mutex: Add thread safety annotations 2022-10-04 08:55:20 -03:00
namespaces.c perf namespaces: Introduce nsinfo__mntns_path() accessor to avoid accessing ->mntns_path directly 2023-04-17 22:22:24 -03:00
namespaces.h perf namespaces: Add reference count checking 2023-04-17 18:51:57 -03:00
off_cpu.h perf offcpu: Accept allowed sample types only 2022-06-28 11:45:45 -03:00
ordered-events.c tools: Rename __fallthrough to fallthrough 2023-04-06 21:41:00 -03:00
ordered-events.h perf ordered_events: Add ordered_events__last_flush_time() 2022-07-20 11:07:30 -03:00
parse-branch-options.c perf tools: Add branch counter knob 2023-11-09 13:47:50 -03:00
parse-branch-options.h
parse-events.c perf evsel: Refactor tool events 2024-06-10 16:45:10 -07:00
parse-events.h Revert "perf parse-events: Prefer sysfs/JSON hardware events over legacy" 2024-05-26 08:41:34 -03:00
parse-events.l Revert "perf parse-events: Prefer sysfs/JSON hardware events over legacy" 2024-05-26 08:41:34 -03:00
parse-events.y Revert "perf parse-events: Prefer sysfs/JSON hardware events over legacy" 2024-05-26 08:41:34 -03:00
parse-regs-options.c perf parse-regs: Introduce a weak function arch__sample_reg_masks() 2024-02-15 13:48:36 -08:00
parse-regs-options.h
parse-sublevel-options.c
parse-sublevel-options.h
path.c perf path: Make mkpath thread safe, remove 16384 bytes from .bss 2023-05-28 10:24:14 -03:00
path.h
perf_api_probe.c libperf cpumap: Replace usage of perf_cpu_map__new(NULL) with perf_cpu_map__new_online_cpus() 2023-12-12 14:55:13 -03:00
perf_api_probe.h
perf_event_attr_fprintf.c perf tools: Add/use PMU reverse lookup from config to name 2024-03-21 13:53:45 -03:00
perf_regs.c perf parse-regs: Introduce a weak function arch__sample_reg_masks() 2024-02-15 13:48:36 -08:00
perf_regs.h perf parse-regs: Introduce a weak function arch__sample_reg_masks() 2024-02-15 13:48:36 -08:00
perf-hooks-list.h
perf-hooks.c
perf-hooks.h
PERF-VERSION-GEN perf tools: Don't include signature in version strings 2023-01-02 12:34:06 -03:00
pfm.c perf list pfm: Retry supported test with exclude_kernel 2023-09-12 17:32:00 -03:00
pfm.h perf list: List callback support for libpfm 2022-11-24 10:04:52 -03:00
pmu.c perf: pmus: Remove unneeded semicolon 2024-06-28 12:55:29 -07:00
pmu.h perf pmu: Count sys and cpuid JSON events separately 2024-05-11 13:03:13 -03:00
pmu.l perf pmu: Make parser reentrant 2023-04-06 21:40:28 -03:00
pmu.y perf pmu: Add YYDEBUG 2023-09-12 17:47:00 -03:00
pmus.c perf pmus: Fixes always false when compare duplicates aliases 2024-06-25 11:06:20 -07:00
pmus.h perf pmus: Sort/merge/aggregate PMUs like mrvl_ddr_pmu 2024-05-28 11:29:49 -07:00
print_binary.c
print_binary.h
print_insn.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
print_insn.h perf script: Consolidate capstone print functions 2024-04-08 17:42:27 -03:00
print-events.c perf list: Give more details about raw event encodings 2024-03-21 10:41:29 -03:00
print-events.h perf pmus: Skip duplicate PMUs and don't print list suffix by default 2023-08-29 14:16:14 -03:00
probe-event.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
probe-event.h perf probe: Make synthesize_perf_probe_point() private to probe-event.c 2023-08-07 16:40:29 -03:00
probe-file.c
probe-file.h
probe-finder.c bitops: make BYTES_TO_BITS() treewide-available 2024-04-01 10:49:27 +01:00
probe-finder.h perf tools: Add util/debuginfo.[ch] files 2023-11-10 09:03:54 -03:00
pstack.c
pstack.h
python.c perf python: Switch module to linking libraries from building source 2024-06-26 11:08:00 -07:00
rb_resort.h perf trace: Ignore thread hashing in summary 2024-03-03 22:51:18 -08:00
rblist.c
rblist.h
record.c perf cpumap: Clean up use of perf_cpu_map__has_any_cpu_or_is_empty 2024-03-21 10:41:28 -03:00
record.h perf record: Reuse target::initial_delay 2023-03-13 14:52:14 -03:00
rlimit.c perf evsel: Rename evsel__increase_rlimit to rlimit__increase_nofile 2023-10-25 10:02:11 -07:00
rlimit.h perf evsel: Rename evsel__increase_rlimit to rlimit__increase_nofile 2023-10-25 10:02:11 -07:00
rwsem.c perf rwsem: Add debug mode that uses a mutex 2023-10-25 13:35:35 -07:00
rwsem.h perf rwsem: Add debug mode that uses a mutex 2023-10-25 13:35:35 -07:00
s390-cpumcf-kernel.h perf report: Add s390 raw data interpretation for PAI counters 2023-11-15 12:51:53 -05:00
s390-cpumsf-kernel.h
s390-cpumsf.c perf tools: Move 'struct perf_sample' to a separate header file to disentangle headers 2022-10-31 11:06:41 -03:00
s390-cpumsf.h
s390-sample-raw.c perf report: Remove warning on missing raw data for s390 2023-11-27 15:38:37 -03:00
sample-raw.c
sample-raw.h
sample.h perf tools: Add branch counter knob 2023-11-09 13:47:50 -03:00
session.c perf report: Display pregress bar on redirected pipe data 2024-06-27 19:58:07 -07:00
session.h perf hist: Add symbol_conf.skip_empty 2024-06-15 21:04:04 -07:00
setns.c
setup.py perf python: Switch module to linking libraries from building source 2024-06-26 11:08:00 -07:00
sharded_mutex.c perf sharded_mutex: Introduce sharded_mutex 2023-06-20 17:03:43 -07:00
sharded_mutex.h perf sharded_mutex: Introduce sharded_mutex 2023-06-20 17:03:43 -07:00
sideband_evlist.c
smt.c perf expr: Make the online topology accessible globally 2023-02-19 08:03:12 -03:00
smt.h perf expr: Make the online topology accessible globally 2023-02-19 08:03:12 -03:00
sort.c perf report: Fix condition in sort__sym_cmp() 2024-06-25 11:06:20 -07:00
sort.h perf report: Add weight[123] output fields 2024-04-17 12:21:39 -03:00
spark.c
spark.h
srccode.c
srccode.h
srcline.c perf dso: Fix address sanitizer build 2024-07-12 09:38:41 -07:00
srcline.h perf srcline: Add a timeout to reading from addr2line 2023-06-14 18:19:06 -03:00
stat-display.c perf stat: Use field separator in the metric header 2024-06-28 10:58:09 -07:00
stat-shadow.c perf stat: Fix the hard-coded metrics calculation on the hybrid 2024-06-21 09:43:09 -07:00
stat.c perf cpumap: Clean up use of perf_cpu_map__has_any_cpu_or_is_empty 2024-03-21 10:41:28 -03:00
stat.h perf stat: Add new field in stat_config to enable hardware aware grouping 2024-04-18 22:22:51 -03:00
strbuf.c
strbuf.h
stream.c
stream.h
strfilter.c tools: Rename __fallthrough to fallthrough 2023-04-06 21:41:00 -03:00
strfilter.h
string.c perf util: Add a function for replacing characters in a string 2023-09-12 17:32:00 -03:00
string2.h perf util: Add a function for replacing characters in a string 2023-09-12 17:32:00 -03:00
strlist.c
strlist.h
svghelper.c perf cpumap: Use perf_cpu_map__for_each_cpu when possible 2024-03-21 10:41:28 -03:00
svghelper.h
symbol_conf.h perf hist: Add symbol_conf.skip_empty 2024-06-15 21:04:04 -07:00
symbol_fprintf.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
symbol-elf.c perf symbol-elf: dso__load_sym_internal() reference count fixes 2024-05-06 16:07:30 -03:00
symbol-minimal.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
symbol.c perf dso: Fix address sanitizer build 2024-07-12 09:38:41 -07:00
symbol.h perf mem-info: Move mem-info out of mem-events and symbol 2024-05-07 18:06:44 -03:00
symsrc.h perf symbols: Allow for static executables with .plt 2023-02-01 21:51:51 -03:00
synthetic-events.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
synthetic-events.h perf cpumap: Synthetic events and const/static 2022-08-19 12:26:58 -03:00
syscalltbl.c perf trace: Fix iteration of syscall ids in syscalltbl->entries 2024-07-12 09:49:02 -07:00
syscalltbl.h perf trace: Fix iteration of syscall ids in syscalltbl->entries 2024-07-12 09:49:02 -07:00
target.c
target.h perf target: Remove unused hybrid value 2023-05-27 09:38:59 -03:00
term.c
term.h
thread_map.c perf thread_map: Skip exited threads when scanning /proc 2024-02-22 09:11:03 -08:00
thread_map.h perf thread_map: Reduce exposure of libperf internal API 2022-11-16 12:17:15 -03:00
thread-stack.c x86/retpoline,kprobes: Skip optprobe check for indirect jumps with retpolines and IBT 2023-08-14 11:46:51 +02:00
thread-stack.h
thread.c perf thread: Fixes to thread__new() related to initializing comm 2024-05-09 18:15:25 -03:00
thread.h perf machine: Move machine's threads into its own abstraction 2024-03-03 22:51:44 -08:00
threads.c perf threads: Switch from rbtree to hashmap 2024-03-03 22:52:04 -08:00
threads.h perf threads: Reduce table size from 256 to 8 2024-03-03 22:52:13 -08:00
time-utils.c
time-utils.h
tool.h perf record: Add finished init event 2022-06-23 11:54:22 -03:00
top.c perf top: Avoid repeated function calls to perf_cpu_map__nr(). 2023-12-18 21:34:39 -03:00
top.h perf top: Convert to the global annotation_options 2023-12-07 16:47:55 -03:00
topdown.c perf stat: Implement --topdown using json metrics 2023-02-19 08:07:24 -03:00
topdown.h perf stat: Implement --topdown using json metrics 2023-02-19 08:07:24 -03:00
trace-event-info.c perf trace-event-info: Avoid passing NULL value to closedir 2023-10-12 10:01:57 -07:00
trace-event-parse.c perf evsel: Rename get_states() to parse_task_states() and make it public 2024-02-01 22:10:27 -08:00
trace-event-read.c perf build: Use libtraceevent from the system 2022-12-14 11:16:12 -03:00
trace-event-scripting.c perf script: Fix Python support when no libtraceevent 2023-03-15 10:27:07 -03:00
trace-event.c perf build: Use libtraceevent from the system 2022-12-14 11:16:12 -03:00
trace-event.h perf evsel: Rename get_states() to parse_task_states() and make it public 2024-02-01 22:10:27 -08:00
tracepoint.c perf tracepoint: Don't scan all tracepoints to test if one exists 2024-05-09 18:46:43 -03:00
tracepoint.h perf tracepoint: Don't scan all tracepoints to test if one exists 2024-05-09 18:46:43 -03:00
trigger.h
tsc.c
tsc.h perf tsc: Add arch TSC frequency information 2022-07-25 12:28:00 -03:00
units.c
units.h
unwind-libdw.c perf dso: Fix address sanitizer build 2024-07-12 09:38:41 -07:00
unwind-libdw.h
unwind-libunwind-local.c perf dso: Fix address sanitizer build 2024-07-12 09:38:41 -07:00
unwind-libunwind.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
unwind.h perf unwind: Use perf_arch_reg_{ip|sp}() to substitute macros 2023-08-16 08:48:06 -03:00
usage.c perf usage: Move usage strings 2023-04-10 19:20:53 -03:00
util.c perf list: Add scandirat compatibility function 2024-02-22 09:11:41 -08:00
util.h perf list: Add scandirat compatibility function 2024-02-22 09:11:41 -08:00
values.c
values.h perf hist: Move histogram related code to hist.h 2024-04-17 12:21:39 -03:00
vdso.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
vdso.h
zlib.c
zstd.c perf mmap: Lazily initialize zstd streams to save memory when not using it 2023-11-28 14:25:06 -03:00