From: Tony Ambardar <tony.ambardar@gmail.com>
To: Eduard Zingerman <eddyz87@gmail.com>
Cc: bpf@vger.kernel.org, linux-kselftest@vger.kernel.org,
Andrii Nakryiko <andrii@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Martin KaFai Lau <martin.lau@linux.dev>,
Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>, Mykola Lysenko <mykolal@fb.com>,
Shuah Khan <shuah@kernel.org>,
Ilya Leoshkevich <iii@linux.ibm.com>,
Quentin Monnet <qmo@kernel.org>
Subject: Re: [PATCH bpf-next v4 3/8] libbpf: Fix output .symtab byte-order during linking
Date: Sat, 31 Aug 2024 22:59:41 -0700 [thread overview]
Message-ID: <ZtQCzdw9CkU1h5Uf@kodidev-ubuntu> (raw)
In-Reply-To: <1ed968ab238b156c38550cfc3c585ded7d13529f.camel@gmail.com>
On Fri, Aug 30, 2024 at 03:15:10PM -0700, Eduard Zingerman wrote:
> On Fri, 2024-08-30 at 00:29 -0700, Tony Ambardar wrote:
> > Object linking output data uses the default ELF_T_BYTE type for '.symtab'
> > section data, which disables any libelf-based translation. Explicitly set
> > the ELF_T_SYM type for output to restore libelf's byte-order conversion,
> > noting that input '.symtab' data is already correctly translated.
> >
> > Fixes: faf6ed321cf6 ("libbpf: Add BPF static linker APIs")
> > Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
> > ---
> > tools/lib/bpf/linker.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/tools/lib/bpf/linker.c b/tools/lib/bpf/linker.c
> > index 9cd3d4109788..7489306cd6f7 100644
> > --- a/tools/lib/bpf/linker.c
> > +++ b/tools/lib/bpf/linker.c
> > @@ -396,6 +396,8 @@ static int init_output_elf(struct bpf_linker *linker, const char *file)
> > pr_warn_elf("failed to create SYMTAB data");
> > return -EINVAL;
> > }
> > + /* Ensure libelf translates byte-order of symbol records */
> > + sec->data->d_type = ELF_T_SYM;
>
> I tried grepping through libelf to find out how this affects things,
> and identified that it is primarily used by elfutils/libelf/gelf_xlatetof.c:gelf_xlatetof(),
> which is an interface function and we don't seem to use it.
> It is also used by dwfl_* functions while applying relocations,
> but we don't use that either.
>
Right, gelf_xlatetof() is exposed for _explicit_ user conversions, but
libelf still does translations implicitly for known section record types,
based on the ELF file's byte-order metadata. The idea is that ELF data
loaded in memory will be native-endianness for accessibility, but output
in the original endianness at rest/in a file, all transparently.
We try to follow the same idea in libbpf when opening and writing .BTF
and .BTF.ext data (e.g. see the *_raw_data() funcs).
> Could you please elaborate a bit on effects of this change?
>
When linking objects of either endianness, libelf can translate the input
files based on ELF headers (endianness and type ELF_T_SYM) and allows us to
process .symtab data. When writing out the linked file however, we create a
new .symtab section in init_output_elf() but leave it as default ELT_T_BYTE
type, which undergoes no translation and leaves .symtab always in native
byte-order regardless of target endianness.
See also 61e8aeda9398 ("bpf: Fix libelf endian handling in resolv_btfids")
and related links for a similar example and explanations. Hope that helps.
Cheers,
Tony
> >
> > str_off = strset__add_str(linker->strtab_strs, sec->sec_name);
> > if (str_off < 0)
>
next prev parent reply other threads:[~2024-09-01 5:59 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-30 7:29 [PATCH bpf-next v4 0/8] libbpf, selftests/bpf: Support cross-endian usage Tony Ambardar
2024-08-30 7:29 ` [PATCH bpf-next v4 1/8] libbpf: Improve log message formatting Tony Ambardar
2024-08-30 7:29 ` [PATCH bpf-next v4 2/8] libbpf: Fix header comment typos for BTF.ext Tony Ambardar
2024-08-30 7:29 ` [PATCH bpf-next v4 3/8] libbpf: Fix output .symtab byte-order during linking Tony Ambardar
2024-08-30 22:15 ` Eduard Zingerman
2024-09-01 5:59 ` Tony Ambardar [this message]
2024-08-30 7:29 ` [PATCH bpf-next v4 4/8] libbpf: Support BTF.ext loading and output in either endianness Tony Ambardar
2024-08-30 21:14 ` Andrii Nakryiko
2024-09-02 8:19 ` Tony Ambardar
2024-09-04 19:55 ` Andrii Nakryiko
2024-08-31 0:15 ` Eduard Zingerman
2024-09-16 8:20 ` Tony Ambardar
2024-08-30 7:29 ` [PATCH bpf-next v4 5/8] libbpf: Support opening bpf objects of " Tony Ambardar
2024-08-30 21:25 ` Andrii Nakryiko
2024-08-31 1:26 ` Eduard Zingerman
2024-09-01 6:05 ` Tony Ambardar
2024-09-01 6:03 ` Tony Ambardar
2024-08-31 1:16 ` Eduard Zingerman
2024-09-01 6:04 ` Tony Ambardar
2024-08-30 7:29 ` [PATCH bpf-next v4 6/8] libbpf: Support linking " Tony Ambardar
2024-08-30 21:25 ` Andrii Nakryiko
2024-09-01 6:02 ` Tony Ambardar
2024-08-30 7:29 ` [PATCH bpf-next v4 7/8] libbpf: Support creating light skeleton " Tony Ambardar
2024-08-30 21:30 ` Andrii Nakryiko
2024-08-31 1:24 ` Alexei Starovoitov
2024-09-01 6:02 ` Tony Ambardar
2024-09-01 6:00 ` Tony Ambardar
2024-08-30 7:29 ` [PATCH bpf-next v4 8/8] selftests/bpf: Support cross-endian building Tony Ambardar
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=ZtQCzdw9CkU1h5Uf@kodidev-ubuntu \
--to=tony.ambardar@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=iii@linux.ibm.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=mykolal@fb.com \
--cc=qmo@kernel.org \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/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