[PATCH] gdb, configure: Add disable-formats option for configure

Andrew Burgess aburgess@redhat.com
Thu Oct 3 10:15:38 GMT 2024


Guinevere Larsen <guinevere@redhat.com> writes:

> On 10/2/24 10:56 AM, Andrew Burgess wrote:
>> Guinevere Larsen <guinevere@redhat.com> writes:
>>
>>> GDB has support for many file formats, some which might be very unlikely
>>> to be found in some situations (such as the COFF format in linux). 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 also can 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. The default behavior when the switch
>>> is omitted is to compile all file formats, keeping the original behavior
>>> of the script.
>>>
>>> When enabling selected readers, the configure script will also look at
>>> the selected targets and may choose to add some readers that are the
>>> default - or only - format available for the target. If that happens,
>>> the script will emit the following warning:
>>>
>>>    FOO is required to support one or more targets requested. Adding it
>>>
>>> Users aren't able to force the disabling of those formats, since tdep
>>> files may directly call functions from the required 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.
>>> ---
>>>   gdb/Makefile.in      | 22 +++++++-----
>>>   gdb/NEWS             | 11 ++++++
>>>   gdb/README           |  5 +++
>>>   gdb/configure        | 82 +++++++++++++++++++++++++++++++++++++++++---
>>>   gdb/configure.ac     | 68 ++++++++++++++++++++++++++++++++++--
>>>   gdb/configure.format | 41 ++++++++++++++++++++++
>>>   gdb/configure.tgt    |  6 ++--
>>>   gdb/doc/gdb.texinfo  |  7 ++++
>>>   8 files changed, 225 insertions(+), 17 deletions(-)
>>>   create mode 100644 gdb/configure.format
>>>
>>> diff --git a/gdb/Makefile.in b/gdb/Makefile.in
>>> index bcf1ee45a70..009d68d6de2 100644
>>> --- a/gdb/Makefile.in
>>> +++ b/gdb/Makefile.in
>>> @@ -901,13 +901,24 @@ 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.
>>> +FORMAT_OBS = @FORMAT_OBS@
>>> +
>>> +# All files that relate to GDB's ability to read debug information.
>>> +# Used with --enable-formats=all.
>>> +ALL_FORMAT_OBS = \
>>> +	coff-pe-read.o \
>>> +	coffread.o \
>>> +	dbxread.o \
>>> +	mipsread.o \
>>> +	xcoffread.o
>>> +
>>>   # The following native-target dependent variables are defined on
>>>   # configure.nat.
>>>   NAT_FILE = @NAT_FILE@
>>> @@ -1064,8 +1075,6 @@ COMMON_SFILES = \
>>>   	c-varobj.c \
>>>   	charset.c \
>>>   	cli-out.c \
>>> -	coff-pe-read.c \
>>> -	coffread.c \
>>>   	complaints.c \
>>>   	completer.c \
>>>   	copying.c \
>>> @@ -1079,7 +1088,6 @@ COMMON_SFILES = \
>>>   	d-lang.c \
>>>   	d-namespace.c \
>>>   	d-valprint.c \
>>> -	dbxread.c \
>>>   	dcache.c \
>>>   	debug.c \
>>>   	debuginfod-support.c \
>>> @@ -1171,7 +1179,6 @@ COMMON_SFILES = \
>>>   	memtag.c \
>>>   	minidebug.c \
>>>   	minsyms.c \
>>> -	mipsread.c \
>>>   	namespace.c \
>>>   	objc-lang.c \
>>>   	objfiles.c \
>>> @@ -1264,7 +1271,6 @@ SFILES = \
>>>   	d-exp.y \
>>>   	dtrace-probe.c \
>>>   	elf-none-tdep.c \
>>> -	elfread.c \
>>>   	f-exp.y \
>>>   	gcore-elf.c \
>>>   	gdb.c \
>>> @@ -1886,7 +1892,6 @@ ALLDEPFILES = \
>>>   	windows-tdep.c \
>>>   	x86-nat.c \
>>>   	x86-tdep.c \
>>> -	xcoffread.c \
>>>   	xstormy16-tdep.c \
>>>   	xtensa-config.c \
>>>   	xtensa-linux-nat.c \
>>> @@ -1908,7 +1913,8 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
>>>   	$(SUBDIR_CLI_OBS) \
>>>   	$(SUBDIR_MI_OBS) \
>>>   	$(SUBDIR_TARGET_OBS) \
>>> -	$(SUBDIR_GCC_COMPILE_OBS)
>>> +	$(SUBDIR_GCC_COMPILE_OBS) \
>>> +	$(FORMAT_OBS)
>>>   
>>>   SUBDIRS = doc @subdirs@ data-directory
>>>   CLEANDIRS = $(SUBDIRS)
>>> diff --git a/gdb/NEWS b/gdb/NEWS
>>> index cfc9cb05f77..8d127558a1d 100644
>>> --- a/gdb/NEWS
>>> +++ b/gdb/NEWS
>>> @@ -92,6 +92,17 @@ vFile:stat
>>>     vFile:fstat but takes a filename rather than an open file
>>>     descriptor.
>>>   
>>> +* Configure changes
>>> +
>>> +enable-formats=[FORMAT,]...
>>> +enable-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.
>>> +
>>>   *** Changes in GDB 15
>>>   
>>>   * The MPX commands "show/set mpx bound" have been deprecated, as Intel
>>> diff --git a/gdb/README b/gdb/README
>>> index d85c37d5d17..342b2d07eb7 100644
>>> --- a/gdb/README
>>> +++ b/gdb/README
>>> @@ -403,6 +403,11 @@ more obscure GDB `configure' options are not listed here.
>>>        specified list of targets.  The special value `all' configures
>>>        GDB for debugging programs running on any target it supports.
>>>   
>>> +`--enable-formats=FORMAT,FORMAT,...'
>>> +`--enable-formats=all`
>>> +    Configure GDB to be unable to read some binary file formats, such as
>>> +    coff, dbx or elf.
>>> +
>>>   `--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'
>>> diff --git a/gdb/configure b/gdb/configure
>>> index 53eaad4f0e2..792e5cefefe 100755
>>> --- a/gdb/configure
>>> +++ b/gdb/configure
>>> @@ -706,6 +706,7 @@ LIBGUI
>>>   LTLIBLZMA
>>>   LIBLZMA
>>>   HAVE_LIBLZMA
>>> +FORMAT_OBS
>>>   SER_HARDWIRE
>>>   WERROR_CFLAGS
>>>   WARN_CFLAGS
>>> @@ -933,6 +934,7 @@ with_relocated_sources
>>>   with_auto_load_dir
>>>   with_auto_load_safe_path
>>>   enable_targets
>>> +enable_formats
>>>   enable_64_bit_bfd
>>>   with_amd_dbgapi
>>>   enable_tui
>>> @@ -1644,6 +1646,9 @@ Optional Features:
>>>     --disable-nls           do not use Native Language Support
>>>     --enable-targets=TARGETS
>>>                             alternative target configurations
>>> +  --enable-formats=FILE_FORMATS
>>> +                          enable support for selected file formats(default
>>> +                          'all')
>>>     --enable-64-bit-bfd     64-bit support (on hosts with narrower word sizes)
>>>     --enable-tui            enable full-screen terminal user interface (TUI)
>>>     --enable-gdbtk          enable gdbtk graphical user interface (GUI)
>>> @@ -11499,7 +11504,7 @@ else
>>>     lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>>>     lt_status=$lt_dlunknown
>>>     cat > conftest.$ac_ext <<_LT_EOF
>>> -#line 11502 "configure"
>>> +#line 11507 "configure"
>>>   #include "confdefs.h"
>>>   
>>>   #if HAVE_DLFCN_H
>>> @@ -11605,7 +11610,7 @@ else
>>>     lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>>>     lt_status=$lt_dlunknown
>>>     cat > conftest.$ac_ext <<_LT_EOF
>>> -#line 11608 "configure"
>>> +#line 11613 "configure"
>>>   #include "confdefs.h"
>>>   
>>>   #if HAVE_DLFCN_H
>>> @@ -24833,6 +24838,20 @@ esac
>>>   fi
>>>   
>>>   
>>> +all_formats=
>>> +# Check whether --enable-formats was given.
>>> +if test "${enable_formats+set}" = set; then :
>>> +  enableval=$enable_formats; case "${enableval}" in
>>> + yes | "") as_fn_error $? "enable-formats option must specify file formats or 'all'" "$LINENO" 5
>>> +            ;;
>>> +  no)       enable_formats= ;;
>>> +  *)        enable_formats=$enableval ;;
>>> +esac
>>> +else
>>> +  all_formats=true
>>> +fi
>> I think it would be simpler to drop `all_formats` here, and make the
>> default case just set `enable_formats=all`.  Then later on, when you
>> process `enable_formats` (where you have to check for 'all' anyway),
>> you'll spot the 'all' case there and do whatever needs doing.  I have
>> another note about that logic below.
> This makes sense, I'm not sure what I was thinking originally tbh.
>>
>>> +
>>> +
>>>   # Check whether --enable-64-bit-bfd was given.
>>>   if test "${enable_64_bit_bfd+set}" = set; then :
>>>     enableval=$enable_64_bit_bfd; case $enableval in #(
>>> @@ -24915,11 +24934,20 @@ fi
>>>   TARGET_OBS=
>>>   all_targets=
>>>   HAVE_NATIVE_GCORE_TARGET=
>>> +# File formats that will ne enabled based on the selected
>> type: ne ?
> fixed
>>> +# target(s). These are chosen because most, if not all, executables for
>>> +# the target will follow this file format so it makes no sense to support
>>> +# the target but not the debug information.
>>> +target_formats=
>>> +# If all targets were requested, this is all formats that should accompany
>>> +# them.
>>> +all_target_formats="elf xcoff mips coff"
>>>   
>>>   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`
>>> @@ -24941,6 +24969,19 @@ fi
>>>           *" ${i} "*) ;;
>>>           *)
>>>             TARGET_OBS="$TARGET_OBS ${i}"
>>> +	  # Decide which file formats are absolutely required based on
>>> +	  # the requested targets.  Warn later that they are added, in
>>> +	  # case the user manually requested them, or requested all.
>>> +	  # It's fine to add xcoff multiple times since the loop that
>>> +	  # adds it to FORMAT_OBS will ensure that it is only added once.
>>> +	  echo $i
>> Is this required?  Or is this left over debug output?
> debug output, oops. fixed
>>
>>> +	  case "${i}" in
>>> +	  *"windows-tdep.o" ) target_formats="${target_formats} coff";;
>>> +	  "linux-tdep.o" ) target_formats="${target_formats} elf";;
>>> +	  "rs6000-aix-tdep.o" ) target_formats="${target_formats} xcoff";;
>>> +	  "rs6000-lynx178-tdep.o" ) target_formats="${target_formats} xcoff";;
>>> +	  "mips-tdep.o" ) target_formats="${target_formats} mips";;
>>> +	  esac
>> I think this logic should be moved into configure.tgt.  We already have
>> a block at the end of that file which makes some choices based on which
>> files are being added to the object list, which is exactly what you're
>> doing here.  This change would make the formats required by a target be
>> an output from configure.tgt, which makes sense to me.
> This makes sense. I'll do it. This also helps with the issue of needing 
> to run this check after determining the result of --target!
>>
>>>             ;;
>>>           esac
>>>       done
>>> @@ -24964,6 +25005,7 @@ if test x${all_targets} = xtrue; then
>>>     else
>>>       TARGET_OBS='$(ALL_TARGET_OBS)'
>>>     fi
>>> +  target_readers=$all_target_readers
>>>   fi
>>>   
>>>   # AMD debugger API support.
>>> @@ -31462,6 +31504,7 @@ fi
>>>   # Note that WIN32APILIBS is set by GDB_AC_COMMON.
>>>   WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
>>>   
>>> +support_elf=no
>>>   # Add ELF support to GDB, but only if BFD includes ELF support.
>>>   
>>>     OLD_CFLAGS=$CFLAGS
>>> @@ -31514,7 +31557,7 @@ $as_echo "$gdb_cv_var_elf" >&6; }
>>>     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 \
>>> +  CONFIG_OBS="$CONFIG_OBS stap-probe.o dtrace-probe.o \
>>>   		gcore-elf.o elf-none-tdep.o"
>>>   
>>>   $as_echo "#define HAVE_ELF 1" >>confdefs.h
>>> @@ -31578,9 +31621,11 @@ if test "$ac_res" != no; then :
>>>   fi
>>>   
>>>     fi
>>> +  support_elf=yes
>>>   fi
>>>   
>>>   # Add macho support to GDB, but only if BFD includes it.
>>> +support_macho=no
>>>   
>>>     OLD_CFLAGS=$CFLAGS
>>>     OLD_LDFLAGS=$LDFLAGS
>>> @@ -31632,9 +31677,38 @@ $as_echo "$gdb_cv_var_macho" >&6; }
>>>     LDFLAGS=$OLD_LDFLAGS
>>>     LIBS=$OLD_LIBS
>>>   if test "$gdb_cv_var_macho" = yes; then
>>> -  CONFIG_OBS="$CONFIG_OBS machoread.o"
>>> +    support_macho=yes
>>>   fi
>>>   
>>> +FORMAT_OBS=
>>> +enable_formats=$(echo $enable_formats | sed 's/,/ /g')
>>> +
>>> +if test "$all_formats" = "true"; then
>>> +    FORMAT_OBS='$(ALL_FORMAT_OBS)'
>> As Tom pointed out, right now we effectively have the list of format
>> reading .c files twice.
>>
>> If instead of using ALL_FORMAT_OBS here we instead expanded ' all '
>> inside enable_formats into the list of all known formats
>> (e.g. $all_target_formats), then, when we run through the loop below,
>> FORMAT_OBS would always be set to the complete list, right?  Then we'd
>> not need the file list in the Makefile at all, instead we just need
>> all_target_formats defined in configure.ac and then handling for each
>> value in configure.format.
>
> $all_target_formats doesn't contain dbx, which is why things look 
> duplicated but aren't really.
>
> I guess I could have something like non_target_formats to list all the 
> file formats that aren't required to compile some target, and then use 
> both to set FORMAT_OBS. This way in the future if we have other formats 
> that aren't required by a target, we can place them there. What do you 
> think?

Whatever works I guess.  I'm sure there must be some way we can figure
out the list of require .o files from the configure script and then pass
that to the Makefile.  It might mean a little more complexity in the
configure script, but I think the benefit of having the configure script
hold all the logic will be worth it.

Thanks,
Andrew


>
>>
>>> +else
>>> +    # 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
>>> +	if ! echo "$enable_formats" | grep -wq "$req"; then
>>> +	    echo "$req is required to support one or more targets requested. Adding it"
>> Instead of 'echo', maybe try AC_MSG_WARN maybe?  Or AC_MSG_NOTICE?
>> Check out:
>>
>>   https://www.gnu.org/software/autoconf/manual/autoconf-2.60/html_node/Printing-Messages.html
>>
>> for options.
> I'll go with AC_MSG_WARN, so it's unlikely the user will not see it, 
> thanks for the suggestion!
>>
>>> +	    enable_formats="${enable_formats} $req"
>>> +	fi
>>> +    done
>>> +
>>> +    for format in $enable_formats
>>> +    do
>>> +	if test "$format" = "all"; then
>>> +	    all_formats=true
>>> +	fi
>>> +
>>> +	. ${srcdir}/configure.format
>>> +    done
>>> +fi
>>> +
>>> +echo $FORMAT_OBS
>> Is this left over debug?
> yes, removed.
>>
>>> +
>>> +
>>> +
>>>   # Add any host-specific objects to GDB.
>>>   CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}"
>>>   
>>> diff --git a/gdb/configure.ac b/gdb/configure.ac
>>> index 8368fea0423..5f5187ecd0f 100644
>>> --- a/gdb/configure.ac
>>> +++ b/gdb/configure.ac
>>> @@ -187,6 +187,16 @@ AS_HELP_STRING([--enable-targets=TARGETS], [alternative target configurations]),
>>>     *)        enable_targets=$enableval ;;
>>>   esac])
>>>   
>>> +all_formats=
>>> +AC_ARG_ENABLE(formats,
>>> +	      AS_HELP_STRING([--enable-formats=FILE_FORMATS], [enable support for selected file formats(default 'all')]),
>>> +[case "${enableval}" in
>>> + yes | "") AC_MSG_ERROR(enable-formats option must specify file formats or 'all')
>>> +            ;;
>>> +  no)       enable_formats= ;;
>>> +  *)        enable_formats=$enableval ;;
>>> +esac], [all_formats=true])
>>> +
>>>   BFD_64_BIT
>>>   
>>>   # Provide defaults for some variables set by the per-host and per-target
>>> @@ -206,11 +216,20 @@ fi
>>>   TARGET_OBS=
>>>   all_targets=
>>>   HAVE_NATIVE_GCORE_TARGET=
>>> +# File formats that will be enabled based on the selected
>>> +# target(s). These are chosen because most, if not all, executables for
>>> +# the target will follow this file format so it makes no sense to support
>>> +# the target but not the debug information.
>>> +target_formats=
>>> +# If all targets were requested, this is all formats that should accompany
>>> +# them.
>>> +all_target_formats="elf xcoff mips coff"
>>>   
>>>   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`
>>> @@ -231,6 +250,19 @@ do
>>>           *" ${i} "*) ;;
>>>           *)
>>>             TARGET_OBS="$TARGET_OBS ${i}"
>>> +	  # Decide which file formats are absolutely required based on
>>> +	  # the requested targets.  Warn later that they are added, in
>>> +	  # case the user manually requested them, or requested all.
>>> +	  # It's fine to add xcoff multiple times since the loop that
>>> +	  # adds it to FORMAT_OBS will ensure that it is only added once.
>>> +	  echo $i
>>> +	  case "${i}" in
>>> +	  *"windows-tdep.o" ) target_formats="${target_formats} coff";;
>>> +	  "linux-tdep.o" ) target_formats="${target_formats} elf";;
>>> +	  "rs6000-aix-tdep.o" ) target_formats="${target_formats} xcoff";;
>>> +	  "rs6000-lynx178-tdep.o" ) target_formats="${target_formats} xcoff";;
>>> +	  "mips-tdep.o" ) target_formats="${target_formats} mips";;
>>> +	  esac
>>>             ;;
>>>           esac
>>>       done
>>> @@ -1850,11 +1882,12 @@ fi
>>>   # Note that WIN32APILIBS is set by GDB_AC_COMMON.
>>>   WIN32LIBS="$WIN32LIBS $WIN32APILIBS"
>>>   
>>> +support_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,
>>>                    [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 \
>>> +  CONFIG_OBS="$CONFIG_OBS stap-probe.o dtrace-probe.o \
>>>   		gcore-elf.o elf-none-tdep.o"
>> Maybe this is something we can unpick later, but if we only add all
>> these .o files if we have ELF support.  And if we chose to configure GDB
>> without ELF support .... should we actually be dropping all these .o
>> files?
>
> I could also invert the logic of my change here. Instead of setting this 
> part of "elf support" and adding the .o file later, if I moved that 
> format part to be higher up, closer to the target stuff (where I had it 
> originally), I can have that section request the elf target, and this 
> part be fully skipped if elf wasn't requested (and error out if we can't 
> support but the user asked for it).
>
> Same would go for Mach-O.
>
> What do you think?
>
>>
>>>     AC_DEFINE(HAVE_ELF, 1,
>>>   	    [Define if ELF support should be included.])
>>> @@ -1862,15 +1895,46 @@ if test "$gdb_cv_var_elf" = yes; then
>>>     if test "$plugins" = "yes"; then
>>>       AC_SEARCH_LIBS(dlopen, dl)
>>>     fi
>>> +  support_elf=yes
>>>   fi
>>>   
>>>   # Add macho support to GDB, but only if BFD includes it.
>>> +support_macho=no
>>>   GDB_AC_CHECK_BFD([for Mach-O support in BFD], gdb_cv_var_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"
>>> +    support_macho=yes
>>>   fi
>>>   
>>> +FORMAT_OBS=
>>> +enable_formats=$(echo $enable_formats | sed 's/,/ /g')
>>> +
>>> +if test "$all_formats" = "true"; then
>>> +    FORMAT_OBS='$(ALL_FORMAT_OBS)'
>>> +else
>>> +    # 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
>>> +	if ! echo "$enable_formats" | grep -wq "$req"; then
>>> +	    echo "$req is required to support one or more targets requested. Adding it"
>>> +	    enable_formats="${enable_formats} $req"
>>> +	fi
>>> +    done
>>> +
>>> +    for format in $enable_formats
>>> +    do
>>> +	if test "$format" = "all"; then
>>> +	    all_formats=true
>>> +	fi
>> Maybe I'm missing something, but isn't setting 'all_formats' here too
>> late?  That is, we are already inside the 'else' block which checked the
>> 'all_formats' variable, and after this point it's not (as far as I can
>> tell) checked again.
> You're right! I think this was a leftover from moving things around. 
> However, I think I like your idea of dealing with "all" inside 
> configure.format anyway, I just didn't do it at first because I was 
> copying what the target stuff does.
>>> +
>>> +	. ${srcdir}/configure.format
>>> +    done
>>> +fi
>>> +
>>> +echo $FORMAT_OBS
>>> +
>>> +AC_SUBST(FORMAT_OBS)
>>> +
>>>   # Add any host-specific objects to GDB.
>>>   CONFIG_OBS="${CONFIG_OBS} ${gdb_host_obs}"
>>>   
>>> diff --git a/gdb/configure.format b/gdb/configure.format
>>> new file mode 100644
>>> index 00000000000..12dd2d25717
>>> --- /dev/null
>>> +++ b/gdb/configure.format
>>> @@ -0,0 +1,41 @@
>>> +# Copyright (C) 2024 Free Software Foundation, Inc.
>>> +#
>>> +# This file is part of GDB.
>>> +#
>>> +# This program is free software; you can redistribute it and/or modify
>>> +# it under the terms of the GNU General Public License as published by
>>> +# the Free Software Foundation; either version 3 of the License, or
>>> +# (at your option) any later version.
>>> +#
>>> +# This program is distributed in the hope that it will be useful,
>>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> +# GNU General Public License for more details.
>>> +#
>>> +# You should have received a copy of the GNU General Public License
>>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>>> +
>>> +# This file is used to decide which files need to be compiled to support
>>> +# the requested file formats
>>> +
>>> +case $format in
>>> +    xcoff) FORMAT_OBS="$FORMAT_OBS xcoffread.o" ;;
>> In all the other configure.* files the format used is like this:
>>
>>      xcoff)
>>      	FORMAT_OBS="$FORMAT_OBS xcoffread.o"
>>      	;;
>>
>> I think we should adopt this for consistency (I also prefer it, but lets
>> go with the consistency argument).
> Alright, will fix for the next version.
>
> -- 
> Cheers,
> Guinevere Larsen
> She/Her/Hers
>
>>
>> Thanks,
>> Andrew
>>
>>> +
>>> +    # Despite the naming convention implying coff-pe to be a separate
>>> +    # reader, it is in fact just a helper for coffread;
>>> +    coff) FORMAT_OBS="$FORMAT_OBS coffread.o coff-pe-read.o" ;;
>>> +
>>> +    dbx) FORMAT_OBS="$FORMAT_OBS dbxread.o" ;;
>>> +
>>> +    elf)  if "$support_elf"="yes"; then
>>> +	    FORMAT_OBS="$FORMAT_OBS elfread.o"
>>> +	  fi
>>> +	;;
>>> +
>>> +    macho)  if "$support_macho"="yes"; then
>>> +	      FORMAT_OBS="$FORMAT_OBS machoread.o"
>>> +	    fi
>>> +	;;
>>> +
>>> +    mips) FORMAT_OBS="$FORMAT_OBS mipsread.o" ;;
>>> +esac
>>> diff --git a/gdb/configure.tgt b/gdb/configure.tgt
>>> index 8d85a597ec8..793793601c1 100644
>>> --- a/gdb/configure.tgt
>>> +++ b/gdb/configure.tgt
>>> @@ -507,7 +507,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"
>>>   	;;
>>> @@ -523,8 +523,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
>>> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
>>> index 77a4021b36a..c569e68060e 100644
>>> --- a/gdb/doc/gdb.texinfo
>>> +++ b/gdb/doc/gdb.texinfo
>>> @@ -41177,6 +41177,13 @@ 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-formats=@r{[}@var{format}@r{]}@dots{}
>>> +@itemx --enable-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.
>>> +
>>>   @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
>>> -- 
>>> 2.46.1



More information about the Gdb-patches mailing list