netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrii Nakryiko <andrii.nakryiko@gmail.com>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: Andrii Nakryiko <andrii@kernel.org>, bpf <bpf@vger.kernel.org>,
	Networking <netdev@vger.kernel.org>,
	Alexei Starovoitov <ast@fb.com>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Kernel Team <kernel-team@fb.com>
Subject: Re: [PATCH v2 bpf-next 10/11] selftests/bpf: pass all BPF .o's through BPF static linker
Date: Wed, 17 Mar 2021 14:22:10 -0700	[thread overview]
Message-ID: <CAEf4BzZYnSK2nncHocJjMo-obQ_p4u0ofiUFHqvO18nZG2_=Ew@mail.gmail.com> (raw)
In-Reply-To: <CAADnVQ+1w8rqGNax6PysTh5SwpdKr8dd3TmCEvwDZ2+=ouTRkA@mail.gmail.com>

On Wed, Mar 17, 2021 at 2:00 PM Alexei Starovoitov
<alexei.starovoitov@gmail.com> wrote:
>
> On Wed, Mar 17, 2021 at 1:47 PM Andrii Nakryiko
> <andrii.nakryiko@gmail.com> wrote:
> >
> > On Tue, Mar 16, 2021 at 10:34 PM Alexei Starovoitov
> > <alexei.starovoitov@gmail.com> wrote:
> > >
> > > On Sat, Mar 13, 2021 at 11:35:36AM -0800, Andrii Nakryiko wrote:
> > > >
> > > > -$(TRUNNER_BPF_SKELS): $(TRUNNER_OUTPUT)/%.skel.h:                    \
> > > > -                   $(TRUNNER_OUTPUT)/%.o                             \
> > > > -                   $(BPFTOOL)                                        \
> > > > -                   | $(TRUNNER_OUTPUT)
> > > > +$(TRUNNER_BPF_SKELS): %.skel.h: %.o $(BPFTOOL) | $(TRUNNER_OUTPUT)
> > > >       $$(call msg,GEN-SKEL,$(TRUNNER_BINARY),$$@)
> > > > -     $(Q)$$(BPFTOOL) gen skeleton $$< > $$@
> > > > +     $(Q)$$(BPFTOOL) gen object $$(<:.o=.bpfo) $$<
> > > > +     $(Q)$$(BPFTOOL) gen skeleton $$(<:.o=.bpfo) > $$@
> > >
> > > Do we really need this .bpfo extension?
> >
> > I thought it would be a better way to avoid user's confusion with .o's
> > as produced by compiler and .bpfo as a "final" linked BPF object,
> > produced by static linker. Technically, there is no requirement, of
> > course. If you think it will be less confusing to stick to .o, that's
> > fine.
> >
> > > bpftool in the previous patch doesn't really care about the extension.
> >
> > the only thing that cares is the logic to derive object name when
> > generating skeleton (we strip .o and/or .bpfo). No loader should ever
> > care about extension, it could be my_obj.whocares and it should be
> > fine.
> >
> > > It's still a valid object file with the same ELF format.
> >
> > Yes, with some extra niceties like fixed up BTF, stripped out DWARF,
> > etc. Maybe in the future there will be more "normalization" done as
> > compared to what Clang produces.
> >
> > > I think if we keep the same .o extension for linked .o-s it will be easier.
> > > Otherwise all loaders would need to support both .o and .bpfo,
> > > but the later is no different than the former in terms of contents of the file
> > > and ways to parse it.
> >
> > So no loaders should care right now. But as I said, I can drop .bpfo as well.
> >
> > >
> > > For testing of the linker this linked .o can be a temp file or better yet a unix pipe ?
> > > bpftool gen object - one.o second.o|bpftool gen skeleton -
> >
> > So I tried to briefly add support for that to `gen skeleton` and `gen
> > object` by using /proc/self/fd/{0,1} and that works for `gen object`,
> > but only if stdout is redirected to a real file. When piping output to
> > another process, libelf fails to write to such a special file for some
> > reason. `gen skeleton` is also failing to read from a piped stdin
> > because of use of mmap(). So there would need to be more work done to
> > support piping like that.
> >
> > But in any case I'd like to have those intermediate object file
> > results lying on disk for further inspection, if anything isn't right,
> > so I'll use temp file regardless.
>
> May keep those temp .o files with .linked.o suffix?

sure, no problem

> Also have you considered doing:
> clang -target bpf prog.c -o prog.o
> bpftool gen obj obj1.o prog.o
> bpftool gen obj obj2.o obj1.o
> diff obj1.o obj2.o
> They should be the same, right?

yeah, I can add check for that

  reply	other threads:[~2021-03-17 21:23 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-13 19:35 [PATCH v2 bpf-next 00/11] BPF static linking Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 01/11] libbpf: expose btf_type_by_id() internally Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 02/11] libbpf: generalize BTF and BTF.ext type ID and strings iteration Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 03/11] libbpf: rename internal memory-management helpers Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 04/11] libbpf: extract internal set-of-strings datastructure APIs Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 05/11] libbpf: add generic BTF type shallow copy API Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 06/11] libbpf: add BPF static linker APIs Andrii Nakryiko
2021-06-07 23:11   ` Tom Stellard
2021-06-08  0:25     ` Andrii Nakryiko
     [not found]       ` <b1bdf1df-e3a8-1ce8-fc33-4ab40b39fb06@redhat.com>
2021-06-08  2:41         ` Tom Stellard
2021-06-08  4:08           ` Andrii Nakryiko
2021-06-08  6:47             ` Yonghong Song
2021-06-09  3:44             ` Tom Stellard
2021-06-09  4:41               ` Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 07/11] libbpf: add BPF static linker BTF and BTF.ext support Andrii Nakryiko
2021-03-17  5:25   ` Alexei Starovoitov
2021-03-17 22:10     ` Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 08/11] bpftool: add `gen object` command to perform BPF static linking Andrii Nakryiko
2021-03-15  9:24   ` Quentin Monnet
2021-03-16  5:16     ` Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 09/11] selftests/bpf: re-generate vmlinux.h and BPF skeletons if bpftool changed Andrii Nakryiko
2021-03-13 19:35 ` [PATCH v2 bpf-next 10/11] selftests/bpf: pass all BPF .o's through BPF static linker Andrii Nakryiko
2021-03-17  5:34   ` Alexei Starovoitov
2021-03-17 20:47     ` Andrii Nakryiko
2021-03-17 21:00       ` Alexei Starovoitov
2021-03-17 21:22         ` Andrii Nakryiko [this message]
2021-03-13 19:35 ` [PATCH v2 bpf-next 11/11] selftests/bpf: add multi-file statically linked BPF object file test Andrii Nakryiko

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='CAEf4BzZYnSK2nncHocJjMo-obQ_p4u0ofiUFHqvO18nZG2_=Ew@mail.gmail.com' \
    --to=andrii.nakryiko@gmail.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@fb.com \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kernel-team@fb.com \
    --cc=netdev@vger.kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).