[binutils-gdb] bfd: avoid elf-solaris2.c for non-Solaris targets

Jan Beulich via Binutils-cvs <[email protected]>
Newsgroups gmane.comp.gnu.binutils.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=83846f34e2745726312f4319deb65aed380f4b03

commit 83846f34e2745726312f4319deb65aed380f4b03
Author: Jan Beulich <[email protected]>
Date:   Fri Mar 13 07:52:08 2026 +0100

    bfd: avoid elf-solaris2.c for non-Solaris targets
    
    Even if small, it is wasteful to build this file when it's not actually
    used. Limit it to Solaris targets and introduce a compiler define
    (paralleling OBJ_MAYBE_ELF, as having similar purpose) to guard internals.

Diff:
---
 bfd/configure      | 14 ++++++++------
 bfd/configure.ac   | 14 ++++++++------
 bfd/elf-solaris2.h | 18 ++++++++++++++++++
 bfd/elf32-i386.c   |  4 ++++
 bfd/elf32-sparc.c  |  4 ++++
 bfd/elf64-sparc.c  |  4 ++++
 bfd/elf64-x86-64.c |  4 ++++
 7 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/bfd/configure b/bfd/configure
index 0d55a4128e1..73037b7f671 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -15848,8 +15848,8 @@ elf64_powerpc="elf64-ppc.lo elf64-gen.lo elf64.lo elf-attrs.lo"
 elf32_riscv="elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo elf-attrs.lo"
 elf64_riscv="elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo elf-attrs.lo"
 elf_tic6x="elf32-tic6x.lo elf32.lo elf-attrs.lo"
-elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-solaris2.lo elf-vxworks.lo"
-elfxx_sparc="elfxx-sparc.lo elf-solaris2.lo elf-vxworks.lo elf-attrs.lo $elf"
+elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-vxworks.lo"
+elfxx_sparc="elfxx-sparc.lo elf-vxworks.lo elf-attrs.lo $elf"
 for vec in $selvecs
 do
     target_size=32
@@ -15932,7 +15932,7 @@ do
     i386_coff_lynx_vec)		 tb="$tb cf-i386lynx.lo lynx-core.lo $coff" ;;
     i386_elf32_vec)		 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_elf32_fbsd_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
-    i386_elf32_sol2_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
+    i386_elf32_sol2_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf-solaris2.lo elf32.lo $elf" ;;
     i386_elf32_vxworks_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_mach_o_vec)		 tb="$tb mach-o-i386.lo" ;;
     i386_msdos_vec)		 tb="$tb i386msdos.lo" ;;
@@ -16070,11 +16070,11 @@ do
     sh_pe_le_vec)		 tb="$tb pe-sh.lo coff-sh.lo peigen.lo $coff" ;;
     sh_pei_le_vec)		 tb="$tb pei-sh.lo coff-sh.lo peigen.lo $coff" ;;
     sparc_elf32_vec)		 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc" ;;
-    sparc_elf32_sol2_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc" ;;
+    sparc_elf32_sol2_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc elf-solaris2.lo" ;;
     sparc_elf32_vxworks_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc" ;;
     sparc_elf64_vec)		 tb="$tb elf64-sparc.lo elf64.lo $elfxx_sparc"; target_size=64 ;;
     sparc_elf64_fbsd_vec)	 tb="$tb elf64-sparc.lo elf64.lo $elfxx_sparc"; target_size=64 ;;
-    sparc_elf64_sol2_vec)	 tb="$tb elf64-sparc.lo elf64.lo $elfxx_sparc"; target_size=64 ;;
+    sparc_elf64_sol2_vec)	 tb="$tb elf64-sparc.lo elf64.lo $elfxx_sparc elf-solaris2.lo"; target_size=64 ;;
     spu_elf32_vec)		 tb="$tb elf32-spu.lo elf32.lo $elf" ;;
     sym_vec)			 tb="$tb xsym.lo" ;;
     tic30_coff_vec)		 tb="$tb coff-tic30.lo $coffgen" ;;
@@ -16114,7 +16114,7 @@ do
     x86_64_elf32_vec)		 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;;
     x86_64_elf64_vec)		 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf-sframe.lo $elf"; target_size=64 ;;
     x86_64_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf-sframe.lo $elf"; target_size=64 ;;
-    x86_64_elf64_sol2_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf-sframe.lo $elf"; target_size=64 ;;
+    x86_64_elf64_sol2_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf-solaris2.lo elf64.lo elf-sframe.lo $elf"; target_size=64 ;;
     x86_64_mach_o_vec)		 tb="$tb mach-o-x86-64.lo" ;;
     x86_64_pe_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
     x86_64_pe_big_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
@@ -16192,6 +16192,7 @@ if test x${all_targets} = xtrue ; then
   done
   assocvecs=$f
   TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF -DOBJ_MAYBE_ELF_ATTRIBUTES -DOBJ_MAYBE_ELF_SFRAME"
+  TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SOLARIS2"
 else	# all_targets is true
   # Only set these if they will be nonempty, for the clever echo.
   havevecs=
@@ -16208,6 +16209,7 @@ else	# all_targets is true
     elf.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF" ;;
     elf-attrs.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_ATTRIBUTES" ;;
     elf-sframe.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SFRAME" ;;
+    elf-solaris2.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SOLARIS2" ;;
     esac
   done
 fi	# all_targets is true
diff --git a/bfd/configure.ac b/bfd/configure.ac
index 06e02a2d507..2883645c74e 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -389,8 +389,8 @@ elf64_powerpc="elf64-ppc.lo elf64-gen.lo elf64.lo elf-attrs.lo"
 elf32_riscv="elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo elf-attrs.lo"
 elf64_riscv="elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo elf-attrs.lo"
 elf_tic6x="elf32-tic6x.lo elf32.lo elf-attrs.lo"
-elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-solaris2.lo elf-vxworks.lo"
-elfxx_sparc="elfxx-sparc.lo elf-solaris2.lo elf-vxworks.lo elf-attrs.lo $elf"
+elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-vxworks.lo"
+elfxx_sparc="elfxx-sparc.lo elf-vxworks.lo elf-attrs.lo $elf"
 for vec in $selvecs
 do
     target_size=32
@@ -473,7 +473,7 @@ do
     i386_coff_lynx_vec)		 tb="$tb cf-i386lynx.lo lynx-core.lo $coff" ;;
     i386_elf32_vec)		 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_elf32_fbsd_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
-    i386_elf32_sol2_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
+    i386_elf32_sol2_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf-solaris2.lo elf32.lo $elf" ;;
     i386_elf32_vxworks_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
     i386_mach_o_vec)		 tb="$tb mach-o-i386.lo" ;;
     i386_msdos_vec)		 tb="$tb i386msdos.lo" ;;
@@ -611,11 +611,11 @@ do
     sh_pe_le_vec)		 tb="$tb pe-sh.lo coff-sh.lo peigen.lo $coff" ;;
     sh_pei_le_vec)		 tb="$tb pei-sh.lo coff-sh.lo peigen.lo $coff" ;;
     sparc_elf32_vec)		 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc" ;;
-    sparc_elf32_sol2_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc" ;;
+    sparc_elf32_sol2_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc elf-solaris2.lo" ;;
     sparc_elf32_vxworks_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc" ;;
     sparc_elf64_vec)		 tb="$tb elf64-sparc.lo elf64.lo $elfxx_sparc"; target_size=64 ;;
     sparc_elf64_fbsd_vec)	 tb="$tb elf64-sparc.lo elf64.lo $elfxx_sparc"; target_size=64 ;;
-    sparc_elf64_sol2_vec)	 tb="$tb elf64-sparc.lo elf64.lo $elfxx_sparc"; target_size=64 ;;
+    sparc_elf64_sol2_vec)	 tb="$tb elf64-sparc.lo elf64.lo $elfxx_sparc elf-solaris2.lo"; target_size=64 ;;
     spu_elf32_vec)		 tb="$tb elf32-spu.lo elf32.lo $elf" ;;
     sym_vec)			 tb="$tb xsym.lo" ;;
     tic30_coff_vec)		 tb="$tb coff-tic30.lo $coffgen" ;;
@@ -655,7 +655,7 @@ do
     x86_64_elf32_vec)		 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;;
     x86_64_elf64_vec)		 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf-sframe.lo $elf"; target_size=64 ;;
     x86_64_elf64_fbsd_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf-sframe.lo $elf"; target_size=64 ;;
-    x86_64_elf64_sol2_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf-sframe.lo $elf"; target_size=64 ;;
+    x86_64_elf64_sol2_vec)	 tb="$tb elf64-x86-64.lo $elfxx_x86 elf-solaris2.lo elf64.lo elf-sframe.lo $elf"; target_size=64 ;;
     x86_64_mach_o_vec)		 tb="$tb mach-o-x86-64.lo" ;;
     x86_64_pe_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
     x86_64_pe_big_vec)		 tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
@@ -733,6 +733,7 @@ if test x${all_targets} = xtrue ; then
   done
   assocvecs=$f
   TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF -DOBJ_MAYBE_ELF_ATTRIBUTES -DOBJ_MAYBE_ELF_SFRAME"
+  TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SOLARIS2"
 else	# all_targets is true
   # Only set these if they will be nonempty, for the clever echo.
   havevecs=
@@ -749,6 +750,7 @@ else	# all_targets is true
     elf.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF" ;;
     elf-attrs.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_ATTRIBUTES" ;;
     elf-sframe.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SFRAME" ;;
+    elf-solaris2.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SOLARIS2" ;;
     esac
   done
 fi	# all_targets is true
diff --git a/bfd/elf-solaris2.h b/bfd/elf-solaris2.h
index 0c7b1897c8f..4df430ba347 100644
--- a/bfd/elf-solaris2.h
+++ b/bfd/elf-solaris2.h
@@ -20,6 +20,8 @@
 
 extern const char *const elf_solaris2_global_syms[];
 
+#ifdef OBJ_MAYBE_ELF_SOLARIS2
+
 extern bool elf_solaris2_add_symbol_hook
   (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, const char **,
    flagword *, asection **, bfd_vma *) ATTRIBUTE_HIDDEN;
@@ -32,3 +34,19 @@ is_solaris2_abi_global_sym (const char *name)
       return true;
   return false;
 }
+
+#else /* !OBJ_MAYBE_ELF_SOLARIS2 */
+
+static inline bool
+elf_solaris2_add_symbol_hook (bfd *abfd ATTRIBUTE_UNUSED,
+			      struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			      Elf_Internal_Sym *isym ATTRIBUTE_UNUSED,
+			      const char **name ATTRIBUTE_UNUSED,
+			      flagword *flags ATTRIBUTE_UNUSED,
+			      asection **sec ATTRIBUTE_UNUSED,
+			      bfd_vma *value ATTRIBUTE_UNUSED)
+{
+  return true;
+}
+
+#endif /* OBJ_MAYBE_ELF_SOLARIS2 */
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 8c7d7a74021..40759d07676 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -4651,6 +4651,8 @@ elf_i386_fbsd_init_file_header (bfd *abfd, struct bfd_link_info *info)
 
 #undef elf_backend_init_file_header
 
+#ifdef OBJ_MAYBE_ELF_SOLARIS2
+
 /* Solaris 2.  */
 
 #undef	TARGET_LITTLE_SYM
@@ -4688,6 +4690,8 @@ elf_i386_fbsd_init_file_header (bfd *abfd, struct bfd_link_info *info)
 
 #include "elf32-target.h"
 
+#endif /* OBJ_MAYBE_ELF_SOLARIS2 */
+
 /* Intel MCU support.  */
 
 static bool
diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c
index ad18e734d18..b2aa5a4785a 100644
--- a/bfd/elf32-sparc.c
+++ b/bfd/elf32-sparc.c
@@ -275,6 +275,8 @@ elf32_sparc_reloc_type_class (const struct bfd_link_info *info,
 
 #include "elf32-target.h"
 
+#ifdef OBJ_MAYBE_ELF_SOLARIS2
+
 /* Solaris 2.  */
 
 #undef	TARGET_BIG_SYM
@@ -315,6 +317,8 @@ elf32_sparc_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSE
 
 #include "elf32-target.h"
 
+#endif /* OBJ_MAYBE_ELF_SOLARIS2 */
+
 /* A final_write_processing hook that does both the SPARC- and VxWorks-
    specific handling.  */
 
diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c
index bb83ccdf20e..1aea5aa8114 100644
--- a/bfd/elf64-sparc.c
+++ b/bfd/elf64-sparc.c
@@ -1005,6 +1005,8 @@ static const struct elf_size_info elf64_sparc_size_info =
 
 #include "elf64-target.h"
 
+#ifdef OBJ_MAYBE_ELF_SOLARIS2
+
 /* Solaris 2.  */
 
 static bool
@@ -1059,3 +1061,5 @@ elf64_sparc_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSE
 #define elf_backend_copy_special_section_fields elf64_sparc_copy_solaris_special_section_fields
 
 #include "elf64-target.h"
+
+#endif /* OBJ_MAYBE_ELF_SOLARIS2 */
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 9ce487ca05e..ea9a21934ea 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -6435,6 +6435,8 @@ elf_x86_64_special_sections[]=
 
 #include "elf64-target.h"
 
+#ifdef OBJ_MAYBE_ELF_SOLARIS2
+
 /* Solaris 2 support.  */
 
 static bool
@@ -6487,6 +6489,8 @@ elf_x86_64_solaris2_add_symbol_hook (bfd *abfd,
 
 #include "elf64-target.h"
 
+#endif /* OBJ_MAYBE_ELF_SOLARIS2 */
+
 /* Restore defaults.  */
 #undef	ELF_OSABI
 #undef	ELF_OSABI_EXACT
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.