From: Fangrui Song <maskray@google.com>
To: Pedro Alves <pedro@palves.net>
Cc: Simon Marchi <simon.marchi@polymtl.ca>,
Tom Tromey <tom@tromey.com>,
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 12:30:19 -0700 [thread overview]
Message-ID: <20220928193019.kwzmnaugpuoayaaw@google.com> (raw)
In-Reply-To: <d8200194-f89a-63cc-dd7a-946e94efc2db@polymtl.ca>
On 2022-09-28, Simon Marchi wrote:
>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
Thanks for the fix! I probably missed this because I use lld as the
system linker and its archive semantic is more tolerant without --warn-backrefs...
next prev parent reply other threads:[~2022-09-28 19:30 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
2022-09-28 19:27 ` Pedro Alves
2022-09-28 19:30 ` Fangrui Song [this message]
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=20220928193019.kwzmnaugpuoayaaw@google.com \
--to=maskray@google.com \
--cc=gdb-patches@sourceware.org \
--cc=pedro@palves.net \
--cc=simon.marchi@polymtl.ca \
--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).