From: Jiri Olsa <jolsa@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Andrii Nakryiko <andrii@kernel.org>,
dwarves@vger.kernel.org, bpf@vger.kernel.org,
Alexei Starovoitov <ast@kernel.org>,
Andrii Nakryiko <andriin@fb.com>, Yonghong Song <yhs@fb.com>,
Hao Luo <haoluo@google.com>
Subject: [PATCH 1/2] btf_encoder: Generate also .init functions
Date: Fri, 13 Nov 2020 16:12:21 +0100 [thread overview]
Message-ID: <20201113151222.852011-2-jolsa@kernel.org> (raw)
In-Reply-To: <20201113151222.852011-1-jolsa@kernel.org>
Currently we skip functions under .init* sections, Removing the .init*
section check, BTF now contains also functions from .init* sections.
Andrii's explanation from email:
> ... I think we should just drop the __init check and
> include all the __init functions into BTF. There could be cases where
> we'd need to attach BPF programs to __init functions (e.g., bpf_lsm
> security cases), so having BTFs for those FUNCs are necessary as well.
> Ftrace currently disallows that, but it's only because no user-space
> application has a way to attach probes early enough. This might change
> in the future, so there is no need to invent special mechanisms now
> for bpf_iter function preservation. Let's just include all __init
> functions in BTF.
It's over ~2000 functions on my .config:
$ bpftool btf dump file ./vmlinux | grep 'FUNC ' | wc -l
41505
$ bpftool btf dump file /sys/kernel/btf/vmlinux | grep 'FUNC ' | wc -l
39256
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
btf_encoder.c | 43 ++-----------------------------------------
1 file changed, 2 insertions(+), 41 deletions(-)
diff --git a/btf_encoder.c b/btf_encoder.c
index 9b93e9963727..d531651b1e9e 100644
--- a/btf_encoder.c
+++ b/btf_encoder.c
@@ -29,10 +29,6 @@
struct funcs_layout {
unsigned long mcount_start;
unsigned long mcount_stop;
- unsigned long init_begin;
- unsigned long init_end;
- unsigned long init_bpf_begin;
- unsigned long init_bpf_end;
unsigned long mcount_sec_idx;
};
@@ -104,16 +100,6 @@ static int addrs_cmp(const void *_a, const void *_b)
return *a < *b ? -1 : 1;
}
-static bool is_init(struct funcs_layout *fl, unsigned long addr)
-{
- return addr >= fl->init_begin && addr < fl->init_end;
-}
-
-static bool is_bpf_init(struct funcs_layout *fl, unsigned long addr)
-{
- return addr >= fl->init_bpf_begin && addr < fl->init_bpf_end;
-}
-
static int filter_functions(struct btf_elf *btfe, struct funcs_layout *fl)
{
unsigned long *addrs, count, offset, i;
@@ -155,18 +141,11 @@ static int filter_functions(struct btf_elf *btfe, struct funcs_layout *fl)
/*
* Let's got through all collected functions and filter
- * out those that are not in ftrace and init code.
+ * out those that are not in ftrace.
*/
for (i = 0; i < functions_cnt; i++) {
struct elf_function *func = &functions[i];
- /*
- * Do not enable .init section functions,
- * but keep .init.bpf.preserve_type functions.
- */
- if (is_init(fl, func->addr) && !is_bpf_init(fl, func->addr))
- continue;
-
/* Make sure function is within ftrace addresses. */
if (bsearch(&func->addr, addrs, count, sizeof(addrs[0]), addrs_cmp)) {
/*
@@ -493,29 +472,11 @@ static void collect_symbol(GElf_Sym *sym, struct funcs_layout *fl)
if (!fl->mcount_stop &&
!strcmp("__stop_mcount_loc", elf_sym__name(sym, btfe->symtab)))
fl->mcount_stop = sym->st_value;
-
- if (!fl->init_begin &&
- !strcmp("__init_begin", elf_sym__name(sym, btfe->symtab)))
- fl->init_begin = sym->st_value;
-
- if (!fl->init_end &&
- !strcmp("__init_end", elf_sym__name(sym, btfe->symtab)))
- fl->init_end = sym->st_value;
-
- if (!fl->init_bpf_begin &&
- !strcmp("__init_bpf_preserve_type_begin", elf_sym__name(sym, btfe->symtab)))
- fl->init_bpf_begin = sym->st_value;
-
- if (!fl->init_bpf_end &&
- !strcmp("__init_bpf_preserve_type_end", elf_sym__name(sym, btfe->symtab)))
- fl->init_bpf_end = sym->st_value;
}
static int has_all_symbols(struct funcs_layout *fl)
{
- return fl->mcount_start && fl->mcount_stop &&
- fl->init_begin && fl->init_end &&
- fl->init_bpf_begin && fl->init_bpf_end;
+ return fl->mcount_start && fl->mcount_stop;
}
static int collect_symbols(struct btf_elf *btfe, bool collect_percpu_vars)
--
2.26.2
next prev parent reply other threads:[~2020-11-13 15:12 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-13 15:12 [PATCHv2 0/2] btf_encoder: Fix functions BTF data generation Jiri Olsa
2020-11-13 15:12 ` Jiri Olsa [this message]
2020-11-13 15:12 ` [PATCH 2/2] btf_encoder: Fix function generation Jiri Olsa
2020-11-13 17:28 ` Arnaldo Carvalho de Melo
2020-11-13 18:11 ` Jiri Olsa
2020-11-13 20:56 ` Andrii Nakryiko
2020-11-13 21:29 ` Jiri Olsa
2020-11-13 21:43 ` Andrii Nakryiko
2020-11-16 13:50 ` Arnaldo Carvalho de Melo
2020-11-16 18:21 ` Jiri Olsa
2020-11-16 19:15 ` Arnaldo Carvalho de Melo
2020-11-16 19:22 ` Arnaldo Carvalho de Melo
2020-11-16 19:40 ` Jiri Olsa
2020-11-16 19:44 ` Arnaldo Carvalho de Melo
-- strict thread matches above, loose matches on Subject: below --
2020-11-14 22:38 [PATCHv3 0/2] btf_encoder: Fix functions BTF data generation Jiri Olsa
2020-11-14 22:38 ` [PATCH 1/2] btf_encoder: Generate also .init functions Jiri Olsa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201113151222.852011-2-jolsa@kernel.org \
--to=jolsa@kernel.org \
--cc=acme@kernel.org \
--cc=andrii@kernel.org \
--cc=andriin@fb.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=dwarves@vger.kernel.org \
--cc=haoluo@google.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox