Fix --enable-libctf and --disable-static
Commit Message
This fixes test runs and compilation when --disable-libctf,
--disable-static, or --enable-shared are passed.
Changes since v2: Use GCC_ENABLE and fix indentation. Fix prototype
using 'void'. Use 'unsupported' and gdb_caching_proc.
Changes since v3: Adapt to upstream changes providing skip_ctf_tests.
gdb/ChangeLog
* configure.ac: Add --enable-libctf: handle --disable-static
properly.
* acinclude.m4: sinclude ../config/enable.m4.
* Makefile.in (aclocal_m4_deps): Adjust accordingly.
(LIBCTF): Substitute in.
(CTF_DEPS): New, likewise.
(CLIBS): libctf needs symbols from libbfd: move earlier.
(CDEPS): Use CTF_DEPS, not LIBCTF, now LIBCTF can include rpath
flags.
* ctfread.c: Surround in ENABLE_LIBCTF.
_initialize_ctfread [ENABLE_LIBCTF]: Fix declaration to use ().
_initialize_ctfread [!ENABLE_LIBCTF]: New stub.
elfctf_build_psymtabs [!ENABLE_LIBCTF]: Likewise.
* configure: Regenerate.
* config.in: Likewise.
gdb/testsuite/ChangeLog
* configure.ac: Add --enable-libctf.
* aclocal.m4: sinclude ../config/enable.m4.
* Makefile.in (site.exp): Add enable_libctf to site.exp.
* lib/gdb.exp (skip_ctf_tests): Use it.
* gdb.base/ctf-constvars.exp: Error message tweak.
* gdb.base/ctf-ptype.exp: Likewise.
* configure: Regenerate.
---
gdb/ChangeLog | 18 +++++++++++
gdb/Makefile.in | 8 +++--
gdb/acinclude.m4 | 3 ++
gdb/config.in | 3 ++
gdb/configure | 40 ++++++++++++++++++++++++
gdb/configure.ac | 21 +++++++++++++
gdb/ctfread.c | 20 +++++++++++-
gdb/testsuite/ChangeLog | 10 ++++++
gdb/testsuite/Makefile.in | 2 ++
gdb/testsuite/aclocal.m4 | 1 +
gdb/testsuite/configure | 18 +++++++++++
gdb/testsuite/configure.ac | 3 ++
gdb/testsuite/gdb.base/ctf-constvars.exp | 2 +-
gdb/testsuite/gdb.base/ctf-ptype.exp | 3 +-
gdb/testsuite/lib/gdb.exp | 9 +++++-
15 files changed, 154 insertions(+), 7 deletions(-)
This is a respin of a patch Tom Tromey reviewed some months ago, that I
then let languish until others had redone and pushed some of it for me.
I promise I'll remember to push it this time!
Comments
>>>>> "Nick" == Nick Alcock <nick.alcock@oracle.com> writes:
Nick> This fixes test runs and compilation when --disable-libctf,
Nick> --disable-static, or --enable-shared are passed.
Thanks for doing this.
Nick> Changes since v2: Use GCC_ENABLE and fix indentation. Fix prototype
Nick> using 'void'. Use 'unsupported' and gdb_caching_proc.
I'm curious what GCC_ENABLE provides. This seemed unnecessary to me,
but I didn't read any earlier reviews, so if it was added by request or
for some purpose, it is fine -- but I'd still like to understand why.
Nick> -CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(LIBCTF) $(ZLIB) \
Nick> +CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(ZLIB) \
I thought BFD required libctf (when enabled) and so changing this
ordering would be incorrect?
Nick> # Using `-gt` generates full-fledged CTF debug information.
Nick> set opts "additional_flags=-gt"
Nick> +
Nick> if { [prepare_for_testing "failed to prepare" ${testfile} \
Spurious change.
Other than these nits, this is looking good.
Tom
[Sorry for the delay: on holiday with enforced computer absence]
On 19 Dec 2019, Tom Tromey said:
>>>>>> "Nick" == Nick Alcock <nick.alcock@oracle.com> writes:
>
> Nick> This fixes test runs and compilation when --disable-libctf,
> Nick> --disable-static, or --enable-shared are passed.
>
> Thanks for doing this.
I'm just sorry I dropped it for so long!
> Nick> Changes since v2: Use GCC_ENABLE and fix indentation. Fix prototype
> Nick> using 'void'. Use 'unsupported' and gdb_caching_proc.
>
> I'm curious what GCC_ENABLE provides. This seemed unnecessary to me,
> but I didn't read any earlier reviews, so if it was added by request or
> for some purpose, it is fine -- but I'd still like to understand why.
It just keeps verbosity down a bit, letting us say
GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
rather than
AC_ARG_ENABLE([libctf],
AS_HELP_STRING([--enable-libctf],
[Handle .ctf type-info sections]),
[enable_libctf=$enableval], [enable_libctf=yes])
Marginal, but nonzero, particularly given that this stanza appears in
multiple packages' configure.acs. I'm not wedded to it, but it seemed to
make things a bit clearer to me, and some of the M4 in config/ already
uses it for this purpose.
> Nick> -CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(LIBCTF) $(ZLIB) \
> Nick> +CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(ZLIB) \
>
> I thought BFD required libctf (when enabled) and so changing this
> ordering would be incorrect?
Other way round: libctf can use BFD to suck CTF sections out of ELF
executables and associate them with the ELF strtab and symtab
automatically. BFD's only use of libctf is indirect, via linker hooks.
> Nick> # Using `-gt` generates full-fledged CTF debug information.
> Nick> set opts "additional_flags=-gt"
> Nick> +
> Nick> if { [prepare_for_testing "failed to prepare" ${testfile} \
>
> Spurious change.
Oops! will drop in next cycle.
> Other than these nits, this is looking good.
Excellent! Thanks for the review :)
@@ -1,3 +1,21 @@
+2019-12-13 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure.ac: Add --enable-libctf: handle --disable-static
+ properly.
+ * acinclude.m4: sinclude ../config/enable.m4.
+ * Makefile.in (aclocal_m4_deps): Adjust accordingly.
+ (LIBCTF): Substitute in.
+ (CTF_DEPS): New, likewise.
+ (CLIBS): libctf needs symbols from libbfd: move earlier.
+ (CDEPS): Use CTF_DEPS, not LIBCTF, now LIBCTF can include rpath
+ flags.
+ * ctfread.c: Surround in ENABLE_LIBCTF.
+ _initialize_ctfread [ENABLE_LIBCTF]: Fix declaration to use ().
+ _initialize_ctfread [!ENABLE_LIBCTF]: New stub.
+ elfctf_build_psymtabs [!ENABLE_LIBCTF]: Likewise.
+ * configure: Regenerate.
+ * config.in: Likewise.
+
2019-12-12 Tom Tromey <tom@tromey.com>
* objfiles.h (struct objfile) <partial_symtabs>: Now a
@@ -154,7 +154,8 @@ INCLUDE_CFLAGS = -I$(INCLUDE_DIR)
LIBIBERTY = ../libiberty/libiberty.a
# Where is the CTF library? Typically in ../libctf.
-LIBCTF = ../libctf/.libs/libctf.a
+LIBCTF = @LIBCTF@
+CTF_DEPS = @CTF_DEPS@
# Where is the BFD library? Typically in ../bfd.
BFD_DIR = ../bfd
@@ -606,14 +607,14 @@ INTERNAL_LDFLAGS = \
# Libraries and corresponding dependencies for compiling gdb.
# XM_CLIBS, defined in *config files, have host-dependent libs.
# LIBIBERTY appears twice on purpose.
-CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(LIBCTF) $(ZLIB) \
+CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(ZLIB) \
$(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
$(XM_CLIBS) $(GDBTKLIBS) \
@LIBS@ @GUILE_LIBS@ @PYTHON_LIBS@ \
$(LIBEXPAT) $(LIBLZMA) $(LIBBABELTRACE) $(LIBIPT) \
$(LIBIBERTY) $(WIN32LIBS) $(LIBGNU) $(LIBICONV) $(LIBMPFR) \
$(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS)
-CDEPS = $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) $(LIBCTF) \
+CDEPS = $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) $(CTF_DEPS) \
$(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU)
DIST = gdb
@@ -2064,6 +2065,7 @@ aclocal_m4_deps = \
transform.m4 \
../bfd/bfd.m4 \
../config/acinclude.m4 \
+ ../config/enable.m4 \
../config/plugins.m4 \
../config/lead-dot.m4 \
../config/override.m4 \
@@ -24,6 +24,9 @@ m4_include(../bfd/bfd.m4)
dnl This gets the standard macros.
m4_include(../config/acinclude.m4)
+dnl This gets GCC_ENABLE.
+sinclude(../config/enable.m4)
+
dnl This gets AC_PLUGINS, needed by ACX_LARGEFILE.
m4_include(../config/plugins.m4)
@@ -36,6 +36,9 @@
/* Define to BFD's default target vector. */
#undef DEFAULT_BFD_VEC
+/* Handle .ctf type-info sections */
+#undef ENABLE_LIBCTF
+
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
@@ -631,6 +631,9 @@ GDB_NM_FILE
LTLIBXXHASH
LIBXXHASH
HAVE_LIBXXHASH
+CTF_DEPS
+LIBCTF
+ENABLE_LIBCTF
LTLIBBABELTRACE
LIBBABELTRACE
HAVE_LIBBABELTRACE
@@ -909,6 +912,7 @@ enable_gdbserver
with_babeltrace
with_libbabeltrace_prefix
with_xxhash
+enable_libctf
with_libxxhash_prefix
enable_unit_tests
'
@@ -1577,6 +1581,7 @@ Optional Features:
--enable-sim link gdb with simulator
--enable-gdbserver automatically build gdbserver (yes/no/auto, default
is auto)
+ --enable-libctf Handle .ctf type-info sections [default=yes]
--enable-unit-tests Enable the inclusion of unit tests when compiling
GDB
@@ -18399,6 +18404,41 @@ else
fi
+ # Check whether --enable-libctf was given.
+if test "${enable_libctf+set}" = set; then :
+ enableval=$enable_libctf;
+ case "$enableval" in
+ yes|no) ;;
+ *) as_fn_error $? "Argument to enable/disable libctf must be yes or no" "$LINENO" 5 ;;
+ esac
+
+else
+ enable_libctf=yes
+fi
+
+
+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
+
+$as_echo "#define ENABLE_LIBCTF 1" >>confdefs.h
+
+else
+ LIBCTF=
+ CTF_DEPS=
+fi
+
+
+
+
+# If nativefile (NAT_FILE) is not set in configure.nat, we link to an
+# empty version.
+
if test "x$with_xxhash" != "xno"; then
@@ -2173,6 +2173,27 @@ AC_ARG_WITH(xxhash,
AC_HELP_STRING([--with-xxhash], [use libxxhash for hashing (faster) (auto/yes/no)]),
[], [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])
+else
+ LIBCTF=
+ CTF_DEPS=
+fi
+AC_SUBST(ENABLE_LIBCTF)
+AC_SUBST(LIBCTF)
+AC_SUBST(CTF_DEPS)
+
+# If nativefile (NAT_FILE) is not set in configure.nat, we link to an
+# empty version.
+
if test "x$with_xxhash" != "xno"; then
AC_LIB_HAVE_LINKFLAGS([xxhash], [],
[#include <xxhash.h>],
@@ -81,6 +81,9 @@
#include "block.h"
#include "ctfread.h"
#include "psympriv.h"
+
+#if ENABLE_LIBCTF
+
#include "ctf.h"
#include "ctf-api.h"
@@ -1479,8 +1482,23 @@ elfctf_build_psymtabs (struct objfile *of)
}
void
-_initialize_ctfread (void)
+_initialize_ctfread ()
{
ctf_file_key
= register_objfile_data_with_cleanup (NULL, ctf_close_objfile);
}
+
+#else
+
+void
+_initialize_ctfread ()
+{
+}
+
+void
+elfctf_build_psymtabs (struct objfile *of)
+{
+ /* Nothing to do if CTF is disabled. */
+}
+
+#endif /* ENABLE_LIBCTF */
@@ -1,3 +1,13 @@
+2019-12-13 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure.ac: Add --enable-libctf.
+ * aclocal.m4: sinclude ../config/enable.m4.
+ * Makefile.in (site.exp): Add enable_libctf to site.exp.
+ * lib/gdb.exp (skip_ctf_tests): Use it.
+ * gdb.base/ctf-constvars.exp: Error message tweak.
+ * gdb.base/ctf-ptype.exp: Likewise.
+ * configure: Regenerate.
+
2019-12-11 Tom Tromey <tom@tromey.com>
* gdb.tui/resize.exp: Fix regexp.
@@ -28,6 +28,7 @@ program_transform_name = @program_transform_name@
build_canonical = @build@
host_canonical = @host@
target_canonical = @target@
+enable_libctf = @enable_libctf@
SHELL = @SHELL@
EXEEXT = @EXEEXT@
@@ -131,6 +132,7 @@ $(abs_builddir)/site.exp site.exp: ./config.status Makefile
@echo "set build_triplet ${build_canonical}" >> ./tmp0
@echo "set srcdir ${abs_srcdir}" >> ./tmp0
@echo "set tool gdb" >> ./tmp0
+ @echo "set enable_libctf ${enable_libctf}" >> ./tmp0
@echo 'source $${srcdir}/lib/append_gdb_boards_dir.exp' >> ./tmp0
@echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
@cat ./tmp0 > site.exp
@@ -1,5 +1,6 @@
m4_include(../../config/acx.m4)
m4_include(../../config/override.m4)
+m4_include(../../config/enable.m4)
m4_include(../transform.m4)
# AM_CONDITIONAL -*- Autoconf -*-
@@ -638,6 +638,7 @@ LDFLAGS
CFLAGS
CC
RPATH_ENVVAR
+enable_libctf
subdirs
target_noncanonical
target_os
@@ -694,6 +695,7 @@ ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_gdbtk
+enable_libctf
enable_shared
'
ac_precious_vars='build_alias
@@ -1323,6 +1325,7 @@ Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-gtk enable gdbtk graphical user interface (GUI)
+ --enable-libctf Handle .ctf type-info sections [default=yes]
--enable-shared build shared libraries deault=yes
Some influential environment variables:
@@ -2189,6 +2192,21 @@ subdirs="$subdirs gdb.gdbtk"
fi
+ # Check whether --enable-libctf was given.
+if test "${enable_libctf+set}" = set; then :
+ enableval=$enable_libctf;
+ case "$enableval" in
+ yes|no) ;;
+ *) as_fn_error $? "Argument to enable/disable libctf must be yes or no" "$LINENO" 5 ;;
+ esac
+
+else
+ enable_libctf=yes
+fi
+
+
+
+
# Enable shared libraries.
# Check whether --enable-shared was given.
if test "${enable_shared+set}" = set; then :
@@ -43,6 +43,9 @@ if test $enable_gdbtk = yes; then
AC_CONFIG_SUBDIRS(gdb.gdbtk)
fi
+GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
+AC_SUBST(enable_libctf)
+
# Enable shared libraries.
AC_ARG_ENABLE(shared,
[ --enable-shared build shared libraries [deault=yes]],,
@@ -25,7 +25,7 @@
# with mixed types.
if [skip_ctf_tests] {
- unsupported "no ctf debug format support"
+ unsupported "no CTF debug format support, or CTF disabled in GDB"
return 0
}
@@ -16,7 +16,7 @@
# This file is a subset of ptype.exp written by Rob Savoye. (rob@cygnus.com)
if [skip_ctf_tests] {
- unsupported "no ctf debug format support"
+ unsupported "no CTF debug format support, or CTF disabled in GDB"
return 0
}
@@ -24,6 +24,7 @@ standard_testfile .c
# Using `-gt` generates full-fledged CTF debug information.
set opts "additional_flags=-gt"
+
if { [prepare_for_testing "failed to prepare" ${testfile} \
[list $srcfile] [list $opts nowarnings]] } {
return 0
@@ -6824,9 +6824,16 @@ proc cmp_file_string { file str msg } {
}
# Does the compiler support CTF debug output using '-gt' compiler
-# flag? If not then we should skip these tests.
+# flag? If not then we should skip these tests. We should also
+# skip them if libctf was explicitly disabled.
gdb_caching_proc skip_ctf_tests {
+ global enable_libctf
+
+ if {$enable_libctf eq "no"} {
+ return 1
+ }
+
return ![gdb_can_simple_compile ctfdebug {
int main () {
return 0;