From: Luigi Rizzo <rizzo@iet.unipi.it>
To: bpf@vger.kernel.org, ppenkov@google.com,
Luigi Rizzo <lrizzo@google.com>,
andriin@fb.com, sdf@google.com
Subject: libbpf/bpftool inconsistent handling og .data and .bss ?
Date: Wed, 7 Oct 2020 16:01:34 +0200 [thread overview]
Message-ID: <CA+hQ2+gb_y7TViv13K_JpJTP=yHFqORmY+=6PrO4eAjgrBSitw@mail.gmail.com> (raw)
I am experiencing some weirdness in global variables handling
in bpftool and libbpf, as described below.
This happens happen with code in foo_bpf.c compiled with
clang-10 -O2 -Wall -Werror -target bpf ...
and subsequently exported with
bpftool gen skeleton ...
(i have tried bpftool 5.8.7 and 5.9.0-rc6)
1. uninitialized globals are not recognised
The following code in the bpf program
int x;
SEC("fentry/bar")
int BPF_PROG(bar) { return 0;}
compiles ok but bpftool then complains
libbpf: prog 'bar': invalid relo against 'x' in special section
0xfff2; forgot to initialize global var?..
The error disappears if I initialize x=0 or x=1
(in the skeleton, x=0 ends up in .bss, x=1 ends up in .data)
2. .bss overrides from userspace are not seen in bpf at runtime
In foo_bpf.c I have "int x = 0;"
In the userspace program, before foo_bpf__load(), I do
obj->bss->x = 1
but after attach, the bpf code does not see the change, ie
"if (x == 0) { .. } else { .. }"
always takes the first branch.
If I initialize "int x = 2" and then do
obj->data->x = 1
the update is seen correctly ie
"if (x == 2) { .. } else { .. }"
takes one or the other depending on whether userspace overrides
the value before foo_bpf__load()
3. .data overrides do not seem to work for non-scalar types
In foo_bpf.c I have
struct one { int a; }; // type also visible to userspace
struct one x { .a = 2 }; // avoid bugs #1 and #2
If in userspace I do
obj->data->x.a = 1
the update is not seen in the kernel, ie
"if (x.a == 2) { .. } else { .. }"
always takes the first branch
Are these known issues ?
thanks
luigi
next reply other threads:[~2020-10-07 14:01 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-07 14:01 Luigi Rizzo [this message]
2020-10-07 15:58 ` libbpf/bpftool inconsistent handling og .data and .bss ? Yonghong Song
2020-10-07 18:35 ` Andrii Nakryiko
2020-10-07 20:31 ` Luigi Rizzo
2020-10-07 20:40 ` Andrii Nakryiko
2020-10-07 21:29 ` Luigi Rizzo
2020-10-07 22:26 ` Andrii Nakryiko
2020-10-08 1:33 ` Yonghong Song
2020-10-10 22:49 ` Luigi Rizzo
2020-10-10 23:11 ` Andrii Nakryiko
2020-10-11 0:31 ` Luigi Rizzo
2020-10-11 1:36 ` 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='CA+hQ2+gb_y7TViv13K_JpJTP=yHFqORmY+=6PrO4eAjgrBSitw@mail.gmail.com' \
--to=rizzo@iet.unipi.it \
--cc=andriin@fb.com \
--cc=bpf@vger.kernel.org \
--cc=lrizzo@google.com \
--cc=ppenkov@google.com \
--cc=sdf@google.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.