All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yonghong Song <yonghong.song@linux.dev>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: bpf <bpf@vger.kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Kernel Team <kernel-team@fb.com>,
	Martin KaFai Lau <martin.lau@kernel.org>
Subject: Re: [PATCH bpf-next] libbpf: Silence newly-added and unused sections
Date: Sat, 20 Sep 2025 11:50:17 -0700	[thread overview]
Message-ID: <9ba2b2fb-e92c-4b0d-bf39-d655ab8e9f1e@linux.dev> (raw)
In-Reply-To: <CAADnVQJ-28Oy9OoKXtnDOZBxkDofuwfWS-cdSFHd1uqpOmNLmQ@mail.gmail.com>



On 9/20/25 8:56 AM, Alexei Starovoitov wrote:
> On Sat, Sep 20, 2025 at 8:35 AM Yonghong Song <yonghong.song@linux.dev> wrote:
>> With latest llvm22, when building bpf selftest, I got the following info
>> emitted by libbpf:
>>    ...
>>    libbpf: elf: skipping unrecognized data section(14) .comment
>>    libbpf: elf: skipping section(15) .note.GNU-stack (size 0)
>>    ...
>>
>> The reason is due to llvm patch [1]. Previously, bpf class BPFMCAsmInfo
>> inherits class MCAsmInfo. With [1], BPFMCAsmInfo inherits class
>> MCAsmInfoELF. Such a change added two more sections in the bpf binary, e.g.
>>    [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
>>    ...
>>    [23] .comment          PROGBITS        0000000000000000 0035ac 00006d 01  MS  0   0  1
>>    [24] .note.GNU-stack   PROGBITS        0000000000000000 003619 000000 00      0   0  1
>>    ...
>>
>> Adding the above two sections in elf section ignore list can avoid the
>> above info dump during selftest build.
>>
>>    [1] https://github.com/llvm/llvm-project/commit/d9489fd073c0e100c6fbb1e5aef140b00cf62b81
> Can we revert this instead?
> Why do we need these sections if we're not doing anything with them?

I did further investigation and it looks like it is hard to revert.
To make things work at llvm level, we need to revert the following two llvm commits:
   https://github.com/llvm/llvm-project/commit/87c73f498d3e98c7b6471f81e25b7e08106053fe
and then
   https://github.com/llvm/llvm-project/commit/d9489fd073c0e100c6fbb1e5aef140b00cf62b81

The commit
   https://github.com/llvm/llvm-project/commit/d9489fd073c0e100c6fbb1e5aef140b00cf62b81
lets BPFMCAsmInfo derives from MCAsmInfoELF, and the commit
   https://github.com/llvm/llvm-project/commit/87c73f498d3e98c7b6471f81e25b7e08106053fe
push printSwitchToSection() to each variant of MCAsmInfo. The MCAsmInfo itself contains

+  virtual void printSwitchToSection(const MCSection &, uint32_t Subsection,
+                                    const Triple &, raw_ostream &) const {}

and
MCAsmInfoCOFF, MCAsmInfoDarwin and MCAsmInfoELF have their own specific
implementation.

So if just revert d9489fd073c0e100c6fbb1e5aef140b00cf62b81, then at BPF backend,
printSwitchToSection() will be a noop. This will miss a lot of '.seciton ...'
cases. For example, there are totally 89 llvm BPF selftest failures.

For example, for jump table support, all '.jumptables' section name will not in
asm code. Another example, '.BTF' section name will miss as well.

So to make the thing work, reverting both commits are necessary.
But tt will be hard to revert llvm commit 87c73f498d3e98c7b6471f81e25b7e08106053fe
since it contains lots of non-BPF changes.

So I recommend to fix the problem at libbpf level.

>
>> Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
>> ---
>>   tools/lib/bpf/libbpf.c | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
>> index 5161c2b39875..34aed7904039 100644
>> --- a/tools/lib/bpf/libbpf.c
>> +++ b/tools/lib/bpf/libbpf.c
>> @@ -3788,6 +3788,14 @@ static bool ignore_elf_section(Elf64_Shdr *hdr, const char *name)
>>          if (is_sec_name_dwarf(name))
>>                  return true;
>>
>> +       /* .comment section */
>> +       if (strcmp(name, ".comment") == 0)
>> +               return true;
>> +
>> +       /* .note.GNU-stack section */
>> +       if (strcmp(name, ".note.GNU-stack") == 0)
>> +               return true;
>> +
>>          if (str_has_pfx(name, ".rel")) {
>>                  name += sizeof(".rel") - 1;
>>                  /* DWARF section relocations */
>> --
>> 2.47.3
>>


  parent reply	other threads:[~2025-09-20 18:50 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-20 15:35 [PATCH bpf-next] libbpf: Silence newly-added and unused sections Yonghong Song
2025-09-20 15:56 ` Alexei Starovoitov
2025-09-20 16:18   ` Yonghong Song
2025-09-20 18:50   ` Yonghong Song [this message]
2025-09-20 22:41     ` Alexei Starovoitov
2025-09-21  0:30 ` Eduard Zingerman
2025-09-21  1:41   ` Yonghong Song
2025-09-21  4:01     ` Eduard Zingerman

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=9ba2b2fb-e92c-4b0d-bf39-d655ab8e9f1e@linux.dev \
    --to=yonghong.song@linux.dev \
    --cc=alexei.starovoitov@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kernel-team@fb.com \
    --cc=martin.lau@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 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.