Go to file
Jiri Olsa 8e1f8c904e btf_encoder: Match ftrace addresses within ELF functions
Currently when processing a DWARF function, we check its entrypoint
against ftrace addresses, assuming that the ftrace address matches with
the function's entrypoint.

This is not the case on some architectures as reported by Nathan
when building kernel on arm [1].

Fix the check to take into account the whole function, not just the
entrypoint.

Most of the is_ftrace_func code was contributed by Andrii.

[1] https://lore.kernel.org/bpf/20210209034416.GA1669105@ubuntu-m3-large-x86/

Committer notes:

Test comments by Nathan:

"I did several builds with CONFIG_DEBUG_INFO_BTF enabled (arm64, ppc64le,
 and x86_64) and saw no build errors. I did not do any runtime testing."

Test comments by Sedat:

Linux v5.11-rc7+ and LLVM/Clang v12.0.0-rc1 on x86 (64bit)

Reported-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andrii Nakryiko <andriin@fb.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Hao Luo <haoluo@google.com>
Cc: John Fastabend <john.fastabend@gmail.com>
Cc: KP Singh <kpsingh@chromium.org>
Cc: Martin KaFai Lau <kafai@fb.com>
Cc: Song Liu <songliubraving@fb.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
Cc: netdev@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-02-17 09:44:25 -03:00
cmake/modules cmake: libebl was merged into libdw 2020-02-03 08:42:13 +01:00
lib Revert "libbpf: allow to use packaged version" 2021-02-03 21:45:00 -03:00
man-pages pahole: Add heuristic to auto-add --btf_base for /sys/kernel/btf/ prefixed files 2020-11-18 11:10:23 -03:00
ostra ostra: Initial python3 conversion 2019-04-23 12:02:22 -03:00
rpm/SPECS pahole: Prep 1.20 2021-02-03 21:45:01 -03:00
.gitignore pahole: Add build dir, config.h to .gitignore 2019-02-11 12:55:46 -03:00
.gitmodules pahole: add libbpf as submodule under lib/bpf 2019-02-11 12:56:40 -03:00
CMakeLists.txt pahole: Prep 1.20 2021-02-03 21:45:01 -03:00
COPYING [LICENSE]: Add COPYING file and add missing license info on some files 2007-12-17 14:15:42 -02:00
MANIFEST pahole: Prep 1.20 2021-02-03 21:45:01 -03:00
NEWS pahole: Prep 1.20 2021-02-03 21:45:01 -03:00
README [CMAKE]: Make the default install prefix be /usr/local 2007-04-19 18:01:47 -03:00
README.DEBUG README.DEBUG: Add an extra step to make the instructions cut'n'exec 2017-12-14 14:15:54 -03:00
README.btf v1.13: New release 2019-04-16 16:13:19 -03:00
README.cross README: Add instructions to do a cross build 2020-08-17 09:52:02 -03:00
README.ctracer ctracer: update README.ctracer, f9 has the dwarves 2008-10-29 08:54:53 -02:00
README.tarball docs: Add command line to generate tarball with a prefix 2020-03-12 16:55:15 -03:00
btf_encoder.c btf_encoder: Match ftrace addresses within ELF functions 2021-02-17 09:44:25 -03:00
btf_encoder.h btf_encoder: Allow disabling BTF var encoding. 2020-09-21 17:00:16 -03:00
btf_loader.c Revert "libbpf: allow to use packaged version" 2021-02-03 21:45:00 -03:00
btfdiff v1.13: New release 2019-04-16 16:13:19 -03:00
changes-v1.13 v1.13: New release 2019-04-16 16:13:19 -03:00
changes-v1.16 dwarves: Prep v1.16 2019-12-16 11:43:53 -03:00
changes-v1.17 dwarves: Prep v1.17 2020-03-13 16:36:02 -03:00
changes-v1.18 dwarves: Prep v1.18 2020-10-02 17:29:59 -03:00
changes-v1.19 dwarves: Prep v1.19 2020-11-23 09:52:44 -03:00
changes-v1.20 pahole: Prep 1.20 2021-02-03 21:45:01 -03:00
codiff.c codiff: Remove unused filenames variable 2019-07-01 16:41:02 -03:00
config.h.cmake [DWARVES] Fixes a FIXME relating to a missing elf (libdw) symbol check. 2008-02-12 21:08:49 -02:00
ctf.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
ctf_encoder.c strings: use BTF's string APIs for strings management 2020-10-20 17:17:51 -03:00
ctf_encoder.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
ctf_loader.c dwarves: Move the common initialization of fields for 'struct type' 2020-08-05 15:16:19 -03:00
ctfdwdiff ctfdwdiff: Don't ask for variables and inline expansions in pfunct 2009-03-31 19:21:46 -03:00
ctracer.c dwarves: Adopt tag__is_base_type() from ctrace.c 2020-06-24 14:14:33 -03:00
dtagnames.c dtagnames: Stop using the deprecated mallinfo() function 2021-02-02 09:38:46 -03:00
dutil.c elf_symtab: Handle SHN_XINDEX index in elf_section_by_name() 2021-01-25 14:25:01 -03:00
dutil.h btf_encoder: Detect kernel module ftrace addresses 2020-12-07 12:53:11 -03:00
dwarf_loader.c dwarf_loader: Support DWARF_TAG_call_site{_parameter} also in die__process_inline_expansion 2021-02-02 18:34:38 -03:00
dwarves.c dwarves: Make enum prefix search more robust 2021-02-02 09:30:00 -03:00
dwarves.h dwarf_loader: Support DW_AT_data_bit_offset 2021-01-28 14:11:02 -03:00
dwarves_emit.c emit: Remove unused 'is_pointer' variable 2019-07-02 10:27:16 -03:00
dwarves_emit.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
dwarves_fprintf.c fprintf: Make typedef__fprintf print anonymous enums 2020-11-19 11:41:18 -03:00
dwarves_reorganize.c reorganize: Enclose bitfield routines under ifdef 2019-07-02 12:28:50 -03:00
dwarves_reorganize.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
elf_symtab.c bpf_encoder: Translate SHN_XINDEX in symbol's st_shndx values 2021-01-26 22:36:36 -03:00
elf_symtab.h bpf_encoder: Translate SHN_XINDEX in symbol's st_shndx values 2021-01-26 22:36:36 -03:00
elfcreator.c elfcreator: Address initialization warning emitted by 'gcc -O6' 2019-12-16 11:19:47 -03:00
elfcreator.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
fullcircle v1.13: New release 2019-04-16 16:13:19 -03:00
gobuffer.c gobuffer: Do not crash on object without any public symbols 2020-01-17 13:54:15 -03:00
gobuffer.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
hash.h dwarf_loader: Use a better hashing function, from libbpf 2021-02-12 09:35:53 -03:00
libbtf.c btf_encoder: Funnel ELF error reporting through a macro 2021-02-09 09:29:33 -03:00
libbtf.h Revert "libbpf: allow to use packaged version" 2021-02-03 21:45:00 -03:00
libctf.c strings: use BTF's string APIs for strings management 2020-10-20 17:17:51 -03:00
libctf.h strings: use BTF's string APIs for strings management 2020-10-20 17:17:51 -03:00
list.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
pahole.c Revert "libbpf: allow to use packaged version" 2021-02-03 21:45:00 -03:00
pahole_strings.h Revert "libbpf: allow to use packaged version" 2021-02-03 21:45:00 -03:00
pdwtags.c core: Allow the loaders to advertise features they have 2019-04-15 14:45:27 -03:00
pfunct.c pfunct: Use load stealer to speed up --class 2020-11-16 08:15:23 -03:00
pglobal.c pglobal: Allow passing the format path specifier, to use with BTF 2019-10-24 08:17:16 -03:00
prefcnt.c prefcnt: Avoid ambiguous else with for_each macro 2019-07-02 12:31:57 -03:00
rbtree.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
rbtree.h Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
regtest regtest: Accept --diff instad of plain 'diff' as long option 2012-05-14 19:36:58 -03:00
scncopy.c Adopt SPDX-License-Identifier 2019-01-18 15:41:48 -03:00
strings.c Revert "libbpf: allow to use packaged version" 2021-02-03 21:45:00 -03:00
syscse.c dwarves: Make function__for_each_parameter receive 'cu' arg 2020-01-09 14:16:52 -03:00

README

Build instructions:

1. install cmake
2. mkdir build
3. cd build
4. cmake -D__LIB=lib ..
5. make install

Default is to be installed on /usr/local, see rpm spec file for
installing on other places.

Known to work scenarios:

Mandriva Cooker:

cmake 2.4.5-1mdv2007.1
libelfutils1-devel 0.123-1mdv2007.1

Debian Unstable:

cmake 2.4.5-1
libdw-dev 0.123-2

Fedora Core 6:

cmake 2.4.5-2.fc6
elfutils-devel 0.126-1.fc6