]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb, configure: Add enable-binary-file-format option for configure
authorGuinevere Larsen <guinevere@redhat.com>
Wed, 21 Aug 2024 14:10:50 +0000 (11:10 -0300)
committerGuinevere Larsen <guinevere@redhat.com>
Thu, 14 Aug 2025 16:23:52 +0000 (13:23 -0300)
GDB has support for many binary file formats, some which might be very
unlikely to be found in some situations (such as the XCOFF format in
an x86 system). This commit introduces the option for a user to choose
which formats GDB will support at build configuration time.

This is especially useful to avoid possible security concerns with
readers that aren't expected to be used at all, as they are one of
the simplest vectors for an attacker to try and hit GDB with.  This
change can also reduce the size of the final binary, if that is a
concern.

This commit adds a switch to the configure script allowing a user to
only enable selected file formats, called --enable-binary-file-formats.
The default behavior when the switch is omitted is to compile all file
formats, keeping the original behavior of the script. At the time of
this commit, the valid options for this option are: dbx, coff (which
includes coff-pe), xcoff, mips, elf, macho and all. All is treated
especially, activating all supported readers.

A few targets may require specific binary file format support, as they
directly call functions defined by the file reader. Specifically,
windows targets require coff support, and rs6000 aix and lynx178 targets
require xcoff support. Considering that those formats are the main - or
only - one available in those targets, I believe it makes sense to
re-enable those readers. If that happens, the script will emit the
following warning:

  FOO is required to support one or more requested targets. Adding it

Users aren't able to force the disabling of those formats, since GDB
will not compile without those readers. Ideally we'd like to be able
to disable even those formats, in case a user wants to build GDB only
to examine remote files for example, but the current infrastructure
for the file format readers doesn't allow us to do it.

Mach-O and elf support are also dependent on BFD support being compiled
in.  In case one of those was requested and BFD does not support them,
the following error is emitted:

    FOO was requested, but BFD does not support it.

Finally, this configure switch is also printed by the "show
configuration" command in GDB.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
gdb/Makefile.in
gdb/NEWS
gdb/README
gdb/config.in
gdb/configure
gdb/configure.ac
gdb/configure.tgt
gdb/doc/gdb.texinfo
gdb/top.c

index fc0c56564c232523b5974a128da6bf58c6bb3160..7654fb1aa04465e570b2e06f9a223b95448b0ca2 100644 (file)
@@ -907,13 +907,22 @@ ALL_TARGET_OBS = \
        vax-tdep.o \
        windows-tdep.o \
        x86-tdep.o \
-       xcoffread.o \
        xstormy16-tdep.o \
        xtensa-config.o \
        xtensa-linux-tdep.o \
        xtensa-tdep.o \
        z80-tdep.o
 
+# Object files for reading specific types of debug information.
+coff_SRCS = coffread.c coff-pe-read.c
+dbx_SRCS = dbxread.c
+elf_SRCS = elfread.c stap-probe.c dtrace-probe.c
+macho_SRCS = machoread.c
+mips_SRCS = mipsread.c
+xcoff_SRCS = xcoffread.c
+FORMAT_SRCS = @FORMAT_SRCS@
+FORMAT_OBS = $(patsubst %.c,%.o,$(FORMAT_SRCS))
+
 # The following native-target dependent variables are defined on
 # configure.nat.
 NAT_FILE = @NAT_FILE@
@@ -1070,8 +1079,6 @@ COMMON_SFILES = \
        c-varobj.c \
        charset.c \
        cli-out.c \
-       coff-pe-read.c \
-       coffread.c \
        complaints.c \
        completer.c \
        copying.c \
@@ -1085,7 +1092,6 @@ COMMON_SFILES = \
        d-lang.c \
        d-namespace.c \
        d-valprint.c \
-       dbxread.c \
        dcache.c \
        debug.c \
        debuginfod-support.c \
@@ -1150,7 +1156,6 @@ COMMON_SFILES = \
        memtag.c \
        minidebug.c \
        minsyms.c \
-       mipsread.c \
        namespace.c \
        objc-lang.c \
        objfiles.c \
@@ -1243,7 +1248,6 @@ SFILES = \
        d-exp.y \
        dtrace-probe.c \
        elf-none-tdep.c \
-       elfread.c \
        f-exp.y \
        gcore-elf.c \
        gdb.c \
@@ -1870,7 +1874,6 @@ ALLDEPFILES = \
        x86-gnu-nat.c \
        x86-nat.c \
        x86-tdep.c \
-       xcoffread.c \
        xstormy16-tdep.c \
        xtensa-config.c \
        xtensa-linux-nat.c \
@@ -1925,7 +1928,8 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
        $(patsubst %.c,%.o,$(COMMON_SFILES)) \
        $(SUBDIR_CLI_OBS) \
        $(SUBDIR_MI_OBS) \
-       $(SUBDIR_TARGET_OBS)
+       $(SUBDIR_TARGET_OBS) \
+       $(FORMAT_OBS)
 
 SUBDIRS = doc @subdirs@ data-directory
 CLEANDIRS = $(SUBDIRS)
index 4c9aed421bb05e97505faa37749952d93ba20e99..a8c17318d7eab0350ed42e5b3eafa56e58ffe3ce 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -224,6 +224,17 @@ vFile:stat
 * Support for stabs debugging format and the a.out/dbx object format is
   deprecated, and will be removed in GDB 18.
 
+* Configure changes
+
+--enable-binary-file-formats=[FORMAT,...]
+--enable-binary-file-formats=all
+  A user can now decide to only compile support for certain file formats.
+  The available formats at this point are: dbx, coff, xcoff, elf, mach-o
+  and mips.  Some targets require specific file formats to be available,
+  and in such cases, the configure script will warn the user and add
+  support anyway.  By default, all formats will be compiled in, to
+  continue the behavior from before adding the switch.
+
 * A new configure option was added, allowing support for the compile
   subsystem to be disabled at configure time, in the form of
   --disable-gdb-compile.
index eca4181c751eb3ff74dae505e98ed2826ebf2f27..5dc2e7e7ad3305e671cfd4a4a2323f9781592a29 100644 (file)
@@ -417,6 +417,30 @@ more obscure GDB `configure' options are not listed here.
      There is no convenient way to generate a list of all available
      targets.
 
+`--enable-binary-file-formats=FORMAT,FORMAT,...'
+`--enable-binary-file-formats=all'
+    Configure GDB to only be be able to read selected file formats.
+    The special value "all" causes all file formats to be compiled
+    in, and is the the default behavior of the option.  This option
+    is meant for advanced users who are sure of what they expect,
+    if you are unsure which options you will need on your debugging
+    sessions, we recommend that you not use this feature.  The
+    accepted options are:
+      * coff: Main format on Windows systems, this is required to
+        compile with windows target support;
+      * dbx (also known as a.out): Legacy file format, this is
+        recommended if you know you will be dealing with this
+        file format;
+      * elf: Main format on Linux systems, this is heavily
+        recommended when compiling with linux support;
+      * macho: Main format on MacOS systems, this is heavily
+        recommended when compiling for those targets;
+      * mips (also known as ecoff): Main file format for targets
+        running on MIPS CPUs, this is heavily recommended when
+        supporting those targets;
+      * xcoff: Main format on AIX systems, this is required to
+        compile for AIX targets and rs6000 CPUs.
+
 `--with-gdb-datadir=PATH'
      Set the GDB-specific data directory.  GDB will look here for
      certain supporting files or scripts.  This defaults to the `gdb'
index 149aeaf979bafe4eb8248d9ba0bdefe13a761de8..efc3100cb9e7c42ae9a6622d3eb356a5cca4d5d8 100644 (file)
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Which binary file formats were requested at configure time. */
+#undef SUPPORTED_BINARY_FILE_FORMATS
+
 /* automatically load a system-wide gdbinit file */
 #undef SYSTEM_GDBINIT
 
index 8fc3b04efbfc2323c1bc9690a9ec7b10442ed5b1..cdea00f8675973bda761a9bb863d3cd9800a236c 100755 (executable)
@@ -706,6 +706,7 @@ LIBGUI
 LTLIBLZMA
 LIBLZMA
 HAVE_LIBLZMA
+FORMAT_SRCS
 SER_HARDWIRE
 WERROR_CFLAGS
 WARN_CFLAGS
@@ -932,6 +933,7 @@ with_relocated_sources
 with_auto_load_dir
 with_auto_load_safe_path
 enable_targets
+enable_binary_file_formats
 enable_gdb_mdebug_support
 enable_gdb_dwarf_support
 with_amd_dbgapi
@@ -1645,6 +1647,10 @@ Optional Features:
   --disable-nls           do not use Native Language Support
   --enable-targets=TARGETS
                           alternative target configurations
+  --enable-binary-file-formats=FORMATS
+                          enable support for selected file formats (default
+                          'all') available formats: coff, dbx, elf, macho,
+                          mips, xcoff, all
   --enable-gdb-mdebug-support
                           Enable support for the mdebug debuginfo format
                           (default 'yes')
@@ -11507,7 +11513,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11510 "configure"
+#line 11516 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11613,7 +11619,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11616 "configure"
+#line 11622 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -24882,6 +24888,18 @@ esac
 fi
 
 
+# Check whether --enable-binary_file_formats was given.
+if test "${enable_binary_file_formats+set}" = set; then :
+  enableval=$enable_binary_file_formats; case "${enableval}" in
+ yes | "") as_fn_error $? "enable-binary-file-formats option must specify file formats or 'all'" "$LINENO" 5
+            ;;
+  no)       enable_binary_file_formats= ;;
+  *)        enable_binary_file_formats=$enableval ;;
+esac
+else
+  enable_binary_file_formats=all
+fi
+
 
 # Check whether to support mdebug/ecoff debug information.
 # Check whether --enable-gdb-mdebug-support was given.
@@ -24986,10 +25004,21 @@ TARGET_OBS=
 all_targets=
 HAVE_NATIVE_GCORE_TARGET=
 
+# File formats that will be enabled based on the selected
+# target(s).  These are chosen because they are required to
+# compile one or more of the selected targets.
+target_formats=
+
+# If all targets were requested, this is all formats that should
+# accompany them.  These are just the ones required for compilation
+# to succeed, not the formats suggested based on targets.
+all_target_formats="coff xcoff"
+
 for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
 do
   if test "$targ_alias" = "all"; then
     all_targets=true
+    target_formats=$all_target_formats
   else
     # Canonicalize the secondary target names.
     result=`$ac_config_sub $targ_alias 2>/dev/null`
 # Note that WIN32APILIBS is set by GDB_AC_COMMON.
 WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
 
+# Object files to be used when building with support for all file formats.
+# This should not have elf or macho, as support for those formats depends
+# on BFD enabling them as well.
+all_binary_file_srcs="\$(dbx_SRCS) \$(mips_SRCS) \$(coff_SRCS) \$(xcoff_SRCS)"
+
+bfd_supports_elf=no
 # Add ELF support to GDB, but only if BFD includes ELF support.
 
   OLD_CFLAGS=$CFLAGS
@@ -31645,7 +31680,7 @@ WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
   CC="./libtool --quiet --mode=link $CC"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF support in BFD" >&5
 $as_echo_n "checking for ELF support in BFD... " >&6; }
-if ${gdb_cv_var_elf+:} false; then :
+if ${gdb_cv_var_bfd_elf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -31664,24 +31699,23 @@ return bfd_get_elf_phdr_upper_bound (NULL);
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  gdb_cv_var_elf=yes
+  gdb_cv_var_bfd_elf=yes
 else
-  gdb_cv_var_elf=no
+  gdb_cv_var_bfd_elf=no
 
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_elf" >&5
-$as_echo "$gdb_cv_var_elf" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_bfd_elf" >&5
+$as_echo "$gdb_cv_var_bfd_elf" >&6; }
   CC=$OLD_CC
   CFLAGS=$OLD_CFLAGS
   LDFLAGS=$OLD_LDFLAGS
   LIBS=$OLD_LIBS
-if test "$gdb_cv_var_elf" = yes; then
-  CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o dtrace-probe.o \
-               gcore-elf.o elf-none-tdep.o"
+if test "$gdb_cv_var_bfd_elf" = yes; then
+  CONFIG_OBS="$CONFIG_OBS gcore-elf.o elf-none-tdep.o"
 
 $as_echo "#define HAVE_ELF 1" >>confdefs.h
 
@@ -31744,9 +31778,12 @@ if test "$ac_res" != no; then :
 fi
 
   fi
+  bfd_supports_elf=yes
+  all_binary_file_srcs="$all_binary_file_srcs \$(elf_SRCS)"
 fi
 
 # Add macho support to GDB, but only if BFD includes it.
+bfd_supports_macho=no
 
   OLD_CFLAGS=$CFLAGS
   OLD_LDFLAGS=$LDFLAGS
@@ -31763,7 +31800,7 @@ fi
   CC="./libtool --quiet --mode=link $CC"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mach-O support in BFD" >&5
 $as_echo_n "checking for Mach-O support in BFD... " >&6; }
-if ${gdb_cv_var_macho+:} false; then :
+if ${gdb_cv_var_bfd_macho+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -31782,30 +31819,81 @@ return bfd_mach_o_lookup_command (NULL, 0, NULL);
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  gdb_cv_var_macho=yes
+  gdb_cv_var_bfd_macho=yes
 else
-  gdb_cv_var_macho=no
+  gdb_cv_var_bfd_macho=no
 
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_macho" >&5
-$as_echo "$gdb_cv_var_macho" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_bfd_macho" >&5
+$as_echo "$gdb_cv_var_bfd_macho" >&6; }
   CC=$OLD_CC
   CFLAGS=$OLD_CFLAGS
   LDFLAGS=$OLD_LDFLAGS
   LIBS=$OLD_LIBS
-if test "$gdb_cv_var_macho" = yes; then
-  CONFIG_OBS="$CONFIG_OBS machoread.o"
+if test "$gdb_cv_var_bfd_macho" = yes; then
+  bfd_supports_macho=yes
+  all_binary_file_srcs="$all_binary_file_srcs \$(macho_SRCS)"
 fi
 
+FORMAT_SRCS=
+
+if test "$enable_binary_file_formats" != "all"; then
+    # Formats that are required by some requested target(s).
+    # Warn users that they are added, so no one is surprised.
+    for req in $target_formats; do
+       case ,$enable_binary_file_formats, in
+       *,$req,*)
+           # Do nothing.
+           ;;
+       *)
+           { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"$req is required to support one or more requested targets.  Adding it\"" >&5
+$as_echo "$as_me: WARNING: \"$req is required to support one or more requested targets.  Adding it\"" >&2;}
+           enable_binary_file_formats="${enable_binary_file_formats},$req"
+           ;;
+       esac
+    done
+
+
+cat >>confdefs.h <<_ACEOF
+#define SUPPORTED_BINARY_FILE_FORMATS "$enable_binary_file_formats"
+_ACEOF
+
+fi
+
+enable_binary_file_formats=$(echo $enable_binary_file_formats | sed 's/,/ /g')
+
+# Go through all requested and required binary file formats to compile
+# GDB, and double check that we can compile them.
+for format in $enable_binary_file_formats
+do
+    if test "$format" = "elf" && test "$bfd_supports_elf" != "yes"; then
+           as_fn_error but BFD does not support it." "\"elf support was requested" "$LINENO" 5;
+    elif test "$format" = "macho" && test "$bfd_supports_macho" != "yes"; then
+           as_fn_error but BFD does not support it." "\"Mach-O support was requested" "$LINENO" 5;
+    fi
+
+    if test "$format" = "all"; then
+       FORMAT_SRCS="$all_binary_file_srcs"
+       # We don't break here in case the user requested Mach-O or ELF, but
+       # BFD is not configured to support it.  If we were to break, we would
+       # silently drop the requested support instead of erroring out.
+    else
+       fmt=$(echo "$format _SRCS" | sed 's/ //')
+       FORMAT_SRCS="$FORMAT_SRCS \$($fmt)"
+    fi
+done
+
+
+
 # Add any host-specific objects to GDB.
 CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}"
 
 # If building on ELF, look for lzma support for embedded compressed debug info.
-if test "$gdb_cv_var_elf" = yes; then
+if test "$gdb_cv_var_bfd_elf" = yes; then
 
 # Check whether --with-lzma was given.
 if test "${with_lzma+set}" = set; then :
index 226e27e4fe54a9d3ac06e8be4439dd5dce8eb975..2ef53fe5c5671c3fad35968fa05e63b1b8881531 100644 (file)
@@ -191,6 +191,16 @@ AS_HELP_STRING([--enable-targets=TARGETS], [alternative target configurations]),
        ;;
 esac])
 
+AC_ARG_ENABLE(binary_file_formats,
+             AS_HELP_STRING([--enable-binary-file-formats=FORMATS],
+                            [enable support for selected file formats (default 'all')
+                             available formats: coff, dbx, elf, macho, mips, xcoff, all]),
+[case "${enableval}" in
+ yes | "") AC_MSG_ERROR(enable-binary-file-formats option must specify file formats or 'all')
+            ;;
+  no)       enable_binary_file_formats= ;;
+  *)        enable_binary_file_formats=$enableval ;;
+esac], [enable_binary_file_formats=all])
 
 # Check whether to support mdebug/ecoff debug information.
 AC_ARG_ENABLE(gdb-mdebug-support,
@@ -240,10 +250,21 @@ TARGET_OBS=
 all_targets=
 HAVE_NATIVE_GCORE_TARGET=
 
+# File formats that will be enabled based on the selected
+# target(s).  These are chosen because they are required to
+# compile one or more of the selected targets.
+target_formats=
+
+# If all targets were requested, this is all formats that should
+# accompany them.  These are just the ones required for compilation
+# to succeed, not the formats suggested based on targets.
+all_target_formats="coff xcoff"
+
 for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
 do
   if test "$targ_alias" = "all"; then
     all_targets=true
+    target_formats=$all_target_formats
   else
     # Canonicalize the secondary target names.
     result=`$ac_config_sub $targ_alias 2>/dev/null`
@@ -1952,32 +1973,87 @@ fi
 # Note that WIN32APILIBS is set by GDB_AC_COMMON.
 WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
 
+# Object files to be used when building with support for all file formats.
+# This should not have elf or macho, as support for those formats depends
+# on BFD enabling them as well.
+all_binary_file_srcs="\$(dbx_SRCS) \$(mips_SRCS) \$(coff_SRCS) \$(xcoff_SRCS)"
+
+bfd_supports_elf=no
 # Add ELF support to GDB, but only if BFD includes ELF support.
-GDB_AC_CHECK_BFD([for ELF support in BFD], gdb_cv_var_elf,
+GDB_AC_CHECK_BFD([for ELF support in BFD], gdb_cv_var_bfd_elf,
                  [bfd_get_elf_phdr_upper_bound (NULL)], elf-bfd.h)
-if test "$gdb_cv_var_elf" = yes; then
-  CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o dtrace-probe.o \
-               gcore-elf.o elf-none-tdep.o"
+if test "$gdb_cv_var_bfd_elf" = yes; then
+  CONFIG_OBS="$CONFIG_OBS gcore-elf.o elf-none-tdep.o"
   AC_DEFINE(HAVE_ELF, 1,
            [Define if ELF support should be included.])
   # -ldl is provided by bfd/Makefile.am (LIBDL) <PLUGINS>.
   if test "$plugins" = "yes"; then
     AC_SEARCH_LIBS(dlopen, dl)
   fi
+  bfd_supports_elf=yes
+  all_binary_file_srcs="$all_binary_file_srcs \$(elf_SRCS)"
 fi
 
 # Add macho support to GDB, but only if BFD includes it.
-GDB_AC_CHECK_BFD([for Mach-O support in BFD], gdb_cv_var_macho,
+bfd_supports_macho=no
+GDB_AC_CHECK_BFD([for Mach-O support in BFD], gdb_cv_var_bfd_macho,
                  [bfd_mach_o_lookup_command (NULL, 0, NULL)], mach-o.h)
-if test "$gdb_cv_var_macho" = yes; then
-  CONFIG_OBS="$CONFIG_OBS machoread.o"
+if test "$gdb_cv_var_bfd_macho" = yes; then
+  bfd_supports_macho=yes
+  all_binary_file_srcs="$all_binary_file_srcs \$(macho_SRCS)"
+fi
+
+FORMAT_SRCS=
+
+if test "$enable_binary_file_formats" != "all"; then
+    # Formats that are required by some requested target(s).
+    # Warn users that they are added, so no one is surprised.
+    for req in $target_formats; do
+       case ,$enable_binary_file_formats, in
+       *,$req,*)
+           # Do nothing.
+           ;;
+       *)
+           AC_MSG_WARN("$req is required to support one or more requested targets.  Adding it")
+           enable_binary_file_formats="${enable_binary_file_formats},$req"
+           ;;
+       esac
+    done
+
+    AC_DEFINE_UNQUOTED(SUPPORTED_BINARY_FILE_FORMATS, "$enable_binary_file_formats",
+                      Which binary file formats were requested at configure time. )
 fi
 
+enable_binary_file_formats=$(echo $enable_binary_file_formats | sed 's/,/ /g')
+
+# Go through all requested and required binary file formats to compile
+# GDB, and double check that we can compile them.
+for format in $enable_binary_file_formats
+do
+    if test "$format" = "elf" && test "$bfd_supports_elf" != "yes"; then
+           AC_MSG_ERROR("elf support was requested, but BFD does not support it.");
+    elif test "$format" = "macho" && test "$bfd_supports_macho" != "yes"; then
+           AC_MSG_ERROR("Mach-O support was requested, but BFD does not support it.");
+    fi
+
+    if test "$format" = "all"; then
+       FORMAT_SRCS="$all_binary_file_srcs"
+       # We don't break here in case the user requested Mach-O or ELF, but
+       # BFD is not configured to support it.  If we were to break, we would
+       # silently drop the requested support instead of erroring out.
+    else
+       fmt=$(echo "$format _SRCS" | sed 's/ //')
+       FORMAT_SRCS="$FORMAT_SRCS \$($fmt)"
+    fi
+done
+
+AC_SUBST(FORMAT_SRCS)
+
 # Add any host-specific objects to GDB.
 CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}"
 
 # If building on ELF, look for lzma support for embedded compressed debug info.
-if test "$gdb_cv_var_elf" = yes; then
+if test "$gdb_cv_var_bfd_elf" = yes; then
   AC_ARG_WITH(lzma,
     AS_HELP_STRING([--with-lzma], [support lzma compression (auto/yes/no)]),
     [], [with_lzma=auto])
index 255c77e9f8c0d642fa1773b54ae7dfaaf25e6ef5..332f5b7513c11899614866ef6264712f4544af7d 100644 (file)
@@ -505,7 +505,7 @@ powerpc-*-openbsd*)
        ;;
 powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
        # Target: PowerPC running AIX
-       gdb_target_obs="rs6000-tdep.o rs6000-aix-tdep.o xcoffread.o \
+       gdb_target_obs="rs6000-tdep.o rs6000-aix-tdep.o \
                        ppc-sysv-tdep.o solib-aix.o \
                        ravenscar-thread.o ppc-ravenscar-thread.o"
        ;;
@@ -522,8 +522,8 @@ powerpc*-*-linux*)
 powerpc-*-lynx*178)
        # Target: PowerPC running Lynx178.
        gdb_target_obs="rs6000-tdep.o rs6000-lynx178-tdep.o \
-                       xcoffread.o ppc-sysv-tdep.o \
-                       ravenscar-thread.o ppc-ravenscar-thread.o"
+                       ppc-sysv-tdep.o ravenscar-thread.o \
+                       ppc-ravenscar-thread.o"
        ;;
 powerpc*-*-*)
        # Target: PowerPC running eabi
@@ -835,3 +835,17 @@ for t in x ${gdb_target_obs}; do
     gdb_have_gcore=true
   fi
 done
+
+# Decide which file formats are absolutely required based on
+# the requested targets.  Warn later that they are added, in
+# case the user didn't manually request them, or all readers.
+# It's fine to add the same format multiple times since the
+# loop that reads the options to FORMAT_OBS will ensure that
+# they are only added once.
+for i in $gdb_target_obs; do
+    case "${i}" in
+    *"windows-tdep.o" ) target_formats="${target_formats} coff";;
+    "rs6000-aix-tdep.o" ) target_formats="${target_formats} xcoff";;
+    "rs6000-lynx178-tdep.o" ) target_formats="${target_formats} xcoff";;
+    esac
+done
index 2bbaf14c58473126fb1156173040fd9907289536..d4a5a632c24306f6c0ff6bd6d14e01a847e9a494 100644 (file)
@@ -41277,6 +41277,14 @@ Configure @value{GDBN} for cross-debugging programs running on the
 specified list of targets.  The special value @samp{all} configures
 @value{GDBN} for debugging programs running on any target it supports.
 
+@item --enable-binary-file-formats=@r{[}@var{format}@r{]}@dots{}
+@itemx --enable-binary-file-formats=all
+Configure @value{GDBN} to support certain binary file formats.  If a
+format is the main (or only) file format for a given target, the
+configure script may add support to it anyway, and warn the user.
+If not given, all file formats that @value{GDBN} supports are compiled
+in.
+
 @item --with-gdb-datadir=@var{path}
 Set the @value{GDBN}-specific data directory.  @value{GDBN} will look
 here for certain supporting files or scripts.  This defaults to the
index b097683e6138102fe543dfe5d68dda73895f1124..933efa03f90a27aca8bbbf5019851af43ee2d637 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1596,6 +1596,11 @@ This GDB was configured as follows:\n\
             --with-system-gdbinit-dir=%s%s\n\
 "), SYSTEM_GDBINIT_DIR, SYSTEM_GDBINIT_DIR_RELOCATABLE ? " (relocatable)" : "");
 
+#ifdef SUPPORTED_BINARY_FILE_FORMATS
+  gdb_printf (stream, _("\
+            --enable-binary-file-formats=%s\n"), SUPPORTED_BINARY_FILE_FORMATS);
+#endif
+
   /* We assume "relocatable" will be printed at least once, thus we always
      print this text.  It's a reasonably safe assumption for now.  */
   gdb_printf (stream, _("\n\