From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>,
Tony Ambardar <tony.ambardar@gmail.com>,
bpf <bpf@vger.kernel.org>,
dwarves@vger.kernel.org
Subject: Re: Problem with endianess of pahole BTF output for vmlinux
Date: Wed, 9 Sep 2020 11:27:50 -0300 [thread overview]
Message-ID: <20200909142750.GC3788224@kernel.org> (raw)
In-Reply-To: <8cf42e2752e442bb54e988261d8bf3cd22ad00f2.camel@linux.ibm.com>
Em Wed, Sep 09, 2020 at 11:02:24AM +0200, Ilya Leoshkevich escreveu:
> On Tue, 2020-09-08 at 13:18 -0700, Andrii Nakryiko wrote:
> > On Mon, Sep 7, 2020 at 9:02 AM Ilya Leoshkevich <iii@linux.ibm.com> wrote:
> > > On Sat, 2020-09-05 at 21:16 -0700, Tony Ambardar wrote:
> > > > I'm using GCC 8.4.0, binutils 2.34 and pahole 1.17, compiling on
> > > > an Ubuntu/x86_64 host and targeting both little- and big-endian
> > > > mips running on malta/qemu. When cross-compiling Linux 5.4.x LTS
> > > > and testing bpftool/BTF functionality on the target, I encounter
> > > > errors on big-endian targets:
> > > > > root@OpenWrt:/# bpftool btf dump file /sys/kernel/btf/vmlinux
> > > > > libbpf: failed to get EHDR from /sys/kernel/btf/vmlinux Error:
> > > > > failed to load BTF from /sys/kernel/btf/vmlinux: No error
> > > > > information
>
> > > > After investigating, the problem appears to be that "pahole -J"
> > > > running on the x86_64 little-endian host will always generate
> > > > raw BTF of native endianness (based on BTF magic), which causes
> > > > the error above on big-endian targets.
> > > > Is this expected? Is DEBUG_INFO_BTF supported in general when
> > > > cross-compiling? How does one generate BTF encoded for the
> > > > target endianness with pahole?
The BTF loader has support for endianness, its just the encoder that
doesn't :-\
I.e. pahole can grok a big endian BTF payload on a little endian machine
and vice-versa, just can't cross-build BTF payloads ATM.
> > Yes, it's expected, unfortunately. Right now cross-compiling to a
> > different endianness isn't supported. You can cross-compile only if
> > target endianness matches host endianness.
I agree that having this in libbpf is better, it should be done as part
of producing the result of the deduplication phase.
> > > > Thanks for any feedback or suggestions,
> > > > Tony
> > >
> > > We have the same problem on s390, and I'm not aware of any solution
> > > at
> > > the moment. It would be great if we could figure out how to resolve
> > > this.
> >
> > I'm working on extending BTF APIs in libbpf at the moment. Switching
> > endianness would be rather easy once all that is done. With these new
> > APIs it will be possible to switch pahole to use libbpf APIs to
> > produce BTF output and support arbitrary endianness as well. Right
> > now, I'd rather avoid implementing this in pahole, libbpf is a much
> > better place for this (and will require ongoing updates if/when we
> > introduce new types and fields to BTF).
Right, we could do it right after btf_dedup() and before
btf_elf__write(), doing the same process as in btf_loader.c, i.e.
checking if the ELF target arch is different in endianness and doing the
reverse of the loader.
> > Hope this plan works for you guys.
>
> That sounds really good to me, thanks!
- Arnaldo
next prev parent reply other threads:[~2020-09-09 16:58 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-06 4:16 Problem with endianess of pahole BTF output for vmlinux Tony Ambardar
2020-09-07 15:59 ` Ilya Leoshkevich
2020-09-08 20:18 ` Andrii Nakryiko
2020-09-09 9:02 ` Ilya Leoshkevich
2020-09-09 14:27 ` Arnaldo Carvalho de Melo [this message]
2020-09-19 7:58 ` Tony Ambardar
2020-09-21 18:19 ` Andrii Nakryiko
2020-09-28 20:18 ` Andrii Nakryiko
2020-09-28 20:27 ` Luka Perkov
2020-09-29 3:41 ` Tony Ambardar
2020-09-29 4:15 ` Andrii Nakryiko
2020-09-29 6:48 ` Tony Ambardar
2020-09-29 17:36 ` Juraj Vijtiuk
2020-09-29 17:57 ` 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=20200909142750.GC3788224@kernel.org \
--to=acme@kernel.org \
--cc=andrii.nakryiko@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=dwarves@vger.kernel.org \
--cc=iii@linux.ibm.com \
--cc=tony.ambardar@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.