[binutils-gdb] bfd: avoid elf-vxworks.c for non-VxWorks 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=5683114a2268b549e847dd25113bd0ddb0e1432c

commit 5683114a2268b549e847dd25113bd0ddb0e1432c
Author: Jan Beulich <[email protected]>
Date:   Fri Mar 13 07:52:46 2026 +0100

    bfd: avoid elf-vxworks.c for non-VxWorks targets
    
    It is wasteful to build this file when it's not actually used. Limit it to
    VxWorks targets and introduce a compiler define (paralleling
    OBJ_MAYBE_ELF, as having similar purpose) to guard internals.
    
    By adding more #ifdef-ary, more savings may be possible. For now, besides
    those guarding the vector definitions, only ones necessary to avoid the
    need for elf_vxworks_*() inline stubs are being added. Somewhat similarly
    tighter #ifdef around the definitions of *_elf*_vxworks*_vec (using
    HAVE_..._vec) may yield further savings.

Diff:
---
 bfd/configure     | 47 ++++++++++++++++++++++++-----------------------
 bfd/configure.ac  | 47 ++++++++++++++++++++++++-----------------------
 bfd/elf-vxworks.h | 10 ++++++++++
 bfd/elf32-arm.c   | 28 ++++++++++++++++++++++------
 bfd/elf32-i386.c  |  4 ++++
 bfd/elf32-mips.c  |  9 +++++++--
 bfd/elf32-ppc.c   |  8 ++++++++
 bfd/elf32-sh.c    | 10 +++++++++-
 bfd/elf32-sparc.c |  4 ++++
 bfd/elfxx-mips.c  |  6 ++++++
 bfd/elfxx-sparc.c |  4 ++++
 bfd/elfxx-x86.c   |  4 ++++
 12 files changed, 126 insertions(+), 55 deletions(-)

diff --git a/bfd/configure b/bfd/configure
index 73037b7f671..f474c6af9cd 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -15838,18 +15838,18 @@ xcoff="xcofflink.lo $coffgen"
 elf32_aarch64="elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo elf-attrs.lo"
 elf64_aarch64="elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo elf-attrs.lo elf-sframe.lo"
 elf_arc="elf32-arc.lo elf32.lo elf-attrs.lo"
-elf_arm="elf32-arm.lo elf32.lo elf-attrs.lo elf-vxworks.lo"
+elf_arm="elf32-arm.lo elf32.lo elf-attrs.lo"
 elf_csky="elf32-csky.lo elf32.lo elf-attrs.lo"
-elf32_mips="elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo elf-attrs.lo"
-elfn32_mips="elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo elf-attrs.lo"
-elf64_mips="elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo elf-attrs.lo"
-elf32_powerpc="elf32-ppc.lo elf-vxworks.lo elf32.lo elf-attrs.lo"
+elf32_mips="elf32-mips.lo elfxx-mips.lo elf32.lo elf-attrs.lo"
+elfn32_mips="elfn32-mips.lo elfxx-mips.lo elf32.lo elf-attrs.lo"
+elf64_mips="elf64-mips.lo elf64.lo elfxx-mips.lo elf32.lo elf-attrs.lo"
+elf32_powerpc="elf32-ppc.lo elf32.lo elf-attrs.lo"
 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-vxworks.lo"
-elfxx_sparc="elfxx-sparc.lo elf-vxworks.lo elf-attrs.lo $elf"
+elfxx_x86="elfxx-x86.lo elf-ifunc.lo"
+elfxx_sparc="elfxx-sparc.lo elf-attrs.lo $elf"
 for vec in $selvecs
 do
     target_size=32
@@ -15881,8 +15881,8 @@ do
     arm_elf32_le_vec)		 tb="$tb $elf_arm $elf" ;;
     arm_elf32_fdpic_be_vec)	 tb="$tb $elf_arm $elf" ;;
     arm_elf32_fdpic_le_vec)	 tb="$tb $elf_arm $elf" ;;
-    arm_elf32_vxworks_be_vec)	 tb="$tb $elf_arm $elf" ;;
-    arm_elf32_vxworks_le_vec)	 tb="$tb $elf_arm $elf" ;;
+    arm_elf32_vxworks_be_vec)	 tb="$tb $elf_arm elf-vxworks.lo $elf" ;;
+    arm_elf32_vxworks_le_vec)	 tb="$tb $elf_arm elf-vxworks.lo $elf" ;;
     arm_pe_be_vec)		 tb="$tb pe-arm.lo peigen.lo $coff" ;;
     arm_pe_le_vec)		 tb="$tb pe-arm.lo peigen.lo $coff" ;;
     arm_pe_wince_be_vec)	 tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo $coff" ;;
@@ -15933,7 +15933,7 @@ do
     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 elf-solaris2.lo elf32.lo $elf" ;;
-    i386_elf32_vxworks_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
+    i386_elf32_vxworks_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf-vxworks.lo elf32.lo $elf" ;;
     i386_mach_o_vec)		 tb="$tb mach-o-i386.lo" ;;
     i386_msdos_vec)		 tb="$tb i386msdos.lo" ;;
     i386_pe_vec)		 tb="$tb pe-i386.lo peigen.lo $coff" ;;
@@ -15994,8 +15994,8 @@ do
     mips_elf32_trad_le_vec)	 tb="$tb $elf32_mips $elf $ecoff" ;;
     mips_elf32_tradfbsd_be_vec)  tb="$tb $elf32_mips $elf $ecoff" ;;
     mips_elf32_tradfbsd_le_vec)  tb="$tb $elf32_mips $elf $ecoff" ;;
-    mips_elf32_vxworks_be_vec)	 tb="$tb $elf32_mips $elf $ecoff" ;;
-    mips_elf32_vxworks_le_vec)	 tb="$tb $elf32_mips $elf $ecoff" ;;
+    mips_elf32_vxworks_be_vec)	 tb="$tb $elf32_mips elf-vxworks.lo $elf $ecoff" ;;
+    mips_elf32_vxworks_le_vec)	 tb="$tb $elf32_mips elf-vxworks.lo $elf $ecoff" ;;
     mips_elf64_be_vec)		 tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
     mips_elf64_le_vec)		 tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
     mips_elf64_trad_be_vec)	 tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
@@ -16029,7 +16029,7 @@ do
     powerpc_elf32_vec)		 tb="$tb $elf32_powerpc $elf" ;;
     powerpc_elf32_le_vec)	 tb="$tb $elf32_powerpc $elf" ;;
     powerpc_elf32_fbsd_vec)	 tb="$tb $elf32_powerpc $elf" ;;
-    powerpc_elf32_vxworks_vec)	 tb="$tb $elf32_powerpc $elf" ;;
+    powerpc_elf32_vxworks_vec)	 tb="$tb $elf32_powerpc elf-vxworks.lo $elf" ;;
     powerpc_elf64_vec)		 tb="$tb $elf64_powerpc $elf"; target_size=64 ;;
     powerpc_elf64_le_vec)	 tb="$tb $elf64_powerpc $elf"; target_size=64 ;;
     powerpc_elf64_fbsd_vec)	 tb="$tb $elf64_powerpc $elf"; target_size=64 ;;
@@ -16057,21 +16057,21 @@ do
     sh_coff_le_vec)		 tb="$tb coff-sh.lo $coff" ;;
     sh_coff_small_vec)		 tb="$tb coff-sh.lo $coff" ;;
     sh_coff_small_le_vec)	 tb="$tb coff-sh.lo $coff" ;;
-    sh_elf32_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_le_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_fdpic_be_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_fdpic_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_linux_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_linux_be_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_nbsd_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_nbsd_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_vec)		 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_le_vec)		 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_fdpic_be_vec)	 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_fdpic_le_vec)	 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_linux_vec)		 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_linux_be_vec)	 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_nbsd_vec)		 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_nbsd_le_vec)	 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
     sh_elf32_vxworks_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
     sh_elf32_vxworks_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
     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 elf-solaris2.lo" ;;
-    sparc_elf32_vxworks_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc" ;;
+    sparc_elf32_vxworks_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc elf-vxworks.lo" ;;
     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 elf-solaris2.lo"; target_size=64 ;;
@@ -16192,7 +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"
+  TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SOLARIS2 -DOBJ_MAYBE_ELF_VXWORKS"
 else	# all_targets is true
   # Only set these if they will be nonempty, for the clever echo.
   havevecs=
@@ -16210,6 +16210,7 @@ else	# all_targets is true
     elf-attrs.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_ATTRIBUTES" ;;
     elf-sframe.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SFRAME" ;;
     elf-solaris2.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SOLARIS2" ;;
+    elf-vxworks.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_VXWORKS" ;;
     esac
   done
 fi	# all_targets is true
diff --git a/bfd/configure.ac b/bfd/configure.ac
index 2883645c74e..c30a75ba8b7 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -379,18 +379,18 @@ xcoff="xcofflink.lo $coffgen"
 elf32_aarch64="elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo elf-attrs.lo"
 elf64_aarch64="elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo elf-attrs.lo elf-sframe.lo"
 elf_arc="elf32-arc.lo elf32.lo elf-attrs.lo"
-elf_arm="elf32-arm.lo elf32.lo elf-attrs.lo elf-vxworks.lo"
+elf_arm="elf32-arm.lo elf32.lo elf-attrs.lo"
 elf_csky="elf32-csky.lo elf32.lo elf-attrs.lo"
-elf32_mips="elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo elf-attrs.lo"
-elfn32_mips="elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo elf-attrs.lo"
-elf64_mips="elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo elf-attrs.lo"
-elf32_powerpc="elf32-ppc.lo elf-vxworks.lo elf32.lo elf-attrs.lo"
+elf32_mips="elf32-mips.lo elfxx-mips.lo elf32.lo elf-attrs.lo"
+elfn32_mips="elfn32-mips.lo elfxx-mips.lo elf32.lo elf-attrs.lo"
+elf64_mips="elf64-mips.lo elf64.lo elfxx-mips.lo elf32.lo elf-attrs.lo"
+elf32_powerpc="elf32-ppc.lo elf32.lo elf-attrs.lo"
 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-vxworks.lo"
-elfxx_sparc="elfxx-sparc.lo elf-vxworks.lo elf-attrs.lo $elf"
+elfxx_x86="elfxx-x86.lo elf-ifunc.lo"
+elfxx_sparc="elfxx-sparc.lo elf-attrs.lo $elf"
 for vec in $selvecs
 do
     target_size=32
@@ -422,8 +422,8 @@ do
     arm_elf32_le_vec)		 tb="$tb $elf_arm $elf" ;;
     arm_elf32_fdpic_be_vec)	 tb="$tb $elf_arm $elf" ;;
     arm_elf32_fdpic_le_vec)	 tb="$tb $elf_arm $elf" ;;
-    arm_elf32_vxworks_be_vec)	 tb="$tb $elf_arm $elf" ;;
-    arm_elf32_vxworks_le_vec)	 tb="$tb $elf_arm $elf" ;;
+    arm_elf32_vxworks_be_vec)	 tb="$tb $elf_arm elf-vxworks.lo $elf" ;;
+    arm_elf32_vxworks_le_vec)	 tb="$tb $elf_arm elf-vxworks.lo $elf" ;;
     arm_pe_be_vec)		 tb="$tb pe-arm.lo peigen.lo $coff" ;;
     arm_pe_le_vec)		 tb="$tb pe-arm.lo peigen.lo $coff" ;;
     arm_pe_wince_be_vec)	 tb="$tb pe-arm-wince.lo pe-arm.lo peigen.lo $coff" ;;
@@ -474,7 +474,7 @@ do
     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 elf-solaris2.lo elf32.lo $elf" ;;
-    i386_elf32_vxworks_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
+    i386_elf32_vxworks_vec)	 tb="$tb elf32-i386.lo $elfxx_x86 elf-vxworks.lo elf32.lo $elf" ;;
     i386_mach_o_vec)		 tb="$tb mach-o-i386.lo" ;;
     i386_msdos_vec)		 tb="$tb i386msdos.lo" ;;
     i386_pe_vec)		 tb="$tb pe-i386.lo peigen.lo $coff" ;;
@@ -535,8 +535,8 @@ do
     mips_elf32_trad_le_vec)	 tb="$tb $elf32_mips $elf $ecoff" ;;
     mips_elf32_tradfbsd_be_vec)  tb="$tb $elf32_mips $elf $ecoff" ;;
     mips_elf32_tradfbsd_le_vec)  tb="$tb $elf32_mips $elf $ecoff" ;;
-    mips_elf32_vxworks_be_vec)	 tb="$tb $elf32_mips $elf $ecoff" ;;
-    mips_elf32_vxworks_le_vec)	 tb="$tb $elf32_mips $elf $ecoff" ;;
+    mips_elf32_vxworks_be_vec)	 tb="$tb $elf32_mips elf-vxworks.lo $elf $ecoff" ;;
+    mips_elf32_vxworks_le_vec)	 tb="$tb $elf32_mips elf-vxworks.lo $elf $ecoff" ;;
     mips_elf64_be_vec)		 tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
     mips_elf64_le_vec)		 tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
     mips_elf64_trad_be_vec)	 tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
@@ -570,7 +570,7 @@ do
     powerpc_elf32_vec)		 tb="$tb $elf32_powerpc $elf" ;;
     powerpc_elf32_le_vec)	 tb="$tb $elf32_powerpc $elf" ;;
     powerpc_elf32_fbsd_vec)	 tb="$tb $elf32_powerpc $elf" ;;
-    powerpc_elf32_vxworks_vec)	 tb="$tb $elf32_powerpc $elf" ;;
+    powerpc_elf32_vxworks_vec)	 tb="$tb $elf32_powerpc elf-vxworks.lo $elf" ;;
     powerpc_elf64_vec)		 tb="$tb $elf64_powerpc $elf"; target_size=64 ;;
     powerpc_elf64_le_vec)	 tb="$tb $elf64_powerpc $elf"; target_size=64 ;;
     powerpc_elf64_fbsd_vec)	 tb="$tb $elf64_powerpc $elf"; target_size=64 ;;
@@ -598,21 +598,21 @@ do
     sh_coff_le_vec)		 tb="$tb coff-sh.lo $coff" ;;
     sh_coff_small_vec)		 tb="$tb coff-sh.lo $coff" ;;
     sh_coff_small_le_vec)	 tb="$tb coff-sh.lo $coff" ;;
-    sh_elf32_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_le_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_fdpic_be_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_fdpic_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_linux_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_linux_be_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_nbsd_vec)		 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
-    sh_elf32_nbsd_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_vec)		 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_le_vec)		 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_fdpic_be_vec)	 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_fdpic_le_vec)	 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_linux_vec)		 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_linux_be_vec)	 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_nbsd_vec)		 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
+    sh_elf32_nbsd_le_vec)	 tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo $coff" ;;
     sh_elf32_vxworks_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
     sh_elf32_vxworks_le_vec)	 tb="$tb elf32-sh.lo elf-vxworks.lo elf32.lo $elf coff-sh.lo $coff" ;;
     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 elf-solaris2.lo" ;;
-    sparc_elf32_vxworks_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc" ;;
+    sparc_elf32_vxworks_vec)	 tb="$tb elf32-sparc.lo elf32.lo $elfxx_sparc elf-vxworks.lo" ;;
     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 elf-solaris2.lo"; target_size=64 ;;
@@ -733,7 +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"
+  TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SOLARIS2 -DOBJ_MAYBE_ELF_VXWORKS"
 else	# all_targets is true
   # Only set these if they will be nonempty, for the clever echo.
   havevecs=
@@ -751,6 +751,7 @@ else	# all_targets is true
     elf-attrs.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_ATTRIBUTES" ;;
     elf-sframe.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SFRAME" ;;
     elf-solaris2.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_SOLARIS2" ;;
+    elf-vxworks.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_VXWORKS" ;;
     esac
   done
 fi	# all_targets is true
diff --git a/bfd/elf-vxworks.h b/bfd/elf-vxworks.h
index 24bd34b6f4b..bcf55bcfdf4 100644
--- a/bfd/elf-vxworks.h
+++ b/bfd/elf-vxworks.h
@@ -19,6 +19,8 @@
 #include "elf/common.h"
 #include "elf/internal.h"
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
+
 bool elf_vxworks_add_symbol_hook
   (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, const char **,
    flagword *, asection **, bfd_vma *) ATTRIBUTE_HIDDEN;
@@ -38,3 +40,11 @@ bool elf_vxworks_finish_dynamic_entry
   (bfd *, Elf_Internal_Dyn *) ATTRIBUTE_HIDDEN;
 bool _bfd_elf_maybe_vxworks_add_dynamic_tags
   (bfd *, struct bfd_link_info *, bool) ATTRIBUTE_HIDDEN;
+
+#else /* !OBJ_MAYBE_ELF_VXWORKS */
+
+static inline bool _bfd_elf_maybe_vxworks_add_dynamic_tags (
+  bfd *output_bfd, struct bfd_link_info *info, bool need_dynamic_reloc)
+{ return _bfd_elf_add_dynamic_tags (output_bfd, info, need_dynamic_reloc); }
+
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index e0573d53ef0..84b694319d0 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -3916,6 +3916,7 @@ elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return false;
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
   if (htab->root.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2))
@@ -3939,6 +3940,7 @@ elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
 	elf_elfheader (dynobj)->e_ident[EI_CLASS] = ELFCLASS32;
     }
   else
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
     {
       /* PR ld/16017
 	 Test for thumb only architectures.  Note - we cannot just call
@@ -17263,9 +17265,11 @@ elf32_arm_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info,
 	  switch (dyn.d_tag)
 	    {
 	    default:
+#ifdef OBJ_MAYBE_ELF_VXWORKS
 	      if (htab->root.target_os == is_vxworks
 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 		bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 	      break;
 
 	    case DT_HASH:
@@ -19757,17 +19761,23 @@ elf32_arm_additional_program_headers (bfd *abfd,
    file.  */
 
 static bool
-elf32_arm_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
-			   Elf_Internal_Sym *sym, const char **namep,
-			   flagword *flagsp, asection **secp, bfd_vma *valp)
+elf32_arm_add_symbol_hook (bfd *abfd ATTRIBUTE_UNUSED,
+			   struct bfd_link_info *info,
+			   Elf_Internal_Sym *sym ATTRIBUTE_UNUSED,
+			   const char **namep ATTRIBUTE_UNUSED,
+			   flagword *flagsp ATTRIBUTE_UNUSED,
+			   asection **secp ATTRIBUTE_UNUSED,
+			   bfd_vma *valp ATTRIBUTE_UNUSED)
 {
   if (elf32_arm_hash_table (info) == NULL)
     return false;
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
   if (elf32_arm_hash_table (info)->root.target_os == is_vxworks
       && !elf_vxworks_add_symbol_hook (abfd, info, sym, namep,
 				       flagsp, secp, valp))
     return false;
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 
   return true;
 }
@@ -20340,6 +20350,8 @@ elf32_arm_fdpic_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
 #undef ELF_OSABI_EXACT
 #undef elf_backend_omit_section_dynsym
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
+
 /* VxWorks Targets.  */
 
 #undef	TARGET_LITTLE_SYM
@@ -20401,6 +20413,7 @@ elf32_arm_vxworks_final_write_processing (bfd *abfd)
 
 #include "elf32-target.h"
 
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
@@ -20524,10 +20537,13 @@ elf32_arm_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
     }
 
   /* Not sure what needs to be checked for EABI versions >= 1.  */
-  /* VxWorks libraries do not use these flags.  */
-  if (get_elf_backend_data (obfd) != &elf32_arm_vxworks_bed
+  if (EF_ARM_EABI_VERSION (in_flags) == EF_ARM_EABI_UNKNOWN
+#ifdef OBJ_MAYBE_ELF_VXWORKS
+      /* VxWorks libraries do not use these flags.  */
+      && get_elf_backend_data (obfd) != &elf32_arm_vxworks_bed
       && get_elf_backend_data (ibfd) != &elf32_arm_vxworks_bed
-      && EF_ARM_EABI_VERSION (in_flags) == EF_ARM_EABI_UNKNOWN)
+#endif
+      )
     {
       if ((in_flags & EF_ARM_APCS_26) != (out_flags & EF_ARM_APCS_26))
 	{
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 40759d07676..a7d75c8c8f4 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -4741,6 +4741,8 @@ elf32_iamcu_elf_object_p (bfd *abfd)
 #define ELF_MACHINE_CODE		EM_386
 #undef	elf_backend_object_p
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
+
 /* VxWorks support.  */
 
 #undef	TARGET_LITTLE_SYM
@@ -4780,3 +4782,5 @@ elf32_iamcu_elf_object_p (bfd *abfd)
 #define elf32_bed				elf32_i386_vxworks_bed
 
 #include "elf32-target.h"
+
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index cef0c937d26..93e0d835c61 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -3598,7 +3598,7 @@ mips_elf32_reloc_type_lookup_rel (bfd *abfd, bfd_reloc_code_real_type code)
 
 /* Given a BFD reloc type, return a howto structure; RELA wrapper.  */
 
-static reloc_howto_type *
+static ATTRIBUTE_UNUSED reloc_howto_type *
 mips_elf32_reloc_type_lookup_rela (bfd *abfd, bfd_reloc_code_real_type code)
 {
   return mips_elf32_reloc_type_lookup (abfd, code,
@@ -3671,7 +3671,7 @@ mips_elf32_reloc_name_lookup_rel (bfd *abfd ATTRIBUTE_UNUSED,
 
 /* Given an ELF reloc name, return a howto structure; RELA wrapper.  */
 
-static reloc_howto_type *
+static ATTRIBUTE_UNUSED reloc_howto_type *
 mips_elf32_reloc_name_lookup_rela (bfd *abfd ATTRIBUTE_UNUSED,
 				   const char *r_name)
 {
@@ -4163,6 +4163,9 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
 #undef elf_backend_write_core_note
 
 #include "elf32-target.h"
+
+#ifdef OBJ_MAYBE_ELF_VXWORKS
+
 /* Implement elf_backend_final_write_processing for VxWorks.  */
 
 static bool
@@ -4244,3 +4247,5 @@ mips_vxworks_final_write_processing (bfd *abfd)
 #undef bfd_elf32_get_synthetic_symtab
 
 #include "elf32-target.h"
+
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index ba9e59ab3b9..d4a3cd0e460 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -2476,9 +2476,11 @@ ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	return false;
     }
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
   if (htab->elf.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
     return false;
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 
   s = htab->elf.splt;
   flags = SEC_ALLOC | SEC_CODE | SEC_LINKER_CREATED;
@@ -9991,9 +9993,11 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 	      continue;
 
 	    default:
+#ifdef OBJ_MAYBE_ELF_VXWORKS
 	      if (htab->elf.target_os == is_vxworks
 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 		break;
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 	      continue;
 	    }
 
@@ -10441,6 +10445,8 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 
 #include "elf32-target.h"
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
+
 /* VxWorks Target */
 
 #undef TARGET_LITTLE_SYM
@@ -10556,3 +10562,5 @@ ppc_elf_vxworks_final_write_processing (bfd *abfd)
 #define elf32_bed				ppc_elf_vxworks_bed
 
 #include "elf32-target.h"
+
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c
index 28589600a0e..05f77e03816 100644
--- a/bfd/elf32-sh.c
+++ b/bfd/elf32-sh.c
@@ -88,7 +88,7 @@ static reloc_howto_type sh_vxworks_howto_table[] =
 static bool
 vxworks_object_p (bfd *abfd ATTRIBUTE_UNUSED)
 {
-#if !defined SH_TARGET_ALREADY_DEFINED
+#if defined (OBJ_MAYBE_ELF_VXWORKS) && !defined (SH_TARGET_ALREADY_DEFINED)
   extern const bfd_target sh_elf32_vxworks_le_vec;
   extern const bfd_target sh_elf32_vxworks_vec;
 
@@ -2461,11 +2461,13 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	}
     }
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
   if (htab->root.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
 	return false;
     }
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 
   return true;
 }
@@ -6278,9 +6280,11 @@ sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info,
 	  switch (dyn.d_tag)
 	    {
 	    default:
+#ifdef OBJ_MAYBE_ELF_VXWORKS
 	      if (htab->root.target_os == is_vxworks
 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 		bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 	      break;
 
 	    case DT_PLTGOT:
@@ -6689,6 +6693,8 @@ sh_elf_encode_eh_address (bfd *abfd,
 
 #include "elf32-target.h"
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
+
 /* VxWorks support.  */
 #undef	TARGET_BIG_SYM
 #define	TARGET_BIG_SYM			sh_elf32_vxworks_vec
@@ -6727,4 +6733,6 @@ sh_elf_encode_eh_address (bfd *abfd,
 
 #include "elf32-target.h"
 
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
+
 #endif /* not SH_TARGET_ALREADY_DEFINED */
diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c
index b2aa5a4785a..a5f5d058196 100644
--- a/bfd/elf32-sparc.c
+++ b/bfd/elf32-sparc.c
@@ -319,6 +319,8 @@ elf32_sparc_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSE
 
 #endif /* OBJ_MAYBE_ELF_SOLARIS2 */
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
+
 /* A final_write_processing hook that does both the SPARC- and VxWorks-
    specific handling.  */
 
@@ -369,3 +371,5 @@ elf32_sparc_vxworks_final_write_processing (bfd *abfd)
 #define elf32_bed				sparc_elf_vxworks_bed
 
 #include "elf32-target.h"
+
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index 0d3fcd28987..f5e10d1d19a 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -8247,10 +8247,12 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (!_bfd_elf_create_dynamic_sections (abfd, info))
     return false;
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
   /* Do the usual VxWorks handling.  */
   if (htab->root.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
     return false;
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 
   return true;
 }
@@ -10396,9 +10398,11 @@ _bfd_mips_elf_late_size_sections (bfd *output_bfd,
 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
 	    return false;
 	}
+#ifdef OBJ_MAYBE_ELF_VXWORKS
       if (htab->root.target_os == is_vxworks
 	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
 	return false;
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
     }
 
   return true;
@@ -12173,9 +12177,11 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
 
 	    default:
 	      swap_out_p = false;
+#ifdef OBJ_MAYBE_ELF_VXWORKS
 	      if (htab->root.target_os == is_vxworks
 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 		swap_out_p = true;
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 	      break;
 	    }
 
diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c
index d55dd04996f..070820231bc 100644
--- a/bfd/elfxx-sparc.c
+++ b/bfd/elfxx-sparc.c
@@ -1212,6 +1212,7 @@ _bfd_sparc_elf_create_dynamic_sections (bfd *dynobj,
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return false;
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
   if (htab->elf.target_os == is_vxworks)
     {
       if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2))
@@ -1231,6 +1232,7 @@ _bfd_sparc_elf_create_dynamic_sections (bfd *dynobj,
 	    = 4 * ARRAY_SIZE (sparc_vxworks_exec_plt_entry);
 	}
     }
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 
   if (!htab->elf.splt || !htab->elf.srelplt || !htab->elf.sdynbss
       || (!bfd_link_pic (info) && !htab->elf.srelbss))
@@ -4514,9 +4516,11 @@ sparc_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
 	      bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
 	    }
 	}
+#ifdef OBJ_MAYBE_ELF_VXWORKS
       else if (htab->elf.target_os == is_vxworks
 	       && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 	bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
       else if (abi_64_p && dyn.d_tag == DT_SPARC_REGISTER)
 	{
 	  if (stt_regidx == -1)
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index f3c267f5fcc..81fd950b646 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -2846,9 +2846,11 @@ _bfd_x86_elf_finish_dynamic_sections (bfd *output_bfd,
       switch (dyn.d_tag)
 	{
 	default:
+#ifdef OBJ_MAYBE_ELF_VXWORKS
 	  if (htab->elf.target_os == is_vxworks
 	      && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
 	    break;
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 	  continue;
 
 	case DT_PLTGOT:
@@ -4690,6 +4692,7 @@ _bfd_x86_elf_link_setup_gnu_properties
       htab->plt.eh_frame_plt = htab->lazy_plt->eh_frame_plt;
     }
 
+#ifdef OBJ_MAYBE_ELF_VXWORKS
   if (htab->elf.target_os == is_vxworks
       && !elf_vxworks_create_dynamic_sections (dynobj, info,
 					       &htab->srelplt2))
@@ -4697,6 +4700,7 @@ _bfd_x86_elf_link_setup_gnu_properties
       info->callbacks->fatal (_("%P: failed to create VxWorks dynamic sections\n"));
       return pbfd;
     }
+#endif /* OBJ_MAYBE_ELF_VXWORKS */
 
   /* Since create_dynamic_sections isn't always called, but GOT
      relocations need GOT relocations, create them here so that we
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.