public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
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...

  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).