[binutils-gdb] bfd: avoid elf-attrs.c for ELF-attributes-free targets
Jan Beulich
jbeulich@sourceware.org
Fri Mar 13 06:53:12 GMT 2026
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=32249500c73e611a23025d199fdd77c407ef68de
commit 32249500c73e611a23025d199fdd77c407ef68de
Author: Jan Beulich <jbeulich@suse.com>
Date: Fri Mar 13 07:51:24 2026 +0100
bfd: avoid elf-attrs.c for ELF-attributes-free targets
It is wasteful to build this file when it's not actually used. Limit it
to targets actually using ELF attributes and introduce a compiler define
(paralleling OBJ_MAYBE_ELF, as having similar purpose) to guard internal
function decls and to provide stubs for exported functions.
Diff:
---
bfd/configure | 140 +++++++++++++++++++++++++++++------------------------
bfd/configure.ac | 140 +++++++++++++++++++++++++++++------------------------
bfd/elf-bfd.h | 36 +++++++++++---
bfd/elf.c | 8 +++
bfd/elflink.c | 7 ++-
bfd/elfxx-target.h | 5 ++
6 files changed, 201 insertions(+), 135 deletions(-)
diff --git a/bfd/configure b/bfd/configure
index 0312b36e3c1..ccaf53b0914 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -15828,15 +15828,28 @@ selarchs="$f"
# Target backend .o files.
tb=
-elf="elf.lo elflink.lo elf-attrs.lo elf-strtab.lo elf-eh-frame.lo
- elf-properties.lo elf-sframe.lo dwarf1.lo dwarf2.lo"
+elf="elf.lo elflink.lo elf-strtab.lo elf-eh-frame.lo elf-properties.lo
+ elf-sframe.lo dwarf1.lo dwarf2.lo"
coffgen="coffgen.lo dwarf2.lo"
coff="cofflink.lo $coffgen"
ecoff="ecofflink.lo $coffgen"
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_arc="elf32-arc.lo elf32.lo elf-attrs.lo"
+elf_arm="elf32-arm.lo elf32.lo elf-attrs.lo elf-vxworks.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"
+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"
+elfxx_sparc="elfxx-sparc.lo elf-solaris2.lo elf-vxworks.lo elf-attrs.lo $elf"
for vec in $selvecs
do
target_size=32
@@ -15844,10 +15857,10 @@ do
# This list is alphabetized to make it easy to compare
# with the two vector lists in targets.c. For the same reason,
# use one entry per line, even though this leads to long lines.
- aarch64_elf32_be_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
- aarch64_elf32_le_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
- aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
- aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+ aarch64_elf32_be_vec) tb="$tb $elf32_aarch64 $elf"; target_size=64 ;;
+ aarch64_elf32_le_vec) tb="$tb $elf32_aarch64 $elf"; target_size=64 ;;
+ aarch64_elf64_be_vec) tb="$tb $elf64_aarch64 $elf"; target_size=64 ;;
+ aarch64_elf64_le_vec) tb="$tb $elf64_aarch64 $elf"; target_size=64 ;;
aarch64_mach_o_vec) tb="$tb mach-o-aarch64.lo"; target_size=64 ;;
aarch64_pei_le_vec) tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
aarch64_pe_le_vec) tb="$tb pe-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
@@ -15862,14 +15875,14 @@ do
aout0_be_vec) tb="$tb aout0.lo aout32.lo" ;;
aout64_vec) tb="$tb demo64.lo aout64.lo"; target_size=64 ;;
aout_vec) tb="$tb host-aout.lo aout32.lo" ;;
- arc_elf32_be_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;;
- arc_elf32_le_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;;
- arm_elf32_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_le_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_fdpic_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_fdpic_le_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_vxworks_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_vxworks_le_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+ arc_elf32_be_vec) tb="$tb $elf_arc $elf" ;;
+ arc_elf32_le_vec) tb="$tb $elf_arc $elf" ;;
+ arm_elf32_be_vec) tb="$tb $elf_arm $elf" ;;
+ 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_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" ;;
@@ -15887,8 +15900,8 @@ do
cris_elf32_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
cris_elf32_us_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
crx_elf32_vec) tb="$tb elf32-crx.lo elf32.lo $elf" ;;
- csky_elf32_be_vec) tb="$tb elf32-csky.lo elf32.lo $elf" ;;
- csky_elf32_le_vec) tb="$tb elf32-csky.lo elf32.lo $elf" ;;
+ csky_elf32_be_vec) tb="$tb $elf_csky $elf" ;;
+ csky_elf32_le_vec) tb="$tb $elf_csky $elf" ;;
d10v_elf32_vec) tb="$tb elf32-d10v.lo elf32.lo $elf" ;;
d30v_elf32_vec) tb="$tb elf32-d30v.lo elf32.lo $elf" ;;
dlx_elf32_be_vec) tb="$tb elf32-dlx.lo elf32.lo $elf" ;;
@@ -15940,8 +15953,8 @@ do
kvx_elf64_vec) tb="$tb elf64-kvx.lo elfxx-kvx.lo elf64.lo $elf $ipa"; target_size=64 ;;
lm32_elf32_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
lm32_elf32_fdpic_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
- loongarch_elf32_vec) tb="$tb elf32-loongarch.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf" ;;
- loongarch_elf64_vec) tb="$tb elf64-loongarch.lo elf64.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf"; target_size=64 ;;
+ loongarch_elf32_vec) tb="$tb elf32-loongarch.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo elf-attrs.lo $elf" ;;
+ loongarch_elf64_vec) tb="$tb elf64-loongarch.lo elf64.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo elf-attrs.lo $elf"; target_size=64 ;;
loongarch64_pei_vec) tb="$tb pei-loongarch64.lo pe-loongarch64igen.lo $coff"; target_size=64 ;;
m32c_elf32_vec) tb="$tb elf32-m32c.lo elf32.lo $elf" ;;
m32r_elf32_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
@@ -15950,7 +15963,7 @@ do
m32r_elf32_linux_le_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
m68hc11_elf32_vec) tb="$tb elf32-m68hc11.lo elf32-m68hc1x.lo elf32.lo $elf" ;;
m68hc12_elf32_vec) tb="$tb elf32-m68hc12.lo elf32-m68hc1x.lo elf32.lo $elf" ;;
- m68k_elf32_vec) tb="$tb elf32-m68k.lo elf32.lo $elf" ;;
+ m68k_elf32_vec) tb="$tb elf32-m68k.lo elf32.lo elf-attrs.lo $elf" ;;
s12z_elf32_vec) tb="$tb elf32-s12z.lo elf32.lo $elf" ;;
mach_o_be_vec) tb="$tb mach-o.lo dwarf2.lo" ;;
mach_o_le_vec) tb="$tb mach-o.lo dwarf2.lo" ;;
@@ -15969,34 +15982,34 @@ do
mips_ecoff_be_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
mips_ecoff_le_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
mips_ecoff_bele_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
- mips_elf32_be_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_le_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_n_be_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_n_le_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_ntrad_be_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_ntrad_le_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_ntradfbsd_be_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_ntradfbsd_le_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_trad_be_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_trad_le_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_tradfbsd_be_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_tradfbsd_le_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_vxworks_be_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_vxworks_le_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf64_be_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_le_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_trad_be_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_trad_le_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_tradfbsd_be_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_tradfbsd_le_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+ mips_elf32_be_vec) tb="$tb $elf32_mips $elf $ecoff" ;;
+ mips_elf32_le_vec) tb="$tb $elf32_mips $elf $ecoff" ;;
+ mips_elf32_n_be_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_n_le_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_ntrad_be_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_ntrad_le_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_ntradfbsd_be_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_ntradfbsd_le_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_trad_be_vec) tb="$tb $elf32_mips $elf $ecoff" ;;
+ 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_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 ;;
+ mips_elf64_trad_le_vec) tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf64_tradfbsd_be_vec) tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf64_tradfbsd_le_vec) tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
mmix_elf64_vec) tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;;
mmix_mmo_vec) tb="$tb mmo.lo" target_size=64 ;;
mn10200_elf32_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;;
mn10300_elf32_vec) tb="$tb elf-m10300.lo elf32.lo $elf" ;;
moxie_elf32_be_vec) tb="$tb elf32-moxie.lo elf32.lo $elf" ;;
moxie_elf32_le_vec) tb="$tb elf32-moxie.lo elf32.lo $elf" ;;
- msp430_elf32_vec) tb="$tb elf32-msp430.lo elf32.lo $elf" ;;
- msp430_elf32_ti_vec) tb="$tb elf32-msp430.lo elf32.lo $elf" ;;
+ msp430_elf32_vec) tb="$tb elf32-msp430.lo elf32.lo elf-attrs.lo $elf" ;;
+ msp430_elf32_ti_vec) tb="$tb elf32-msp430.lo elf32.lo elf-attrs.lo $elf" ;;
mt_elf32_vec) tb="$tb elf32-mt.lo elf32.lo $elf" ;;
nds32_elf32_be_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
nds32_elf32_le_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
@@ -16013,20 +16026,20 @@ do
pj_elf32_vec) tb="$tb elf32-pj.lo elf32.lo $elf" ;;
pj_elf32_le_vec) tb="$tb elf32-pj.lo elf32.lo $elf" ;;
powerpc_boot_vec) tb="$tb ppcboot.lo" ;;
- powerpc_elf32_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
- powerpc_elf32_le_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
- powerpc_elf32_fbsd_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
- powerpc_elf32_vxworks_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
- powerpc_elf64_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
- powerpc_elf64_le_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
- powerpc_elf64_fbsd_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
- powerpc_elf64_fbsd_le_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
+ 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_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 ;;
+ powerpc_elf64_fbsd_le_vec) tb="$tb $elf64_powerpc $elf"; target_size=64 ;;
powerpc_xcoff_vec) tb="$tb coff-rs6000.lo $xcoff" ;;
pru_elf32_vec) tb="$tb elf32-pru.lo elf32.lo $elf" ;;
- riscv_elf32_vec) tb="$tb elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf" ;;
- riscv_elf64_vec) tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
- riscv_elf32_be_vec) tb="$tb elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf" ;;
- riscv_elf64_be_vec) tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
+ riscv_elf32_vec) tb="$tb $elf32_riscv $elf" ;;
+ riscv_elf64_vec) tb="$tb $elf64_riscv $elf"; target_size=64 ;;
+ riscv_elf32_be_vec) tb="$tb $elf32_riscv $elf" ;;
+ riscv_elf64_be_vec) tb="$tb $elf64_riscv $elf"; target_size=64 ;;
riscv64_pei_vec) tb="$tb pei-riscv64.lo pe-riscv64igen.lo $coff"; target_size=64 ;;
rl78_elf32_vec) tb="$tb elf32-rl78.lo elf32.lo $elf" ;;
rs6000_xcoff64_vec) tb="$tb coff64-rs6000.lo aix5ppc-core.lo $xcoff"; target_size=64 ;;
@@ -16036,8 +16049,8 @@ do
rx_elf32_be_ns_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;;
rx_elf32_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;;
rx_elf32_linux_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;;
- s390_elf32_vec) tb="$tb elf32-s390.lo elf32.lo $elf" ;;
- s390_elf64_vec) tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;;
+ s390_elf32_vec) tb="$tb elf32-s390.lo elf32.lo elf-attrs.lo $elf" ;;
+ s390_elf64_vec) tb="$tb elf64-s390.lo elf64.lo elf-attrs.lo $elf"; target_size=64 ;;
score_elf32_be_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;;
score_elf32_le_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;;
sh_coff_vec) tb="$tb coff-sh.lo $coff" ;;
@@ -16077,12 +16090,12 @@ do
tic54x_coff1_beh_vec) tb="$tb coff-tic54x.lo $coffgen" ;;
tic54x_coff2_vec) tb="$tb coff-tic54x.lo $coffgen" ;;
tic54x_coff2_beh_vec) tb="$tb coff-tic54x.lo $coffgen" ;;
- tic6x_elf32_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_c6000_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_c6000_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_linux_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_linux_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
+ tic6x_elf32_be_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_le_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_c6000_be_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_c6000_le_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_linux_be_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_linux_le_vec) tb="$tb $elf_tic6x $elf" ;;
tilegx_elf32_be_vec) tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
tilegx_elf32_le_vec) tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
tilegx_elf64_be_vec) tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
@@ -16178,7 +16191,7 @@ if test x${all_targets} = xtrue ; then
esac
done
assocvecs=$f
- TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF"
+ TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF -DOBJ_MAYBE_ELF_ATTRIBUTES"
else # all_targets is true
# Only set these if they will be nonempty, for the clever echo.
havevecs=
@@ -16193,6 +16206,7 @@ else # all_targets is true
for i in $bfd_backends ; do
case "$i" in
elf.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF" ;;
+ elf-attrs.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_ATTRIBUTES" ;;
esac
done
fi # all_targets is true
diff --git a/bfd/configure.ac b/bfd/configure.ac
index f1477bca81b..877ba4a64f2 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -369,15 +369,28 @@ selarchs="$f"
# Target backend .o files.
tb=
-elf="elf.lo elflink.lo elf-attrs.lo elf-strtab.lo elf-eh-frame.lo
- elf-properties.lo elf-sframe.lo dwarf1.lo dwarf2.lo"
+elf="elf.lo elflink.lo elf-strtab.lo elf-eh-frame.lo elf-properties.lo
+ elf-sframe.lo dwarf1.lo dwarf2.lo"
coffgen="coffgen.lo dwarf2.lo"
coff="cofflink.lo $coffgen"
ecoff="ecofflink.lo $coffgen"
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_arc="elf32-arc.lo elf32.lo elf-attrs.lo"
+elf_arm="elf32-arm.lo elf32.lo elf-attrs.lo elf-vxworks.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"
+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"
+elfxx_sparc="elfxx-sparc.lo elf-solaris2.lo elf-vxworks.lo elf-attrs.lo $elf"
for vec in $selvecs
do
target_size=32
@@ -385,10 +398,10 @@ do
# This list is alphabetized to make it easy to compare
# with the two vector lists in targets.c. For the same reason,
# use one entry per line, even though this leads to long lines.
- aarch64_elf32_be_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
- aarch64_elf32_le_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
- aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
- aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+ aarch64_elf32_be_vec) tb="$tb $elf32_aarch64 $elf"; target_size=64 ;;
+ aarch64_elf32_le_vec) tb="$tb $elf32_aarch64 $elf"; target_size=64 ;;
+ aarch64_elf64_be_vec) tb="$tb $elf64_aarch64 $elf"; target_size=64 ;;
+ aarch64_elf64_le_vec) tb="$tb $elf64_aarch64 $elf"; target_size=64 ;;
aarch64_mach_o_vec) tb="$tb mach-o-aarch64.lo"; target_size=64 ;;
aarch64_pei_le_vec) tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
aarch64_pe_le_vec) tb="$tb pe-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
@@ -403,14 +416,14 @@ do
aout0_be_vec) tb="$tb aout0.lo aout32.lo" ;;
aout64_vec) tb="$tb demo64.lo aout64.lo"; target_size=64 ;;
aout_vec) tb="$tb host-aout.lo aout32.lo" ;;
- arc_elf32_be_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;;
- arc_elf32_le_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;;
- arm_elf32_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_le_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_fdpic_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_fdpic_le_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_vxworks_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
- arm_elf32_vxworks_le_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+ arc_elf32_be_vec) tb="$tb $elf_arc $elf" ;;
+ arc_elf32_le_vec) tb="$tb $elf_arc $elf" ;;
+ arm_elf32_be_vec) tb="$tb $elf_arm $elf" ;;
+ 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_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" ;;
@@ -428,8 +441,8 @@ do
cris_elf32_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
cris_elf32_us_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
crx_elf32_vec) tb="$tb elf32-crx.lo elf32.lo $elf" ;;
- csky_elf32_be_vec) tb="$tb elf32-csky.lo elf32.lo $elf" ;;
- csky_elf32_le_vec) tb="$tb elf32-csky.lo elf32.lo $elf" ;;
+ csky_elf32_be_vec) tb="$tb $elf_csky $elf" ;;
+ csky_elf32_le_vec) tb="$tb $elf_csky $elf" ;;
d10v_elf32_vec) tb="$tb elf32-d10v.lo elf32.lo $elf" ;;
d30v_elf32_vec) tb="$tb elf32-d30v.lo elf32.lo $elf" ;;
dlx_elf32_be_vec) tb="$tb elf32-dlx.lo elf32.lo $elf" ;;
@@ -481,8 +494,8 @@ do
kvx_elf64_vec) tb="$tb elf64-kvx.lo elfxx-kvx.lo elf64.lo $elf $ipa"; target_size=64 ;;
lm32_elf32_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
lm32_elf32_fdpic_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;;
- loongarch_elf32_vec) tb="$tb elf32-loongarch.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf" ;;
- loongarch_elf64_vec) tb="$tb elf64-loongarch.lo elf64.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo $elf"; target_size=64 ;;
+ loongarch_elf32_vec) tb="$tb elf32-loongarch.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo elf-attrs.lo $elf" ;;
+ loongarch_elf64_vec) tb="$tb elf64-loongarch.lo elf64.lo elfxx-loongarch.lo elf32.lo elf-ifunc.lo elf-attrs.lo $elf"; target_size=64 ;;
loongarch64_pei_vec) tb="$tb pei-loongarch64.lo pe-loongarch64igen.lo $coff"; target_size=64 ;;
m32c_elf32_vec) tb="$tb elf32-m32c.lo elf32.lo $elf" ;;
m32r_elf32_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
@@ -491,7 +504,7 @@ do
m32r_elf32_linux_le_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
m68hc11_elf32_vec) tb="$tb elf32-m68hc11.lo elf32-m68hc1x.lo elf32.lo $elf" ;;
m68hc12_elf32_vec) tb="$tb elf32-m68hc12.lo elf32-m68hc1x.lo elf32.lo $elf" ;;
- m68k_elf32_vec) tb="$tb elf32-m68k.lo elf32.lo $elf" ;;
+ m68k_elf32_vec) tb="$tb elf32-m68k.lo elf32.lo elf-attrs.lo $elf" ;;
s12z_elf32_vec) tb="$tb elf32-s12z.lo elf32.lo $elf" ;;
mach_o_be_vec) tb="$tb mach-o.lo dwarf2.lo" ;;
mach_o_le_vec) tb="$tb mach-o.lo dwarf2.lo" ;;
@@ -510,34 +523,34 @@ do
mips_ecoff_be_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
mips_ecoff_le_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
mips_ecoff_bele_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
- mips_elf32_be_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_le_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_n_be_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_n_le_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_ntrad_be_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_ntrad_le_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_ntradfbsd_be_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_ntradfbsd_le_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf32_trad_be_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_trad_le_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_tradfbsd_be_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_tradfbsd_le_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_vxworks_be_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf32_vxworks_le_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff" ;;
- mips_elf64_be_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_le_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_trad_be_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_trad_le_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_tradfbsd_be_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
- mips_elf64_tradfbsd_le_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf $ecoff"; target_size=64 ;;
+ mips_elf32_be_vec) tb="$tb $elf32_mips $elf $ecoff" ;;
+ mips_elf32_le_vec) tb="$tb $elf32_mips $elf $ecoff" ;;
+ mips_elf32_n_be_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_n_le_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_ntrad_be_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_ntrad_le_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_ntradfbsd_be_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_ntradfbsd_le_vec) tb="$tb $elfn32_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf32_trad_be_vec) tb="$tb $elf32_mips $elf $ecoff" ;;
+ 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_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 ;;
+ mips_elf64_trad_le_vec) tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf64_tradfbsd_be_vec) tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
+ mips_elf64_tradfbsd_le_vec) tb="$tb $elf64_mips $elf $ecoff"; target_size=64 ;;
mmix_elf64_vec) tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;;
mmix_mmo_vec) tb="$tb mmo.lo" target_size=64 ;;
mn10200_elf32_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;;
mn10300_elf32_vec) tb="$tb elf-m10300.lo elf32.lo $elf" ;;
moxie_elf32_be_vec) tb="$tb elf32-moxie.lo elf32.lo $elf" ;;
moxie_elf32_le_vec) tb="$tb elf32-moxie.lo elf32.lo $elf" ;;
- msp430_elf32_vec) tb="$tb elf32-msp430.lo elf32.lo $elf" ;;
- msp430_elf32_ti_vec) tb="$tb elf32-msp430.lo elf32.lo $elf" ;;
+ msp430_elf32_vec) tb="$tb elf32-msp430.lo elf32.lo elf-attrs.lo $elf" ;;
+ msp430_elf32_ti_vec) tb="$tb elf32-msp430.lo elf32.lo elf-attrs.lo $elf" ;;
mt_elf32_vec) tb="$tb elf32-mt.lo elf32.lo $elf" ;;
nds32_elf32_be_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
nds32_elf32_le_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
@@ -554,20 +567,20 @@ do
pj_elf32_vec) tb="$tb elf32-pj.lo elf32.lo $elf" ;;
pj_elf32_le_vec) tb="$tb elf32-pj.lo elf32.lo $elf" ;;
powerpc_boot_vec) tb="$tb ppcboot.lo" ;;
- powerpc_elf32_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
- powerpc_elf32_le_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
- powerpc_elf32_fbsd_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
- powerpc_elf32_vxworks_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
- powerpc_elf64_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
- powerpc_elf64_le_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
- powerpc_elf64_fbsd_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
- powerpc_elf64_fbsd_le_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;;
+ 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_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 ;;
+ powerpc_elf64_fbsd_le_vec) tb="$tb $elf64_powerpc $elf"; target_size=64 ;;
powerpc_xcoff_vec) tb="$tb coff-rs6000.lo $xcoff" ;;
pru_elf32_vec) tb="$tb elf32-pru.lo elf32.lo $elf" ;;
- riscv_elf32_vec) tb="$tb elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf" ;;
- riscv_elf64_vec) tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
- riscv_elf32_be_vec) tb="$tb elf32-riscv.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf" ;;
- riscv_elf64_be_vec) tb="$tb elf64-riscv.lo elf64.lo elfxx-riscv.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;;
+ riscv_elf32_vec) tb="$tb $elf32_riscv $elf" ;;
+ riscv_elf64_vec) tb="$tb $elf64_riscv $elf"; target_size=64 ;;
+ riscv_elf32_be_vec) tb="$tb $elf32_riscv $elf" ;;
+ riscv_elf64_be_vec) tb="$tb $elf64_riscv $elf"; target_size=64 ;;
riscv64_pei_vec) tb="$tb pei-riscv64.lo pe-riscv64igen.lo $coff"; target_size=64 ;;
rl78_elf32_vec) tb="$tb elf32-rl78.lo elf32.lo $elf" ;;
rs6000_xcoff64_vec) tb="$tb coff64-rs6000.lo aix5ppc-core.lo $xcoff"; target_size=64 ;;
@@ -577,8 +590,8 @@ do
rx_elf32_be_ns_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;;
rx_elf32_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;;
rx_elf32_linux_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;;
- s390_elf32_vec) tb="$tb elf32-s390.lo elf32.lo $elf" ;;
- s390_elf64_vec) tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;;
+ s390_elf32_vec) tb="$tb elf32-s390.lo elf32.lo elf-attrs.lo $elf" ;;
+ s390_elf64_vec) tb="$tb elf64-s390.lo elf64.lo elf-attrs.lo $elf"; target_size=64 ;;
score_elf32_be_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;;
score_elf32_le_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;;
sh_coff_vec) tb="$tb coff-sh.lo $coff" ;;
@@ -618,12 +631,12 @@ do
tic54x_coff1_beh_vec) tb="$tb coff-tic54x.lo $coffgen" ;;
tic54x_coff2_vec) tb="$tb coff-tic54x.lo $coffgen" ;;
tic54x_coff2_beh_vec) tb="$tb coff-tic54x.lo $coffgen" ;;
- tic6x_elf32_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_c6000_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_c6000_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_linux_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
- tic6x_elf32_linux_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
+ tic6x_elf32_be_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_le_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_c6000_be_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_c6000_le_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_linux_be_vec) tb="$tb $elf_tic6x $elf" ;;
+ tic6x_elf32_linux_le_vec) tb="$tb $elf_tic6x $elf" ;;
tilegx_elf32_be_vec) tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
tilegx_elf32_le_vec) tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
tilegx_elf64_be_vec) tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
@@ -719,7 +732,7 @@ if test x${all_targets} = xtrue ; then
esac
done
assocvecs=$f
- TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF"
+ TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF -DOBJ_MAYBE_ELF_ATTRIBUTES"
else # all_targets is true
# Only set these if they will be nonempty, for the clever echo.
havevecs=
@@ -734,6 +747,7 @@ else # all_targets is true
for i in $bfd_backends ; do
case "$i" in
elf.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF" ;;
+ elf-attrs.*) TDEFINES="$TDEFINES -DOBJ_MAYBE_ELF_ATTRIBUTES" ;;
esac
done
fi # all_targets is true
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 837fbefa6a2..58db4eb81b0 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -3174,10 +3174,6 @@ extern bfd *_bfd_elf64_bfd_from_remote_memory
int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
ATTRIBUTE_HIDDEN;
-extern obj_attr_version_t _bfd_obj_attrs_version_dec (uint8_t)
- ATTRIBUTE_HIDDEN;
-extern uint8_t _bfd_obj_attrs_version_enc (obj_attr_version_t)
- ATTRIBUTE_HIDDEN;
extern bfd_vma bfd_elf_obj_attr_size (bfd *);
extern void bfd_elf_set_obj_attr_contents (bfd *, bfd_byte *, bfd_vma);
extern obj_attribute *
@@ -3196,27 +3192,51 @@ extern obj_attribute *bfd_elf_add_obj_attr_int_string
#define bfd_elf_add_proc_attr_int_string(BFD, TAG, INTVAL, STRVAL) \
bfd_elf_add_obj_attr_int_string ((BFD), OBJ_ATTR_PROC, (TAG), \
(INTVAL), (STRVAL))
+extern int bfd_elf_obj_attrs_arg_type
+ (bfd *, obj_attr_vendor_t, obj_attr_tag_t);
+extern bfd *_bfd_elf_link_setup_object_attributes
+ (struct bfd_link_info *) ATTRIBUTE_HIDDEN;
+
+#ifdef OBJ_MAYBE_ELF_ATTRIBUTES
+extern obj_attr_version_t _bfd_obj_attrs_version_dec (uint8_t)
+ ATTRIBUTE_HIDDEN;
+extern uint8_t _bfd_obj_attrs_version_enc (obj_attr_version_t)
+ ATTRIBUTE_HIDDEN;
extern bool _bfd_elf_write_section_object_attributes
(bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
extern char *_bfd_elf_attr_strdup
(bfd *, const char *) ATTRIBUTE_HIDDEN;
extern void _bfd_elf_copy_obj_attributes
(bfd *, bfd *) ATTRIBUTE_HIDDEN;
-extern int bfd_elf_obj_attrs_arg_type
- (bfd *, obj_attr_vendor_t, obj_attr_tag_t);
extern void _bfd_elf_parse_attributes
(bfd *, Elf_Internal_Shdr *) ATTRIBUTE_HIDDEN;
extern void _bfd_elf_cleanup_object_attributes
(bfd *) ATTRIBUTE_HIDDEN;
-extern bfd *_bfd_elf_link_setup_object_attributes
- (struct bfd_link_info *) ATTRIBUTE_HIDDEN;
extern bool _bfd_elf_merge_object_attributes
(bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
extern bool _bfd_elf_merge_unknown_attribute_low
(bfd *, bfd *, int) ATTRIBUTE_HIDDEN;
extern bool _bfd_elf_merge_unknown_attribute_list
(bfd *, bfd *) ATTRIBUTE_HIDDEN;
+
+#else /* !OBJ_MAYBE_ELF_ATTRIBUTES */
+
+static inline bool _bfd_elf_write_section_object_attributes
+ (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{ return true; }
+static inline void _bfd_elf_copy_obj_attributes
+ (bfd *ibfd ATTRIBUTE_UNUSED, bfd *obfd ATTRIBUTE_UNUSED)
+{}
+static inline void _bfd_elf_parse_attributes
+ (bfd *abfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *hdr ATTRIBUTE_UNUSED)
+{}
+static inline void _bfd_elf_cleanup_object_attributes
+ (bfd *abfd ATTRIBUTE_UNUSED)
+{}
+
+#endif /* OBJ_MAYBE_ELF_ATTRIBUTES */
+
extern Elf_Internal_Shdr *_bfd_elf_single_rel_hdr
(asection *sec);
extern bool _bfd_elf_read_notes
diff --git a/bfd/elf.c b/bfd/elf.c
index a8e1834b8f2..5f02188b4b5 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -14209,3 +14209,11 @@ _bfd_elf_link_munmap_section_contents (asection *sec ATTRIBUTE_UNUSED)
}
#endif
}
+
+#ifndef OBJ_MAYBE_ELF_ATTRIBUTES
+
+bfd *_bfd_elf_link_setup_object_attributes
+ (struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{ return NULL; }
+
+#endif /* !OBJ_MAYBE_ELF_ATTRIBUTES */
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 60c1ccb6c8d..70a1cd107aa 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -12706,11 +12706,14 @@ _bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
sections from the link, and set the contents of the output
section. */
sections_removed = false;
+#ifdef OBJ_MAYBE_ELF_ATTRIBUTES
const char *obj_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
+#endif
for (o = abfd->sections; o != NULL; o = o->next)
{
bool remove_section = false;
+#ifdef OBJ_MAYBE_ELF_ATTRIBUTES
if ((obj_attrs_section && strcmp (o->name, obj_attrs_section) == 0)
|| strcmp (o->name, ".gnu.attributes") == 0)
{
@@ -12739,7 +12742,9 @@ _bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
else
remove_section = true;
}
- else if ((o->flags & SEC_GROUP) != 0 && o->size == 0)
+ else
+#endif /* OBJ_MAYBE_ELF_ATTRIBUTES */
+ if ((o->flags & SEC_GROUP) != 0 && o->size == 0)
{
/* Remove empty group section from linker output. */
remove_section = true;
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 672daeccb04..124be5ed0c4 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -554,12 +554,17 @@
#ifndef elf_backend_default_obj_attr_version
#define elf_backend_default_obj_attr_version OBJ_ATTR_V1
#endif
+#ifdef OBJ_MAYBE_ELF_ATTRIBUTES
#ifndef elf_backend_obj_attrs_version_dec
#define elf_backend_obj_attrs_version_dec _bfd_obj_attrs_version_dec
#endif
#ifndef elf_backend_obj_attrs_version_enc
#define elf_backend_obj_attrs_version_enc _bfd_obj_attrs_version_enc
#endif
+#else /* OBJ_MAYBE_ELF_ATTRIBUTES */
+#define elf_backend_obj_attrs_version_dec NULL
+#define elf_backend_obj_attrs_version_enc NULL
+#endif /* OBJ_MAYBE_ELF_ATTRIBUTES */
#ifndef elf_backend_obj_attr_v2_known_subsections
#define elf_backend_obj_attr_v2_known_subsections NULL
#endif
More information about the Binutils-cvs
mailing list