On Tue, Feb 23, 2021 at 8:38 AM Kun-Chuan Hsieh jetswayss@gmail.com 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.
- 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 jolsa@redhat.com wrote:
On Tue, Feb 23, 2021 at 01:20:01AM +0000, Kun-Chuan Hsieh wrote:
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.
jirka
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 jetswayss@gmail.com
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
linux-stable-mirror@lists.linaro.org