import CS dwarves-1.25-1.el9

This commit is contained in:
eabdullin 2023-09-21 18:19:55 +00:00
parent 1558d5b88b
commit dea111a355
4 changed files with 21 additions and 102 deletions

View File

@ -1 +1 @@
2f743d3dc421ae8478cb47051449c721b77f51ab SOURCES/dwarves-1.24.tar.xz
251fc1ff6b0f953f565f74c25c8aa55e7f8c50d9 SOURCES/dwarves-1.25.tar.xz

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/dwarves-1.24.tar.xz
SOURCES/dwarves-1.25.tar.xz

View File

@ -1,93 +0,0 @@
From b72f5188856df0abf45e1a707856bb4e4e86153c Mon Sep 17 00:00:00 2001
From: Alan Maguire <alan.maguire@oracle.com>
Date: Fri, 21 Oct 2022 16:02:03 +0100
Subject: [PATCH] dwarves: Zero-initialize struct cu in cu__new() to prevent
incorrect BTF types
BTF deduplication was throwing some strange results, where core kernel
data types were failing to deduplicate due to the return values
of function type members being void (0) instead of the actual type
(unsigned int). An example of this can be seen below, where
"struct dst_ops" was failing to deduplicate between kernel and
module:
struct dst_ops {
short unsigned int family;
unsigned int gc_thresh;
int (*gc)(struct dst_ops *);
struct dst_entry * (*check)(struct dst_entry *, __u32);
unsigned int (*default_advmss)(const struct dst_entry *);
unsigned int (*mtu)(const struct dst_entry *);
...
struct dst_ops___2 {
short unsigned int family;
unsigned int gc_thresh;
int (*gc)(struct dst_ops___2 *);
struct dst_entry___2 * (*check)(struct dst_entry___2 *, __u32);
void (*default_advmss)(const struct dst_entry___2 *);
void (*mtu)(const struct dst_entry___2 *);
...
This was seen with
bcc648a10cbc ("btf_encoder: Encode DW_TAG_unspecified_type returning routines as void")
...which rewrites the return value as 0 (void) when it is marked
as matching DW_TAG_unspecified_type:
static int32_t btf_encoder__tag_type(struct btf_encoder *encoder, uint32_t type_id_off, uint32_t tag_type)
{
if (tag_type == 0)
return 0;
if (encoder->cu->unspecified_type.tag && tag_type == encoder->cu->unspecified_type.type) {
// No provision for encoding this, turn it into void.
return 0;
}
return type_id_off + tag_type;
}
However the odd thing was that on further examination, the unspecified type
was not being set, so why was this logic being tripped? Futher debugging
showed that the encoder->cu->unspecified_type.tag value was garbage, and
the type id happened to collide with "unsigned int"; as a result we
were replacing unsigned ints with void return values, and since this
was being done to function type members in structs, it triggered a
type mismatch which failed deduplication between kernel and module.
The fix is simply to calloc() the cu in cu__new() instead.
Committer notes:
We have zalloc(size) as an alias to calloc(1, size), use it instead.
Fixes: bcc648a10cbcd0b9 ("btf_encoder: Encode DW_TAG_unspecified_type returning routines as void")
Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
Link: https://lore.kernel.org/r/1666364523-9648-1-git-send-email-alan.maguire@oracle.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
dwarves.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dwarves.c b/dwarves.c
index fbebc1d..95a3bac 100644
--- a/dwarves.c
+++ b/dwarves.c
@@ -626,7 +626,7 @@ struct cu *cu__new(const char *name, uint8_t addr_size,
const unsigned char *build_id, int build_id_len,
const char *filename, bool use_obstack)
{
- struct cu *cu = malloc(sizeof(*cu) + build_id_len);
+ struct cu *cu = zalloc(sizeof(*cu) + build_id_len);
if (cu != NULL) {
uint32_t void_id;
--
2.38.1

View File

@ -2,18 +2,18 @@
%define libver 1
Name: dwarves
Version: 1.24
Release: 2%{?dist}
Version: 1.25
Release: 1%{?dist}
License: GPLv2
Summary: Debugging Information Manipulation Tools (pahole & friends)
URL: http://acmel.wordpress.com
Source: http://fedorapeople.org/~acme/dwarves/%{name}-%{version}.tar.xz
Requires: %{libname}%{libver} = %{version}-%{release}
Patch1: 0001-dwarves-Zero-initialize-struct-cu-in-cu__new-to-prev.patch
BuildRequires: gcc
BuildRequires: cmake >= 2.8.12
BuildRequires: zlib-devel
BuildRequires: elfutils-devel >= 0.130
BuildRequires: libbpf-devel
%description
dwarves is a set of tools that use the debugging information inserted in
@ -66,10 +66,9 @@ Debugging information processing library development files.
%prep
%setup -q
%patch1 -p1
%build
%cmake -DCMAKE_BUILD_TYPE=Release .
%cmake -DCMAKE_BUILD_TYPE=Release -DLIBBPF_EMBEDDED=Off .
%cmake_build
%install
@ -81,8 +80,7 @@ rm -Rf %{buildroot}
%files
%doc README.ctracer
%doc README.btf
%doc changes-v1.23
%doc changes-v1.24
%doc changes-v1.25
%doc NEWS
%{_bindir}/btfdiff
%{_bindir}/codiff
@ -134,6 +132,20 @@ rm -Rf %{buildroot}
%{_libdir}/%{libname}_reorganize.so
%changelog
* Wed Jun 14 2023 Viktor Malik <vmalik@redhat.com> - 1.25-1
- Resolves: rhbz#2190484
- Build with system libbpf
- New release: v1.25
- Support for DW_TAG_unspecified_type more generally.
- Make sure struct member offsets are in ascending order. Rust BTF needs this.
- Support C atomic types (DW_TAG_atomic_type).
- Initial support for DW_TAG_LLVM_annotation, used for BTF type tags, for __rcu, __user, etc
- Exclude functions with the same name (static functions in different CUs), inconsistent prototypes or not following calling convention.
- Allow generation of BTF for optimized functions, those that end with a .isra*, .constprop*.
- Support 'pahole --lang=/--lang_exclude=asm'
- Support --compile from DWARF in addition to from BTF.
- Exclude RUST CUs in 'btfdiff', as those are not yet being BTF encoded.
* Wed Nov 16 2022 Viktor Malik <vmalik@redhat.com> - 1.24-2
- Backport BTF fix needed for kernel kfuncs
- Related: rhbz#2140020