dwarves: fix dwarf int type with greater than 16 bytes issue

Signed-off-by: bitcoffee <liuxin350@huawei.com>
(cherry picked from commit 10821456fc71bc95dbd29713b71497e26228830b)
This commit is contained in:
bitcoffee 2024-07-29 11:24:18 +08:00 committed by openeuler-sync-bot
parent a9c1dc987c
commit 089039a298
2 changed files with 56 additions and 1 deletions

View File

@ -0,0 +1,47 @@
From b9607b8bf5fe3180ae4cd44cddaf054e5595e699 Mon Sep 17 00:00:00 2001
From: Yonghong Song <yonghong.song@linux.dev>
Date: Wed, 24 Apr 2024 15:35:38 -0700
Subject: [PATCH dwarves] btf_encoder: Fix dwarf int type with greater-than-16 byte issue
Nick Desaulniers and Xin Liu separately reported that int type might
have greater-than-16 byte size ([1] and [2]). More specifically, the
reported int type sizes are 1024 and 64 bytes.
The libbpf and bpf program does not really support any int type greater
than 16 bytes. Therefore, with current pahole, btf encoding will fail
with greater-than-16 byte int types.
Since for now bpf does not support '> 16' bytes int type, the simplest
way is to sanitize such types, similar to existing conditions like
'!byte_sz' and 'byte_sz & (byte_sz - 1)'. This way, pahole won't
call libbpf with an unsupported int type size. The patch [3] was
proposed before. Now I resubmitted this patch as there are another
failure due to the same issue.
[1] https://github.com/libbpf/libbpf/pull/680
[2]https://lore.kernel.org/bpf/20240422144538.351722-1-liuxin350@huawei.com/
[3] https://lore.kernel.org/bpf/20230426055030.3743074-1-yhs@fb.com/
Cc: Xin Liu <liuxin350@huawei.com>
Cc: Alan Maguire <alan.maguire@oracle.com>
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
---
btf_encoder.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/btf_encoder.c b/btf_encoder.c
index 65f6e71..1aa0ad0 100644
--- a/btf_encoder.c
+++ b/btf_encoder.c
@@ -394,7 +394,7 @@ static int32_t btf_encoder__add_base_type(struct btf_encoder *encoder, const str
* these non-regular int types to avoid libbpf/kernel complaints.
*/
byte_sz = BITS_ROUNDUP_BYTES(bt->bit_size);
- if (!byte_sz || (byte_sz & (byte_sz - 1))) {
+ if (!byte_sz || (byte_sz & (byte_sz - 1)) || byte_sz > 16) {
name = "__SANITIZED_FAKE_INT__";
byte_sz = 4;
}
--
2.33.0

View File

@ -4,7 +4,7 @@
Name: dwarves
Version: 1.25
Release: 1
Release: 2
License: GPLv2
Summary: Debugging Information Manipulation Tools
URL: http://acmel.wordpress.com
@ -16,6 +16,8 @@ BuildRequires: cmake
BuildRequires: zlib-devel
BuildRequires: elfutils-devel >= 0.170
Patch0: backport-btf_encoder-Fix-dwarf-int-type-with-greater-than-16-.patch
%description
dwarves is a set of tools that use the debugging information inserted in
ELF binaries by compilers such as GCC, used by well known debuggers such as
@ -82,6 +84,12 @@ make install DESTDIR=%{buildroot}
%{_libdir}/%{libname}_reorganize.so
%changelog
* Mon Jul 29 2024 - liuxin <liuxin350@huawei.com> - 1.25-2
- Type:bugfix
- ID:NA
- SUG:NA
- DESC: fix dwarf int type with greater than 16 bytes issue
* Sat Aug 19 2023 - Chenxi Mao <chenxi.mao@suse.com> - 1.25-1
- Type:bugfix
- ID:NA