From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id ECiNNImz5WfYwRwAWB0awg (envelope-from ) for ; Thu, 27 Mar 2025 16:22:33 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=SuLDLS4R; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id C58CC1E0C3; Thu, 27 Mar 2025 16:22:33 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 2EA781E0C0 for ; Thu, 27 Mar 2025 16:22:32 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A7628385841F for ; Thu, 27 Mar 2025 20:22:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A7628385841F Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=SuLDLS4R Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTP id 2B79F3858408 for ; Thu, 27 Mar 2025 20:21:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2B79F3858408 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2B79F3858408 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1743106910; cv=none; b=i/2WzCrFAYSRC0fxgnc39W6yRvHuKAwil9ywuiawFeUh/ql57dcFcd3bP7Gd3XF3brKCLZuvvWjOSom7bkc/9aiUs0a2UzC8LWVNSFnTf2khmG/YIbcl1rgB+s7b41d8qDmJpeTb59RrVj6/4qUxApuSAMTCkTlFDY0m9FhTwmg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1743106910; c=relaxed/simple; bh=Sz0vvQ+FAgjlCDoh+QIoAGMLFFrCcSAMeYEHCUq2+qk=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=v39r/BPe5geSKWsIQ6+Aj+D846cvVWrbnrc0Jnhd+/hDEg/xKMh8m0ol46uZKeGUuqSjIj8eFNTgjjabSct1/V9ZRy21GmSLGFgDMGodsSaniIjG5MyFdB1ETY43KFq//Ui3pG+hU2m3c1NVWQhxZBLyFL3sIRw/Dku/3TEmziQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2B79F3858408 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1743106909; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JgqAMyN6nMYDLfnEwDz6YW4STCXft27vpPt5jqPgfhY=; b=SuLDLS4RcKMf8tHQk9Y1Tu3/4CVxc+c82iBLP6xbEesewY13JzOQo4ABcOOPnaxWinjHRW 0rvzX1aZ2jOCz6YWPbkKlEPThsL0d4aU8haQwEiyIu83zVvbzxQnGzachn1YKTefkqtmfq a8f2fpI+0kWhH+eZ+Y87XWS+wNKKDW8= Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-397-AMcScYblN7-FWPuY3gcwlA-1; Thu, 27 Mar 2025 16:21:48 -0400 X-MC-Unique: AMcScYblN7-FWPuY3gcwlA-1 X-Mimecast-MFC-AGG-ID: AMcScYblN7-FWPuY3gcwlA_1743106908 Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-6eb2480028cso22979216d6.3 for ; Thu, 27 Mar 2025 13:21:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743106908; x=1743711708; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JgqAMyN6nMYDLfnEwDz6YW4STCXft27vpPt5jqPgfhY=; b=rtxRqug3oN0K41glDhiHE+l62YCaYkbFhW8aS9YVHbigJYxdabXaVOV354FVooaGT8 vQLB1r1K9sdvAv1dIPhTm9deXufzsKw8/aH9YGUZzvdeLyiPEJ3PiRLp3SX+Q8Lu/cOe ZcMtovmQ6qQEInn+15PT0xP4A/RW8b19rI6wkh/M9rxGrnSt9zFZf/6Ty32m9L/GERY1 ty9rwOYKapfBYKyk6aLKXA0oOTPOnXPrIHTovvL8+IzZ3aPR8iWCKDXs3R2m8V+Xjg83 Q1knP6LJ20Me0bGzlVwHx56yY1o37DoVBDPXO0ukfd4iAhYR0u+Ua7W7G3j/0SYobBtm JmSw== X-Gm-Message-State: AOJu0Yz/MBeHpxsoEsi+VHoZVgNfMNYaIq+iQGA9pozucE6HIqiZ83PM Ki+yAxLTPl+86dH3wjpORZzDeU+aSmpQwByIr8jb9mOmZhir+1Z4TYTTDHBeORTM8kunCZxwRO3 knh28Y7GV94ArfYuBF4CtGqw7yB3VGcCgsaLywwmBysdNGdouKUu88V3K3Wk/rfQ6BMIephcuWg 16PnxbwBzPlwYjeosrk+387vIs6KGVpYZHahfoAf/Welp7 X-Gm-Gg: ASbGncscOqAUVKZKaAp9oPjHYXd2pKnQqT0SEWpBUHf459pNbng/IYxib6v/bYlnx8r VGnVwx57wCJWL2z7zlvjR6H+Fk6FBGHt4+LBI5tdZZ4KwqT+uVdEYZ3ijuknxPoS69oBG4XameB cyF6MlMQ9aFwBVWI0tnFu/f46hC8/v4ESpudyFj5h3EmMdxIaAX52aEMyFySEwMxJ8kNRBWBRt2 gqacA1odnQYFQrCgMQJh9lxHtxd/J5FyBGN0qg8bxBIeu8q0A+D766XAy04oTrLWudAUEvEAwIX XzIjMkTND/5Hrl37fIOY6MJx6aE= X-Received: by 2002:ad4:5d61:0:b0:6e8:c713:321f with SMTP id 6a1803df08f44-6ed2390ae92mr68065176d6.35.1743106907524; Thu, 27 Mar 2025 13:21:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFUWtJZA8ruAldvmEPZlC8ImmYtrokZU//Hjjhmq+QniInufbgR1TnK9d+F/qO7ZAabQ2oS2w== X-Received: by 2002:ad4:5d61:0:b0:6e8:c713:321f with SMTP id 6a1803df08f44-6ed2390ae92mr68064676d6.35.1743106906793; Thu, 27 Mar 2025 13:21:46 -0700 (PDT) Received: from ?IPV6:2804:14d:8084:9a69::1001? ([2804:14d:8084:9a69::1001]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6eec9646269sm2864186d6.41.2025.03.27.13.21.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 27 Mar 2025 13:21:46 -0700 (PDT) Message-ID: <5dc0d2cc-51f6-4265-8e5b-bdb964a20ca3@redhat.com> Date: Thu, 27 Mar 2025 17:21:43 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PING][PATCH v3] gdb, configure: Add disable-formats option for configure To: gdb-patches@sourceware.org, guinevere@redhat.com References: <20250307115821.1507435-1-guinevere@redhat.com> From: Guinevere Larsen In-Reply-To: <20250307115821.1507435-1-guinevere@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: senJnB9ziYO4BRyK85uXTfYgvADM6P22aRJqEIenVQA_1743106908 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org Ping :) -- Cheers, Guinevere Larsen She/Her/Hers On 3/7/25 8:58 AM, Guinevere Larsen wrote: > GDB has support for many binary 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 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. > --- > gdb/Makefile.in | 13 +++---- > gdb/NEWS | 11 ++++++ > gdb/README | 24 +++++++++++++ > gdb/config.in | 3 ++ > gdb/configure | 81 +++++++++++++++++++++++++++++++++++++++++--- > gdb/configure.ac | 65 +++++++++++++++++++++++++++++++++-- > gdb/configure.format | 51 ++++++++++++++++++++++++++++ > gdb/configure.tgt | 20 +++++++++-- > gdb/doc/gdb.texinfo | 8 +++++ > gdb/top.c | 5 +++ > 10 files changed, 264 insertions(+), 17 deletions(-) > create mode 100644 gdb/configure.format > > diff --git a/gdb/Makefile.in b/gdb/Makefile.in > index a24c86fcff8..778ed54090f 100644 > --- a/gdb/Makefile.in > +++ b/gdb/Makefile.in > @@ -904,13 +904,15 @@ 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@ > + > # The following native-target dependent variables are defined on > # configure.nat. > NAT_FILE = @NAT_FILE@ > @@ -1067,8 +1069,6 @@ COMMON_SFILES = \ > c-varobj.c \ > charset.c \ > cli-out.c \ > - coff-pe-read.c \ > - coffread.c \ > complaints.c \ > completer.c \ > copying.c \ > @@ -1082,7 +1082,6 @@ COMMON_SFILES = \ > d-lang.c \ > d-namespace.c \ > d-valprint.c \ > - dbxread.c \ > dcache.c \ > debug.c \ > debuginfod-support.c \ > @@ -1174,7 +1173,6 @@ COMMON_SFILES = \ > memtag.c \ > minidebug.c \ > minsyms.c \ > - mipsread.c \ > namespace.c \ > objc-lang.c \ > objfiles.c \ > @@ -1267,7 +1265,6 @@ SFILES = \ > d-exp.y \ > dtrace-probe.c \ > elf-none-tdep.c \ > - elfread.c \ > f-exp.y \ > gcore-elf.c \ > gdb.c \ > @@ -1887,7 +1884,6 @@ ALLDEPFILES = \ > x86-gnu-nat.c \ > x86-nat.c \ > x86-tdep.c \ > - xcoffread.c \ > xstormy16-tdep.c \ > xtensa-config.c \ > xtensa-linux-nat.c \ > @@ -1909,7 +1905,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 f5dbf5c3350..2a916d356ef 100644 > --- a/gdb/NEWS > +++ b/gdb/NEWS > @@ -85,6 +85,17 @@ qXfer:threads:read > * 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. > + > *** Changes in GDB 16 > > * Support for Nios II targets has been removed as this architecture > diff --git a/gdb/README b/gdb/README > index b6eb3f12c56..0168afe7cd1 100644 > --- a/gdb/README > +++ b/gdb/README > @@ -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): is a legacy file format, this > + is recommended if you know you will be dealing with this > + file format; > + * elf: Main format of 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): this is the main file format > + for targets running on MIPS CPUs. It is heavily recommended > + when supporting those targets. > + * xcoff: Main format of 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' > diff --git a/gdb/config.in b/gdb/config.in > index db63aeaec75..248ebaa68af 100644 > --- a/gdb/config.in > +++ b/gdb/config.in > @@ -733,6 +733,9 @@ > /* Define to 1 if you have the ANSI C header files. */ > #undef STDC_HEADERS > > +/* Which file formats were requested at configure time. */ > +#undef SUPPORTED_FORMATS > + > /* automatically load a system-wide gdbinit file */ > #undef SYSTEM_GDBINIT > > diff --git a/gdb/configure b/gdb/configure > index bdc405e01b3..8229ccaa588 100755 > --- a/gdb/configure > +++ b/gdb/configure > @@ -706,6 +706,7 @@ LIBGUI > LTLIBLZMA > LIBLZMA > HAVE_LIBLZMA > +FORMAT_OBS > SER_HARDWIRE > WERROR_CFLAGS > WARN_CFLAGS > @@ -934,6 +935,7 @@ with_relocated_sources > with_auto_load_dir > with_auto_load_safe_path > enable_targets > +enable_binary_file_formats > enable_64_bit_bfd > with_amd_dbgapi > enable_tui > @@ -1645,6 +1647,9 @@ Optional Features: > --disable-nls do not use Native Language Support > --enable-targets=TARGETS > alternative target configurations > + --enable-binary-file-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) > @@ -11500,7 +11505,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 11503 "configure" > +#line 11508 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -11606,7 +11611,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 11609 "configure" > +#line 11614 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -24875,6 +24880,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-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 --enable-64-bit-bfd was given. > if test "${enable_64_bit_bfd+set}" = set; then : > @@ -24958,11 +24975,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 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` > @@ -31553,6 +31579,10 @@ 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. > +all_binary_format_obs="dbxread.o mipsread.o coffread.o coff-pe-read.o xcoffread.o" > + > +support_elf=no > # Add ELF support to GDB, but only if BFD includes ELF support. > > OLD_CFLAGS=$CFLAGS > @@ -31605,7 +31635,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 > @@ -31669,9 +31699,12 @@ if test "$ac_res" != no; then : > fi > > fi > + support_elf=yes > + all_binary_format_obs="$all_binary_format_obs elfread.o" > fi > > # Add macho support to GDB, but only if BFD includes it. > +support_macho=no > > OLD_CFLAGS=$CFLAGS > OLD_LDFLAGS=$LDFLAGS > @@ -31723,9 +31756,49 @@ $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 > + all_binary_format_obs="$all_binary_format_obs machoread.o" > +fi > + > +FORMAT_OBS= > + > +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 > + if ! echo "$enable_binary_file_formats" | grep -wq "$req"; then > + { $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" > + fi > + done > + > + > +cat >>confdefs.h <<_ACEOF > +#define SUPPORTED_FORMATS "$enable_binary_file_formats" > +_ACEOF > + > fi > > +enable_binary_file_formats=$(echo $enable_binary_file_formats | sed 's/,/ /g') > + > +for format in $enable_binary_file_formats > +do > + if test "$format" = "elf"; then > + if test "$support_elf" != "yes"; then > + as_fn_error but BFD does not support it." "\"elf support was requested" "$LINENO" 5; > + fi > + elif test "$format" = "macho"; then > + if test "$support_macho" != "yes"; then > + as_fn_error but BFD does not support it." "\"Mach-O support was requested" "$LINENO" 5; > + fi > + fi > + > + . ${srcdir}/configure.format > +done > + > + > + > # 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 fb77e79e73b..c5e774962ce 100644 > --- a/gdb/configure.ac > +++ b/gdb/configure.ac > @@ -191,6 +191,15 @@ AS_HELP_STRING([--enable-targets=TARGETS], [alternative target configurations]), > ;; > esac]) > > +AC_ARG_ENABLE(binary_file_formats, > + AS_HELP_STRING([--enable-binary-file-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_binary_file_formats= ;; > + *) enable_binary_file_formats=$enableval ;; > +esac], [enable_binary_file_formats=all]) > > BFD_64_BIT > > @@ -211,11 +220,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 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` > @@ -1903,11 +1921,15 @@ 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. > +all_binary_format_obs="dbxread.o mipsread.o coffread.o coff-pe-read.o xcoffread.o" > + > +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" > AC_DEFINE(HAVE_ELF, 1, > [Define if ELF support should be included.]) > @@ -1915,15 +1937,54 @@ if test "$gdb_cv_var_elf" = yes; then > if test "$plugins" = "yes"; then > AC_SEARCH_LIBS(dlopen, dl) > fi > + support_elf=yes > + all_binary_format_obs="$all_binary_format_obs elfread.o" > 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 > + all_binary_format_obs="$all_binary_format_obs machoread.o" > +fi > + > +FORMAT_OBS= > + > +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 > + if ! echo "$enable_binary_file_formats" | grep -wq "$req"; then > + AC_MSG_WARN("$req is required to support one or more requested targets. Adding it") > + enable_binary_file_formats="${enable_binary_file_formats},$req" > + fi > + done > + > + AC_DEFINE_UNQUOTED(SUPPORTED_FORMATS, "$enable_binary_file_formats", > + Which file formats were requested at configure time. ) > fi > > +enable_binary_file_formats=$(echo $enable_binary_file_formats | sed 's/,/ /g') > + > +for format in $enable_binary_file_formats > +do > + if test "$format" = "elf"; then > + if test "$support_elf" != "yes"; then > + AC_MSG_ERROR("elf support was requested, but BFD does not support it."); > + fi > + elif test "$format" = "macho"; then > + if test "$support_macho" != "yes"; then > + AC_MSG_ERROR("Mach-O support was requested, but BFD does not support it."); > + fi > + fi > + > + . ${srcdir}/configure.format > +done > + > +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..5ac86359037 > --- /dev/null > +++ b/gdb/configure.format > @@ -0,0 +1,51 @@ > +# Copyright (C) 2024-2025 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 . > + > +# 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" > + ;; > + > + # 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) > + FORMAT_OBS="$FORMAT_OBS elfread.o" > + ;; > + > + macho) > + FORMAT_OBS="$FORMAT_OBS machoread.o" > + ;; > + > + mips) > + FORMAT_OBS="$FORMAT_OBS mipsread.o" > + ;; > + > + all) > + FORMAT_OBS="$all_binary_format_obs" > + ;; > +esac > diff --git a/gdb/configure.tgt b/gdb/configure.tgt > index 18a15c032c3..064deddc97b 100644 > --- a/gdb/configure.tgt > +++ b/gdb/configure.tgt > @@ -496,7 +496,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" > ;; > @@ -512,8 +512,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 > @@ -817,3 +817,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 > diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo > index 95a881e9dff..26434183769 100644 > --- a/gdb/doc/gdb.texinfo > +++ b/gdb/doc/gdb.texinfo > @@ -41258,6 +41258,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 > diff --git a/gdb/top.c b/gdb/top.c > index b2575bc2b58..9342085b3a9 100644 > --- a/gdb/top.c > +++ b/gdb/top.c > @@ -1595,6 +1595,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_FORMATS > + gdb_printf (stream, _("\ > + --enable-binary-file-formats=%s\n"), SUPPORTED_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\