From: Mark Wielaard <mark@klomp.org>
To: "Martin Liška" <mliska@suse.cz>
Cc: "Dmitry V. Levin" <ldv@altlinux.org>,
elfutils-devel@sourceware.org, Fangrui Song <maskray@google.com>
Subject: Re: [PATCH][RFC] readelf: partial support of ZSTD compression
Date: Sat, 29 Oct 2022 00:21:06 +0200 [thread overview]
Message-ID: <Y1xV0prOne4Vm69p@wildebeest.org> (raw)
In-Reply-To: <6c1ce1f1-2e45-20bb-e98d-6d35692addfb@suse.cz>
Hi Martin,
On Mon, Oct 24, 2022 at 08:16:09PM +0200, Martin Liška wrote:
> Anyway, I'm sending V2 that works fine --with-zstd and --without-zstd as expected.
>
> Ready for master?
The decompression part looks good. Few small nitpicks below.
Although I like to also have compression working. Then we can also
add support to src/elfcompress, which makes for a good testcase. See
tests/run-compress.sh (which has found some subtle memory issues when
run under valgrind).
> From 4aea412783b9b0dcaf0f887947bf2e8ee6c5368b Mon Sep 17 00:00:00 2001
> From: Martin Liska <mliska@suse.cz>
> Date: Mon, 24 Oct 2022 11:53:13 +0200
> Subject: [PATCH] readelf: partial support of ZSTD compression
>
> Support decompression of ZSTD sections and add support
> for it when -SWz is used:
>
> ...
> [30] .debug_abbrev PROGBITS 0000000000000000 00001f9d 00000168 0 C 0 0 1
> [ELF ZSTD (2) 000002fc 1]
> ...
And for this it would be nice to have a tests/run-readelf-z.sh testcase.
> ChangeLog:
>
> * configure.ac: Add zstd_LIBS.
>
> libelf/ChangeLog:
>
> * Makefile.am: Use zstd_LIBS.
> * elf.h (ELFCOMPRESS_ZSTD): Add new value.
> * elf_compress.c (__libelf_decompress): Dispatch based
> on the compression algorithm.
> (__libelf_decompress_zlib): New.
> (__libelf_decompress_zstd): New.
> (__libelf_decompress_elf): Pass type of compression to
> __libelf_decompress.
> * elf_compress_gnu.c (elf_compress_gnu): Use ELFCOMPRESS_ZLIB
> as .z* sections can be only compressed with ZLIB.
> * libelfP.h (__libelf_decompress): Change signature.
>
> src/ChangeLog:
>
> * readelf.c (elf_ch_type_name): Use switch and support ZSTD.
> diff --git a/libelf/elf.h b/libelf/elf.h
> index 02a1b3f5..f0f0ec7d 100644
> --- a/libelf/elf.h
> +++ b/libelf/elf.h
We normally sync elf.h from glibc. I'll do that in a second.
> +#ifdef USE_ZSTD
> +void *
> +internal_function
> +__libelf_decompress_zstd (void *buf_in, size_t size_in, size_t size_out)
> +{
> + /* Malloc might return NULL when requestion zero size. This is highly
requesting
> + unlikely, it would only happen when the compression was forced.
> + But we do need a non-NULL buffer to return and set as result.
> + Just make sure to always allocate at least 1 byte. */
> +void *
> +internal_function
> +__libelf_decompress (int chtype, void *buf_in, size_t size_in, size_t size_out)
> +{
> + if (chtype == ELFCOMPRESS_ZLIB)
> + return __libelf_decompress_zlib (buf_in, size_in, size_out);
> + else
> + {
> +#ifdef USE_ZSTD
> + return __libelf_decompress_zstd (buf_in, size_in, size_out);
> +#else
> + return 0;
> +#endif
return NULL for consistency?
> + }
> +}
> +
> void *
> internal_function
> __libelf_decompress_elf (Elf_Scn *scn, size_t *size_out, size_t *addralign)
> @@ -268,7 +316,7 @@ __libelf_decompress_elf (Elf_Scn *scn, size_t *size_out, size_t *addralign)
> if (gelf_getchdr (scn, &chdr) == NULL)
> return NULL;
>
> - if (chdr.ch_type != ELFCOMPRESS_ZLIB)
> + if (chdr.ch_type != ELFCOMPRESS_ZLIB && chdr.ch_type != ELFCOMPRESS_ZSTD)
> {
What about the ifndef USE_ZSTD case? Should this then not recognize
ELFCOMPRESS_ZSTD?
Thanks,
Mark
next prev parent reply other threads:[~2022-10-28 22:21 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-24 11:09 Martin Liška
2022-10-24 11:41 ` Dmitry V. Levin
2022-10-24 12:17 ` Martin Liška
2022-10-24 16:48 ` Dmitry V. Levin
2022-10-24 18:16 ` Martin Liška
2022-10-28 22:21 ` Mark Wielaard [this message]
2022-11-28 13:16 ` Martin Liška
2022-11-28 22:29 ` Mark Wielaard
2022-11-29 9:34 ` Martin Liška
2022-11-29 12:05 ` [PATCHv2] support ZSTD compression algorithm Martin Liška
2022-12-09 10:17 ` Martin Liška
2022-12-15 13:17 ` Mark Wielaard
2022-12-19 14:19 ` Martin Liška
2022-12-19 15:09 ` Mark Wielaard
2022-12-21 11:13 ` Martin Liška
2023-01-10 17:44 ` [PATCH] readelf: Check compression status of .debug section data Mark Wielaard
2023-01-16 19:39 ` Mark Wielaard
2022-12-16 0:32 ` [PATCHv2] support ZSTD compression algorithm Mark Wielaard
2022-12-19 14:21 ` Martin Liška
2022-12-19 15:16 ` Mark Wielaard
2022-12-21 11:09 ` Martin Liška
2022-12-21 23:14 ` Mark Wielaard
2022-12-22 9:17 ` Martin Liška
2022-12-22 18:36 ` Mark Wielaard
2022-12-23 8:44 ` Martin Liška
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y1xV0prOne4Vm69p@wildebeest.org \
--to=mark@klomp.org \
--cc=elfutils-devel@sourceware.org \
--cc=ldv@altlinux.org \
--cc=maskray@google.com \
--cc=mliska@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).