gdb, configure: Add enable-binary-file-format option for configure

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>
This commit is contained in:
Guinevere Larsen
2024-08-21 11:10:50 -03:00
parent cfebee1869
commit 809c1abc19
9 changed files with 270 additions and 37 deletions

View File

@@ -907,13 +907,22 @@ ALL_TARGET_OBS = \
vax-tdep.o \ vax-tdep.o \
windows-tdep.o \ windows-tdep.o \
x86-tdep.o \ x86-tdep.o \
xcoffread.o \
xstormy16-tdep.o \ xstormy16-tdep.o \
xtensa-config.o \ xtensa-config.o \
xtensa-linux-tdep.o \ xtensa-linux-tdep.o \
xtensa-tdep.o \ xtensa-tdep.o \
z80-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 # The following native-target dependent variables are defined on
# configure.nat. # configure.nat.
NAT_FILE = @NAT_FILE@ NAT_FILE = @NAT_FILE@
@@ -1070,8 +1079,6 @@ COMMON_SFILES = \
c-varobj.c \ c-varobj.c \
charset.c \ charset.c \
cli-out.c \ cli-out.c \
coff-pe-read.c \
coffread.c \
complaints.c \ complaints.c \
completer.c \ completer.c \
copying.c \ copying.c \
@@ -1085,7 +1092,6 @@ COMMON_SFILES = \
d-lang.c \ d-lang.c \
d-namespace.c \ d-namespace.c \
d-valprint.c \ d-valprint.c \
dbxread.c \
dcache.c \ dcache.c \
debug.c \ debug.c \
debuginfod-support.c \ debuginfod-support.c \
@@ -1150,7 +1156,6 @@ COMMON_SFILES = \
memtag.c \ memtag.c \
minidebug.c \ minidebug.c \
minsyms.c \ minsyms.c \
mipsread.c \
namespace.c \ namespace.c \
objc-lang.c \ objc-lang.c \
objfiles.c \ objfiles.c \
@@ -1243,7 +1248,6 @@ SFILES = \
d-exp.y \ d-exp.y \
dtrace-probe.c \ dtrace-probe.c \
elf-none-tdep.c \ elf-none-tdep.c \
elfread.c \
f-exp.y \ f-exp.y \
gcore-elf.c \ gcore-elf.c \
gdb.c \ gdb.c \
@@ -1870,7 +1874,6 @@ ALLDEPFILES = \
x86-gnu-nat.c \ x86-gnu-nat.c \
x86-nat.c \ x86-nat.c \
x86-tdep.c \ x86-tdep.c \
xcoffread.c \
xstormy16-tdep.c \ xstormy16-tdep.c \
xtensa-config.c \ xtensa-config.c \
xtensa-linux-nat.c \ xtensa-linux-nat.c \
@@ -1925,7 +1928,8 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
$(patsubst %.c,%.o,$(COMMON_SFILES)) \ $(patsubst %.c,%.o,$(COMMON_SFILES)) \
$(SUBDIR_CLI_OBS) \ $(SUBDIR_CLI_OBS) \
$(SUBDIR_MI_OBS) \ $(SUBDIR_MI_OBS) \
$(SUBDIR_TARGET_OBS) $(SUBDIR_TARGET_OBS) \
$(FORMAT_OBS)
SUBDIRS = doc @subdirs@ data-directory SUBDIRS = doc @subdirs@ data-directory
CLEANDIRS = $(SUBDIRS) CLEANDIRS = $(SUBDIRS)

View File

@@ -224,6 +224,17 @@ vFile:stat
* Support for stabs debugging format and the a.out/dbx object format is * Support for stabs debugging format and the a.out/dbx object format is
deprecated, and will be removed in GDB 18. 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 * A new configure option was added, allowing support for the compile
subsystem to be disabled at configure time, in the form of subsystem to be disabled at configure time, in the form of
--disable-gdb-compile. --disable-gdb-compile.

View 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 There is no convenient way to generate a list of all available
targets. 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' `--with-gdb-datadir=PATH'
Set the GDB-specific data directory. GDB will look here for Set the GDB-specific data directory. GDB will look here for
certain supporting files or scripts. This defaults to the `gdb' certain supporting files or scripts. This defaults to the `gdb'

View File

@@ -745,6 +745,9 @@
/* Define to 1 if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS #undef STDC_HEADERS
/* Which binary file formats were requested at configure time. */
#undef SUPPORTED_BINARY_FILE_FORMATS
/* automatically load a system-wide gdbinit file */ /* automatically load a system-wide gdbinit file */
#undef SYSTEM_GDBINIT #undef SYSTEM_GDBINIT

124
gdb/configure vendored
View File

@@ -706,6 +706,7 @@ LIBGUI
LTLIBLZMA LTLIBLZMA
LIBLZMA LIBLZMA
HAVE_LIBLZMA HAVE_LIBLZMA
FORMAT_SRCS
SER_HARDWIRE SER_HARDWIRE
WERROR_CFLAGS WERROR_CFLAGS
WARN_CFLAGS WARN_CFLAGS
@@ -932,6 +933,7 @@ with_relocated_sources
with_auto_load_dir with_auto_load_dir
with_auto_load_safe_path with_auto_load_safe_path
enable_targets enable_targets
enable_binary_file_formats
enable_gdb_mdebug_support enable_gdb_mdebug_support
enable_gdb_dwarf_support enable_gdb_dwarf_support
with_amd_dbgapi with_amd_dbgapi
@@ -1645,6 +1647,10 @@ Optional Features:
--disable-nls do not use Native Language Support --disable-nls do not use Native Language Support
--enable-targets=TARGETS --enable-targets=TARGETS
alternative target configurations 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-gdb-mdebug-support
Enable support for the mdebug debuginfo format Enable support for the mdebug debuginfo format
(default 'yes') (default 'yes')
@@ -11507,7 +11513,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11510 "configure" #line 11516 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
@@ -11613,7 +11619,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11616 "configure" #line 11622 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
@@ -24882,6 +24888,18 @@ esac
fi 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 to support mdebug/ecoff debug information.
# Check whether --enable-gdb-mdebug-support was given. # Check whether --enable-gdb-mdebug-support was given.
@@ -24986,10 +25004,21 @@ TARGET_OBS=
all_targets= all_targets=
HAVE_NATIVE_GCORE_TARGET= 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'` for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
do do
if test "$targ_alias" = "all"; then if test "$targ_alias" = "all"; then
all_targets=true all_targets=true
target_formats=$all_target_formats
else else
# Canonicalize the secondary target names. # Canonicalize the secondary target names.
result=`$ac_config_sub $targ_alias 2>/dev/null` result=`$ac_config_sub $targ_alias 2>/dev/null`
@@ -31628,6 +31657,12 @@ fi
# Note that WIN32APILIBS is set by GDB_AC_COMMON. # Note that WIN32APILIBS is set by GDB_AC_COMMON.
WIN32LIBS="$WIN32LIBS $WIN32APILIBS" 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. # Add ELF support to GDB, but only if BFD includes ELF support.
OLD_CFLAGS=$CFLAGS OLD_CFLAGS=$CFLAGS
@@ -31645,7 +31680,7 @@ WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
CC="./libtool --quiet --mode=link $CC" CC="./libtool --quiet --mode=link $CC"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF support in BFD" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF support in BFD" >&5
$as_echo_n "checking for ELF support in BFD... " >&6; } $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 $as_echo_n "(cached) " >&6
else else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -31664,24 +31699,23 @@ return bfd_get_elf_phdr_upper_bound (NULL);
} }
_ACEOF _ACEOF
if ac_fn_c_try_link "$LINENO"; then : if ac_fn_c_try_link "$LINENO"; then :
gdb_cv_var_elf=yes gdb_cv_var_bfd_elf=yes
else else
gdb_cv_var_elf=no gdb_cv_var_bfd_elf=no
fi fi
rm -f core conftest.err conftest.$ac_objext \ rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext conftest$ac_exeext conftest.$ac_ext
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_elf" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_bfd_elf" >&5
$as_echo "$gdb_cv_var_elf" >&6; } $as_echo "$gdb_cv_var_bfd_elf" >&6; }
CC=$OLD_CC CC=$OLD_CC
CFLAGS=$OLD_CFLAGS CFLAGS=$OLD_CFLAGS
LDFLAGS=$OLD_LDFLAGS LDFLAGS=$OLD_LDFLAGS
LIBS=$OLD_LIBS LIBS=$OLD_LIBS
if test "$gdb_cv_var_elf" = yes; then if test "$gdb_cv_var_bfd_elf" = yes; then
CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o dtrace-probe.o \ CONFIG_OBS="$CONFIG_OBS gcore-elf.o elf-none-tdep.o"
gcore-elf.o elf-none-tdep.o"
$as_echo "#define HAVE_ELF 1" >>confdefs.h $as_echo "#define HAVE_ELF 1" >>confdefs.h
@@ -31744,9 +31778,12 @@ if test "$ac_res" != no; then :
fi fi
fi fi
bfd_supports_elf=yes
all_binary_file_srcs="$all_binary_file_srcs \$(elf_SRCS)"
fi fi
# Add macho support to GDB, but only if BFD includes it. # Add macho support to GDB, but only if BFD includes it.
bfd_supports_macho=no
OLD_CFLAGS=$CFLAGS OLD_CFLAGS=$CFLAGS
OLD_LDFLAGS=$LDFLAGS OLD_LDFLAGS=$LDFLAGS
@@ -31763,7 +31800,7 @@ fi
CC="./libtool --quiet --mode=link $CC" CC="./libtool --quiet --mode=link $CC"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mach-O support in BFD" >&5 { $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; } $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 $as_echo_n "(cached) " >&6
else else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -31782,30 +31819,81 @@ return bfd_mach_o_lookup_command (NULL, 0, NULL);
} }
_ACEOF _ACEOF
if ac_fn_c_try_link "$LINENO"; then : if ac_fn_c_try_link "$LINENO"; then :
gdb_cv_var_macho=yes gdb_cv_var_bfd_macho=yes
else else
gdb_cv_var_macho=no gdb_cv_var_bfd_macho=no
fi fi
rm -f core conftest.err conftest.$ac_objext \ rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext conftest$ac_exeext conftest.$ac_ext
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_macho" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_bfd_macho" >&5
$as_echo "$gdb_cv_var_macho" >&6; } $as_echo "$gdb_cv_var_bfd_macho" >&6; }
CC=$OLD_CC CC=$OLD_CC
CFLAGS=$OLD_CFLAGS CFLAGS=$OLD_CFLAGS
LDFLAGS=$OLD_LDFLAGS LDFLAGS=$OLD_LDFLAGS
LIBS=$OLD_LIBS LIBS=$OLD_LIBS
if test "$gdb_cv_var_macho" = yes; then if test "$gdb_cv_var_bfd_macho" = yes; then
CONFIG_OBS="$CONFIG_OBS machoread.o" bfd_supports_macho=yes
all_binary_file_srcs="$all_binary_file_srcs \$(macho_SRCS)"
fi 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. # Add any host-specific objects to GDB.
CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}" CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}"
# If building on ELF, look for lzma support for embedded compressed debug info. # 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. # Check whether --with-lzma was given.
if test "${with_lzma+set}" = set; then : if test "${with_lzma+set}" = set; then :

View File

@@ -191,6 +191,16 @@ AS_HELP_STRING([--enable-targets=TARGETS], [alternative target configurations]),
;; ;;
esac]) 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. # Check whether to support mdebug/ecoff debug information.
AC_ARG_ENABLE(gdb-mdebug-support, AC_ARG_ENABLE(gdb-mdebug-support,
@@ -240,10 +250,21 @@ TARGET_OBS=
all_targets= all_targets=
HAVE_NATIVE_GCORE_TARGET= 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'` for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
do do
if test "$targ_alias" = "all"; then if test "$targ_alias" = "all"; then
all_targets=true all_targets=true
target_formats=$all_target_formats
else else
# Canonicalize the secondary target names. # Canonicalize the secondary target names.
result=`$ac_config_sub $targ_alias 2>/dev/null` result=`$ac_config_sub $targ_alias 2>/dev/null`
@@ -1952,32 +1973,87 @@ fi
# Note that WIN32APILIBS is set by GDB_AC_COMMON. # Note that WIN32APILIBS is set by GDB_AC_COMMON.
WIN32LIBS="$WIN32LIBS $WIN32APILIBS" 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. # 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) [bfd_get_elf_phdr_upper_bound (NULL)], elf-bfd.h)
if test "$gdb_cv_var_elf" = yes; then if test "$gdb_cv_var_bfd_elf" = yes; then
CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o dtrace-probe.o \ CONFIG_OBS="$CONFIG_OBS gcore-elf.o elf-none-tdep.o"
gcore-elf.o elf-none-tdep.o"
AC_DEFINE(HAVE_ELF, 1, AC_DEFINE(HAVE_ELF, 1,
[Define if ELF support should be included.]) [Define if ELF support should be included.])
# -ldl is provided by bfd/Makefile.am (LIBDL) <PLUGINS>. # -ldl is provided by bfd/Makefile.am (LIBDL) <PLUGINS>.
if test "$plugins" = "yes"; then if test "$plugins" = "yes"; then
AC_SEARCH_LIBS(dlopen, dl) AC_SEARCH_LIBS(dlopen, dl)
fi fi
bfd_supports_elf=yes
all_binary_file_srcs="$all_binary_file_srcs \$(elf_SRCS)"
fi fi
# Add macho support to GDB, but only if BFD includes it. # 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) [bfd_mach_o_lookup_command (NULL, 0, NULL)], mach-o.h)
if test "$gdb_cv_var_macho" = yes; then if test "$gdb_cv_var_bfd_macho" = yes; then
CONFIG_OBS="$CONFIG_OBS machoread.o" bfd_supports_macho=yes
all_binary_file_srcs="$all_binary_file_srcs \$(macho_SRCS)"
fi 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. # Add any host-specific objects to GDB.
CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}" CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}"
# If building on ELF, look for lzma support for embedded compressed debug info. # 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, AC_ARG_WITH(lzma,
AS_HELP_STRING([--with-lzma], [support lzma compression (auto/yes/no)]), AS_HELP_STRING([--with-lzma], [support lzma compression (auto/yes/no)]),
[], [with_lzma=auto]) [], [with_lzma=auto])

View File

@@ -505,7 +505,7 @@ powerpc-*-openbsd*)
;; ;;
powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*) powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
# Target: PowerPC running 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 \ ppc-sysv-tdep.o solib-aix.o \
ravenscar-thread.o ppc-ravenscar-thread.o" ravenscar-thread.o ppc-ravenscar-thread.o"
;; ;;
@@ -522,8 +522,8 @@ powerpc*-*-linux*)
powerpc-*-lynx*178) powerpc-*-lynx*178)
# Target: PowerPC running Lynx178. # Target: PowerPC running Lynx178.
gdb_target_obs="rs6000-tdep.o rs6000-lynx178-tdep.o \ gdb_target_obs="rs6000-tdep.o rs6000-lynx178-tdep.o \
xcoffread.o ppc-sysv-tdep.o \ ppc-sysv-tdep.o ravenscar-thread.o \
ravenscar-thread.o ppc-ravenscar-thread.o" ppc-ravenscar-thread.o"
;; ;;
powerpc*-*-*) powerpc*-*-*)
# Target: PowerPC running eabi # Target: PowerPC running eabi
@@ -835,3 +835,17 @@ for t in x ${gdb_target_obs}; do
gdb_have_gcore=true gdb_have_gcore=true
fi fi
done 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

View 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 specified list of targets. The special value @samp{all} configures
@value{GDBN} for debugging programs running on any target it supports. @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} @item --with-gdb-datadir=@var{path}
Set the @value{GDBN}-specific data directory. @value{GDBN} will look Set the @value{GDBN}-specific data directory. @value{GDBN} will look
here for certain supporting files or scripts. This defaults to the here for certain supporting files or scripts. This defaults to the

View File

@@ -1596,6 +1596,11 @@ This GDB was configured as follows:\n\
--with-system-gdbinit-dir=%s%s\n\ --with-system-gdbinit-dir=%s%s\n\
"), SYSTEM_GDBINIT_DIR, SYSTEM_GDBINIT_DIR_RELOCATABLE ? " (relocatable)" : ""); "), 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 /* We assume "relocatable" will be printed at least once, thus we always
print this text. It's a reasonably safe assumption for now. */ print this text. It's a reasonably safe assumption for now. */
gdb_printf (stream, _("\n\ gdb_printf (stream, _("\n\