From: Jesper Dangaard Brouer <brouer@redhat.com>
To: netdev@vger.kernel.org, Daniel Borkmann <borkmann@iogearbox.net>,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
wangnan0@huawei.com
Cc: acme@redhat.com, joe@ovn.org, jakub.kicinski@netronome.com,
eric@regit.org, Jesper Dangaard Brouer <brouer@redhat.com>
Subject: [bpf-next PATCH 5/5] tools/libbpf: handle issues with bpf ELF objects containing .eh_frames
Date: Sat, 27 Jan 2018 18:27:22 +0100 [thread overview]
Message-ID: <151707404245.12604.8486643930465492577.stgit@firesoul> (raw)
In-Reply-To: <151707400217.12604.5522514180508858186.stgit@firesoul>
If clang >= 4.0.1 is missing the option '-target bpf', it will cause
llc/llvm to create two ELF sections for "Exception Frames", with
section names '.eh_frame' and '.rel.eh_frame'.
The BPF ELF loader library libbpf fails when loading files with these
sections. The other in-kernel BPF ELF loader in samples/bpf/bpf_load.c,
handle this gracefully. And iproute2 loader also seems to work with these
"eh" sections.
The issue in libbpf is caused by bpf_object__elf_collect() skip the
'.eh_frame' and thus doesn't create an internal data structure
pointing to this ELF section index. Later when the relocation section
'.rel.eh_frame' is processed, it tries to find the '.eh_frame' via the
ELF section idx, which is that fails (in bpf_object__collect_reloc).
I couldn't find a way to see that the '.rel.eh_frame' was irrelevant
(that is only determined by looking at the section it reference, which
we no longer have info available on).
Thus, my solution is simply to match on the name of the relocation
section, to skip that too.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
0 files changed
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index b4eeaa3ebff5..84e8bbe07347 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -822,6 +822,13 @@ static int bpf_object__elf_collect(struct bpf_object *obj)
void *reloc = obj->efile.reloc;
int nr_reloc = obj->efile.nr_reloc + 1;
+ /* Skip decoding of "eh" exception frames */
+ if (strcmp(name, ".rel.eh_frame") == 0) {
+ pr_debug("skip relo section %s(%d) for section(%d)\n",
+ name, idx, sh.sh_info);
+ continue;
+ }
+
reloc = realloc(reloc,
sizeof(*obj->efile.reloc) * nr_reloc);
if (!reloc) {
next prev parent reply other threads:[~2018-01-27 17:27 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-27 17:26 [bpf-next PATCH 0/5] tools/libbpf improvements and selftests Jesper Dangaard Brouer
2018-01-27 17:27 ` [bpf-next PATCH 1/5] bpf: Sync kernel ABI header with tooling header for bpf_common.h Jesper Dangaard Brouer
2018-01-27 17:27 ` [bpf-next PATCH 2/5] tools/libbpf: improve the pr_debug statements to contain section numbers Jesper Dangaard Brouer
2018-01-27 17:27 ` [bpf-next PATCH 3/5] tools/libbpf: add test program for loading BPF ELF files Jesper Dangaard Brouer
2018-01-27 17:27 ` [bpf-next PATCH 4/5] selftests/bpf: add selftest that use test_libbpf_open Jesper Dangaard Brouer
2018-01-27 17:27 ` Jesper Dangaard Brouer [this message]
2018-01-28 9:38 ` [bpf-next PATCH 5/5] tools/libbpf: handle issues with bpf ELF objects containing .eh_frames Eric Leblond
2018-02-01 10:59 ` [bpf-next PATCH 0/5] tools/libbpf improvements and selftests Daniel Borkmann
2018-02-01 14:41 ` Jesper Dangaard Brouer
2018-02-01 17:56 ` Daniel Borkmann
2018-02-04 9:19 ` Jesper Dangaard Brouer
2018-02-04 12:27 ` Daniel Borkmann
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=151707404245.12604.8486643930465492577.stgit@firesoul \
--to=brouer@redhat.com \
--cc=acme@redhat.com \
--cc=alexei.starovoitov@gmail.com \
--cc=borkmann@iogearbox.net \
--cc=eric@regit.org \
--cc=jakub.kicinski@netronome.com \
--cc=joe@ovn.org \
--cc=netdev@vger.kernel.org \
--cc=wangnan0@huawei.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