Thread (1 message) 1 message, 1 author, 2021-02-23

Re: [PATCH] tools/resolve_btfids: Fix build error with older host toolchains

From: Andrii Nakryiko <hidden>
Date: 2021-02-23 17:27:47
Also in: bpf

On Tue, Feb 23, 2021 at 8:38 AM Kun-Chuan Hsieh [off-list ref] wrote:
Hi Jiri Olsa,

Yes, exactly. The missing SHF_COMPRESSED value causes build failure.

Compared to conditional compilation, your suggestion seems to be a better
solution. Thank you for your suggestion. I will submit the patch v2.


Hi Andrii Nakryiko,

Yes, it is possible to detect whether libelf supports compressed ELF
sections at compilation time. I can think of two possible methods.
1. Check SHF_COMPRESSED is defined. (If libelf supports compressed ELF
sections, SHF_COMPRESSED should be defined in libelf.h or elf.h)
2. Check the libelf version by _ELFUTILS_PREREQ (from elfutils/version.h)

Best regards,
Kun-Chuan Hsieh

On Tue, Feb 23, 2021 at 10:43 PM Jiri Olsa [off-list ref] wrote:
quoted
On Tue, Feb 23, 2021 at 01:20:01AM +0000, Kun-Chuan Hsieh wrote:
quoted
Older versions of libelf cannot recognize the compressed section.
so it's the SHF_COMPRESSED value the build fails on?

maybe we could do just this:

#ifndef SHF_COMPRESSED
 #define SHF_COMPRESSED      (1 << 11)  /* Section with compressed data. */
#endif
Yeah, I was hoping it would be something like this. Or we can just
#ifdef two regions of code that rely on SHF_COMPRESSED.
quoted
jirka
quoted
However, it's only required to fix the compressed section info when
compiling with CONFIG_DEBUG_INFO_COMPRESSED flag is set.

Only compile the compressed_section_fix function when necessary will make
it easier to enable the BTF function. Since the tool resolve_btfids is
compiled with host toolchain. The host toolchain might be older than the
cross compile toolchain.

Cc: stable@vger.kernel.org
Signed-off-by: Kun-Chuan Hsieh <redacted>
---
 tools/bpf/resolve_btfids/main.c | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
index 7409d7860aa6..ad40346c6631 100644
--- a/tools/bpf/resolve_btfids/main.c
+++ b/tools/bpf/resolve_btfids/main.c
@@ -260,6 +260,7 @@ static struct btf_id *add_symbol(struct rb_root *root, char *name, size_t size)
      return btf_id__add(root, id, false);
 }

+#ifdef CONFIG_DEBUG_INFO_COMPRESSED
 /*
  * The data of compressed section should be aligned to 4
  * (for 32bit) or 8 (for 64 bit) bytes. The binutils ld
@@ -292,6 +293,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
      }
      return 0;
 }
+#endif

 static int elf_collect(struct object *obj)
 {
@@ -370,8 +372,10 @@ static int elf_collect(struct object *obj)
                      obj->efile.idlist_addr  = sh.sh_addr;
              }

+#ifdef CONFIG_DEBUG_INFO_COMPRESSED
              if (compressed_section_fix(elf, scn, &sh))
                      return -1;
+#endif
      }

      return 0;
--
2.25.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help