dev-libs/libkdumpfile: new package, add 0.5.4

Hopefully we can drop the deprecated Python bindings here in future
but they're needed by drgn for now.

Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sam James
2024-08-27 21:43:39 +01:00
parent cec75f8900
commit 5fa70534e8
6 changed files with 272 additions and 0 deletions

View File

@@ -0,0 +1 @@
DIST libkdumpfile-0.5.4.tar.bz2 623108 BLAKE2B 17a425c2a0545f60574255d5ec139f60a59dd2c9c047a89f9d021afe31cae959c691b550d9ad4e10c88a11f5f1bab1a4d94dab025060dcd2598837442281b3b9 SHA512 6cdd77e3460b324f4e0641fc8f4cf1dcd8b7de4ec82a37ca11e4edfa7730f90305c2724825f8b1cf8ac2e8ad104fee1b6a36775287b084db802ae2f44a55cd85

View File

@@ -0,0 +1,73 @@
https://github.com/ptesarik/libkdumpfile/commit/16c73b83a78c1bfb55f3e9823b09fce549c8ec11
From 16c73b83a78c1bfb55f3e9823b09fce549c8ec11 Mon Sep 17 00:00:00 2001
From: Petr Tesarik <petr@tesarici.cz>
Date: Thu, 23 May 2024 13:01:17 +0200
Subject: [PATCH] Fix file cache test for 32-bit architectures
If 64-bit file offsets are selected with _FILE_OFFSET_BITS on a 32-bit
architecture, the default mmap() call takes a 64-bit off_t, but dlsym()
returns a pointer to a function that takes a 32-bit off_t.
To fix it:
- always call original mmap64() if it is available,
- use XSTRINGIFY(mmap) instead of "mmap".
The latter is needed, because some systems define mmap as a macro which
expands to another identifier.
Fixes: #80
Signed-off-by: Petr Tesarik <petr@tesarici.cz>
---
configure.ac | 2 ++
src/kdumpfile/test-fcache.c | 13 ++++++++++++-
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 04d1c6fa..93ebb39d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -61,6 +61,8 @@ AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(off_t)
AC_SUBST(SIZEOF_OFF_T, $ac_cv_sizeof_off_t)
+AC_CHECK_FUNCS(mmap64)
+
dnl This makes sure pkg.m4 is available.
m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
diff --git a/src/kdumpfile/test-fcache.c b/src/kdumpfile/test-fcache.c
index 1ed57447..604ed540 100644
--- a/src/kdumpfile/test-fcache.c
+++ b/src/kdumpfile/test-fcache.c
@@ -64,9 +64,20 @@ static char *mmapbuf;
static int failmmap;
+#ifdef HAVE_MMAP64
+
+#define STR_MMAP XSTRINGIFY(mmap64)
+static void* (*orig_mmap)(void *addr, size_t length, int prot, int flags,
+ int fd, off64_t offset);
+
+#else
+
+#define STR_MMAP XSTRINGIFY(mmap)
static void* (*orig_mmap)(void *addr, size_t length, int prot, int flags,
int fd, off_t offset);
+#endif
+
void *
mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
{
@@ -445,7 +456,7 @@ main(int argc, char **argv)
return TEST_ERR;
}
- orig_mmap = dlsym(RTLD_NEXT, "mmap");
+ orig_mmap = dlsym(RTLD_NEXT, STR_MMAP);
if (!orig_mmap) {
fprintf(stderr, "Cannot get original mmap() address: %s\n",
dlerror());

View File

@@ -0,0 +1,48 @@
https://github.com/ptesarik/libkdumpfile/commit/3682f5cad70146ab35d05af251d4461ef650b4b5
From 3682f5cad70146ab35d05af251d4461ef650b4b5 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Thu, 4 Jan 2024 12:36:53 +0100
Subject: [PATCH] Python 3 does not have a tp_print member in PyTypeObject
This avoids an int-conversion compiler error with current
compilers:
./kdumpfile.c:1449:9: error: initialization of 'long int' from 'int (*)(PyObject *, FILE *, int)' {aka 'int (*)(struct _object *, FILE *, int)'} makes integer from pointer without a cast
1449 | attr_dir_print, /* tp_print*/
| ^~~~~~~~~~~~~~
In Python 3.11, the field at this position is called tp_vectorcall_offset
and has type Py_ssize_t, hence the error.
--- a/python/kdumpfile.c
+++ b/python/kdumpfile.c
@@ -1143,7 +1143,6 @@ attr_dir_repr(PyObject *_self)
Py_XDECREF(colon);
return result;
}
-#endif
static int
attr_dir_print(PyObject *_self, FILE *fp, int flags)
@@ -1214,6 +1213,7 @@ attr_dir_print(PyObject *_self, FILE *fp, int flags)
kdump_attr_iter_end(ctx, &iter);
return -1;
}
+#endif
static PyObject *
attr_iterkey_new(PyObject *_self)
@@ -1446,7 +1446,11 @@ static PyTypeObject attr_dir_object_type =
sizeof(char), /* tp_itemsize*/
/* methods */
attr_dir_dealloc, /* tp_dealloc*/
+#if PY_MAJOR_VERSION < 3
attr_dir_print, /* tp_print*/
+#else
+ 0,
+#endif
0, /* tp_getattr*/
0, /* tp_setattr*/
0, /* tp_compare*/

View File

@@ -0,0 +1,68 @@
https://github.com/ptesarik/libkdumpfile/commit/d529a573ab2cdbda501309e377007812e6de3351
From d529a573ab2cdbda501309e377007812e6de3351 Mon Sep 17 00:00:00 2001
From: Stephen Brennan <stephen.s.brennan@oracle.com>
Date: Fri, 19 Jan 2024 11:52:24 -0800
Subject: [PATCH] tests: skip tests which apply to disabled compression
If configured --without-libzstd, for example, the diskdump-basic-zstd
test will return an ERROR code, causing "make check" to fail. Even using
XFAIL_TESTS will not resolve the error, because the return code is
ERROR, not FAIL.
Instead, conditionally include the tests based on whether we are
compiling with each compression format. This way, we don't test
unsupported features.
Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com>
---
m4/compression.m4 | 1 +
tests/Makefile.am | 17 +++++++++++++----
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/m4/compression.m4 b/m4/compression.m4
index 6755ef13..8cb7ce2d 100644
--- a/m4/compression.m4
+++ b/m4/compression.m4
@@ -32,4 +32,5 @@ AC_SUBST([$2][_REQUIRES])
AC_SUBST([$2][_CFLAGS])
AC_SUBST([$2][_LIBS])
AC_SUBST([$2][_PC_LIBS])
+AM_CONDITIONAL(HAVE_$2, test "x$have_$1" = xyes)
])
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0c03b20b..8ac90b39 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -196,10 +196,6 @@ test_scripts = \
diskdump-empty-s390x \
diskdump-empty-x86_64 \
diskdump-basic-raw \
- diskdump-basic-zlib \
- diskdump-basic-lzo \
- diskdump-basic-snappy \
- diskdump-basic-zstd \
diskdump-flat-raw \
diskdump-multiread \
diskdump-excluded \
@@ -331,6 +327,19 @@ test_scripts = \
xlat-xen-x86_64-4.6-bigmem \
zero-size
+if HAVE_ZSTD
+test_scripts += diskdump-basic-zstd
+endif
+if HAVE_ZLIB
+test_scripts += diskdump-basic-zlib
+endif
+if HAVE_LZO
+test_scripts += diskdump-basic-lzo
+endif
+if HAVE_SNAPPY
+test_scripts += diskdump-basic-snappy
+endif
+
dist_check_DATA = \
addrmap-single-begin.expect \
addrmap-single-middle.expect \

View File

@@ -0,0 +1,71 @@
# Copyright 2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{10..13} )
inherit autotools python-r1
DESCRIPTION="Kernel coredump file access"
HOMEPAGE="https://github.com/ptesarik/libkdumpfile"
SRC_URI="https://github.com/ptesarik/libkdumpfile/releases/download/v${PV}/${P}.tar.bz2"
LICENSE="|| ( LGPL-3+ GPL-2+ )"
SLOT="0"
KEYWORDS="~amd64"
IUSE="lzo snappy zlib zstd"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"
DEPEND="
${PYTHON_DEPS}
lzo? ( dev-libs/lzo )
snappy? ( app-arch/snappy:= )
zlib? ( sys-libs/zlib )
zstd? ( app-arch/zstd:= )
"
RDEPEND="${DEPEND}"
BDEPEND="virtual/pkgconfig"
PATCHES=(
"${FILESDIR}"/${P}-c99.patch
"${FILESDIR}"/${P}-disabled-compression-tests.patch
"${FILESDIR}"/${P}-32-bit-tests.patch
)
src_prepare() {
default
# Can drop on next release >0.5.4
eautoreconf
}
src_configure() {
# We could make Python optional in future as libkdumpfile's
# builtin Python bindings appear deprecated in favour of another
# CFFI-based approach, but given we're adding libkdumpfile for
# dev-debug/drgn right now which uses *these*, let's not bother.
local ECONF_SOURCE=${S}
local myeconfargs=(
$(use_with lzo lzo2)
$(use_with snappy)
$(use_with zlib)
$(use_with zstd libzstd)
)
python_foreach_impl run_in_build_dir econf "${myeconfargs[@]}"
}
src_compile() {
python_foreach_impl run_in_build_dir default
}
src_test() {
python_foreach_impl run_in_build_dir default
}
src_install() {
python_foreach_impl run_in_build_dir default
python_foreach_impl python_optimize
einstalldocs
find "${D}" -name '*.la' -delete || die
}

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>sam@gentoo.org</email>
<name>Sam James</name>
</maintainer>
<upstream>
<remote-id type="github">ptesarik/libkdumpfile</remote-id>
</upstream>
</pkgmetadata>