From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id XDuEHUav/WYmFT8AWB0awg (envelope-from ) for ; Wed, 02 Oct 2024 16:38:30 -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=RmusrIvy; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 65E6D1E353; Wed, 2 Oct 2024 16:38:30 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-7.8 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_BLOCKED,RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL, RCVD_IN_VALIDITY_SAFE,URIBL_BLOCKED,URIBL_DBL_BLOCKED_OPENDNS autolearn=ham autolearn_force=no version=4.0.0 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 C91AC1E05C for ; Wed, 2 Oct 2024 16:38:28 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DB1B63858C50 for ; Wed, 2 Oct 2024 20:38:27 +0000 (GMT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 49F883858D29 for ; Wed, 2 Oct 2024 20:38:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 49F883858D29 Authentication-Results: sourceware.org; dmarc=pass (p=none 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 49F883858D29 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1727901486; cv=none; b=uBFM2F699Eu9735RGtWppLfZiKkYDggDmfl85eYXrz+4ON48ccZg3btUR7vW6VLQ88V6eAoqJkpjoGOa7beFlBGv+OYpRLepqpzC2pq5YtpCBnVqss9b68Frc/4xrbQVQ6KekPiFoL5Ys7MPt6xaI5YXC5E2EXs2RinhgZs2VGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1727901486; c=relaxed/simple; bh=7eAVcsKI5p+0g9E8hnGdpfMT7IlFIPIpj13GdAU/ty8=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=XGlm/lfCMSjHBcoygLMlZodFU8udPqgjKnZSKMxsJn1sKEl2dyuHUkt9CNDAMWHO5dnuLI7osVzUOnZNV8o80EHqVp/2g6vGnWcLKOaC7zCQPn1qYmtiami7WaYNhi7fh0RX3MnZ5tidNq9XUbIoK6fJde2OWe5YnVldtIujNQM= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1727901482; 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=FFoahn9C8jc2rFxvh7y9YfBtl8NUm2eUwUYRStAwkn4=; b=RmusrIvy3mMOvXQ9bpUQke6U8YHPisr+py/IhGBtHHZRFVuw6sQ05V3PvzGA1bqMR++kd7 jORg8RbRIqPG2bxv2cPk+zRltS3cNKeS1Iqe++Y/dAiYogcNjcbkesSdqjebEnX+uPBo1e UW6o7GUTOAxFWUaya1G6f4yn9o4P2jo= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-296-ubpPNh3yP627lVyWWMFznA-1; Wed, 02 Oct 2024 16:38:01 -0400 X-MC-Unique: ubpPNh3yP627lVyWWMFznA-1 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7acb118ba04so37010085a.0 for ; Wed, 02 Oct 2024 13:38:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727901480; x=1728506280; 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=FFoahn9C8jc2rFxvh7y9YfBtl8NUm2eUwUYRStAwkn4=; b=lnfhmlaJuGwKPCfpeo2zBvxxHkg7l7MFBfvemab+5EYOrlTOCml2p5LQbxqLfohdx+ CrlwsvcLQUJrlTNoTY2yIYBJBTcVmZtRyUP+r/FXFcLFu9m+pjEFraHBvUnq5RYrYSOp hU75Z6XqgWGwbvuhpXQhfHwZFYWtFLhKF4DAoEu9KX04r8+MnLI6/czwAucy5xIv3G9Z in3osVnteitBMgOOSJDUxKO+JpmSIJXEeCOdRFXCYag7ufkigEAraO6zVsa9Mfx5M24D uZZQYorVt4ZuEdFwNuZUa3LKvYfhucssPNYxQ59RhJ2A164Rp6YZLiiMtVEikS9/0X8D apVQ== X-Forwarded-Encrypted: i=1; AJvYcCV8dzjitTk+9nEZtiJ17sBRtwtQCuStPsDXEiNUCYCStPd80s145Y0o/lLgXoNJxGgh9RUzrhZtesBI/A==@sourceware.org X-Gm-Message-State: AOJu0YztxrHJ7dtgTNikepYmCYqHLCzqYFE1aGnXm5g1KeYF6RQPXDde 9m0Y0qYZbaRmg3u6sFfCqMq8mk0PHu3wijTbPjLqMVViwgX9LwDMoEPRQCzrqOqEC0TVE/EPu0t L9SU5lhYI0SBpN2ZwQ3EOEwA+BChk976Ob+mGHyiBnRX+Blas2vjZZP6dV3S9C6LnFgI= X-Received: by 2002:a05:620a:450f:b0:7ae:33d0:d7c with SMTP id af79cd13be357-7ae62740a53mr526403485a.65.1727901478867; Wed, 02 Oct 2024 13:37:58 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEL+9yP/ZlT/bQCKzDZUjGs73aSdXLi8RJm0vcVM6nlRL1oVDwdrr1HGqswd/oa62CrfgR+Ew== X-Received: by 2002:a05:620a:450f:b0:7ae:33d0:d7c with SMTP id af79cd13be357-7ae62740a53mr526391985a.65.1727901476759; Wed, 02 Oct 2024 13:37:56 -0700 (PDT) Received: from ?IPV6:2804:14d:8084:92c5::1000? ([2804:14d:8084:92c5::1000]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7ae3782b8e3sm654005785a.96.2024.10.02.13.37.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 02 Oct 2024 13:37:56 -0700 (PDT) Message-ID: <7cd41a93-3f67-4603-8178-16684401adb5@redhat.com> Date: Wed, 2 Oct 2024 17:37:53 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] gdb, configure: Add disable-formats option for configure To: Andrew Burgess , gdb-patches@sourceware.org References: <20240925175340.1850969-1-guinevere@redhat.com> <87ploiy5ew.fsf@redhat.com> From: Guinevere Larsen In-Reply-To: <87ploiy5ew.fsf@redhat.com> X-Mimecast-Spam-Score: 0 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 On 10/2/24 10:56 AM, Andrew Burgess wrote: > Guinevere Larsen 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? > >> +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 . >> + >> +# 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