From: Simon Marchi <simark@simark.ca>
To: "Jose E. Marchesi" <jose.marchesi@oracle.com>,
gdb-patches@sourceware.org
Cc: indu.bhagat@oracle.com, elena.zannoni@oracle.com
Subject: Re: [PATCH V2] gdb: link executables with libtool
Date: Sat, 5 Nov 2022 12:38:30 -0400 [thread overview]
Message-ID: <242f99e5-2c41-155a-3bd9-e0c96dea28f5@simark.ca> (raw)
In-Reply-To: <20221105140233.1197237-1-jose.marchesi@oracle.com>
On 11/5/22 10:02, Jose E. Marchesi via Gdb-patches wrote:
> This patch changes the GDB build system in order to use libtool to
> link the several built executables. This makes it possible to refer
> to libtool libraries (.la files) in CLIBS.
>
> As an application of the above,
>
> LIBBFD new refers to ../libbfd/libbfd.la
new -> now
> LIBBACKTRACE_LIB now refers to ../libbacktrace/libbacktrace.la
> LIBCTF now refers to ../libctf/libctf.la
The patch linked in this bug:
https://sourceware.org/bugzilla/show_bug.cgi?id=29372
also updated OPCODES to use $(OPCODES_DIR)/libopcodes.la, should you do
it too?
>
> NOTE1: The addition of libtool adds a few new configure-time options
> to GDB. Among these, --enable-shared and --disable-shared,
> which were previously ignored. Now GDB shall honor these
> options when linking, picking up the right version of the
> referred libtool libraries automagically.
>
> NOTE2: I have not tested the insight build.
>
> NOTE3: For regenerating configure I used an environment with Autoconf
> 2.69 and Automake 1.15.1. This should match the previously
> used version as announced in the configure script.
Your patch appears to be missing the changes to gdb/configure, however
the diffstat in your email shows:
gdb/configure | 31544 ++++++++++++++++++++++++------------
When running `autoreconf -f` in the gdb/ directory, I get some changes
that revert your changes to gdb/aclocal.m4, and makes some changes to
gdb/configure. But I don't think my changes are right, because LT_INIT
stays unexpanded in the generated configure.
Does the method of regenerating the build system change with this patch?
If I run libtoolize in gdb/, it adds a bunch of .m4 files to
$top_level/config, and then if I run autoreconf, LT_INIT gets properly
expanded. But these .m4 files already exist at the top-level such as
$top_level/libtool.m4, I guess we don't want them twice. Should
gdb/configure.ac be modified to find the existing files? For instance,
this makes it work for me:
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 4fd77e485762..12561d4d2de6 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -19,7 +19,7 @@ dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
dnl Process this file with autoconf to produce a configure script.
AC_INIT
-AC_CONFIG_MACRO_DIRS([../config])
+AC_CONFIG_MACRO_DIRS([.. ../config])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS(config.h:config.in, [echo > stamp-h])
AM_MAINTAINER_MODE
> NOTE4: Now the installed shared object libbfd.so is used by gdb
> if binutils is installed with --enable-shared.
Do you mean bfd instead of binutils? Or do you mean binutils in the
sense that bfd is part of binutils?
> Testing performed:
>
> - --enable-shared and --disable-shared (the default in binutils) work
> as expected: the linked executables link with the archive or shared
> libraries transparently.
>
> - Makefile.in modified for EXEEXT = .exe. It installs the binaries
> just fine. The installed gdb.exe runs fine.
>
> - Native build regtested in x86_64. The installed gdb runs fine.
>
> In the regression testing I'm observing that the following tests
> doesn't seem to be deterministic:
>
> gdb.base/step-over-syscall.exp
> gdb.threads/process-dies-while-detaching.exp
> gdb.threads/process-dies-while-handling-bp.exp
>
> Sometimes some of the the tests in these files unexpectedly fail,
> like in:
>
> -PASS: gdb.threads/process-dies-while-detaching.exp: single-process: \
> continue: detach: continue
> +FAIL: gdb.threads/process-dies-while-detaching.exp: single-process: \
> continue: detach: continue
>
> Sometimes they unexpectedly pass:
>
> -KFAIL: gdb.base/step-over-syscall.exp: clone: displaced=on: \
> check_pc_after_cross_syscall: single step over clone \
> final pc (PRMS: gdb/19675)
> +PASS: gdb.base/step-over-syscall.exp: clone: displaced=on: \
> check_pc_after_cross_syscall: single step over clone final pc
>
> -KFAIL: gdb.threads/process-dies-while-handling-bp.exp: \
> non_stop=on: cond_bp_target=0: inferior 1 exited \
> (prompt) (PRMS: gdb/18749)
> +PASS: gdb.threads/process-dies-while-handling-bp.exp: \
> non_stop=on: cond_bp_target=0: inferior 1 exited
It's unfortunately not the only ones. It's not good, but it's known.
> - Cross build for aarch64-linux-gnu built to exercise
> program_transform_name and friends. The installed
> aarch64-linux-gnu-gdb runs fine.
Great, thanks for the details on the testing.
>
> 2022-11-05 Jose E. Marchesi <jose.marchesi@oracle.com>
>
> * gdb/aclocal.m4: include libtool macros from the top-level
> directory.
> * gdb/Makefile.in (LIBTOOL): Define.
> (CC_LD): Use libtool for linking.
> (install-only): Use libtool for installing GDB$(EXEEXT).
> (install-gdbtk): Likewise for insight$(EXEEXT).
> * gdb/configure.ac: Call LT_INIT.
> Refer to libctf.la and libbacktrace.la.
> * gdb/configure: Regenerate.
> * gdb/testsuite/lib/gdb.exp: Run uninstalled GDB with libtool
> --mode=execute.
Could you add the git trailer:
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29372
?
> ---
> ChangeLog | 15 +
I don't think you should add gdb changes to the top-level ChangeLog. We
simply don't use ChangeLogs now.
> gdb/Makefile.in | 12 +-
> gdb/aclocal.m4 | 5 +
> gdb/configure | 31544 ++++++++++++++++++++++++------------
> gdb/configure.ac | 15 +-
> gdb/testsuite/lib/gdb.exp | 2 +-
> 6 files changed, 21142 insertions(+), 10451 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 73c3a006881..fea3f7c6877 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,18 @@
> +2022-11-05 Jose E. Marchesi <jose.marchesi@oracle.com>
> +
> + * gdb/aclocal.m4: include libtool macros from the top-level
> + directory.
> + * gdb/Makefile.in (LIBTOOL): Define.
> + (CC_LD): Use libtool for linking.
> + (install-only): Use libtool for installing GDB$(EXEEXT).
> + (install-gdbtk): Likewise for insight$(EXEEXT).
> + Use libbfd.la instead of libbfd.a.
> + * gdb/configure.ac: Call LT_INIT.
> + Refer to libctf.la and libbacktrace.la.
> + * gdb/configure: Regenerate.
> + * gdb/testsuite/lib/gdb.exp: Run uninstalled GDB with libtool
> + --mode=execute.
> +
> 2022-10-10 Nick Clifton <nickc@redhat.com>
>
> * src-release.sh: Add "-r <date>" option to create reproducible
> diff --git a/gdb/Makefile.in b/gdb/Makefile.in
> index c528ee5aa80..b03eedd4d2f 100644
> --- a/gdb/Makefile.in
> +++ b/gdb/Makefile.in
> @@ -143,10 +143,12 @@ MAKEINFO_CMD = $(MAKEINFO) $(MAKEINFOFLAGS) $(MAKEINFO_EXTRA_FLAGS)
> MAKEHTML = $(MAKEINFO_CMD) --html
> MAKEHTMLFLAGS =
>
> +LIBTOOL = @LIBTOOL@
> +
> # Set this up with gcc if you have gnu ld and the loader will print out
> # line numbers for undefined references.
> #CC_LD = g++ -static
> -CC_LD = $(CXX) $(CXX_DIALECT)
> +CC_LD = $(LIBTOOL) --mode=link $(CXX) $(CXX_DIALECT)
>
> # Where is our "include" directory? Typically $(srcdir)/../include.
> # This is essentially the header file directory for the library
> @@ -163,7 +165,7 @@ CTF_DEPS = @CTF_DEPS@
>
> # Where is the BFD library? Typically in ../bfd.
> BFD_DIR = ../bfd
> -BFD = $(BFD_DIR)/libbfd.a
> +BFD = $(BFD_DIR)/libbfd.la
> BFD_SRC = $(srcdir)/$(BFD_DIR)
> BFD_CFLAGS = -I$(BFD_DIR) -I$(BFD_SRC)
>
> @@ -2017,7 +2019,8 @@ install-only: $(CONFIG_INSTALL)
> true ; \
> fi ; \
> $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \
> - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) gdb$(EXEEXT) \
> + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) \
> + gdb$(EXEEXT) \
> $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
> $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(includedir)/gdb ; \
> $(INSTALL_DATA) jit-reader.h $(DESTDIR)$(includedir)/gdb/jit-reader.h
> @@ -2529,7 +2532,8 @@ install-gdbtk:
> true ; \
> fi ; \
> $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir); \
> - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) insight$(EXEEXT) \
> + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) \
> + insight$(EXEEXT) \
> $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
> $(SHELL) $(srcdir)/../mkinstalldirs \
> $(DESTDIR)$(GDBTK_LIBRARY) ; \
> diff --git a/gdb/aclocal.m4 b/gdb/aclocal.m4
> index 3ed4a58d39f..4aac87b52ed 100644
> --- a/gdb/aclocal.m4
> +++ b/gdb/aclocal.m4
> @@ -212,4 +212,9 @@ m4_include([../config/override.m4])
> m4_include([../config/pkg.m4])
> m4_include([../config/plugins.m4])
> m4_include([../config/tcl.m4])
> +m4_include([../libtool.m4])
> +m4_include([../ltoptions.m4])
> +m4_include([../ltsugar.m4])
> +m4_include([../ltversion.m4])
> +m4_include([../lt~obsolete.m4])
> m4_include([acinclude.m4])
> diff --git a/gdb/configure.ac b/gdb/configure.ac
> index fceb80e8c9d..4fd77e48576 100644
> --- a/gdb/configure.ac
> +++ b/gdb/configure.ac
> @@ -46,6 +46,10 @@ ACX_NONCANONICAL_TARGET
>
> AC_ARG_PROGRAM
>
> +# We require libtool to link with the in-tree libtool libraries
> +# the proper way.
> +LT_INIT
> +
> # We require a C++11 compiler. Check if one is available, and if
> # necessary, set CXX_DIALECT to some -std=xxx switch.
> AX_CXX_COMPILE_STDCXX(11, , mandatory)
> @@ -2092,7 +2096,7 @@ AC_ARG_ENABLE([libbacktrace],
>
> if test "${enable_libbacktrace}" = "yes"; then
> LIBBACKTRACE_INC="-I$srcdir/../libbacktrace/ -I../libbacktrace/"
> - LIBBACKTRACE_LIB=../libbacktrace/.libs/libbacktrace.a
> + LIBBACKTRACE_LIB=../libbacktrace/libbacktrace.la
> AC_DEFINE(HAVE_LIBBACKTRACE, 1, [Define if libbacktrace is being used.])
> else
> LIBBACKTRACE_INC=
> @@ -2151,15 +2155,10 @@ AC_ARG_WITH(xxhash,
> [], [with_xxhash=auto])
>
> GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
> -if test x${enable_static} = xno; then
> - LIBCTF="-Wl,--rpath,../libctf/.libs ../libctf/.libs/libctf.so"
> - CTF_DEPS="../libctf/.libs/libctf.so"
> -else
> - LIBCTF="../libctf/.libs/libctf.a"
> - CTF_DEPS="$LIBCTF"
> -fi
> if test "${enable_libctf}" = yes; then
> AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections])
> + LIBCTF="../libctf/libctf.la"
> + CTF_DEPS="../libctf/libctf.la"
> else
> LIBCTF=
> CTF_DEPS=
> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
> index e2cda30b95a..63d57581d13 100644
> --- a/gdb/testsuite/lib/gdb.exp
> +++ b/gdb/testsuite/lib/gdb.exp
> @@ -154,7 +154,7 @@ global GDB_DATA_DIRECTORY
> global inferior_spawn_id
>
> if [info exists TOOL_EXECUTABLE] {
> - set GDB $TOOL_EXECUTABLE
> + set GDB "libtool --mode=execute $TOOL_EXECUTABLE"
Can you explain why this is needed? My understanding is that
TOOL_EXECUTABLE can be used to point to an arbitrary gdb executable to
test. If it's a gdb that has been "make install"ed, then libtool
doesn't have to be involved. If pointing to a gdb executable in its
build directory, then "gdb" will be a libtool script that sets all the
right runtime library paths. The only moment I can imagine this would
be useful would be if TOOL_EXECUTABLE consists of a wrapper around
gdb, e.g. "valgrind /path/to/build/gdb".
Simon
next prev parent reply other threads:[~2022-11-05 16:38 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-05 14:02 Jose E. Marchesi
2022-11-05 16:38 ` Simon Marchi [this message]
2022-11-06 2:51 ` Mike Frysinger
2022-11-06 11:45 ` Jose E. Marchesi
2022-11-06 13:04 ` Jose E. Marchesi
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=242f99e5-2c41-155a-3bd9-e0c96dea28f5@simark.ca \
--to=simark@simark.ca \
--cc=elena.zannoni@oracle.com \
--cc=gdb-patches@sourceware.org \
--cc=indu.bhagat@oracle.com \
--cc=jose.marchesi@oracle.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).