From patchwork Sat Mar 2 16:50:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yonghong Song X-Patchwork-Id: 13579566 X-Patchwork-Delegate: bpf@iogearbox.net Received: from 66-220-155-178.mail-mxout.facebook.com (66-220-155-178.mail-mxout.facebook.com [66.220.155.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F7935231 for ; Sat, 2 Mar 2024 16:50:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=66.220.155.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709398237; cv=none; b=qug0L2jL/dghNFKY+Yah3pycmqH3Q/echqUXlTO9ODZWlhwOagqSEFK6CIOMhsnwSuF1U0XHrBzcqeMJfhakCS5/JZO2aFTHLaq+7dHm//4VpeXgNg5SbJgNv2Ty9J4AJ09V4XeM5POFRbv6j+oEhmI8aX8+9v0tjdsPOsW2rbc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709398237; c=relaxed/simple; bh=G2o0WfBT96x1x5a71jPIAJ+Cpd7PQAQW6C4cTQyizgY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=D/gIZezR4tjVrDYyWqIdMFmORNGLviz4jjvr8jtHfNFzqoy/uXT7XHLPotp7uTfIQX9WJSTzxG+A9g+/cAs+3RwdQW85NPJKKMGSCdokTA9BA0FaiqcYa+VLjvVBs4Mw+fNJB8vY7RtM47CWKcOEq+DnyIx+0r8mPl3B8809XmM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev; spf=fail smtp.mailfrom=linux.dev; arc=none smtp.client-ip=66.220.155.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=linux.dev Received: by devbig309.ftw3.facebook.com (Postfix, from userid 128203) id AA20611F11B4; Sat, 2 Mar 2024 08:50:22 -0800 (PST) From: Yonghong Song To: bpf@vger.kernel.org Cc: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , kernel-team@fb.com, Martin KaFai Lau Subject: [PATCH bpf-next 1/4] selftests/bpf: Replace CHECK with ASSERT macros for ksyms test Date: Sat, 2 Mar 2024 08:50:22 -0800 Message-ID: <20240302165022.1627562-1-yonghong.song@linux.dev> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240302165017.1627295-1-yonghong.song@linux.dev> References: <20240302165017.1627295-1-yonghong.song@linux.dev> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net I am going to modify ksyms test later so take this opportunity to replace old CHECK macros with new ASSERT macros. No functionality change. Signed-off-by: Yonghong Song --- .../testing/selftests/bpf/prog_tests/ksyms.c | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/ksyms.c b/tools/testing/selftests/bpf/prog_tests/ksyms.c index b295969b263b..e081f8bf3f17 100644 --- a/tools/testing/selftests/bpf/prog_tests/ksyms.c +++ b/tools/testing/selftests/bpf/prog_tests/ksyms.c @@ -5,8 +5,6 @@ #include "test_ksyms.skel.h" #include -static int duration; - void test_ksyms(void) { const char *btf_path = "/sys/kernel/btf/vmlinux"; @@ -18,43 +16,45 @@ void test_ksyms(void) int err; err = kallsyms_find("bpf_link_fops", &link_fops_addr); - if (CHECK(err == -EINVAL, "kallsyms_fopen", "failed to open: %d\n", errno)) + if (err == -EINVAL) { + ASSERT_TRUE(false, "kallsyms_fopen for bpf_link_fops"); return; - if (CHECK(err == -ENOENT, "ksym_find", "symbol 'bpf_link_fops' not found\n")) + } + if (err == -ENOENT) { + ASSERT_TRUE(false, "ksym_find for bpf_link_fops"); return; + } err = kallsyms_find("__per_cpu_start", &per_cpu_start_addr); - if (CHECK(err == -EINVAL, "kallsyms_fopen", "failed to open: %d\n", errno)) + if (err == -EINVAL) { + ASSERT_TRUE(false, "kallsyms_fopen for __per_cpu_start"); return; - if (CHECK(err == -ENOENT, "ksym_find", "symbol 'per_cpu_start' not found\n")) + } + if (err == -ENOENT) { + ASSERT_TRUE(false, "ksym_find for __per_cpu_start"); return; + } - if (CHECK(stat(btf_path, &st), "stat_btf", "err %d\n", errno)) + if (!ASSERT_OK(stat(btf_path, &st), "stat_btf")) return; btf_size = st.st_size; skel = test_ksyms__open_and_load(); - if (CHECK(!skel, "skel_open", "failed to open and load skeleton\n")) + if (!ASSERT_OK_PTR(skel, "test_ksyms__open_and_load")) return; err = test_ksyms__attach(skel); - if (CHECK(err, "skel_attach", "skeleton attach failed: %d\n", err)) + if (!ASSERT_OK(err, "test_ksyms__attach")) goto cleanup; /* trigger tracepoint */ usleep(1); data = skel->data; - CHECK(data->out__bpf_link_fops != link_fops_addr, "bpf_link_fops", - "got 0x%llx, exp 0x%llx\n", - data->out__bpf_link_fops, link_fops_addr); - CHECK(data->out__bpf_link_fops1 != 0, "bpf_link_fops1", - "got %llu, exp %llu\n", data->out__bpf_link_fops1, (__u64)0); - CHECK(data->out__btf_size != btf_size, "btf_size", - "got %llu, exp %llu\n", data->out__btf_size, btf_size); - CHECK(data->out__per_cpu_start != per_cpu_start_addr, "__per_cpu_start", - "got %llu, exp %llu\n", data->out__per_cpu_start, - per_cpu_start_addr); + ASSERT_EQ(data->out__bpf_link_fops, link_fops_addr, "bpf_link_fops"); + ASSERT_EQ(data->out__bpf_link_fops1, 0, "bpf_link_fops1"); + ASSERT_EQ(data->out__btf_size, btf_size, "btf_size"); + ASSERT_EQ(data->out__per_cpu_start, per_cpu_start_addr, "__per_cpu_start"); cleanup: test_ksyms__destroy(skel); From patchwork Sat Mar 2 16:50:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yonghong Song X-Patchwork-Id: 13579567 X-Patchwork-Delegate: bpf@iogearbox.net Received: from 66-220-155-178.mail-mxout.facebook.com (66-220-155-178.mail-mxout.facebook.com [66.220.155.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1BB0520DC5 for ; Sat, 2 Mar 2024 16:50:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=66.220.155.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709398241; cv=none; b=i3/TIesE10gbvhTS+JyWUvVUvDRZVfP0yNxD9VQVrLzuEZ5BINaXL13pO5ooDb/HA5DUJ9Q5w3TY5pf9HRjF+Q5XJzXPk7VbwFj6waFPMp/QmkyDNbNefF1c5nfe9fmRZwF6cwbtHAoyk+GZ2cy6LoN0ZVcnQQB08f/+BNA2nkc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709398241; c=relaxed/simple; bh=r8v/NSiCBB8CdbYb+ClQEZtGaq+Dewk9RsQ7YoaddyQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BigXUR6nJm3sX4IvcK2jq+MTUv7AsL1pwLCijLNYjHHyqaWH7+fDba3tEOaYH89Bg2ylV6ig0xkU7RlQzJ4PybhBnk2fj9t7seJFxkVA3gy7s4xyMoeLr2gzsySaO9yY71w39EHtJ/D52LUjh8S0nVncVjmmwbEseJ5W8YmXEQg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev; spf=fail smtp.mailfrom=linux.dev; arc=none smtp.client-ip=66.220.155.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=linux.dev Received: by devbig309.ftw3.facebook.com (Postfix, from userid 128203) id 1BBC411F11FD; Sat, 2 Mar 2024 08:50:27 -0800 (PST) From: Yonghong Song To: bpf@vger.kernel.org Cc: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , kernel-team@fb.com, Martin KaFai Lau Subject: [PATCH bpf-next 2/4] selftests/bpf: Add check_lto_kernel() helper Date: Sat, 2 Mar 2024 08:50:27 -0800 Message-ID: <20240302165027.1628051-1-yonghong.song@linux.dev> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240302165017.1627295-1-yonghong.song@linux.dev> References: <20240302165017.1627295-1-yonghong.song@linux.dev> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Add check_lto_kernel() helper to detect whether the underlying kernel enabled CONFIG_LTO or not. The function check_lto_kernel() can be used by selftests to handle some lto-specific situations. The code is heavily borrowed from libbpf function bpf_object__read_kconfig_file(). Signed-off-by: Yonghong Song --- tools/testing/selftests/bpf/testing_helpers.c | 47 +++++++++++++++++++ tools/testing/selftests/bpf/testing_helpers.h | 1 + 2 files changed, 48 insertions(+) diff --git a/tools/testing/selftests/bpf/testing_helpers.c b/tools/testing/selftests/bpf/testing_helpers.c index 28b6646662af..3f74f73843cf 100644 --- a/tools/testing/selftests/bpf/testing_helpers.c +++ b/tools/testing/selftests/bpf/testing_helpers.c @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include #include #include "test_progs.h" @@ -475,3 +477,48 @@ bool is_jit_enabled(void) return enabled; } + +int check_lto_kernel(void) +{ + static int check_lto = 2; + char buf[PATH_MAX]; + struct utsname uts; + gzFile file; + int len; + + if (check_lto != 2) + return check_lto; + + uname(&uts); + len = snprintf(buf, PATH_MAX, "/boot/config-%s", uts.release); + if (len < 0) { + check_lto = -EINVAL; + goto out; + } else if (len >= PATH_MAX) { + check_lto = -ENAMETOOLONG; + goto out; + } + + /* gzopen also accepts uncompressed files. */ + file = gzopen(buf, "re"); + if (!file) + file = gzopen("/proc/config.gz", "re"); + + if (!file) { + check_lto = -ENOENT; + goto out; + } + + check_lto = 0; + while (gzgets(file, buf, sizeof(buf))) { + /* buf also contains '\n', skip it during comparison. */ + if (!strncmp(buf, "CONFIG_LTO=y", 12)) { + check_lto = 1; + break; + } + } + + gzclose(file); +out: + return check_lto; +} diff --git a/tools/testing/selftests/bpf/testing_helpers.h b/tools/testing/selftests/bpf/testing_helpers.h index d55f6ab12433..57683b3a1280 100644 --- a/tools/testing/selftests/bpf/testing_helpers.h +++ b/tools/testing/selftests/bpf/testing_helpers.h @@ -55,5 +55,6 @@ struct bpf_insn; int get_xlated_program(int fd_prog, struct bpf_insn **buf, __u32 *cnt); int testing_prog_flags(void); bool is_jit_enabled(void); +int check_lto_kernel(void); #endif /* __TESTING_HELPERS_H */ From patchwork Sat Mar 2 16:50:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yonghong Song X-Patchwork-Id: 13579568 X-Patchwork-Delegate: bpf@iogearbox.net Received: from 69-171-232-180.mail-mxout.facebook.com (69-171-232-180.mail-mxout.facebook.com [69.171.232.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C171022636 for ; Sat, 2 Mar 2024 16:50:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=69.171.232.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709398249; cv=none; b=DWn+AUFr8EnD12DNlmI0Xd/8ViYlib5DF9EtrwzWUXZEkfL8sYneY9Jxvw/kgusGacyl3uTy/HGsjiZWJORdwNhrt22UJ+LDNKa1ZzHT9O7LpuOpMlt4AeYIiD4FIkPyNm02Pmo8VE7qzZHRydCcPN9RhiSpB9oaBkTcnB19/ig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709398249; c=relaxed/simple; bh=SoTVYL5OCPTtytBCC3p5VbgJZZaUvJ7rSwHVWrla+Jg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dqZZKRMZRjNkLD25nuhRJEG1WL5+6Z6XMB/0G2zi1Syuo5HBMbRkEloW/Pdn7gQ3ZF1/7YBe8+LZXvOz+Rz9DginVEU9q/gDLVaHqcE1S+9r2bnvxyygaortnSQbMZjh/60ng6KvLYJ0jx9/+GnVOVWdpyaiFL8TY8cP7CDKdFI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev; spf=fail smtp.mailfrom=linux.dev; arc=none smtp.client-ip=69.171.232.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=linux.dev Received: by devbig309.ftw3.facebook.com (Postfix, from userid 128203) id 34C0211F1213; Sat, 2 Mar 2024 08:50:33 -0800 (PST) From: Yonghong Song To: bpf@vger.kernel.org Cc: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , kernel-team@fb.com, Martin KaFai Lau Subject: [PATCH bpf-next 3/4] selftests/bpf: Fix possible ksyms test failure with LTO kernel Date: Sat, 2 Mar 2024 08:50:33 -0800 Message-ID: <20240302165033.1628421-1-yonghong.song@linux.dev> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240302165017.1627295-1-yonghong.song@linux.dev> References: <20240302165017.1627295-1-yonghong.song@linux.dev> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net In my locally build clang LTO kernel (enabling CONFIG_LTO and CONFIG_LTO_CLANG_THIN), ksyms test failed like: test_ksyms:PASS:kallsyms_fopen 0 nsec test_ksyms:FAIL:ksym_find symbol 'bpf_link_fops' not found #118 ksyms:FAIL The reason is that 'bpf_link_fops' is renamed to bpf_link_fops.llvm.8325593422554671469 Due to cross-file inlining, the static variable 'bpf_link_fops' in syscall.c is used by a function in another file. To avoid potential duplicated names, the llvm added suffix '.llvm.'. To fix the failure, we can skip this test with LTO kernel if the symbol 'bpf_link_fops' is not found in kallsyms. After this patch, with the same LTO kernel: #118 ksyms:SKIP Signed-off-by: Yonghong Song --- tools/testing/selftests/bpf/prog_tests/ksyms.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/prog_tests/ksyms.c b/tools/testing/selftests/bpf/prog_tests/ksyms.c index e081f8bf3f17..cd81f190c5d7 100644 --- a/tools/testing/selftests/bpf/prog_tests/ksyms.c +++ b/tools/testing/selftests/bpf/prog_tests/ksyms.c @@ -21,7 +21,11 @@ void test_ksyms(void) return; } if (err == -ENOENT) { - ASSERT_TRUE(false, "ksym_find for bpf_link_fops"); + /* bpf_link_fops might be renamed to bpf_link_fops.llvm. in LTO kernel. */ + if (check_lto_kernel() == 1) + test__skip(); + else + ASSERT_TRUE(false, "ksym_find for bpf_link_fops"); return; } From patchwork Sat Mar 2 16:50:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yonghong Song X-Patchwork-Id: 13579569 X-Patchwork-Delegate: bpf@iogearbox.net Received: from 69-171-232-181.mail-mxout.facebook.com (69-171-232-181.mail-mxout.facebook.com [69.171.232.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C6F2A22F0D for ; Sat, 2 Mar 2024 16:50:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=69.171.232.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709398249; cv=none; b=RHAD4nczh6UUF97d5Tyv0WAzQsIlhHVM8gzvx9gOKWGanukzBPuc10EXEARwb2kvjygJzSFxNrhDsagpdKXCnred1Nplen6XDgAfVPmk0qpP5sTWgi4kQ+QT+a+R8a0mU2QBbrI8TVXSZtda6mbfFqU6fCOVUhQOXyYbiu5Q2wY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709398249; c=relaxed/simple; bh=BhYRMw/JbHPDeiLEkih1Uj7FeJ6A2IBeH3+doHNoIwU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dsxuSJ58ykRqwZwr3YV3L8D+993d1AmKaNR8MOTAiNj4JA+1YeEv0mrmLVsUQK/vICxdbZoulljJx2/FFeO04RSMUbnd6C+odo0Y+hFPs5nBhUBRUiWBHMffINaOzRLVO+DpBsuGQWtDzqAyfqbyDsg2Yimjaz1ajbN8FCVw0Y0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev; spf=fail smtp.mailfrom=linux.dev; arc=none smtp.client-ip=69.171.232.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=linux.dev Received: by devbig309.ftw3.facebook.com (Postfix, from userid 128203) id 4D3D711F1241; Sat, 2 Mar 2024 08:50:38 -0800 (PST) From: Yonghong Song To: bpf@vger.kernel.org Cc: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , kernel-team@fb.com, Martin KaFai Lau Subject: [PATCH bpf-next 4/4] selftests/bpf: Fix possible kprobe_multi_bench_attach test failure with LTO kernel Date: Sat, 2 Mar 2024 08:50:38 -0800 Message-ID: <20240302165038.1628632-1-yonghong.song@linux.dev> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240302165017.1627295-1-yonghong.song@linux.dev> References: <20240302165017.1627295-1-yonghong.song@linux.dev> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net In my locally build clang LTO kernel (enabling CONFIG_LTO and CONFIG_LTO_CLANG_THIN), kprobe_multi_bench_attach/kernel subtest failed like: test_kprobe_multi_bench_attach:PASS:get_syms 0 nsec test_kprobe_multi_bench_attach:PASS:kprobe_multi_empty__open_and_load 0 nsec libbpf: prog 'test_kprobe_empty': failed to attach: No such process test_kprobe_multi_bench_attach:FAIL:bpf_program__attach_kprobe_multi_opts unexpected error: -3 #114/1 kprobe_multi_bench_attach/kernel:FAIL There are multiple symbols in /sys/kernel/debug/tracing/available_filter_functions are renamed in kallsyms due to cross file inlining. One example is for static function __access_remote_vm in mm/memory.c. In a non-LTO kernel, we have the following call stack: ptrace_access_vm (global, kernel/ptrace.c) access_remote_vm (global, mm/memory.c) __access_remote_vm (static, mm/memory.c) With LTO kernel, it is possible that access_remote_vm() is inlined by ptrace_access_vm(). So we end up with the following call stack: ptrace_access_vm (global, kernel/ptrace.c) __access_remote_vm (static, mm/memory.c) The compiler renames __access_remote_vm to __access_remote_vm.llvm. to prevent potential name collision. This patch removed __access_remote_vm and other similar functions from kprobe_multi_attach by checking if the symbol like __access_remote_vm does not exist in kallsyms with LTO kernel. The test succeeded after this change: #114/1 kprobe_multi_bench_attach/kernel:OK Signed-off-by: Yonghong Song --- tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c index 05000810e28e..2aad5f9cdb84 100644 --- a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c +++ b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c @@ -341,10 +341,15 @@ static int get_syms(char ***symsp, size_t *cntp, bool kernel) size_t cap = 0, cnt = 0, i; char *name = NULL, **syms = NULL; struct hashmap *map; + bool lto_kernel; char buf[256]; FILE *f; int err = 0; + lto_kernel = kernel && check_lto_kernel() == 1; + if (lto_kernel && !ASSERT_OK(load_kallsyms(), "load_kallsyms")) + return -EINVAL; + /* * The available_filter_functions contains many duplicates, * but other than that all symbols are usable in kprobe multi @@ -393,6 +398,8 @@ static int get_syms(char ***symsp, size_t *cntp, bool kernel) if (!strncmp(name, "__ftrace_invalid_address__", sizeof("__ftrace_invalid_address__") - 1)) continue; + if (lto_kernel && ksym_get_addr(name) == 0) + continue; err = hashmap__add(map, name, 0); if (err == -EEXIST) {