From: Simon Marchi <simon.marchi@polymtl.ca>
To: Pedro Alves <pedro@palves.net>, Fangrui Song <maskray@google.com>,
Tom Tromey <tom@tromey.com>
Cc: Fangrui Song via Gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [PATCH] Fix GDB build: ELF support check & -lzstd (was: Re: [PATCH v3] binutils, gdb: support zstd compressed debug sections)
Date: Wed, 28 Sep 2022 15:00:12 -0400 [thread overview]
Message-ID: <d8200194-f89a-63cc-dd7a-946e94efc2db@polymtl.ca> (raw)
In-Reply-To: <ec44c3f4-efc9-2adc-6fdf-8ca20688c268@palves.net>
On 9/28/22 07:52, Pedro Alves wrote:
> [-binutils]
>
> On 2022-09-27 7:53 p.m., Fangrui Song via Binutils wrote:
>> On Tue, Sep 27, 2022 at 11:08 AM Tom Tromey <tom@tromey.com> wrote:
>>>
>>>>>>>> Fangrui Song via Gdb-patches <gdb-patches@sourceware.org> writes:
>>>
>>>> PR29397 PR29563: The new configure option --with-zstd defaults to auto.
>>>> If pkgconfig/libzstd.pc is found, define HAVE_ZSTD and support zstd
>>>> compressed debug sections for most tools.
>>>
>>>> * bfd: for addr2line, objdump --dwarf, gdb, etc
>>>> * gas: support --compress-debug-sections=zstd
>>>> * ld: support ELFCOMPRESS_ZSTD input and --compress-debug-sections=zstd
>>>> * objcopy: support ELFCOMPRESS_ZSTD input for
>>>> --decompress-debug-sections and --compress-debug-sections=zstd
>>>> * gdb: support ELFCOMPRESS_ZSTD input. The bfd change references zstd
>>>> symbols, so gdb has to link against -lzstd in this patch.
>>>
>>> This also needs some change to the sims.
>>> I see failures like this with git master:
>>>
>>> make[4]: Entering directory '/home/tromey/gdb/build/sim/bpf'
>>> CCLD run
>>> ../../bfd/libbfd.a(compress.o):compress.c:function decompress_contents: error: undefined reference to 'ZSTD_decompress'
>>> ../../bfd/libbfd.a(compress.o):compress.c:function decompress_contents: error: undefined reference to 'ZSTD_isError'
>>> (unknown):176: error: undefined reference to 'ZSTD_compress'
>>> (unknown):179: error: undefined reference to 'ZSTD_isError'
>>> collect2: error: ld returned 1 exit status
>>>
>>> You'll see them all if you do a build with all sims enabled.
>>>
>>> thanks,
>>> Tom
>>
>> Thanks for the report and Tom's IRC chat with me about the
>> `../../configure --enable-targets --enable-sim; make all-gdb` build.
>> Tom confirmed that the latest commit `sim: Link ZSTD_LIBS` has fixed
>> the problem.
>>
>
> Hi!
>
> I'm running into a similar gdb build/link failure with current master.
>
> See patch below.
>
> -- >8 --
> From a461b259690b62906978450533688b71ec939310 Mon Sep 17 00:00:00 2001
> From: Pedro Alves <pedro@palves.net>
> Date: Wed, 28 Sep 2022 11:33:30 +0100
> Subject: [PATCH] Fix GDB build: ELF support check & -lzstd
>
> GDB fails to build for me, on Ubuntu 20.04. I get:
>
> ...
> CXXLD gdb
> /usr/bin/ld: linux-tdep.o: in function `linux_corefile_thread(thread_info*, linux_corefile_thread_data*)':
> /home/pedro/gdb/binutils-gdb/src/gdb/linux-tdep.c:1831: undefined reference to `gcore_elf_build_thread_register_notes(gdbarch*, thread_info*, gdb_signal, bfd*, std::unique_ptr<char, gdb::xfree_deleter<char> >*, int*)'
> /usr/bin/ld: linux-tdep.o: in function `linux_make_corefile_notes(gdbarch*, bfd*, int*)':
> /home/pedro/gdb/binutils-gdb/src/gdb/linux-tdep.c:2117: undefined reference to `gcore_elf_make_tdesc_note(bfd*, std::unique_ptr<char, gdb::xfree_deleter<char> >*, int*)'
> collect2: error: ld returned 1 exit status
> make[2]: *** [Makefile:2149: gdb] Error 1
> make[2]: Leaving directory '/home/pedro/gdb/binutils-gdb/build/gdb'
> make[1]: *** [Makefile:11847: all-gdb] Error 2
> make[1]: Leaving directory '/home/pedro/gdb/binutils-gdb/build'
> make: *** [Makefile:1004: all] Error 2
>
> Those undefined functions exist in gdb/gcore-elf.c, which is only
> included in the build if GDB's configure thinks that the target you're
> configuring for is an ELF target. GDB's configure thinks my system
> isn't ELF, which is incorrect.
>
> For the ELF support check, gdb/config.log shows:
>
> configure:17387: checking for ELF support in BFD
> configure:17407: gcc -o conftest -I/home/pedro/gdb/binutils-gdb/src/gdb/../include -I../bfd -I/home/pedro/gdb/binutils-gdb/src/gdb/../bfd -g3 -O0 -L../bfd -L../libiberty -lzstd conftest.c -lbfd -liberty -lz -lncursesw -lm -ldl >&5
> /usr/bin/ld: ../bfd/libbfd.a(compress.o): in function `decompress_contents':
> /home/pedro/gdb/binutils-gdb/src/bfd/compress.c:42: undefined reference to `ZSTD_decompress'
> /usr/bin/ld: /home/pedro/gdb/binutils-gdb/src/bfd/compress.c:44: undefined reference to `ZSTD_isError'
> /usr/bin/ld: ../bfd/libbfd.a(compress.o): in function `bfd_compress_section_contents':
> /home/pedro/gdb/binutils-gdb/src/bfd/compress.c:195: undefined reference to `ZSTD_compress'
> /usr/bin/ld: /home/pedro/gdb/binutils-gdb/src/bfd/compress.c:198: undefined reference to `ZSTD_isError'
> collect2: error: ld returned 1 exit status
> configure:17407: $? = 1
> ...
> configure:17417: result: no
>
> Note how above, in the gcc command line, "-lzstd" appears before
> "-lbfd". That explain the link failure. It should appear after, like
> -lz does.
>
> This commit fixes it, by moving ZSTD_LIBS from LDFLAGS to LIBS, next
> to -lz, in GDB_AC_CHECK_BFD, and regenerating gdb/configure.
>
> Change-Id: I1f4128dde634e8ea04c9002904f1005a8b3a6863
> ---
> gdb/acinclude.m4 | 4 ++--
> gdb/configure | 8 ++++----
> 2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4
> index 28846119dcb..62fa66c7af3 100644
> --- a/gdb/acinclude.m4
> +++ b/gdb/acinclude.m4
> @@ -234,9 +234,9 @@ AC_DEFUN([GDB_AC_CHECK_BFD], [
> # always want our bfd.
> CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
> ZLIBDIR=`echo $zlibdir | sed 's,\$(top_builddir)/,,g'`
> - LDFLAGS="-L../bfd -L../libiberty $ZLIBDIR $ZSTD_LIBS $LDFLAGS"
> + LDFLAGS="-L../bfd -L../libiberty $ZLIBDIR $LDFLAGS"
> intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
> - LIBS="-lbfd -liberty -lz $intl $LIBS"
> + LIBS="-lbfd -liberty -lz $ZSTD_LIBS $intl $LIBS"
> AC_CACHE_CHECK(
> [$1],
> [$2],
LGTM. Someone opened a bug about this:
https://sourceware.org/bugzilla/show_bug.cgi?id=29630
Simon
next prev parent reply other threads:[~2022-09-28 19:01 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-23 4:08 [PATCH v3] binutils, gdb: support zstd compressed debug sections Fangrui Song
2022-09-23 14:32 ` Simon Marchi
2022-09-26 5:12 ` Alan Modra
2022-09-26 7:20 ` Fangrui Song
2022-09-26 13:30 ` Alan Modra
2022-09-26 14:08 ` Simon Marchi
2022-09-27 0:33 ` Alan Modra
2022-09-23 15:45 ` Nick Clifton
2022-09-23 15:58 ` Simon Marchi
2022-09-23 18:20 ` Fangrui Song
2022-09-23 18:57 ` Simon Marchi
2022-09-23 20:34 ` Fangrui Song
2022-09-24 5:43 ` Eli Zaretskii
2022-09-24 6:53 ` Enze Li
2022-09-24 7:13 ` Fangrui Song
2022-09-27 18:06 ` Tom Tromey
2022-09-27 18:08 ` Tom Tromey
2022-09-27 18:53 ` Fangrui Song
2022-09-28 11:52 ` [PATCH] Fix GDB build: ELF support check & -lzstd (was: Re: [PATCH v3] binutils, gdb: support zstd compressed debug sections) Pedro Alves
2022-09-28 19:00 ` Simon Marchi [this message]
2022-09-28 19:27 ` Pedro Alves
2022-09-28 19:30 ` Fangrui Song
2022-09-29 18:30 ` Pedro Alves
2022-09-29 11:43 ` [PATCH v3] binutils, gdb: support zstd compressed debug sections Martin Liška
2022-09-29 20:17 ` Fangrui Song
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=d8200194-f89a-63cc-dd7a-946e94efc2db@polymtl.ca \
--to=simon.marchi@polymtl.ca \
--cc=gdb-patches@sourceware.org \
--cc=maskray@google.com \
--cc=pedro@palves.net \
--cc=tom@tromey.com \
/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).